Transactions

將交易從舊塊轉移到新塊會允許更多修剪嗎?

  • June 16, 2016

修剪 Merkle Tree 中的分支時, Nick ODell 寫道:“當所有輸出都用完時,可以修剪葉子(交易)。” 所以我在想,如果一個交易是一個區塊中最後幾個交易之一,礦工可以將交易複製到正在開采的新區塊中。這樣,礦工(和網路的其他部分)不再需要該塊進行驗證,並且可以將其釋放到乙太中。

Nick 還寫道,無論如何,比特幣核心不會以這種方式修剪,因為它“在你下載並驗證所有塊的假設下執行”。我正在探索造成這種情況的原因,看看是否可以在不保留所有內容的情況下解決它們。

在開始修剪模式之前下載整個區塊鏈的想法是,你要確保你開始的內容是有效的。唯一已知的方法是得到整個東西。或者是嗎?似乎區塊鏈本身的普遍性與有效 UTXO 集的普遍性相匹配,所以如果你得到一個有效的 UTXO 集並且它與每個其他節點所說的相匹配,你就可以開始了。除了 Sybil 攻擊,對吧?如此成功的 Sybil 攻擊是否也會讓區塊鏈本身被偽造?

我的 move-a-transaction 方法的一個困難是,當一個新節點正在下載區塊鏈時(無論仍然需要多少),它會想要驗證每個塊,如果塊 X 失去,那麼所有包含無法驗證在塊 X 中創建的輸入,如果這意味著驗證其中的交易是否有效。然而,區塊頭本身仍然可以被驗證。塊 X 的標頭無法驗證,因為它的內容失去。但是,在塊 X+1 中需要來自塊 X 的雜湊值不足以相信塊 X 是有效的,因此,塊 X+1、X+2、X+3 等也是如此。 ,一直到並包括任何正在驗證的塊包含使用在塊 X 中創建的輸出(可能)的交易?

當一個交易最終出現時,它確實花費了移動交易中未花費的輸出,因為區塊 X 失去,所以無法驗證它。但是,如果標識哪個區塊持有哪個交易的索引由移動交易的礦工更新,那麼這很容易解決。

該索引更新是否必須同時處理移動交易的所有直接子交易,以便仍然可以通過在新探勘的塊中找到源交易來驗證現有的、以前有效的交易?我認為沒有必要重新驗證具有經過驗證的標頭的塊中的交易,是嗎?

這似乎付出了很多努力,但絕對沒有任何好處。

在比特幣修剪模型中,無論如何你都會丟棄所有這些舊塊,並保持 utxo 設置。utxo 是在舊塊還是新塊中並不重要,您仍然將它保留在 utxoset 中。您保留的任何塊都只是為了方便並幫助請求這些塊的其他節點。

簡單的答案是肯定的,但有更好的解決方案。雖然它允許在更新的塊中表示所有交易,但在非常舊的塊中存在交易並不能阻止我設想的那種修剪。為了使最早的區塊不需要驗證比特幣的歷史,只需要證明其中的任何 UTXO 確實存在,並且它們還沒有被使用過。目前的 UTXO 集可以實現這一點,但它必須被證明。Jonas Schnelli 在二月份提出了非常相似的建議。

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