Go-Ethereum

測試網 tx 在 90 個區塊後重新出現

  • August 16, 2016

在某個時候,本地 Geth 節點在測試網上的區塊中報告了 tx 2e7a57c55a7cb28d0e233d7745210dba93c09f14c5df4e879db1a530a79a842a1369316。然後在接下來的 1-12 個區塊中的某個時間點,它從鏈上消失了。

相同的 tx 在區塊上的90 個區塊1369406後重新出現,現在是區塊鏈的一部分。

這怎麼會發生,我們沒有正確處理哪些邊緣情況?我們的理解是等待 12 個區塊就足夠了。

這是由分叉還是重放攻擊引起的?如果是,應該如何處理?

在某個時候,本地 Geth 節點在 testnet 的塊 1369316 中報告了 tx 2e7a57c55a7cb28d0e233d7745210dba93c09f14c5df4e879db1a530a79a842a。然後在接下來的 1-12 個區塊中的某個時間點,它從鏈上消失了。

本地geth節點顯示相對於其目前區塊鏈副本的交易數據;即使副本中存在具有相應雜湊值的交易,也並不意味著它已被網路確認(它必須首先被中繼和探勘。只有這樣它才會被添加到區塊鏈中)。

相同的 tx 在 1369406 塊的 90 個塊後重新出現,現在是區塊鏈的一部分。

從某種意義上說,交易不能“(重新)出現”,因為區塊鏈中可能只存在一個帶有交易雜湊的單一交易,以使區塊鏈有效。

如果它“消失”,則可能出現以下情況之一:

  • 交易被一個或多個節點“故意”篡改(通過位操作)並轉發到網路。網路的其餘部分將其標記為無效,因此未添加到區塊鏈中(區塊鍊是指網路同意的整個區塊鏈)
  • 該交易仍然存在於已經驗證並與之前將其標記為無效的節點同步的節點的區塊鏈副本中(幸運的是,乙太坊的目前實現會懲罰中繼無效交易的節點(而不是進行交易的節點))
  • 進行了51% 的攻擊(儘管不太可能,因為測試網上的成本和沒有金錢收益)並且攻擊者篡改了交易排序。
  • 乙太坊使用GHOST協議來激勵具有無效數據但有效標頭達到一定高度的區塊鏈(其塊被稱為主鏈的叔塊,有效鏈的叔塊)的探勘(探勘叔塊塊的費用按塊成倍減少)。你的交易可能已經進入這樣一個區塊,並在稍後與主區塊重新同步(因為它在標頭和數據方面都是有效的)

我們的理解是等待 12 個區塊就足夠了。

您不能真正使用絕對值(12 個)塊。“足夠”的確認數量取決於挖礦節點及其廣告塊。可以肯定地說,確認次數越多越好(區塊鏈上“已經同意”的節點越多)。

這是由分叉還是重放攻擊引起的?如果是,應該如何處理?

這極不可能是由分叉引起的,因為所有礦工都必須就從給定區塊開始的新區塊鏈上的挖礦達成一致。

好吧,按照區塊鏈的原則,任何人都可以加入並貢獻任何挖礦算力,這是無法緩解的(通過乙太坊的目前實現)。一種解決方案是使用允許加入網路的對等點上的 ACL 的許可區塊鏈(即eris )。

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