【solidity必知】常见的address(this),tx.origin 和 msg.sender 语句解释
·
在 Solidity 编程里,address(this)、tx.origin 和 msg.sender 是 3 个常用的与地址相关的语句,下面详细介绍一下它们的区别。
1. address(this)
address(this)表示当前合约自身的地址。- 这个地址在合约部署时就已确定,并且在合约的整个生命周期内都不会改变。
用法
在合约内部,当需要引用合约自身地址时,就可以使用 address(this)。例如,在将合约的以太币余额发送到其他地址时,就会用到它。
contract ExampleContract {
function getContractAddress() public view returns (address) {
return address(this);
}
}
2.tx.origin
tx.origin指的是发起当前交易的原始外部账户地址。也就是最初在以太坊钱包(像 MetaMask)里点击发送交易的那个账户地址。
用法
一般用于检查交易的发起者是否为某个特定的外部账户。不过,要注意使用 tx.origin 存在安全风险,因为它可能会被恶意合约利用来进行重入攻击。
contract ExampleContract {
function checkTxOrigin() public view returns (address) {
return tx.origin;
}
}
3. msg.sender
- msg.sender 代表当前合约的调用者
- 如果是外部账户直接调用合约函数,
msg.sender就是该外部账户的地址;要是合约 A 调用合约 B 的函数,那么在合约 B 里,msg.sender就是合约 A 的地址。
用法
在合约中,msg.sender 常被用来识别调用者的身份,进而进行权限控制等操作。
contract ExampleContract {
function checkMsgSender() public view returns (address) {
return msg.sender;
}
}
总结
- address(this):当前合约的地址
- tx.origin:合约调用源地址
- msg.sender:合约的调用者
举例说明

- address(this):当前合约的地址
- tx.origin:合约调用源地址
- msg.sender:合约的调用者
更多推荐



所有评论(0)