Solidity
我們如何檢索智能合約變數狀態的演變?
我有一個帶有可變顏色的簡單智能合約,用於儲存字元串。
如果我理解正確的話,每筆交易都可以改變這個變數的狀態,並永久儲存到區塊鏈中。假設 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 歷史表,但大多數案例不需要它。
希望能幫助到你。