Solidity

變數的狀態變化究竟是什麼時候發生的?

  • October 30, 2020

我不確定我問的是否正確。我不明白的是,如果 tx 更改狀態變數的值,則必須對其進行探勘、確認並廣播到網路,以便網路的其餘部分知道它。但那是一段相當長的時間。那麼同時對狀態變數執行某些操作的其他 write 函式呼叫會發生什麼情況呢?

int balance=10; 
function change()
{
if(balance>=10) balance=balance-10;

}

如果您change在 1 秒內呼叫兩次會發生什麼?似乎balance可以去-10。

乙太坊有一個“世界狀態”,它是曾經創建的每份合約的一種快照。該狀態記錄在每個塊中。

礦工從前一個挖出的區塊開始挖礦,並按順序執行所有交易。每個事務都在一個眾所周知的 World 狀態上執行,並且每個更改都記錄在其中。執行完所有塊的交易後的最終狀態記錄在其標頭中。

在範例中,它將像這樣工作

  1. 契約部署balance = 10記錄在世界狀態中。
  2. 在第一次交易執行balance = 10時,合約流程將進入 if 部分並進行評估balance = balance - 10,結果balance = 0將記錄在世界狀態中。
  3. 在第二個事務balance = 0上,因為balance >= 10是 false 它不執行遞減操作。

引用自:https://ethereum.stackexchange.com/questions/89751