所以我把一个样本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);
}
如果你希望只有使用你的前端的人能够获得奖励,你将需要以某种方式验证他们来自你的前端。
在合约逻辑方面,他们可以提交你从后端给他们的签名,作为他们使用你的前端的验证。
但是你还得担心有人绕过你的前端,自己调用你的后端。
无论如何,要做这样的事情,您需要某种中央管理来验证人们正在使用您的前端。另外,请记住,人们可以在他们的设备上解构你放在前端的任何逻辑,所以理论上你需要一些后端来验证这一点。区块链没有概念化用户从哪里调用它,也不应该。