Web3js
Event 中的變數是否儲存在區塊鏈中?
嘿,我有以下活動
event Submitted(bytes32 indexed docHash);
事件由函式呼叫
function submitHash(bytes32 docHash) public onlyOwner() { Submitted(docHash); }
即使只呼叫了事件,看起來 docHash 也被保存在區塊鏈中。我有另一個程式碼
bytes32 docHash; function submitHash(bytes32 docHash) public onlyOwner() { docHash = docHash; }
我想要的是將 docHash 儲存在區塊鏈中,以便證明存在帶有時間戳的 docHash。與事件一起儲存會花費更多嗎?是否可以搜尋 docHash,因為它已在其中建立索引?哪個會是更好的選擇?
如果一個事件被索引,這意味著它可以(很容易)被搜尋到:被索引的關鍵字有什麼作用?. 所有事件都儲存在事務中(因此也儲存在區塊鏈中),無論它是否被索引。
發出事件是在區塊鏈中儲存數據的最便宜的方式。以下是一些快速Google搜尋的計算:https ://www.reddit.com/r/ethdev/comments/78ugki/do_indexed_parameters_in_events_cost_more_gas/
事件的唯一缺點是任何合約都無法訪問它們的數據(甚至發送它們的合約也無法訪問)。因此,一旦發出事件,就無法在區塊鏈內部檢索該資訊 - 它只能在區塊鏈外部對節點客戶端可用。事件不會在區塊鏈/合約狀態中儲存任何資訊。