Solidity

我們如何檢索智能合約變數狀態的演變?

  • August 29, 2018

我有一個帶有可變顏色的簡單智能合約,用於儲存字元串。

如果我理解正確的話,每筆交易都可以改變這個變數的狀態,並永久儲存到區塊鏈中。假設 tx#1 將其更改為紅色,tx#1 將其更改為藍色,tx#2 更改為紅色,tx#3 更改為綠色。

我想要紅色、藍色和綠色,而不僅僅是這個可變顏色的最後一個狀態。

我怎樣才能做到這一點?

謝謝

通常的方法是為所有狀態更改發出事件。這些可以在外部進行監控,包括從頭開始回放和/或過濾器。這是在不使用太多合約(昂貴)儲存的情況下公開歷史記錄的好方法。

bytes32 x;

event LogChangedX(bytes32 X);

function doSomething(bytes32 newX) {
 x = newX;
 LogChangedX(x); 

客戶端,例如瀏覽器或伺服器,可以瀏覽事件日誌以發現發生在“x”上的所有更改。使用 web3 事件監聽器。

有一種更消耗氣體、儲存密集型的方法,它更類似於數據庫 txn 歷史表,但大多數案例不需要它。

希望能幫助到你。

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