Protocol

為什麼必須完全消耗 UTXO?

  • June 25, 2015

想像一下,Alice 擁有 10 個 BTC,並想向 bob 發送 1 個 BTC,並收取 1 BTC 的礦工費。

在區塊鏈中,交易記錄為“Alice 花了 10 個比特幣,1 個給 Bob,1 個給礦工,8 個給 Alice”。

這似乎相當不直覺。為什麼不明確記錄付款和礦工費用?

我以前研究過這個,我從來沒有從 Satoshi 那裡找到明確的理由,但有幾個可能的原因。

用於:簡化 SPV 驗證

想像一下,您不是使用已用/未用模型,而是跟踪每個地址的餘額。您將獲得從地址支付給您的零確認交易。

現在,要弄清楚該地址的餘額是多少,您需要從中獲取所有存款和取款。如果你錯過了一個,你計算錯誤的餘額。

你可以通過強制地址中的每筆交易通過雜湊引用最後一筆交易來解決這個問題,但這消除了比特幣的一個重要屬性——可以同時處理進出同一個地址的多個存款和取款,而無需它們之間的協調.

用於:理論上提高交易隱私

找零輸出(你稱之為“8 BTC 給 Alice”)被發送到一個全新的地址,理論上不可能確定哪個輸出是找零輸出。在實踐中,實際輸出通常是一個不錯的整數,而變化輸出類似於 0.00019841。

反對:增加費用真的很複雜

如果您使用比特幣的時間足夠長,您可能會遇到有人向您發送了一些比特幣但沒有附加費用的情況。

如果明確標記了找零輸出,發送方可以重新發送交易,找零輸出稍小,費用稍高。礦工會知道他們可以安全地將新交易接受到他們的記憶體池中,而不會幫助任何人進行欺詐。然後,我們就不需要諸如按費用替換或孩子為父母付費之類的東西。

反對:使 UTXO 集更大

如果你有 50 個輸出來構成你的錢,這意味著你佔用的空間比你有一個單一餘額時多 50 倍。

TL;DR:它本來可以做不同的,並且有一些相當有說服力的論據,但現在不可能改變。

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