开发者需要了解在Solidity中tx.origin和msg.sender的区别。这两个全局变量经常被混淆,尽管它们之间有着根本的不同。虽然乍一看它们可能相似,但在交易的上下文中,tx.origin和msg.sender代表不同的地址。在这篇博客文章中,我们将深入探讨这些变量的含义。
什么是tx.origin?
在Solidity中,tx.origin标识交易的原始发送者。它指向发起交易的外部账户,并在后续的智能合约交互中保持不变(整个调用链中)。
当通过MetaMask钱包发起交易时,用户MetaMask钱包的地址会被存储在tx.origin中。即使交易经过多个合约,这个地址也会保持不变。这个地址的一致性对于追踪交易的初始发送者非常重要。
什么是msg.sender?
在智能合约开发中,msg.sender标识当前调用的发送者。这个变量是动态的,在交易过程中可以发生变化。
当交易通过多个智能合约时,msg.sender的值会更改,以指示调用链中最近的合约地址。例如,如果合约A调用合约B,那么在合约B中msg.sender的值将被识别为合约A。
代码示例
为了演示tx.origin和msg.sender在智能合约调用之间的变化,我们将创建一个EntryContract智能合约,该合约调用UnderlyingContract合约。
我们添加一个printTxOriginAndMsgSender函数来打印每个地址。
下面是EntryContract智能合约:
contract EntryContract {
IUnderlyingContract private underlyingContract

最低0.47元/天 解锁文章
660

被折叠的 条评论
为什么被折叠?



