Transactions
檢測交易是否被取消(因為一個塊是孤立的)
我正在編寫一個系統,其中必須自動檢測一些交易,並等待 30 個塊以確保它們得到確認。我所做的是讀取所有新塊,並找到屬於我的地址的交易。
我正在使用
geth
withgetBlockByNumber
RPC 呼叫,然後當我找到屬於我的交易時,我將其放入記憶體池並等待 30 個塊通過,然後將交易視為最終交易。**問題:**如何檢測取消的交易以防止雙重支出?
我可以想像一個塊以某種方式成為孤立和/或取消的情況。在考慮交易最終之前,我如何檢查交易仍然有效並且沒有以某種方式被取消?
在考慮最終交易之前檢查相同的塊(按編號)是否足夠,並檢查交易是否仍然存在?還有其他我需要擔心的情況嗎?(叔塊等)如何系統地檢查這個?
在鏈重組之後,交易可能會在另一個區塊中。例如,如果一筆交易是在區塊 100 中探勘出來的,那麼在重組之後,它可能會在區塊 102 或區塊 99 結束。
在像乙太坊這樣的區塊鏈中(由工作證明保護),你永遠不能 100% 確定交易會被撤銷。但是例如,在 12 個區塊確認之後,您非常有信心它不會被逆轉,因為它需要非常大量的雜湊算力。
要檢查交易是否在區塊鏈中,您必須檢查 contains 返回的值
web3.eth.getTransaction(txid)
指向blockHash
一個現有塊,並且該值blockNumber
從web3.eth.blockNumber
.要驗證 a
bockHash
你可以呼叫web3.eth.getBlock(blockHash)
,如果塊不在主鏈中,它將返回 null。