雖然用時比我們預期的久,但是Bitcoin SV節點軟體1.0.7測驗版本(名為Dynastic)終于將在1月初發布了,
我們在這次發布的Dynastic版本上忙活了近一年,為了解決我們此前從Bitcoin Core(BTC)那里繼承的一個特別棘手的麻煩事,這次代碼更改很多,因此我們需要比通常的測驗更加謹慎,但我相信大多數 BSV 應用程式開發者會認為這是值得的,

上面是一個動態圖表,演示了隨著時間推移,我們向Bitcoin SV 節點提交200萬筆交易時的情況,Y 軸表示節點接受的交易數量,X軸是經歷的時間,單位為秒(影片演示中我們對時間進行了加速),橙色線是v1.0.7最新測驗版軟體的表現,藍色線是以前的v1.0.6軟體,在第一張圖表中,你可以看到v1.0.6和v1.0.7的表現幾乎是相同的;第二張圖中你可以看到差異開始顯現;第三圖你可以看到戲劇化的差異,
上面為什么有3個并列的圖表?答案就在每個圖表的上方,這三個圖表中所提交的交易分別是(祖孫)交易鏈長度為1、50和1000的交易集,
祖孫交易鏈長度25的限制已成為歷史!
在Bitcoin SV v1.0.7測驗版中,我們將祖孫鏈默認限制長度從25提高到了1000,我們也測驗過了更長的鏈,觀察到了相似的線性性能曲線,實際上,除了因為在一個充滿敵意的環境中我們需要格外謹慎,并沒有什么明確的理由阻止我們洗掉這個限制,因此請放心,在這次將上限提升至1000幾個月后,我們就會徹底移除限制,我們認為移除了這個限制還可以使性能略有提高,因為不需要再計算交易鏈長度了,
話說回來,為什么一開始會有這個限制呢?為什么我們花了很久才移除它?
區塊構建的歷史
一開始,bitcoind 0.1.0版本的做法相當簡單:每隔一秒左右,它就對接收到的所有交易做一次記憶體映射,并檢查其中所有新的交易以確保它們滿足了最低的交易費要求;只要滿足,就將它們添加到區塊模板中,這就相當于一個有順序的、有效交易的串列,接下來計算這組交易的merkle樹,并構建一個區塊頭來開始進行作業量證明(挖礦),這個程序可以被優化,但當時這種做法已體現出足夠高的效率,因此并沒有人對此進行不必要的優化,
隨后出現了1MB區塊大小限制和打造一個交易費市場的想法,當時的想法是,限制區塊大小將創造出對區塊空間的需求,并推高交易手續費,進而讓用戶競價交易費,以爭取自己的交易被打包入塊,這時就對位元幣軟體提出了新需求:如果一個礦工由于1MB限制無法選擇所有的可用交易,他就需要通過選擇高費率的交易來最大化他自己的挖礦收入,把利潤較低的交易留給他人后續處理,
限制區塊大小的后果
因為限制了區塊大小,因此構建區塊的代碼變成了一個如同要對意大利面條進行記賬的噩夢,而且基于這個限制還衍生了其它規則,選擇高費率的交易聽起來很簡單,但實際上當您有未確認的祖先交易并且出現CPFP(child-pays-for-parent)時,將會面臨大量的圖形遍歷作業和其它可怕的復雜性情況,比如每新增一個關聯交易時,基本上就需要再次遍歷與這個交易有關聯的交易圖組,這會帶來二次計算成本,進一步解釋就是,關聯交易集合越大,在集合上進行操作就越貴,結果就是速度呈指數級下降,這一點從我們上面的圖表中就可以清楚的看到,隨著關聯交易集合數量的增大,我們傳輸交易到 mempool 的速率會急劇下降,
你也可以在用Bitcoin Core、Bitcoin ABC 和舊版本的Bitcoin SV軟體生產的區塊中的交易布局里,觀察到這種效應——區塊中的第一個交易的交易費率最高,往交易串列的后面看,會發現交易的費率越來越低,不幸的是,這種模式消除了區塊內交易的時間順序屬性,而這是位元幣系統中一個重要的功能,
解決方案
就像我們在位元幣上面臨的大多數問題和困境一樣,解決這個問題的方法就是讓位元幣回到本來的樣子,這說起來簡單做起來難,因為開發人員已經在代碼庫上花了12年的時間了,
2020年Bitocin SV的幾次升級軟體中包含了一些為了解決這個問題而做的準備作業,并且已被證明可以穩定運行,v1.0.6軟體里的技術變更最為重要,我們用新的日志區塊匯編程式(JBA)替換了默認的舊版區塊匯編程式(LBA)模塊,因此現在的交易判定回歸到以下這種簡單的模式:
- 交易是有效的嗎?答:是的
- 這個交易支付了高于我們最低要求的費率了嗎?答:是的
- 可以將這個交易添加到交易串列中
你可以看到,當區塊大小被假定為無上限的時候,就沒有必要擔心一個交易的交易費相對于其他交易來說是高是低;只要這個交易的費率高于你設定的最低值,你就可以選擇它們,這使得構建區塊變得出人意料的簡單,但也對位元幣費率市場的運作模式產生了深遠的影響——從用戶競價抬高手續費轉化為礦工(礦池)之間相互競爭、提供更低的收費標準從而鼓勵大量交易,
因為我們上面提到的費用選擇(fee selection)邏輯與LBA緊密交織在一起,這意味著我們不可能在不破除LBA的情況下移除這個邏輯,因此明智的做法就是完全取消LBA,為了做到這一點,我們需要確保替換了LBA的JBA是完全穩定的,此外,此前的交易費邏輯不僅涉及區塊匯編程式,它還涉及到Bitcoin SV中幾乎所有的領域,甚至會深入到非常敏感的代碼中,這其中一些代碼還將影響JBA的性能,
因此,我們在Dynastic版本中實作的最后一步就是移除了LBA,洗掉了費用選擇代碼,并大大簡化了交易選擇邏輯,
無需多說大家也知道,這次的改動巨大,因此需要大量的測驗,去年為了Genesis升級,我們的QA團隊在作業中度過了圣誕假期,但今年我強制他們要在圣誕節期間休息一段時間(如果不強制休假他們可能還會繼續作業下去,他們就是如此敬業),因此,我們將在一月初對v1.0.7測驗版進行測驗,
我真的很喜歡這個圖表,所以我想任性地再展示一次,因為它不僅證明了我們解決了這個難題,還彰顯出了當我們要解決位元幣中所有擴容挑戰時必須遵循的結構原則:

- 不要做不必要的作業;
- 如果你認為你需要做這個事,那就進行冷酷的自我拷問;
- 保證圖中的線足夠徒峭,
相比Bitcoin SV節點軟體,我們此次處理的難題在Teranode中更容易被解決,因為我們不必擔心在切除垃圾代碼的手術中可能產生的連帶破壞風險,在Teranode里我們只要簡單的遵循中本聰原始設計原則就可以了,這也是中本聰在alpha版本代碼中就已經能做到的,
無論如何,應用開發團隊可以利用未來的幾周時間思考如何利用好更長的鏈式交易,就像我們在Genesis創世紀升級之后看到的腳本實踐大爆炸一樣,我期待著看到應用長鏈交易的創新浪潮,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/247705.html
標籤:區塊鏈
下一篇:window10下go語言開發環境搭建,及體驗go-zero框架,及解決command not found: goctl
