当由特定的经过验证的地址调用时,如何使智能合约仅可执行?

时间:2019-04-24 03:18:58

标签: ethereum solidity decentralized-applications

我正在尝试创建一个去中心化的Web应用程序,在该应用程序中,如果满足条件,将执行合同并将其发送到地址。例如,如果我的网站上有一个已注册帐户的用户列表,而每个用户都有与其帐户相关联的以太坊地址,我该如何做,以便我的智能合约只能由已注册的特定地址执行我网站上的帐户?

当用户单击我的网站上的一个按钮(如获得eth)时,该按钮将调用智能合约功能,我该如何使之只有注册用户才能使用我的智能合约?

我一直在研究邮件签名和ecrecover以及链下白名单。解决这个问题的想法是,以某种方式使用它们来验证地址是否有效以执行合同。我认为这个问题实质上是在创建基本的水龙头智能合约,但是将可以使用它的地址限制为少数几个。

1 个答案:

答案 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);
    }
}