呼叫transferFrom前是否需要批准?



如果我的农场合同有一个权益功能,我需要在调用transferFrom之前调用approve吗?

样本函数:

StakeToken stakingToken;
...
function depositTokens(uint256 amount) public {
require(amount > 0, "Must be more than 0");
//Do I need to call stakingToken.approve(...) here?
stakingToken.transferFrom(msg.sender, address(this), amount);

这是因为农场合同必须经过批准才能进行msg的转移吗?发送方的代表吗?

approve()是需要的,但是您不能从您的合同中调用它。用户需要从他们的地址直接调用它。

因此,从用户处转移令牌实际上需要两次交易。第一个到token.approve(),第二个到yourContract.depositTokens()

推理:令牌合约批准将msg.sender的令牌花费到approve()函数第一个参数中指定的地址。话虽如此,当您从合约中调用token.approve()时,approve()函数中的msg.sender是您的合约,而不是用户。因此,在这种情况下,您将批准将代币从您的合同中花费到作为参数传递的任何地址。

相关内容

  • 没有找到相关文章

最新更新