#ethereum #solidity #decentralized-applications
#ethereum #надежность #децентрализованные приложения
Вопрос:
Я пытаюсь создать децентрализованное веб-приложение, в котором при выполнении условия контракт будет выполнен и сможет отправлять eth на адрес. например, если на моем веб-сайте должен быть список пользователей, у которых есть зарегистрированные учетные записи, и у каждого пользователя есть адрес ethereum, связанный с их учетной записью, как я мог бы сделать так, чтобы мой смарт-контракт мог выполняться только определенными адресами, которые зарегистрировали учетную запись на моем веб-сайте?
Когда пользователь нажимает кнопку на моем веб-сайте, например (get eth), которая вызывает функцию смарт-контракта, как я могу сделать так, чтобы только зарегистрированные пользователи могли использовать мой смарт-контракт?
Я изучал подписание сообщений и восстановление, а также внесен в белый список вне сети. Мой мыслительный процесс для решения этой проблемы заключался в том, чтобы использовать их каким-либо образом, чтобы проверить, действителен ли адрес для выполнения контракта. Я бы подумал об этой проблеме как о создании базового смарт-контракта faucet, но ограничении адресов, которые могут его использовать, несколькими избранными.
Ответ №1:
Я думаю, мы просто добавим пользователей в наш smartcontract. Затем мы проверяем это следующим образом:
contract MyContract {
mapping(address=>bool) public registerUsers;
address owner;
modifier onlyOwner(){
require(msg.sender==owner);
_;
}
modifier onlyUser(){
require(registerUsers[msg.sender] == true);
_;
}
function() external payable { }
constructor() public{
owner = msg.sender;
}
function addUser(address userAddr) onlyOwner() public{
registerUsers[userAddr] = true;
}
// User calls this function to claim some eth
function claimEth(uint amount) onlyUser() public{
msg.sender.transfer(amount);
}
}
Комментарии:
1. Да, я видел это, но на практике это крайне неэффективно из-за стоимости газа, связанной с выполнением белого списка в цепочке.