ethereum - 如何使智能合约仅在被特定验证地址调用时才可执行?
问题描述
我正在尝试制作一个去中心化的 Web 应用程序,如果满足条件,将执行合同并将 eth 发送到一个地址。例如,如果我的网站有一个已注册帐户的用户列表,并且每个用户都有一个与其帐户关联的以太坊地址,我该如何做到这一点,以便我的智能合约只能由已注册的特定地址执行我网站上的帐户?
当用户单击我网站上的按钮(例如(get eth))会调用智能合约功能时,我怎样才能做到只有注册用户才能使用我的智能合约?
我一直在研究消息签名和 ecrecover 以及链下白名单。我解决这个问题的思考过程是以某种方式使用这些来验证地址是否有效以执行合同。我认为这个问题本质上是创建一个基本的水龙头智能合约,但将可以使用它的地址限制在少数几个。
解决方案
我认为我们只是简单地将用户添加到我们的智能合约中。然后我们像这样验证它:
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);
}
}
推荐阅读
- vue.js - Vee-Validate 在进行配置时显示空白页
- c# - Visual Studio 2019 观察窗口:IntelliSense 完成
- recursion - Prolog中的欧几里得(最大公分母)
- c - proteus中7段显示的时钟问题
- swift - 如何创建可用的数据对象
- php - 如何使 Laravel 唯一验证在输入数组上工作?
- go - 表示/处理非结构化/通用 xml
- python - Django REST API - SerializerMethodField() 导致查询过多
- prometheus - Grafana 正则表达式,例如名称 prometheus
- node.js - 如何访问 connect-mongodb-session 集合