訊息呼叫和合約建立合約

2021-08-21 18:19:40 字數 1138 閱讀 3211

訊息呼叫

合約可以通過訊息呼叫的方式來呼叫其它合約或者傳送以太幣到非合約賬戶。訊息呼叫和交

易非常類似,它們都有乙個源,乙個目標,資料負載,以太幣,gas 和返回資料。事實上每

個交易都可以被認為是乙個頂層訊息呼叫,這個訊息呼叫會依次產生更多的訊息呼叫。

乙個合約可以決定剩餘 gas 的分配。比如內部訊息呼叫時使用多少 gas,或者期望保留多

少 gas。如果在內部訊息呼叫時發生了 out-of-gas 異常(或者其他異常),合約將會得到

通知,乙個錯誤碼被壓在棧上。這種情況只是內部訊息呼叫的 gas 耗盡。在 solidity 中,

這種情況下發起呼叫的合約缺省會觸發乙個人工異常。這個異常會列印出呼叫棧。就像之前

說過的,被呼叫的合約(發起呼叫的合約也一樣)會擁有嶄新的主存並能夠訪問呼叫的負載。

呼叫負載被儲存在乙個單獨的被稱為 calldata 的區域。呼叫執行結束後,返回資料將被存

放在呼叫方預先分配好的一塊記憶體中。

呼叫層數被限制為 1024,因此對於更加複雜的操作,我們應該使用迴圈而不是遞迴。

建立

合約甚至可以通過乙個特殊的指令來建立其他合約(不是簡單的向零位址發起呼叫)。

建立合約的呼叫跟普通的訊息呼叫的區別在於,

1.負載資料執行的結果被當作**

2.呼叫者/建立者在棧上得到新合約的位址

自毀

只有在某個位址上的合約執行自毀操作時,合約**才會從區塊鏈上移除。合約位址上剩餘

的以太幣會傳送給指定的目標(誰來指定?指定給誰?合約位址上怎麼還有剩餘的以太幣?以太幣不都是在人類賬戶上嗎?還有以太幣存在合約上嗎?如果有,誰給合約位址轉的?或者說以太幣的**是什麼?),然後其儲存和**被移除。

注意,即使乙個合約的**不包含自毀指令,依然可以通過**呼叫(callcode)來執行這個

操作。

solidity合約呼叫合約方法的方式

1.通過介面的形式 pragma solidity 0.7.0 0.8.0 spdx license identifier mit inte ce irc20 contract attack function despoit public payable tract.withdraw 1 ether...

智慧型合約呼叫篇 通過位址例項化智慧型合約呼叫

首先知道合約的位址,將合約的位址賦值給address address 合約的位址 然後在本地取得合約 的abi編碼 其中token.tol用solidity語言編寫的合約,x為其abi編碼 solc abi token.tol 獲得abi編碼 abi x 將abi編碼賦值給abi然後通過合約位址例項...

7 3 建立投注合約

在投注應用中,兩個人可以就一場足球比賽押注,乙個支援主隊,另乙個支援客隊。他們押注同樣多的錢,贏家拿走所有錢。如果比賽結果是平局,則各自拿回自己的錢。我們將使用fastestlivescores api讀取比賽結果。它提供乙個免費介面,允許每小時免費進行100個請求。首先,建立乙個賬戶,然後生成乙個...