您好,登錄后才能下訂單哦!
這篇文章主要介紹“怎么將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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。