我正在编写一个 ERC20 合约,它允许另一个 ERC20 能够使用我的合约,并且不确定如何在下面给出的场景中获取特定地址。
说我的合同是CoinA
,别人的合同是PartnerCoin
。我被代理了,他们可能会也可能不会(在这种情况下,我已经知道他们是否被代理了)。假设我使用 OpenZeppelin 作为我的代理。我代币的代理合约地址是 0x123,他们的代币合约(或代理)地址是 0x456。可以说,如果PartnerCoin
被代理了,那么它们的实现地址就是0x192。
人 Bob 来了,想把他的 10 个转给PartnerCoin
他的朋友 John。Bob 的钱包地址是 0x987,John 的钱包地址是 0x654。PartnerCoin
对它的传输函数有一个要求,它必须从它可以调用的公共函数接收特定的响应CoinA
,否则它不会传输。它调用函数,我们将调用它SuperFunction
,onCoinA
并等待响应。
我只想PartnerCoin
能够打电话SuperFunction
,至少现在是这样,而且我知道PartnerCoin
地址是什么。
在我的实施合同中,比如 0x384,我相信是这样的:
msg.sender
会返回 0x123,我自己的代理,因为我的代理正在调用我的实现,对吗?
_msgSender()
将返回 0x987,因为他们是实际的最终用户。
什么会返回 0x456,PartnerCoin
的合约地址,以便CoinA
检查它确实PartnerCoin
是在调用SuperFunction
,而不是其他硬币?
感谢您的帮助!