Contract-Design
寫入數據還是發出事件?
我的合約包含僅供前端讀取的數據(合約永遠不需要再次引用它)。
是否有任何理由將該數據寫入區塊鏈,或者事件是否可以與相關資訊一起發出?這樣前端就可以掃描日誌。
發出事件顯然比儲存鏈上數據便宜得多,所以堅持使用事件是誘人的。
速度有問題嗎?與從合約中讀取相比,web3 掃描所有塊以查找事件的效率如何?還有哪些其他考慮?
事件實際上是一種在網路中保存數據的形式,一種很便宜的形式。不使用事件日誌而不是在合約儲存中保存數據的唯一原因是,如果另一個合約需要該數據,或者如果合約儲存中沒有數據會迫使使用者信任處理數據的後端系統. 除此之外,我會去參加活動。
在讀取日誌的速度或性能方面,給定塊的結構,搜尋非常有效。
希望這可以幫助。
事件將在且僅發生該特定操作時發出,而不是像它掃描所有先前的塊並相應地採取行動,除非您在兩者之間添加了該邏輯。
不推薦
loop
對來自solidity的塊數據進行不切實際的處理。由於語言限制,它是從智能合約中免費實時獲取某些內容的一種方式,因此請進行優化以使其有效。