1

我是solidity 的新手,并尝试使用openzepplin 部署ERC20 令牌。对我来说没有意义的一件事是context.sol 文件。从评论部分看来,context.sol 的主要功能是实现 GSN 兼容的合同,因此您可以使用 _msgSender() 而不是使用 msg.sender

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

根据我对solidity 的有限经验,似乎对msg.sender 做同样的事情。

4

1 回答 1

5

在这种情况下,它是同样的事情。

我相信 OpenZeppelin 开发人员实现了这个功能,以便在需要时更容易互换。因此,如果由于某种原因msg.sender变得过时,只需在多个合同中更改一行而不是多行(并且可能会忘记一些)。

以前也发生过类似的情况,当时tx.origin一些区块链开发人员更喜欢它,但后来(被 Solidity lang 核心团队)弃用,取而代之的是msg.sender.

于 2021-08-14T17:51:23.423 回答