您好,登录后才能下订单哦!
这篇文章主要介绍“怎么将address转换为address payable”,在日常操作中,相信很多人在怎么将address转换为address payable问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么将address转换为address payable”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
solidity 0.5将地址类型细分为address
和address payable
的目的在于,它有助于强制智能合约开发人员认真考虑一个地址是否应当接收以太币,如果该地址根本不需要接收以太币,那么就应当使用address
类型。当地址被声明为address
类型后,如果开发者试图向该地址转入以太币,就会导致编译时类型错误。
address
和address payable
类型都用来存储160位的以太坊地址,两者的区别仅在编译时存在,在编译后的合约代码中就没有区别了 —— 也就是说,引入地址类型细分的唯一目的就是帮助开发者在编译期理清一个地址的实际用途。
address payable
和address
类型的变量都表示以太坊地址,都可以使用底层的.call()
方法。从字面意思看,address payable
表示可用于支付的地址,因此在address payable
类型的变量上,你可以使用.transfer()
和.send()
方法,但是address
类型的变量则不能使用这些方法。
因此,address payable
类型的功能要强于address
类型,容易理解,address payable
向address
类型的转换要容易一些(降级使用),而从address
类型向address payable
类型的转换,则需要稍微转个弯。
address payable
类型的变量可以显式或隐式地转换为address类型:
address payable addr1 = msg.sender; address addr2 = addr1; // 正确 address addr3 = address(addr1); // 正确
address
类型的变量只能显式地转换为address payable
,需要首先转换为整数类型(例如uint160),然后再将该整型值转换为address类型,就可以得到address payable
:
address addr1 = msg.sender; address payable addr2 = addr1; // 错误,address不能隐式地转换为address payable address payable addr3 = address(uint160(addr1)); // 正确,先转换为uint160,然后转换为address payable
虽然单个address payable
变量可以转换为address
类型,或者反之,但是不能直接将整个数组进行转换。例如:
function testCast(address payable[] memory _addresses) returns (address[] memory) { return _addresses; // 错误! }
在Solidity的内置变量中,以下几个变量的类型都是address payable
:
msg.sender
tx.origin
block.coinbase
你可以使用在线的Solidity IDE来测试本文中的Soldity代码,以便更好地理解在Soldity 0.5中的address payable
和address
类型的区别与相互转换。
到此,关于“怎么将address转换为address payable”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。