W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
合約可以通過(guò)消息調(diào)用的方式調(diào)用其他合約或向非合約賬戶發(fā)送以太幣。消息調(diào)用類似于事務(wù),因?yàn)樗鼈兙哂性?、目?biāo)、數(shù)據(jù)有效負(fù)載、以太幣、gas 和返回?cái)?shù)據(jù)。實(shí)際上,每個(gè)事務(wù)都包含一個(gè)頂級(jí)消息調(diào)用,而該調(diào)用又可以創(chuàng)建進(jìn)一步的消息調(diào)用。
合約可以決定應(yīng)該通過(guò)內(nèi)部消息調(diào)用發(fā)送多少剩余的gas,以及它想要保留多少。如果在內(nèi)部調(diào)用(或任何其他異常)中發(fā)生gas不足異常,則會(huì)通過(guò)放入堆棧的錯(cuò)誤值發(fā)出信號(hào)。在這種情況下,只有與調(diào)用一起發(fā)送的 gas 被用完。在 Solidity 中,調(diào)用合約在這種情況下默認(rèn)會(huì)導(dǎo)致手動(dòng)異常,因此異常會(huì)“冒泡”調(diào)用堆棧。
如前所述,被調(diào)用的合約(可以與調(diào)用者相同)將收到一個(gè)新清除的內(nèi)存實(shí)例,并可以訪問(wèn)調(diào)用有效負(fù)載 - 這將在一個(gè)名為calldata的單獨(dú)區(qū)域中提供。完成執(zhí)行后,它可以返回?cái)?shù)據(jù),這些數(shù)據(jù)將存儲(chǔ)在調(diào)用者預(yù)先分配的調(diào)用者內(nèi)存中的某個(gè)位置。所有此類調(diào)用都是完全同步的。
調(diào)用被限制在 1024 的深度,這意味著對(duì)于更復(fù)雜的操作,循環(huán)應(yīng)該優(yōu)先于遞歸調(diào)用。此外,在消息調(diào)用中只能轉(zhuǎn)發(fā) 63/64 的gas,這導(dǎo)致實(shí)際深度限制略小于 1000。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: