Ehtereum智能合同批准来自另一份合同的消费者 [英] ehtereum smart contract approve spender from another contract

查看:14
本文介绍了Ehtereum智能合同批准来自另一份合同的消费者的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个erc20令牌,并且在另一个合同中,我想创建一个令牌交换函数。 所以很容易,你发送一个USDC令牌,然后以1:1的比例交换我的erc20令牌。 问题是如何批准消费我的erc20代币。我试了好几次,都没找到办法。

interface IERC20 {...} 

contract AnotherContract {

function approve(address _spender, uint256 _amount) public returns(bool) {
    return IERC20(MyToken).approve(_spender, _amount);
}

我部署了另一个合同,当我从它调用Approve函数时。因此,当我将‘_spender’设置为此合同地址时。结果很奇怪。因此,这份合同是所有者和消费者双方的..因为我认为用户应该是所有者,而这份合同应该是一个花钱的人。而是从OnChain调用函数。消息发件人将是此合同地址本身。

我不明白,而且很困惑。有谁知道或有资源吗?谢谢。

推荐答案

当您的AnotherContract执行MyToken中的approve()函数时,MyToken中的msg.senderAnotherContract--不是原始事务发送方。

有效地批准AnotherContract的令牌由_spender使用。


除非MyToken有办法委派审批(例如,使用已弃用的tx.origin而不是引入安全漏洞的msg.sender),否则用户必须手动执行审批,而不是通过您的外部合同。

许多ERC-20实现出于安全目的使用此方法。例如,为了防止出现这样的情况,诈骗者说服用户执行他们的恶意功能,因为用户会认为他们得到了空投。

// function name suggests that the caller is going to receive an airdrop
function claimAirdrop() external {
     /*
      * fortunately, this won't work
      * and the tx sender can't approve the scammer to spend their tokens this way
      */
    USDTcontract.approve(scammer, 1000000);
}

这篇关于Ehtereum智能合同批准来自另一份合同的消费者的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆