【发布时间】:2021-11-24 20:42:09
【问题描述】:
我正在编写一个 ERC20 合约,它允许另一个 ERC20 能够使用我的合约,但我不确定如何在下面给出的场景中获取特定地址。
假设我的合同是CoinA,而别人的合同是PartnerCoin。我被代理了,他们可能会也可能不会(在这种情况下,我已经知道他们是否被代理了)。假设我使用 OpenZeppelin 作为我的代理。我代币的代理合约地址是 0x123,他们的代币合约(或代理)地址是 0x456。可以说,如果PartnerCoin被代理了,那么它们的实现地址就是0x192。
某人 Bob 出现并想将他的 10 个PartnerCoin 转移给他的朋友 John。 Bob 的钱包地址是 0x987,John 的钱包地址是 0x654。 PartnerCoin 对其传输函数有一个要求,它必须从可以从 CoinA 调用的公共函数中接收特定响应,否则它不会传输。它调用函数,我们将其称为SuperFunction,在CoinA 上并等待响应。
我只希望PartnerCoin 能够呼叫SuperFunction,至少现在是这样,而且我知道PartnerCoin 的地址是什么。
在我的实施合同中,比如 0x384,我认为是这样的:
msg.sender 将返回 0x123,我自己的代理,因为我的代理正在调用我的实现,对吗?
_msgSender() 将返回 0x987,因为他们是实际的最终用户。
什么会返回 0x456,PartnerCoin 的合约地址,以便 CoinA 可以检查确实是 PartnerCoin 在调用 SuperFunction,而不是其他硬币?
感谢您的帮助!
【问题讨论】:
标签: ethereum smartcontracts cryptocurrency erc20 openzeppelin