我在仲裁Goerli网络上测试了我的代码,它起作用了,因为测试USDC合同是带有审批和传输功能的默认合同。
现在我想直播,我看到USDC (0xFF970A61A04b1cA14834A43A43f5dE4533eBDDB5CC8) ABI是不同的,因为它使用的是代理合同(0x1eFB3f88Bc88f03FD01804A5C53b7141bbEf5dED8)。
如何批准和转移USDC?我试图批准代理合同,但由于某种原因,转让失败了:
USDC = IERC20(0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8); USDC.transferFrom( msg.sender, address(this), _amount.mul(1e6) );。
我把主要合同的转帐打给你。在有代理合同的情况下,批准支出和进行转移的正确方式是什么?
发布于 2023-03-13 22:08:33
有了代理合同,您就有了代理合同和实现合同。首先,你的术语有点混乱。
在这种情况下,代理合同为0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8。
执行合同为0x1eFB3f88Bc88f03FD1804A5C53b7141bbEf5dED8。
您将实现契约称为代理。代理是一种契约,它只是抓住逻辑来使用实现,非常小,并且使用delegateCall。
当您使用合同时,包括您批准的地址在内的所有内容都将传递给代理合同。代理是用delegateCall管理的,所以它们控制着所有的状态,如果您调用它,它们本质上就像合同一样运行。
对于这里的情况,您必须在代理合同(0xFF970A61A04b1cA14834A43f5dE4533eBD5CC8)上调用审批,然后调用代理合同上的传输。
当您有代理系统时,不要与实现契约交互。即使它没有恢复,它也没有做任何有用的事情。您所关心的所有状态都在代理合同中,您只应该与它交互。
https://ethereum.stackexchange.com/questions/147348
复制相似问题