在Solidity中安全地自动化资金转移功能



所以我把一个样本Solidity合同放在一起,谁连接到....得到奖励。

我有一个叫做reward的函数。这工作得很好。但是,这个功能是不安全的。任何人都可以编写前端并耗尽合同中可用的所有资金。但是如果我用require only owner限制这个函数,那么我的设计将无法工作。

我错过了什么?

function reward(uint amount, address payee) public {
require(
address(this).balance >= amount,
"Not enough eth in the contract"
);
payable(payee).transfer(amount);
}

如果你希望只有使用你的前端的人能够获得奖励,你将需要以某种方式验证他们来自你的前端。

在合约逻辑方面,他们可以提交你从后端给他们的签名,作为他们使用你的前端的验证。

但是你还得担心有人绕过你的前端,自己调用你的后端。

无论如何,要做这样的事情,您需要某种中央管理来验证人们正在使用您的前端。另外,请记住,人们可以在他们的设备上解构你放在前端的任何逻辑,所以理论上你需要一些后端来验证这一点。区块链没有概念化用户从哪里调用它,也不应该。

最新更新