jinse.com
APP
中國版App下載 Android & iPhone
金色專欄
  • 發布文章
  • 發布活動

金色薦讀丨一文讀懂UTXO合并

David A. Harding 文

本文由幣信研究院原創編譯,原文鏈接:?

https://github.com/bitcoinops/scaling-book/blob/6a7b1e9cc64ddf832b86276e7569604334f9012c/x.consolidation/consolidation.md

本文版權歸原作者所有,僅代表作者本人觀點,不代表幣信或幣信研究院的觀點或立場。

本文約 6500 字,閱讀全文需約 20?分鐘

未使用交易輸出(UTXO)合并是指將存儲在多個 UTXO 中的比特幣價值合并為一個UTXO。這樣可以減少你控制的 UTXO 的數量,同時使你的余額保持大致相同,從而在為了獲得快速確認需要支付的時候,更有機會能夠創建更小、更實惠的交易。

合并示例

把交易想象成一個矩形,其高度是它的費率,其長度是它的大小(區塊重量),其面積是它的總費用(費率乘以大小)。例如,以下所示為一筆簡單交易,它從一個 P2WPKH UTXO(輸入)花費到兩個 P2WPKH 輸出——一個輸出給客戶,另一個作為找零回到花費者那里。

?? ? ? ?

? ? ? ??

大多數錢包最終都會遇到這樣的情況,即在一個 UTXO 中沒有足夠的價值來支付它們想要花費的金額。這就要求它們通過花費更多的 UTXO 為交易增加更多價值。例如,讓我們在示例交易中花費兩個額外的 P2WPKH UTXO:?

? ? ? ?

? ? ?

?盡管這似乎是一個很小的變化,但它幾乎使我們的交易大小和成本增加了一倍。這就是合并發揮作用的地方。通過提前準備,我們可以把大型交易的三個 UTXO,通過一筆自己發給自己的低費率交易,合并到一個 UTXO。然后,我們可以在高費用交易中使用單個 UTXO 向客戶付款,交易形式與上述第一個示例交易相同:

? ? ? ?

? ? ?

比較總成本,我們發現兩次交易的版本比使用三個 UTXO 的單筆高費率交易便宜40%。即使兩次交易的版本使用了更多的總區塊空間,這也是可能的

如果合并交易在你發送第二筆給客戶的交易之前得到確認,那么,與單筆交易相比,客戶不會遇到任何額外的延遲,因此你可以節省少量的錢而完全無需改變接收方的體驗

平均花費的 UTXO

從前面的示例中,我們可以看出,當需要在一個交易中使用多個 UTXO 時,支出是低效的,而合并才有用。這對你來說有多頻繁?如果你可以獲取以下兩個數據,則可以使用下面提供的簡單公式估算每個交易使用的 UTXO 的平均數量。

  • 轉入(incoming)——你的錢包從其他人處獲得的輸出數量

  • 轉出(outgoing)——錢包創建的將比特幣發送給其他人的交易數量。如果你使用批量付款(payment batching, https://github.com/bitcoinops/scaling-book/blob/master/x.payment_batching/payment_batching.md),請注意,這是交易數量,而不是付款數量。為了提高精度,你可以在此總數中包括你期望在錢包為空之前進行的交易數量(即,你當前的錢包余額除以交易的平均轉出)。?

要計算每筆交易花費的 UTXO 的平均數量,請使用以下公式:

average_utxos?= (轉入+轉出) / 轉出

之所以 轉出 在除號的上下都有,是因為我們預期你創建的大多數交易,也會產生一個找零輸出,把未使用的價值作為一個新 UTXO 返回到你的錢包。

上面等式的最小現實結果是 1.0,這也是交易可包含的 UTXO 的最小數量。你的結果越是高于 1.0,你將從 UTXO 合并中受益越多,這將在下一部分中看到。

預計節省

要估計使用合并可以節省多少,讓我們看看一筆典型交易的總費用如何取決于它花費了多少 UTXO(即,它的大小增加了多少)。查看此圖表時,請將 x 軸與你在上一節中計算的 UTXO 平均數量進行比較。

? ? ? ?

? ? ?

如果我們能使用僅支付上圖所用費率的 1/10 的合并交易,將所有多余的 UTXO 合并為一個 UTXO,會怎么樣?然后,我們可以按足額費率只用一個 UTXO 去創建常規支出。將這些數據覆蓋在上圖的頂部,我們可以看到可以節省多少:?

? ? ? ?

? ? ?

讓我們以百分比的形式繪制節省的量:?

? ? ? ?

? ? ?

顯然,我們節省的實際金額將取決于用于合并的低費率和用于支付客戶的較高費率之間的比率。使用本文附錄中提供的數據,在撰寫本文時,通常可以實現以下比率:?

? ? ? ?

? ? ?

另一個會影響我們節省金額的事情是,為了花費每筆 UTXO,我們需要向交易中添加多少數據;即交易輸入的大小。對于 P2WPKH,大約為每 UTXO 68 vbytes;但是對于P2SH 2-3 多簽,大約為 294 vbytes 。假設我們將常規支出的費率統一為 1/10?,則各種常見腳本模板的節省為:?

? ? ? ?

? ? ?

根據以上估計,我們預計,至少在某些時候,幾乎所有活動的比特幣服務都可以通過合并節省大量費用。例外情況是,UTXO 的平均數量非常少,或者在快速(高)費率和慢速(低)費率之間的差額持續小的時候嘗試合并的服務。

UTXO 池

上面的示例假定你將從擁有 n UTXO 變為僅有一個 UTXO,但是,如果你需要廣播一筆交易而你的交易其中一筆又沒有被確認,那么這可能會造成問題。??

從全節點(例如 Bitcoin Core)的角度來看,UTXO 有兩種形式:已確認和未確認。已確認 UTXO 是最佳區塊鏈上一筆交易的輸出。大多數現有節點將始終接受第一眼看到的已確認 UTXO的支出,前提是該支出是有效的,即支付了適當的費率,小于 100000 vbytes,并且遵循其他一些簡單規則。

一個未確認 UTXO一筆仍在內存池(即尚未被確認)里的交易的輸出。為了防止針對節點內存池的 DoS 攻擊,節點對使用未確認 UTXO 的交易設置了其他限制。這意味著,你無法保證能夠在任意時間使用未確認 UTXO。例如,在第一個交易(tx0)被確認之前,錢包可能無法傳播以下所示的第二個交易(tx1):

? ? ? ? ? ? ? ??tx0 ? ? ? ? ? ? ? ? ? ? ? ? ? ??tx1

?????????? ? ?? --- ? ? ? ? ? ? ? ? ? ? ? ? ? ? ---

錢包UTXO → 客戶 Alice UTXO

????????????? ? ? ? ?客戶 Bob UTXO

????????????? ? ? ? ?錢包UTXO(找零) → 客戶 Charlie UTXO

???????????????????????????????????? ? ? ? ? ? ? ? ? ? ?錢包UTXO(找零)

由于許多用戶希望在請求付款后的幾秒鐘內就在錢包里收到新的未確認交易的通知(這要求節點立即接受并中繼這些交易),因此許多支出者不希望自己陷入這種狀態等待之前的一筆交易得到確認,而無法向網絡提交新交易。這會導致這些花費者維護一個?UTXO?——一套可以隨時使用的已確認 UTXO。?

UTXO 池不會顯著影響前面所述的節省,因為你始終可以等到以后將池子合并為一個 UTXO。但是,你在不同 UTXO 之間分配資金以確保即時可花費性的次數越多,你需要付款超出你控制的任何單個 UTXO 的價值的可能性就越大——這削弱了(或可能完全抵消了)UTXO 合并的費用節省。

如果你很少在 UTXO 池中遇到該問題,則可以忽略這種情況,因為它的效率很低。如果經常發生,則有幾種選擇:

  1. 通過保持輸出數量相同并增加每個輸出的價值,來增加 UTXO 池中輸出的平均價值,從而總體上增加池子里的資金量。請注意,這還會增加你因盜竊或熱錢包意外而蒙受的金錢損失。

  2. 通過保持總量不變但減少輸出數量,增加 UTXO 池中輸出的平均價值。你可以通過批量付款來減少在任何特定時間所需的 UTXO 數量來完成此操作。??

  3. 如本章稍后所述,專注于創建不找零的交易。由于后面小節中所描述的原因,不找零的交易通常不如合并有效,但可以為你節省一些錢。當優化你的 UTXO 池以進行不變的交易時,你希望 UTXO 擁有各種金額,以便你有盡可能多的不同金額組合。??

最佳合并大小

要合并 UTXO,你要在交易中包含的數據不只是 UTXO,還必須包括輸出,該輸出將資金返還給自己,并包含一些交易樣板(版本號,nLockTime 等)。你在單個交易中合并的 UTXO 越多,該交易的固定成本在 UTXO 之間的分配就越好,每個 UTXO 的成本漸近地接近其中一項輸入的平均大小。?

? ? ? ?

? ? ?

如上所示,通過同時合并額外 UTXO 所節省的金額并不是特別大,因此即使你不注意合并大小,也可以獲得合理的效率

冷錢包合并

某些服務(例如某些交易所)在其錢包之間有著基本的職責劃分。收到的客戶存款或付款都將存入冷錢包。付款或提款是使用熱錢包進行的。必要時,一個或多個工作人員將錢從冷錢包轉移到熱錢包。

一個簡單的合并策略是將在一定時期(例如一周)內收到的所有 UTXO 都放到冷錢包里,然后將它們合并到一個 UTXO。但是,你可能會想知道這是否產生了浪費,因為你可能最終在以后將單個 UTXO 拆分為熱錢包 UTXO 池的多個 UTXO。例如,如果將 10 個 UTXO 合并為 1 個 UTXO,則將其轉移回 5 個 UTXO 似乎效率很低。

但是,兩種替代選項可能更糟。第一種替代選項是你不合并冷錢包。你只用等到需要轉賬到熱錢包并執行合并。這最大程度地減少了區塊鏈空間的使用——但所有這些空間都用在了單筆大型交易里。如果你需要交易進行快速確認——例如,因為你需要這筆錢才能動熱錢包——你可能會為該交易支付高額費率,從而失去合并冷錢包的好處。

第二種替代選項是,將 10個 UTXO 合并到冷錢包中的 5 個 UTXO,然后將 5 個冷的 UTXO 轉移到 5 個熱錢包 UTXO。在所有可用選項中,這將使用最多的區塊空間。它以低合并費率創建了一筆大型交易,并以較高的費率創建了一筆中等規模的交易來把錢發送到熱錢包。這使它成為表現最差的選項。

雖然最大程度地合并 UTXO 然后在以后進行拆分似乎有點愚蠢,但本節開頭描述的簡單合并策略確實可以提供最大的節省

隱私問題

當你收到從未使用過的新地址的付款時,查看區塊鏈歷史的分析人員將不知道誰擁有該 UTXO。但是,如果你將 UTXO 與他們已確定屬于你的其他 UTXO 合并,則分析師可以做出合理的假設,即所有合并的資金均屬于你。

1(Alice) \

? ? ? ? ? ? ? ? ? ? \

2(???) ?-----> 6(Alice)

? ? ? ? ? ? ? ?? ??/

3(???)--/

因此,試圖最大化自己的比特幣余額或交易歷史的私密性的用戶不應使用本文檔中描述的 UTXO 合并。以前使用過諸如混幣(coinjoin)之類的技術來將其 UTXO 的所有權歷史與其他 UTXO 混合在一起的用戶,尤其應該避免這種情況。

有可能在混幣期間執行一種限量的合并,例如,在 Joinmarket 或 Wasabi 中的實現。此外,未來協議開發的構想,例如通道工廠(channel factories, http://devbcop/en/topics/channel-factories/)或混合池(joinpools, https://freenode.irclog.whitequark.org/bitcoin-wizards/2019-05-21#24639483;),可能會使由多個人擁有的多個 UTXO 合并為一個 UTXO,然后用于定期支出的情況變得更為普遍,使得分析者更不清楚誰擁有來自合并的幣。

選擇 UTXO 進行合并

你的目標是使用一個 UTXO 完成盡可能多的付款,因此你應該首先合并最低價值的 UTXO。此外,通過確保每次選擇接收到特定地址的 UTXO 時,還選擇接收到同一地址的所有其他 UTXO,可以減少隱私損失。例如,假設你想在下面的示例錢包中合并三個UTXO:

出口點

接收地址

價值(BTC)

? abcdef:0

? bc1qfoo

? 0.1

? bcdefa:0

? bc1qbar

? 0.2

? cdefab:0

? bc1qfoo

? 0.3

? defabc:0

? bc1qbaz

? 0.4

? efabcd:0

? bc1qquux

? 0.5

你應該選擇?abcdef:0?,因為它是價值最低的 UTXO。然后選擇 cdefab:0?,因為它被發送到與 abcdef:0?相同的地址。最后,選擇 bcdefa:0?,因為它是價值次低的 UTXO。?????

關于選擇相關 UTXO 的更多信息,請參閱(https://bitcoinops.org/en/newsletters/2018/07/31/#bitcoin-core-12257)Bitcoin Core 里的 -avoidpartialspend 配置選項。? ??

合并與競爭技術

在使用 UTXO 合并的同時,無法有效地使用另一些節省費用的技術,因此以下小節將它們與合并進行了比較,同時突出了它們的優缺點。

不找零的交易

不找零的交易不包含找零輸出,這使典型交易的大小減少了約 31 至 43 vbytes。盡管在僅花費一個 UTXO這是合并的目標)的時候有可能創建一筆不找零的交易,但是,通常需要同時花費兩個或更多 UTXO 才能產生一筆不找零的交易。這是因為,如果你愿意使用任意數量的輸入,那么,可以在交易中包括的 UTXO 組合的數量會極大地有助于尋找一筆不找零的交易。

不找零的交易節省了區塊空間和費用,因此強烈建議你使用。但是,與需要在同一筆交易中花費兩個或多個 UTXO 的不找零交易相比,有效使用 UTXO 合并幾乎總是可以節省更多的錢。這是因為,所有常用腳本的交易輸入(UXTO 花費)都比交易輸出大得多,因此可以省略輸出省下的成本并不能彌補必須包含額外輸入的成本。

類型

輸入 vbytes

輸出 vbytes

比率

? P2PKH

? 148

? 34

? 23%

? P2WPKH

? 68

? 31

? 46%

? 2-3 P2SH

? 294

? 32

? 11%

? 2-3 P2WSH

? 104

? 43

? 40%

? P2TR(建議)

? 57

? 43

? 75%

不找零的交易還會從你的錢包中刪除一個 UTXO,與 UTXO 合并一樣,減少了你未來的交易費負擔。節省下來的錢更難分析,因為通常你會湊整交易費來創建不找零的交易,從而增加支出費率。但是,即使我們忽略這一點,因為輸入遠遠大于輸出,所以,以較低的費率進行合并仍將比以較高的支出費率創建兩個輸入的不找零交易節省更多的錢。考慮一個示例:Alice 和 Bob 分別收到 10個 UTXO。Alice 將其 UTXO 合并為單個 UTXO,費用為正常支出費用的 1/10?,然后發送五筆付款。Bob 將自己的 UTXO 分開存放,并自己發送五筆付款,每筆付款都使用兩個 UTXO 來按正常支出費率創建不找零的交易:?

? ? ? ?

? ? ?

Alice 的合并交易(十個輸入和一個輸出)為 679.25 vbytes;她隨后的五筆付款交易(每筆一個輸入和兩個輸出)是 136.50 vbytes。Bob 的五筆不找零的交易(每筆兩個輸入和一個輸出)大小為 169.25 vbytes 。

如果 Alice 和 Bob 都以相同的費率發送他們的付款交易,我們可以使用一些簡單的代數來計算 Bob 進行合并交易所需的費率百分比,以便與 Alice 使用不找零的交易節省的錢相等:

719.25 * x + 5 * 140.50 = 5 * 177.25

x = 0.26(四舍五入)

總之,如果 Alice 能夠以她通常花費費率的 1/4 或更低進行合并,她將比 Bob 省下更多的錢,即使她使用了比他多將近一倍的區塊空間。本章附錄中的費率數據表明,在我們粗略的假設下,超過 96% 的時間都有可能節省費用。

如果 Bob 需要為每個交易使用兩個以上的輸入來創建不找零的交易,即使 Alice 為合并交易使用了相應較高的費用率,她也可以節省更多的錢。

就是說,與合并交易相比,不找零的交易的明顯優勢在于,它們使支出者節省了區塊空間并節省了適度的交易費,同時保留了他們的隱私以防上述“合并隱私”?部分所述的問題。對于大多數個人消費者,甚至是花費不頻繁的小企業而言,隱私優勢對他們來說比合并節省的交易費更為重要。??

預測性/有機 UTXO 管理

預測性 UTXO 管理是由 BitGo 提供的一種服務:“通過在高費率減少交易大小,同時在低交易費時自動清理和處理幣的小片段,來降低總體成本。”?https://www.businesswire.com/news/home/20180726005483/en/BitGo-Introduces-Predictive-UTXO-Management-Delivering-30這種技術的具體實現是專有的,但它可能類似于 Dmitry Petuhov 所描述的有機 UTXO 合并(https://www.reddit.com/r/Bitcoin/comments/9kxn01/organic_utxo_consolidation_in_the_course_of/)。

此類技術消除了合并交易使用的額外區塊鏈空間,從而使其可能更有效率并節省更多交易費。它可能更容易實現某些服務,因為不需要等待數小時或數天即可確認合并交易。此外,BitGo 的預測性 UTXO 管理系統尤其似乎可以使用上一節中所述的不找零的交易實現部分節省,以及其中描述的額外的節省和隱私好處。

但是,在節省費用方面,對于希望在接下來的幾個區塊里確認其支出交易的支出者,UTXO 合并通常會比預測性/有機技術節省更多的錢。這是因為,利用預測性/有機交易在區塊鏈空間上省下的幾十個字節,與能夠通過在較低費率支出 UTXO 來節省很大比例的 UTXO 支出成本并不匹配。實際上,在前面的插圖中對此進行了量化:

? ? ? ?

? ? ?

對于平均每筆交易花費兩個或更多 UTXO 且可以按正常費率的 50% 或更少的價格進行合并的人(以及使用此處分析的 P2WPKH 交易的人),合并至少可以使成本達到收支平衡,并且可以輕松地比發送普通交易節省更多的錢。本章附錄中包含的費率數據顯示,在我們分析的 2019 年 11 月和 12 月期間,有 99.85% 的可能性為名義上的 2 個區塊確認目標節省至少 50% 的費率。

同樣,預測性/有機方法的確具有以下優勢:與現有服務的合并相比,它的實現可能要容易得多,并且與不找零的交易相結合,可以實現適度的額外節省并增強隱私性。不過,專注于最大程度地節省費用的支出者可能會希望專注于 UTXO 合并。

增加交易費

節省最大的合并交易,應該以你認為允許交易在需要之前確認的最低費率發送。例如,如果你可以等待一周的時間來確認交易,那么你應該使用交易費估算工具的目標費率在 1008 個區塊內進行確認。

但是,來讓一筆先前發送的合并交易更快地確認,或者因為費率意外上漲,有時你可能需要增加其手續費。在這種情況下,你有幾種選擇:

  • 對于從熱錢包到熱錢包的合并(或從熱錢包到冷錢包的合并),你應發出 BIP125(https://github.com/bitcoin/bips/blob/master/bip-0125.mediawiki)信號,這樣你可以使用費用替代(Replace-by-Fee, RBF)來增加交易費,這是最有效的增加交易費類型。??

  • 對于從冷錢包發送到熱錢包的合并,你可以輕松地使用“為父輩付費的子輩”(Child-Pays-For-Parent, CPFP)來增加交易費。

  • 對于從冷錢包發送到冷錢包的合并,你可能需要設計你的交易,以便它們始終包含支付給熱錢包的少量輸出。這樣,你就可以通過熱錢包使用 CPFP 收費功能,而無需重新打開冷錢包。但是,除非你打算把錢轉到你的熱錢包里,否則這種額外的輸出可能會稍微降低合并效率。

結論

對于既頻繁接收又頻繁發送付款的組織來說,合并是省錢的最有效方法之一。它相對容易實現,如果做得好,收到你付款的人將永遠不會注意到你正在這樣做。

另見

  • Anthony Towns 的《田野報告:在 Xapo 合并了 400 萬個 UTXO》(https://bitcoinops.org/en/xapo-utxo-consolidation/)

  • Mark Erhardt 的《演講:unspent 管理與幣的選擇》(https://www.youtube.com/watch?v=hrlNN3BSB6w&feature=emb_logo)?

附錄 A:

下圖顯示了使用 Bitcoin Core 的交易費估算的 2 個區塊確認目標(約20分鐘)和 1008 個區塊確認的目標(約 1 周),在一段時間內可用的預計節省。

? ? ? ?

? ? ?

下表總結了達到一定節省率的頻率。我們看到,幾乎總是可以通過等待一周來節省50%的費率,并且通常可以節省 90% 或更多。

|? ? 節省 ? |?可能時間的百分比 |

|?50.00%|?99.85 |

|?75.00%|?96.25 |

|?90.00%|?87.35 |

|?96.00%|?35.80 |

|?98.00%|?1.45 |

|?99.00%|?0?|

我們使用上述的一周目標是因為,這是 Bitcoin Core 的評估器所提供的最長期限,并且對于許多組織而言,等待一筆合并交易一周的時間來確認是很容易的。后續的有關費率估算和緊急權衡的章節將更詳細地分析不同確認目標之間的費率差異。

- The End?-

了解更多區塊鏈一線報道,與作者、讀者更深入探討、交流,歡迎添加小助手微信:jinsecaijing666, 進入[金色財經讀者交流群]。
文章作者: / 責任編輯: 我要糾錯

聲明:本文由入駐金色財經的作者撰寫,觀點僅代表作者本人,絕不代表金色財經贊同其觀點或證實其描述。

提示:投資有風險,入市須謹慎。本資訊不作為投資理財建議。

金色財經 > 區塊鏈 > 金色薦讀丨一文讀懂UTXO合并
刺激战场官网国际服 三个半波中特论坛 多乐彩走势图模板 意甲联赛一共多少场 2019上证50权重比例 四川麻将真人版 血战麻将高手打牌思路 重庆麻将规则 22选5尾数图走势图 街机捕鱼大富豪刷金币 贵州麻将捉鸡下载 跟pc蛋蛋一样的网 可以下分的捕鱼游戏 长沙麻将下载哪个版本 pc蛋蛋数据分析 东方财富网股票论坛 吉林微乐长春麻将