Events

如何檢查事件是否已確認?

  • May 8, 2018

當一個事件被觸發時,你會得到這樣的東西:

{
 "address": "0x0a7a177321f3b3b6e2299e621eb32e892b141b4b",
 "topics": [
"0x0d332ed5c7d6f1999116748c0eb99c740f276d879d025a5be6435fcf177785de"
 ],
 "data": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000568616c6c6f000000000000000000000000000000000000000000000000000000",
 "blockNumber": "0x2f6d30",
 "transactionHash": "0x4aaf274a399ee315dc351b30b2e6ff9525996d4700c4843ec0a625512cd21fd1",
 "transactionIndex": "0x4",
 "blockHash": "0xbfad930ed694aae9fc660951ac4a309701a17e75f02087c72c3ea78431c3005e",
 "logIndex": "0x2",
 "removed": false
}

我需要知道該事件是否已被確認並且不會“恢復”(至少具有很高的可信度)。

我正在考慮做的是等待中引用的塊blockHash有 12 次確認以認為事件已確認。

為了檢查 12 個確認,我的猜測是我需要通過呼叫來檢查塊eth_getBlockByHash,驗證響應不是null(我猜這意味著塊被丟棄)並確保它eth_blockNumber - block.number等於或大於 12。

這個確認事件的過程聽起來正確嗎?

是的,等待區塊確認是如何確保事件存在。

是的,當一個塊被丟棄時eth_getBlockByHash會返回。null

DApp 如何使用 web3.js 或其他庫檢測分叉或鏈重組中有一些範常式式碼? (添加到其中的高質量答案將獲得投票,也可能成為接受的答案。)

大多數人選擇的被認為是“已確認”的方法是等待自您檢查交易以來開採*(x)數量的塊。*

您等待的時間越長越好,因為它減少了事務成為“叔叔”或被還原的機會。

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