在Solidity编程里,address(this)、tx.origin和msg.sender是3个常用的与地址相关的语句,下面详细介绍一下它们的区别。
在 Solidity 编程里,address(this)
、tx.origin
和 msg.sender
是 3 个常用的与地址相关的语句,下面详细介绍一下它们的区别。
address(this)
表示当前合约自身的地址。在合约内部,当需要引用合约自身地址时,就可以使用 address(this)
。例如,在将合约的以太币余额发送到其他地址时,就会用到它。
contract ExampleContract {
function getContractAddress() public view returns (address) {
return address(this);
}
}
tx.origin
指的是发起当前交易的原始外部账户地址。也就是最初在以太坊钱包(像 MetaMask)里点击发送交易的那个账户地址。一般用于检查交易的发起者是否为某个特定的外部账户。不过,要注意使用 tx.origin
存在安全风险,因为它可能会被恶意合约利用来进行重入攻击。
contract ExampleContract {
function checkTxOrigin() public view returns (address) {
return tx.origin;
}
}
msg.sender
就是该外部账户的地址;要是合约 A 调用合约 B 的函数,那么在合约 B 里,msg.sender
就是合约 A 的地址。在合约中,msg.sender
常被用来识别调用者的身份,进而进行权限控制等操作。
contract ExampleContract {
function checkMsgSender() public view returns (address) {
return msg.sender;
}
}
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!