this 和 address(this) 在 solidity 中有什么区别
what is the difference between this and address(this) in solidity
从solidity文档中得知this
是合约地址。那为什么下面的合同会抛出错误,
编译指示 solidity ^0.6.2;
contract Sample {
function getContractAddress() public view returns (address) {
return this;
}
}
但将 this
类型转换为 address(this)
。那么this
的数据类型是什么
如果我想要 keccak256,我应该使用 keccak256(abi.encodePacked(this, num)) // uint256 num
还是 keccak256(abi.encodePacked(address(this)), num)
这样我就可以得到 web3.utills.sha3(contractAddress, num) //contractAddress - address(this)
的结果
Prior to version 0.5.0, Solidity allowed address members to be accessed by a contract instance, for example this.balance
. This is now forbidden and an explicit conversion to address must be done: address(this).balance
.
来源:https://docs.soliditylang.org/en/v0.5.0/units-and-global-variables.html
因此,除非您使用的是已弃用的 Solidity 版本(0.4.x 及更早版本),否则您需要使用到 address(this)
的转换
keccak256(abi.encodePacked(address(this)), num)
从solidity文档中得知this
是合约地址。那为什么下面的合同会抛出错误,
编译指示 solidity ^0.6.2;
contract Sample {
function getContractAddress() public view returns (address) {
return this;
}
}
但将 this
类型转换为 address(this)
。那么this
的数据类型是什么
如果我想要 keccak256,我应该使用 keccak256(abi.encodePacked(this, num)) // uint256 num
还是 keccak256(abi.encodePacked(address(this)), num)
这样我就可以得到 web3.utills.sha3(contractAddress, num) //contractAddress - address(this)
Prior to version 0.5.0, Solidity allowed address members to be accessed by a contract instance, for example
this.balance
. This is now forbidden and an explicit conversion to address must be done:address(this).balance
.
来源:https://docs.soliditylang.org/en/v0.5.0/units-and-global-variables.html
因此,除非您使用的是已弃用的 Solidity 版本(0.4.x 及更早版本),否则您需要使用到 address(this)
keccak256(abi.encodePacked(address(this)), num)