Solidity
事件是否永久儲存並在未來可靠地提供給合約?
我看過這個關於使用乙太坊作為事件儲存的論壇文章:Solidity 中的事件 ,使用區塊鏈作為事件儲存。
不過,似乎還沒有定論。例如它說:
我與 Vitalik 確認,並由 Chris 確認事件是永久性的。將來,一些節點可能會修剪歷史數據。
如果節點修剪歷史數據,我不確定對事件數據的可用性有什麼影響。
首先,合約無法訪問事件。
簡單的答案是肯定的,事件是永久儲存的。
細緻入微的答案是肯定的,事件與區塊鏈一樣永久存在。
它有助於認識到事件是在 EVM 中執行的 LOG 操作碼的結果。 打個比方,“內部交易”是通過 EVM 執行交易數據得出的。
因此,只要您擁有區塊鏈(根據定義,您擁有所有區塊和交易),那麼您就擁有所有事件(或者如果它們已被刪除,則可以重新生成所有事件)。如果你在沒有區塊鏈的手機上,DApps 將受到它所擁有的事件的限制。
最後,修剪對事件的持久性沒有影響,因為修剪是對狀態樹進行的,不會失去任何塊。
例外:事件是永久性的,除非有分叉重組並且它在被丟棄的分叉上。分叉會丟棄塊和交易,這就是為什麼其中生成的事件也會被丟棄的原因。