Transactions

檢測交易是否被取消(因為一個塊是孤立的)

  • July 12, 2018

我正在編寫一個系統,其中必須自動檢測一些交易,並等待 30 個塊以確保它們得到確認。我所做的是讀取所有新塊,並找到屬於我的地址的交易。

我正在使用gethwith getBlockByNumberRPC 呼叫,然後當我找到屬於我的交易時,我將其放入記憶體池並等待 30 個塊通過,然後將交易視為最終交易。

**問題:**如何檢測取消的交易以防止雙重支出?

我可以想像一個塊以某種方式成為孤立和/或取消的情況。在考慮交易最終之前,我如何檢查交易仍然有效並且沒有以某種方式被取消?

在考慮最終交易之前檢查相同的塊(按編號)是否足夠,並檢查交易是否仍然存在?還有其他我需要擔心的情況嗎?(叔塊等)如何系統地檢查這個?

在鏈重組之後,交易可能會在另一個區塊中。例如,如果一筆交易是在區塊 100 中探勘出來的,那麼在重組之後,它可能會在區塊 102 或區塊 99 結束。

在像乙太坊這樣的區塊鏈中(由工作證明保護),你永遠不能 100% 確定交易會被撤銷。但是例如,在 12 個區塊確認之後,您非常有信心它不會被逆轉,因為它需要非常大量的雜湊算力。

要檢查交易是否在區塊鏈中,您必須檢查 contains 返回的值web3.eth.getTransaction(txid)指向blockHash一個現有塊,並且該值blockNumberweb3.eth.blockNumber.

要驗證 abockHash你可以呼叫web3.eth.getBlock(blockHash),如果塊不在主鏈中,它將返回 null。

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