Context.sol 在 Openzeppelin 中有什么用

What is Context.sol uses for in Openzepplin

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

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 完全相同。

在这种情况下,是一样的。

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

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