1. 程式人生 > >關於11月比特幣現金將新增CTOR事件

關於11月比特幣現金將新增CTOR事件

新的交易排序規則(“CTOR”)是2018年11月比特幣現金協議升級的計劃變更之一。 比特幣現金社群已就這一變化進行了相當多的討論。

我之前發表過一篇文章,簡單地解釋了這一變化是什麼。

雖然那篇文章讓一些讀者感到滿意並且說服他們認為CTOR並不危險,但其他人仍然表示懷疑,他們想知道這種改變是否必要。

許多人心中的問題是:“為什麼我們需要CTOR? 我們為什麼現在需要它? 還有其他殊路同歸的做法嗎?”

我想在這裡回答這些問題。

CTOR是全面技術路線圖的其中一環,旨在幫助比特幣現金成為全球的點對點電子現金。

更具體地說,CTOR最明顯的主要優點就是更快的區塊傳送,當然還有一些額外的好處。

遺憾的是,關於CTOR的許多技術討論都是在區塊驗證而不是區塊傳送,這給整個討論帶來了相當大的複雜性和混亂度。

梳理4種不同的交易排序方案

首先,讓我們通過研究比特幣現金交易排序的4種不同方式來開展分析。

1. TTOR - 拓撲交易排序規則

這是比特幣現金的當前共識規則。 交易有部分排序規則。 它們可以是任何順序,但必須強制執行將母交易排列在子交易之前的拓撲。

2. ATOR - 任何交易排序規則

此排序將取消當前的TTOR規則,允許任何交易順序。 這個想法已被討論認為是CTOR的替代方案和前身。

3. GTOR – 加文交易排序規則

這是由加文•安德烈森(Gavin Andresen)在2014年4月提出的。它本質上是一個規範的交易排序,但排序不是強制性的(非共識),它也保留了當前的TTOR規則。

4. CTOR -交易規範排序規則

這就是目前的提議。 “規範”是指僅允許排序的要求。 當前的提議也是“詞法”或“詞典”,意味著除了coinbase之外的區塊中的所有交易都按字典順序排序。 這在其它討論中也被稱為“LTOR”。

為簡便起見,本文此後將使用“CTOR”來指代當前提議(也恰好是LTOR),即使某一特定點更適用於詞彙屬性。

區塊傳送

讓我們從頭說起。2014年,加文(Gavin)提出了一種區塊傳送的新方法,他的想法之一就是在區塊中採用交易的規範排序。 他的“祕訣”是使用可逆布隆查詢表(IBLT)來傳達節點mempool中的交易集與對等交易集的差異。

這種思路也就是當前廣為人知的Graphene協議的起源。

Gavin最初的排序提議並不屬於當前任何一個BCH的實施提議,但是從歷史上來看,展示這個想法的起源是至關重要的。如今,對於CTOR來說,最明顯的應用是它有助於Graphene更好地工作。

用一種更直觀的方式來解釋一下為何獨特的排序有助於區塊傳送: 如果您只需要傳送缺失交易的資料而不是傳達區塊中交易順序的資訊,就可以節省頻寬。 因此,規範排序可以幫助其它區塊傳送方案,例如Xthin; 因此它的好處不僅僅是有助於Graphene。

在已發表的評論中,一名開發人員暗示CTOR對區塊傳送沒有好處,因為礦工可以選擇根據當前規則重新排序自己的交易。但是,該評論沒有解釋這種做法如何提高效率,評論只提供了一個論壇帖子的連結,帖子裡說“......其餘的交易完全可以自由重新排序。比如通過txid來實現......”

換句話說,避免規範排序就是為了礦工可以自由選擇規範排序?

如果只是為了選擇的自由,我們將在稍後討論。

同樣值得注意的是,發表該評論的人(Awemany)在曼谷礦工會議後改變了他對CTOR的看法……他強調,任何一個提出改變的方法都不值得讓比特幣分裂。

區塊驗證

CTOR的一個好處是可以簡化區塊驗證的並行處理。這是取消拓撲排序要求的結果。 但是,並行化不是唯一的好處; 即使在現有的拓撲排序方案下,您仍然可以並行化該過程。

關於區塊驗證的整個爭論其實有點轉移注意力(當然可能是無意的),因為區塊傳送是一個比區塊驗證更大的瓶頸。儘管如此,這可能有助於讀者瞭解關於這一話題的主要論點的來龍去脈。

最初的交鋒是這樣的:

CTOR批評者指出(至少在一個理想的實施方案中),節點可以在TTOR下更快地驗證交易,因為每個交易的依賴關係已經被處理。CTOR的支持者則指出,拓撲限制是一個需要驗證的額外負擔。(換句話說,你不能簡單地將區塊中的交易劃分為並行分割槽就算完成了。)

然後Jonathan Toomim釋出了一個演算法,顯示如何通過先處理輸出,再處理輸入(例如“OTI”),使用當前的拓撲排序來完成並行驗證。

OTI的方法在TTOR和CTOR中都可以應用。在TTOR的情況下,需要在第一個迴圈中生成每個交易的位置圖,並且第二個迴圈確保每個交易僅花費比其自身更舊的硬幣。這裡所需的多個迴圈使得在理想實施情況下實現的TTOR優勢變成一個有爭議的問題。

總而言之,TTOR和CTOR都可以並行化。初步測試顯示兩者效率大致相同。但重申一下,這並沒有太大相關性,因為CTOR顯然有助於區塊傳送,而這是一個更重要的瓶頸。

CTOR的其它優勢

CTOR還有其他一些優勢。它可以提升UTXO處理,因為順序插入可以更有效地使用UTXO快取的樹結構,並能擴充套件UTXO承諾的可能性。

SPV / Light錢包也可享受交易排除證明的微小優勢。CTOR還可以允許路由到分片,與merkle構造和驗證保持一致。

但最大的第二個好處是簡化了程式碼。如果允許任何一種交易順序會使程式碼更加複雜,因為要支援所有順序。相比之下,按照交易雜湊排序能夠讓區塊每次以相同的方式進行構造,讓測試變得更簡便。

TTOR vs ATOR vs CTOR

圍繞驗證問題的一些論據並非針對CTOR; 他們更是與TTOR與ATOR相關的問題。 換句話說,我們應該保留拓撲排序要求還是取消它?

一些專家指出,從根本上說,交易的順序沒有固有的價值。我對此的理解是:雖然拓撲順序可以處理依賴關係,但最初建立順序是有成本的。大多數開發人員並不反對消除TTOR。這甚至適用於nChain的主要開發人員。

此外,一旦廢除拓撲要求,採用規範排序也只是一個相對較小的變化。這也是CTOR提議的原則之一。在ABC實施中,在ATOR之上新增CTOR只需要增加20行程式碼而已。

關於“中央計劃”的異議

對CTOR的一個反對意見(雖然並不成立)是礦工應該可以自由地採用自己的順序- 他們應該自由地“競爭”以獲得構建區塊的最佳方式,如果強制他們採用某種順序無異於“中央計劃”。

我堅定支援各種形式的自由市場。然而,礦工應該在交易排序上競爭的想法與在交易方式、ECDSA曲線引數或任何數量的協議細節競爭一樣,都沒有任何意義。

協議的某些部分只是基礎設施的“管道”。 它甚至可能對系統起反作用,因為所有節點都必須支援低效的排序方案

關於“優化第一”的異議

某些開發人員(特別是Tom Zander)表示希望繼續使用當前的拓撲排序來優化程式碼。他們不想升級或修改交易順序,認為應該探索並窮盡現有方案的可能性。

協議開發不應因為某個開發人員希望繼續在某個路線進行探索而停滯不前。

雖然在當前協議限制內進行優化是一種可能的辦法,但它不一定是最好的方法。我們終將選擇一條獨特的路徑,即使這意味著放棄其他路徑。

更重要的是,這種方法優先考慮優化而不是選擇正確的資料結構,這與計算機程式設計中的最佳實踐背道而馳。

發展路線圖

比特幣ABC釋出了一個技術路線圖,詳細說明了我們如何改進協議並實現比特幣現金更好的擴容性、可用性和可擴充套件性的目標。這是我們未來全面、務實計劃的最佳範例。CTOR在該路線圖當中是很小但重要的組成部分。

雖然比特幣現金社群比比特幣ABC大得多,但應該注意的是,ABC路線圖可以與2017年11月倫敦小組會議後釋出的各小組路線圖內容進行相容。事實上,在2017年12月nChain的路線圖中也出現了完全相同的規範順序提議.

一個綜合的方法也許是最佳方案

CTOR不應被作為獨立的協議變更進行評估,而應作為比特幣ABC引領的精心策劃的技術方法的一個組成部分。

比特幣現金協議擴容的方法不止一種,但採用一種“綜合的”、符合邏輯的方法,而不是基於孤立變化和“黑客”修復的方法會更有意義。

例如,我們可以使用GTOR來獲得規範排序的一些益處,但在graphene區塊重建期間這會需要拓撲排序,這會更加複雜。

我們也可以使用當前的拓撲排序實現OTI演算法來處理並行驗證,但如果CTOR本身就能實現,而且能提供切實的好處並且簡化程式碼,我們又何必採用零散的方法呢?

CTOR是一個安全且經過驗證的協議變更嗎?

正如“ELI5文章”中所解釋的那樣,不同的交易順序並不代表徹底的改變。

雖然更多測試和對標會很好,但在開始進一步開發開始之前,必須要有正確的資料結構。對於某些群體來說,如果花幾個月的時間做協議變更,卻不能保證以後還能繼續存在,這本身是不現實的。

大多數協議更改都存在風險/回報的權衡。我曾看到一個錯誤的評論,說在部署之前應該在testnet上做3 - 5年的測試驗證。 但是,如果為了降低風險而謹慎過頭,這不一定是一種穩健的做法。

我們正在與支付解決方案的競爭對手進行PK,包括傳統和其他加密貨幣,以及與我們自己PK,以便在區塊獎勵減半之前增加交易量。我們需要一些深思熟慮的風險權衡,但與此同時也存在停滯的風險。

CTOR已經在路線圖上存在已經將近一年,並且已經進行了多年的討論。

作為現有系統的挑戰者,我們必須提高一個數量級。我們必須儘早建立擴容性的技術基礎,以便企業和應用程式有信心選擇比特幣現金作為平臺。

最後,我們從BCH壓力測試收集到的資料中發現了確鑿證據,證明graphene將從CTOR中獲益匪淺。