如何使智能合约仅在特定验证地址调用时才可执行?
How to make a smart contract only executable when called by specific verified addresses?
我正在尝试制作一个去中心化的网络应用程序,如果满足条件,合同将被执行并可以将 eth 发送到一个地址。例如,如果我的网站有一个已注册账户的用户列表,并且每个用户都有一个与其账户相关联的以太坊地址,我该如何做到这一点,以便我的智能合约只能由已注册的特定地址执行我网站上的帐户?
当用户在我的网站上点击一个按钮,比如(get eth)会调用智能合约功能时,我该如何做到只有注册用户才能使用我的智能合约?
我一直在研究消息签名和 ecrecover 以及链外白名单。我解决这个问题的思路是以某种方式使用这些来验证地址是否有效以执行合同。我认为这个问题本质上是创建一个基本的水龙头智能合约,但将可以使用它的地址限制在 select 几个。
我想我们只是简单地将用户添加到您的智能合约中。然后我们这样验证:
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);
}
}
我正在尝试制作一个去中心化的网络应用程序,如果满足条件,合同将被执行并可以将 eth 发送到一个地址。例如,如果我的网站有一个已注册账户的用户列表,并且每个用户都有一个与其账户相关联的以太坊地址,我该如何做到这一点,以便我的智能合约只能由已注册的特定地址执行我网站上的帐户?
当用户在我的网站上点击一个按钮,比如(get eth)会调用智能合约功能时,我该如何做到只有注册用户才能使用我的智能合约?
我一直在研究消息签名和 ecrecover 以及链外白名单。我解决这个问题的思路是以某种方式使用这些来验证地址是否有效以执行合同。我认为这个问题本质上是创建一个基本的水龙头智能合约,但将可以使用它的地址限制在 select 几个。
我想我们只是简单地将用户添加到您的智能合约中。然后我们这样验证:
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);
}
}