在Solidity 0.5.x中,地址类型被细分为address和address payable,那么,这两种类型有什么区别?如何将address类型转换为address paybale类型,或者反向转换?本文将给出这些问题,并指出Solidity进行地址类型细分的目的。
solidity 0.5将地址类型细分为address和address payable的目的在于,它有助于强制智能合约开发人员认真考虑一个地址是否应当接收以太币,如果该地址根本不需要接收以太币,那么就应当使用address类型。当地址被声明为address类型后,如果开发者试图向该地址转入以太币,就会导致编译时类型错误。
address和address payable类型都用来存储160位的以太坊地址,两者的区别仅在编译时存在,在编译后的合约代码中就没有区别了——也就是说,引入地址类型细分的唯一
目的就是帮助开发者在编译期理清一个地址的实际用途。
address payable和address类型的变量都表示以太坊地址,都可以使用底层的.call()方法。从字面意思看,address payable表示可用于支付的地址,因此在address payable类型的变量上,你可以使用.transfer()

Solidity 0.5.x将地址类型分为address payable和address,主要目的是让开发者在编译时明确地址是否接收以太币。两者在编译后无区别,address payable能接收以太币,而address不能。转换时,address payable可直接转为address,但address转address payable需通过uint160中间步骤。数组转换不直接支持,须逐个转换。内置变量如msg.sender、tx.origin等类型为address payable。

最低0.47元/天 解锁文章
1418

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



