我是 Solidity 新手,并尝试使用 openzepplin 部署 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;
}
}
Run Code Online (Sandbox Code Playgroud)
从我有限的 Solidity 经验来看,它似乎对 msg.sender 做了完全相同的事情。
在这种情况下,这是同样的事情。
我相信 OpenZeppelin 开发人员实现此功能是为了使其在需要时更容易互换。因此,如果由于某种原因msg.sender变得过时,只需更改一行而不是多个合同中的多行(并且可能会忘记一些)。
类似的情况以前也发生过,当时tx.origin一些区块链开发人员更喜欢它,但后来它被(由 Solidity lang 核心团队)弃用,转而支持msg.sender.
| 归档时间: |
|
| 查看次数: |
1800 次 |
| 最近记录: |