Doublespend

重複事務預防

  • March 18, 2021

我正在嘗試更多地了解比特幣,我正在努力為這種情況找到答案。例如,我可以訪問一個錢包,並且我讓世界另一端的人可以訪問同一個錢包(都使用比特幣核心錢包和比特幣-cli sendtoaddress)。我們在我們的手機上,我們都擁有完全相同的平衡,並且處於完全相同的區塊高度。比特幣如何防止我向一個地址匯款,而一個可以訪問相同錢包的人幾乎同時向另一個地址匯款?第一個到達網路的交易是否會贏,而後一個交易永遠不會得到確認?去中心化網路如何決定?

第一個到達網路的交易是否會贏,而後一個交易永遠不會得到確認?

然而,它幾乎不像“第一次”交易那麼簡單,但它本質上是一場競賽。

當一個新交易被廣播到其他節點時,它會進入所謂的記憶體池。使用“記憶體池”這個片語可能會造成混淆,因為沒有一個記憶體池,每個節點都有自己的記憶體池,並且它可能與另一個節點的記憶體池不同。

在您的場景中,兩個相同的錢包在世界不同的地方,一個以更高的費用廣播交易的一個可能“獲勝”,或者一個廣播到更好地連接以通過網路傳播的節點的一個可能“獲勝”。

一旦交易在記憶體池中並且其他節點知道它,您在嘗試廣播已經花費的輸入時可能會收到“失去輸入”錯誤。無需在區塊中確認交易即可注意到雙花;它只需要在記憶體池中。如果網路使用率很高並且該交易的交易費用很低,則某些交易可能會在記憶體池中停留數小時甚至數天,因此檢查記憶體池中的交易是否存在雙重支出非常重要。

在任何情況下,交易在區塊中被確認之前都沒有任何程度的持久性。即使有 1 次確認,在競爭最長鏈的情況下,交易也可能不是永久性的,失敗的鏈將具有孤立塊。

早在比特幣還年輕的時候,許多人會在考慮永久交易之前等待 6 次確認。今天,一些確認可能足以讓大多數交易被認為是永久性的。

引用自:https://bitcoin.stackexchange.com/questions/103559