IERC20 approve( address spender, uint256 amount) 授权问题

一、 目的 想要限制单笔转入合约账号的ERC20代币的数量。

二、途径 通过msg.value可以限制eth的转入数量,不可以限制ERC20代币。 听过可以调用transferFrom实现限制ERC20代币。 于是就是先授权,在转币,发现失败,通过测试发现

contract Gov账号创造合约contract 主要代码如下:

constructor(address _rewardtoken,address _A) {
    Gov = tx.origin;
    A = _A;
    rewardtoken = IERC20(_rewardtoken);
}

function approve() public payable {
    rewardtoken.approve(A, 1234);
}
function allowancecontract() public view returns(uint256) {
    return rewardtoken.allowance(address(this), A) ;
}
 function allowancemsgsender() public view returns(uint256) {
    return rewardtoken.allowance(msg.sender, A) ;
}

存币账号B调用contract中approve(),授权给A地址。

结果A获得了contract的授权。

我懵了 这是什么鬼。

请先 登录 后评论

最佳答案 2021-09-08 10:56

调用approve 表示调用方对某个地址(参数)进行授权:

在合约里调用

approve(A, 1234);

表示合约授权 A 账号,1234 个币。

你要做的做的是不是用户(A ) 授权 合约? 那需要由用户发起approve 调用,参数填合约地址。

请先 登录 后评论

其它 0 个回答

  • 1 关注
  • 2 收藏,4847 浏览
  • DappOnTheWay 提出于 2021-09-08 09:17