我正在尝试创建一个去中心化的Web应用程序,在该应用程序中,如果满足条件,将执行合同并将其发送到地址。例如,如果我的网站上有一个已注册帐户的用户列表,而每个用户都有与其帐户相关联的以太坊地址,我该如何做,以便我的智能合约只能由已注册的特定地址执行我网站上的帐户?
当用户单击我的网站上的一个按钮(如获得eth)时,该按钮将调用智能合约功能,我该如何使之只有注册用户才能使用我的智能合约?
我一直在研究邮件签名和ecrecover以及链下白名单。解决这个问题的想法是,以某种方式使用它们来验证地址是否有效以执行合同。我认为这个问题实质上是在创建基本的水龙头智能合约,但是将可以使用它的地址限制为少数几个。
答案 0 :(得分:1)
我认为我们只是将用户添加到我们的智能合约中。然后我们像这样验证它:
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);
}
}