Web3js
你如何處理帶有合約事件的鏈重組?
鑑於每當交易包含在新探勘的塊中時都會觸發事件,當包含該交易的探勘塊被孤立時,您如何處理這種情況?
假設我有一個數據庫,每次
Deposit
發生事件時都會插入數據:myContract.on("Deposit", depositInfo => myDatabase.insert(depositInfo))
但隨後包含進行存款的交易的區塊在 4 個區塊後被孤立。現在我正在儲存無效數據。然後 10 個區塊後,原來在其中探勘原始交易的鏈現在是最長的鏈。所以現在數據庫又準確了。
每次事件因鏈重組而再次失效/驗證時,如何通知我?
然後我可以做這樣的事情;如果該事件無效,則從我的數據庫中刪除該事件,如果有效則將其插入:
myContract.on("Deposit", (depositInfo, isValid) => { if (isValid) { myDatabase.insert(depositInfo) } else { myDatabase.findAndRemove(depositInfo); } });
事實證明,這在 web3js 中是微不足道的,但 ethersjs 不提供任何功能來做到這一點。
在 web3js 中:
myContract.events.MyEvent() .on("data", async (error, event) => { myDatabase.insert(event); }) .on("changed", async (error, event) => { // Called when event is no longer valid myDatabase.findAndRemove(event); });