Solidity
變數的狀態變化究竟是什麼時候發生的?
我不確定我問的是否正確。我不明白的是,如果 tx 更改狀態變數的值,則必須對其進行探勘、確認並廣播到網路,以便網路的其餘部分知道它。但那是一段相當長的時間。那麼同時對狀態變數執行某些操作的其他 write 函式呼叫會發生什麼情況呢?
int balance=10; function change() { if(balance>=10) balance=balance-10; }
如果您
change
在 1 秒內呼叫兩次會發生什麼?似乎balance
可以去-10。
乙太坊有一個“世界狀態”,它是曾經創建的每份合約的一種快照。該狀態記錄在每個塊中。
礦工從前一個挖出的區塊開始挖礦,並按順序執行所有交易。每個事務都在一個眾所周知的 World 狀態上執行,並且每個更改都記錄在其中。執行完所有塊的交易後的最終狀態記錄在其標頭中。
在範例中,它將像這樣工作
- 契約部署
balance = 10
記錄在世界狀態中。- 在第一次交易執行
balance = 10
時,合約流程將進入 if 部分並進行評估balance = balance - 10
,結果balance = 0
將記錄在世界狀態中。- 在第二個事務
balance = 0
上,因為balance >= 10
是 false 它不執行遞減操作。