如何防止用户在我的dApp中调用我的智能合约函数



我目前正在开发Web3游戏,我需要一个函数来给玩家一些硬币。然而,我知道智能合约很容易访问。据我所知,我不能在我的Dapp中使用我想称之为"所有者"的onlyOwner,在那里,其他用户将被连接,而不是合同所有者。

// Add Coins to an Account
function addCoinsToAccount(uint256 tokenId, uint256 coins)
public
{
// Add Coins to Account
attributes[tokenId].coins += coins;
}

我本来打算使用SecretPassword方法,但读过这篇文章后,我现在发现即使这样也很容易被破解。https://medium.com/coinmonks/a-quick-guide-to-hack-private-variables-in-solidity-b45d5acb89c0

如果有人知道我是如何做到这一点的,那将意义重大!谢谢你花时间帮助我。

u可以在后端使用私钥进行签名,因此只有用户;白名单";可以兑换硬币。

您可以有一个Request结构:

struct Request{
string description;
uint value;
address payable recipient;
bool complete;
}

所以当你需要发送硬币时,你可以创建一个对象集完整的false。您将这些请求保存在一个数组中。

Request[] public pendingRequests;
// maybe add a modifier onlyPlayers can call this
function createRequest(string memory description, uint value, address payable recipient) public {
// add require logic to decide who can call it
// maybe players who are stored in a mapping, winnign certain rewards can call this. depends on your game
Request memory newRequest=Request({
description:description,
value:value,
recipient:recipient,
complete:false,
});
pendingRequests.push(newRequest);
}

然后创建一个只能由管理员调用的finalizeRequests函数。不一定是所有者。您可以添加一个函数来决定谁可以成为管理员。然后,管理员将处理挂起的请求,并将complete属性标记为true

相关内容

  • 没有找到相关文章

最新更新