Solidity

狀態變數如何儲存和更新?

  • December 20, 2018

智能合約和狀態變數儲存在區塊鏈中,假設在部署智能合約期間,狀態變數和智能合約儲存在區塊 1 中,將來狀態變數會通過某個交易進行更改,塊 1 中的變數被更改?(如果是這樣,它將不贊成區塊鏈的不變性),或者它會創建一個帶有新狀態變數和程式碼的新塊,那麼這將是一種智能合約的版本控制,但很明顯這不是真的。

  1. 變數如何儲存在區塊鏈中?
  2. 更改狀態變數時會發生什麼?是對首次部署智能合約的區塊進行更改,還是使用具有新價值的智能合約創建新區塊?或創建僅具有交易歷史記錄的新塊(即 A 的值更改為 10),如果那時我可以獲得交易歷史記錄嗎?
  3. 當請求更改變數狀態時,交易中存在哪些資訊(僅更改變數或具有新值的整個智能合約)

乙太坊區塊鍊是一個狀態機。當您在送出的事務中定義狀態變數時,數據將在網路節點之間儲存和同步。例如“x 是‘你好’”

當您送出對該變數進行更改的交易時,您實際上儲存了一條消息,“x 現在是’再見’”。這是跨節點同步的。

當您查詢該變數目前是什麼時,您的客戶端實際上會重新執行每個事務和狀態更改以辨識值是什麼。它說“x was ‘hello’”然後在塊 5 中它被更改為 ‘goodbye’。因此該值目前是 ‘goodbye’。

因此,要獲得目前值,您需要一個完全同步的節點,其中包含對變數的所有更改。

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