next.js 我可以作为合同所有者代表其他人进行此交易吗?

lb3vh1jj  于 2023-05-12  发布在  其他
关注(0)|答案(1)|浏览(98)

我在bsctestnet上部署了一个自定义合约。它是2个文件。其中一个是主要的代币合约,另一个是为玩家提供提款和存款功能。这里是存款和取款功能。

function deposit(uint256 _amount, address _sender) external {
        tfmToken.transferFrom(_sender, address(this), _amount);
        emit Deposit(_sender, _amount);
        deposits[_sender] += _amount;
    }

    function withdraw(uint256 _amount, address _sender) external {
        tfmToken.transfer(_sender, _amount);
        emit Withdraw(_sender, _amount);
        withdraws[_sender] += _amount;
    }

我有next.js应用程序来执行这个函数。用户请求取款或存款。转到管理面板。管理员将接受请求,它将被执行,但当我想执行这段代码;

const gameContract = new web3.eth.Contract(GameContractABI, gameContractAddress);
await gameContract.methods.deposit(weiamount, playerAddress).send({ from: playerAddress });

它给出了这个错误:

MetaMask - RPC错误:请求的帐户和/或方法尚未被用户授权

我知道它应该由eth_accounts方法收集。但我不能,因为另一个人的钱包地址不能在我的metamask钱包。
作为一个管理员,我会接受交易,但地址是从球员。因此,玩家的钱包地址将在函数中,我需要为另一个人的钱包地址执行函数。我是A,我将执行B的钱包地址的函数。有一个问题,我认为授权等,但我不知道它到底是什么,我如何才能使逻辑工作?也许我需要在某个地方定义所有者?但是怎么做呢?也许我不应该使用metamask作为这个特定用途的提供者。但是用什么呢?什么样的逻辑或东西通常用于这种情况。我试图理解和解决这个问题很长一段时间,但找不到任何东西。救命啊!
尝试使用没有metamask的web 3,
const web3 = new Web3('https://endpoints.omniatech.io/v1/bsc/testnet/public');
给出未知地址错误
我看到一些签名的东西,但我不明白什么是签名,一个人或管理员可以签署任何东西?
试了一下,没有。
public int findDuplicate();
但我认为这是必要的。
我试过搜索它,但互联网上的一切都使用自己的地址,并发送任何东西到另一个地址。
我期望:
public int findDuplicate();当我以管理员身份执行此操作时,用户帐户中的金额减少,令牌的余额增加。
玩家(P)想要存款一些代币并添加请求管理员(A)从其面板检查它,接受所执行的提供和存款功能。一些代币从玩家(P)钱包转移到代币(T)。

r7s23pms

r7s23pms1#

不你绝对不能这么做如果你可以仅仅因为你是某个网站的“管理员”就从用户的钱包中转移资金,那么是什么阻止你(或某人)将所有资金转移到某个个人钱包中呢?
这里的一般流程是:

  • 用户调用存款函数。
  • 后端侦听事件或余额更改,并在数据库中更新其值。

如果你需要后台或管理员的批准,向用户发送一个由你(后台)钱包签名的签名,用户使用该签名调用存款函数。然后,约定使用该签名验证调用。签名可以包含附加信息,如用户名、电子邮件、金额等。
但是,您仍然需要侦听发出的事件。

相关问题