之所以現(xiàn)如今人們能把比特幣與現(xiàn)金相比較,這其中的技術(shù)機制之一是比特幣正處于重大更新的邊緣。
所謂的“硬幣選擇(coin selection)”,指的是現(xiàn)如今決定將哪些數(shù)據(jù)集合在一起來創(chuàng)建用戶交易的算法。從本質(zhì)上講,硬幣選擇代碼復制了一個轉(zhuǎn)賬過程,該過程相當于消費者給收銀員一個10美元的鈔票,消費者拿到了7美元的商品同時得到了3美元的零錢。
但如果這聽起來不太復雜,那就請你記住比特幣是一個正處于實驗中的軟件,而上述的這個功能在運轉(zhuǎn)的時候并不是完全優(yōu)化的。更糟糕的是,比特幣軟件中可能需要調(diào)整的部分會對用戶成本造成直接的影響。
Bitcoin Core的貢獻者Andrew Chow對CoinDesk說道:
Bitcoin Core的原始硬幣選擇算法實際上需要大量的返工,特別是在交易費用方面。它的效率很低,該算法最終會進入一個奇怪的循環(huán)并試圖猜測所需要的交易費用。
比特幣提供商BitGo的工程師Mark Erhardt也同意這種說法,他在最近的播客采訪中稱該算法“令人費解”。
因此,開發(fā)人員一直在開發(fā)一種新的算法,稱為“分支界定法(branch and bound)”或“BnB”,它以一種更有效的方式將數(shù)據(jù)融合在一起,從而產(chǎn)生了一個更小的擴容碰撞和更低的交易費用。
大約在兩年前,Erhardt首次提出了針對比特幣算法的一些優(yōu)化,而Chow則是第一個將改變這些代碼的開發(fā)人員。
最近這項改變已經(jīng)準備好被添加到比特幣最受歡迎的軟件Bitcoin Core中,同時將其并入代碼庫。對用戶來的好消息是,這一功能將在明年公布的第17個版本中進行廣泛的使用。
在談到這些變化的好處時,Chow說道:
這將讓我們對幣種選擇代碼進行大量的整理,并使一個人能夠準確地理解幣種選擇算法在做什么。
算法不需要改變?
正如前面提到的,退一步說,用戶發(fā)送的每一個比特幣交易都是由不同數(shù)量的比特幣組成的。
假設(shè)你錢包里有一個比特幣,這枚比特幣通常不只是由一個數(shù)據(jù)組成的。相反,它通常由大量的數(shù)據(jù)塊拼湊而成。它可能包括了一個、兩個或幾十個小交易塊——每個都稱為“未使用的交易輸出”(UTXOs)。
例如,綁定到你的比特幣錢包地址的可能是一個價值0.1 BTC的數(shù)據(jù),一個0.3 BTC的數(shù)據(jù),一個0.1 BTC以及一個0.5比特幣的數(shù)據(jù),它們一同組成一個完整的比特幣數(shù)據(jù)。
這些數(shù)據(jù)是基于他們之前的交易,以及他們最初是如何分配到你的錢包的。
因此,如果您需要發(fā)送0.2 BTC,Bitcoin Core的“硬幣選擇”算法可能會決定將價值0.3 BTC的數(shù)據(jù)放入所謂的“輸入”中并創(chuàng)建交易。然后將會有兩個輸出產(chǎn)生:一個輸出是0.2個 BTC,它將被發(fā)送給接收者,另一個輸出是0.1個 BTC,它將被作為“零錢輸出”放回你的錢包 。
然而,根據(jù)開發(fā)人員的說法,該算法并不擅長決定如何選擇交易的硬幣。
Erhardt解釋說,該算法幾乎總是自動生成“變化輸出”的,而這通常在區(qū)塊鏈上是不必要的和浪費空間的。在上面的例子中,算法可以通過選擇值為0.1個 BTC的兩段數(shù)據(jù)來避免這種情況,而不必將“零錢”發(fā)送回發(fā)送方。
他繼續(xù)說著該算法的另一個不幸的副作用:
你不希望你的交易由粉塵交易組成。
“粉塵”指的是數(shù)量非常小的比特幣,它們小到幾乎不值得花錢,從而使得粉塵交易的費用可能比要交易的比特幣更要多。它們可能類似于便士,因為在購買商品時,你花費的便士可能實際上比它的本身價值要高。
我們該如何進行選擇呢?
比特幣上的新的算法BnB,避免這些發(fā)行者試圖消除盡可能多的零錢輸出場景。簡而言之,它會查看所有輸入,看看是否有辦法達到用戶想要發(fā)送的比特幣數(shù)量。
Chow說道:
這有助于減少UTXO的數(shù)量。此外,發(fā)現(xiàn)精確匹配的交易數(shù)據(jù)通常比有找零的交易數(shù)據(jù)要小,因此,這也將節(jié)省用戶的交易費用并騰出更多的區(qū)塊空間以適應其它交易。
有證據(jù)表明這樣的方法是可行的。在一個交易模擬的過程中,Erkhardt發(fā)現(xiàn)通常的交易中有40%是有零錢輸出的,而新的算法能夠處理掉不必要的數(shù)據(jù)。
除了這些對用戶的好處之外,代碼更改還有助于開發(fā)人員,因為新算法在技術(shù)上更容易被理解。
不過,開發(fā)人員并沒有對硬幣的選擇過程進行調(diào)整。Chew和其他一些人計劃通過添加一個所謂的“簡單隨機取樣(simple radom draw)”來進一步研究這個算法。
當BnB算法通過所有的比特幣用戶的UTXOs,并且無法避免創(chuàng)建一個零錢輸出時,它就會回到最初的硬幣選擇過程。但是,在簡單的隨機抽取下,算法會選擇隨機的UTXOs,直到它達到所需的金額。
有趣的是,開發(fā)人員發(fā)現(xiàn)隨機選擇硬幣的方法比Bitcoin Core今天使用的更為謹慎的算法要好。
這是多年工作的頂峰,但根據(jù)Erhardt的說法,這個過程不可能更快的完成。他說,硬幣選擇是代碼的一個“敏感部分”,改變它會產(chǎn)生“全球性的后果”。
因此Erhardt說道:
沒有人愿意花太長時間擺弄它,現(xiàn)在我們已經(jīng)投入了大量的努力來做進一步的改變。