關於ETH的NONCE

最近我的ETH交易裏面出現了一種情況,交易雖然返回了hash,但是卻遲遲未被確認,連在區塊瀏覽器上也找不到對應的pending交易, 但是通過節點api調用hash獲取記憶記錄卻有數據返回。這種情況問了人也查了資料,最後得出的結果是,交易可能在礦池,但是卻沒有被礦工打包。

於是想到了imtoken錢包的加速交易內容。

說到加速交易,不得不說的就是ETH交易內重要的一個內容, nonce
nonce是你這個地址裏面產生的發起交易所攜帶的,目的是ETH防止雙花, 如果你當前鏈上交易確認nocne爲(例如)9,那麼下一筆交易的nonce必須爲10, 如果你大於10 發起了一筆11的交易,那麼這筆交易是無法被完成的,除非你補全了中間的nonce爲10的交易。

每一筆發起的交易都對應一個nonce。如果你的交易未被確認,或者說仍在礦池, 你可以通過指定nonce,修改GasPrice(加大),去發起一筆新的交易, 礦工會根據你的GasPrice哪個交易裏的比較大,而去進行打包,如果說你第二次發起的GasPrice小於你第一筆的GasPrice,那麼會報一個錯誤:
Unreplace xxxx(忘記了)——意思無法替代,因爲GasPrice小於第一筆。

關於Nonce的保管:
可以調用節點的api:獲取當前地址發起交易的nonce–eth_getTransactionCount 參數爲地址,以及Pending或者lastest,選用pending就行, 就可以獲取你當前地址的最大nonce數。 但是這種情況需要確保你中間的nonce沒有中斷過。

也可以自己保管nonce, 通過數據庫之類的。—筆者就是通過數據庫去保管自己主地址的nonce,在每一次發佈成功的交易都做一次++操作,並且在數據庫保存對當前這筆交易的nonce保管,以方便自己追蹤當前交易的nonce。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章