Ethereum 这个和地址(这个)在坚固性上有什么区别

Ethereum 这个和地址(这个)在坚固性上有什么区别,ethereum,solidity,web3js,Ethereum,Solidity,Web3js,从solidity文档中,我知道这是合同的地址。那么为什么遵循合同会产生错误, pragma-solidity^0.6.2 contract Sample { function getContractAddress() public view returns (address) { return this; } } 但是将这个作为地址(这个)进行类型转换。那么此的数据类型是什么 如果我想要keccak256,我应该使用keccak256(abi.encodePa

从solidity文档中,我知道
这是合同的地址。那么为什么遵循合同会产生错误,
pragma-solidity^0.6.2

contract Sample {
    function getContractAddress() public view returns (address) {
        return this;
    }
}
但是将
这个
作为
地址(这个)
进行类型转换。那么此
的数据类型是什么 如果我想要keccak256,我应该使用
keccak256(abi.encodePacked(this,num))//uint256 num
还是
keccak256(abi.encodePacked(address(this)),num)
这样我就可以得到
web3.utills.sha3(contractAddress,num)//contractAddress-address(this)

在0.5.0版本之前,Solidity允许合同实例访问地址成员,例如
this.balance
。现在,这是禁止的,必须显式转换到地址:
地址(This).balance

资料来源:

因此,除非您使用的是不推荐的Solidity版本(0.4.x及更高版本),否则您需要使用到
地址(this)

keccak256(abi.encodePacked(address(this)), num)