Change
為什麼收費後有整數而沒有變化?
我正在研究一組地址,這些地址似乎在重複發送具有整數輸出且沒有變化的交易。這是如何/為什麼會發生的?例如c809850a2d8b… 和 718fd33c7307…。
我唯一能想到的是錢包以某種方式精心策劃了這一點。就像它提前知道它想要發送一個整數一樣,所以它準備了輸入,這樣就不會發生變化。但是什麼樣的錢包可以做到這一點呢?為什麼?
如果您的錢包有一個較大的 UTXO 池,其值存在一些差異,通常可以找到提供匹配金額的輸入組合來支付接收者輸出和交易費用。匹配金額的範圍比人們預期的要大,因為考慮到將可忽略不計的輸入超額投入費用比支付創建和花費更改輸出更便宜。
這種策略被稱為“避免變更”,並具有多種好處:
- 較小的事務:每個輸出為事務增加 31–43 vbytes。避免更改輸出會降低交易成本(假設輸入的權重相同)。
- 未來成本降低:添加到錢包的每個 UTXO 都會導致未來花費的延遲成本。通過避免更改輸出,需要花費的 UTXO 減少了一個。
- 整合效應:許多服務有入站支付過剩,需要積極努力減少其 UTXO 池。避免更改的交易總是會減少錢包中 UTXO 的數量(對於 1 個有更改的輸入交易而言,情況並非如此)。
- 減緩全球 UTXO 集的增長:避免更改意味著網路上的每個完整節點都可以跟踪少一個 UTXO
- 提高隱私:更改地址檢測是集群地址中的常用工具。沒有找零輸出的交易不能以這種方式利用,如果它們被誤認為是自發送,或者有多個接收輸出但沒有找零輸出,甚至可能會混淆這種方法。
所有這些好處都以一些開發工作的一次性成本為代價,並且每個輸入選擇的計算量略多一些。
有多個錢包採用硬幣選擇算法,主動搜尋避免找零的輸入集。例如,可以在Bitcoin Core 的程式碼庫中找到具有詳細描述的算法實現。
免責聲明:Bitcoin Core 使用的算法是在我的碩士論文“硬幣選擇策略評估”(PDF)中提出的。