Contract-Design

事件日誌與 Solidity 中的儲存

  • October 22, 2021

在我的乙太坊智能合約中,我有一個註冊使用者的函式(通過將使用者對象添加到映射中)。我也在成功註冊後觸發一個事件來通知使用者。我想獲取使用者總數(將顯示在網站上)。

我知道乙太坊中的事件日誌比儲存便宜得多。所以我對這兩種選擇感到困惑:

  1. 在儲存中取一個變數,從 0 開始初始化,並在每次註冊新使用者時遞增。因此變數將儲存使用者總數,並且可以從網站前端輕鬆訪問。
  2. 因為每次註冊新使用者時我都會觸發一個事件。那麼我可以使用觸發事件的計數(因為它將等於註冊的使用者數)?我是否需要獲取所有日誌才能獲得計數?如果使用者(或日誌)的數量非常大(10^6)怎麼辦?

哪個選項是最優的(最低的gas價格和快速的響應)。

我願意接受建議,如果您知道其他解決方案,請告訴我。

如果你選擇在儲存中使用計數器,那麼它會增加註冊使用者的 gas 成本,但它也允許你從其他智能合約訪問使用者數量。這取決於你做出權衡。作為替代方案,如果您沒有儲存計數器,那麼您可以舉辦一個活動。使用者註冊的gas費用將降低。如果您採用這種方法,我建議您執行一個後台任務來訂閱契約中的事件。此後台任務將偵聽新事件並在某個集中式數據庫中增加一個值。網站前端可以從您的數據庫中讀取此值並顯示它。

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