對CTOR的技術(shù)性解析 by r/btc

聯(lián)合譯者:Wendy, Lise

今天給大家?guī)淼囊廊皇且黄夹g(shù)流的文章财著,該文章是由r/btc在2018年9月9日發(fā)表的,英文原文題目為:《A Technical Dive into CTOR》抓狭。

對CTOR的技術(shù)性解析

在過去幾天里,我一直在深入探究CTOR的各個方面造烁,其針對11月硬分叉所做的調(diào)整可謂聲名狼藉。在這篇文章里午笛,我要對CTOR的基本特質(zhì)惭蟋、代碼形態(tài)、工作性能药磺、算法以及前景進行具體的闡述告组。如果有人覺得CTOR的調(diào)整神秘且含糊不清,希望這篇文章能夠為他們答疑解惑癌佩。

TTOR木缝、CTORAOR分別是什么?

目前BCH區(qū)塊的交易排序方式有多種可能围辙。這其中交易拓撲排序規(guī)則(TTOR)指的是:對于有局部排序需求的交易必須依照因果關系進行排序我碟,即如果一筆交易的支出(input)采用了另一筆交易的輸出值(output),那么這筆交易在區(qū)塊里排序時必須在那一筆交易之后姚建,在數(shù)學上這種排序被描述為區(qū)塊內(nèi)交易圖的拓撲排序矫俺。

然而,將于2018年11月進行的BCH硬分叉計劃將排序規(guī)則變更為交易規(guī)范排序規(guī)則(CTOR)掸冤,將對區(qū)塊內(nèi)一的交易集合厘托,有效排序只有一種(因而稱之為“規(guī)范”),未來任何偏離這一排序規(guī)則的區(qū)塊將被視為無效稿湿。這一被加入到11月的硬分叉的升級功能铅匹,其實質(zhì)是基于交易ID的一種字符排序(按字符順序)。需要注意的是所有的交易均按交易ID的順序排列饺藤,除了幣基交易(coinbase),它必須始終排在最前面包斑。交易規(guī)范排序規(guī)則的精確描述是“幣基交易優(yōu)先流礁,然后根據(jù)交易ID進行升序排列”。

還有一種排規(guī)則被稱為任意排序規(guī)則(AOR)舰始,它則完全取消了對于交易排序的限制(除了幣基交易依然必須在最前)崇棠。雖然尚未有人嚴肅地提出AOR提案,但這個規(guī)則在我們下面的談論中這一排序規(guī)則很重要丸卷。

兩個變化:取消舊有排序(TTOR->AOR)枕稀,安裝新的排序(AOR->CTOR)。

預定于11月的升級將上述兩個變化結(jié)合到一個步驟:

1.????取消舊有的因果規(guī)則:現(xiàn)在支出交易可以排在同一區(qū)塊其使用的輸出數(shù)據(jù)前面谜嫉。

2.????增加修正區(qū)塊中所有交易排序的新規(guī)則萎坷。

在本文當中我將這兩個步驟(TTOR->AOR, AOR->CTOR)區(qū)分開來,因為我覺著這有助于闡明各個元素受到硬分叉調(diào)整的影響沐兰。

Bitcoin ABC的代碼調(diào)整

BitcoinABC對從0.17.1版本升級的0.18.1版本(目前正在編寫的版本)改變了幾千條線的代碼哆档,其差別可以通過github查閱,這些調(diào)整絕大部分看似各種代碼重構(gòu)住闯、代碼風格變化等等瓜浸,通過搜索”MagneticAnomaly",可以找到11月硬分叉時將會激活的相應代碼比原,變量magneticanomalyactivationtime?設定了新規(guī)將要激活的時間插佛。

在文件?src/validation.cpp中可以找到交易排序相關的主要調(diào)整:

·???????功能ConnectBlock?以前有一個回路,能夠依次處理每筆交易量窘,刪除已達成交易的輸出數(shù)據(jù)雇寇,加入新交易輸出數(shù)據(jù),該功能僅與TTOR兼容蚌铜。從11月開始锨侯,它將采用雙回路OTI算法(如下),新構(gòu)造并無排序需求冬殃。

·???????功能ApplyBlockUndo用于撤銷孤立塊囚痴,將被調(diào)整為適應任何排序。

·???????功能ContextualCheckBlock將包含直接檢查分類排序(僅有幾行代碼執(zhí)行CTOR)

此外還有其他調(diào)整:

·???????針對挖礦(src/mining.cpp)造壮,?CreateNewBlock將根據(jù)CTOR開始對交易進行分類渡讼。

·???????當孤立一個區(qū)塊時,交易將通過使用addForBlock返回內(nèi)存池耳璧,現(xiàn)在該功能適用于任何排序(src/txmempool.cpp)成箫。

算法

串行塊處理(一個線程)

確認區(qū)塊的最重要步驟之一是更新未使用交易輸出(UTXO)集合,在這一過程當中如果探測到UTXO的雙重支付旨枯,則宣告其無效蹬昌。

比特幣處理區(qū)塊的標準方式是在交易當中一個接一個地循環(huán),刪除已用輸出數(shù)據(jù)攀隔,然后加入新的輸出數(shù)據(jù)皂贩。這種簡單粗暴的方式需要精準的拓撲排序栖榨,否則就會失敗(因此它自動校驗了TTOR)明刷。在偽代碼當中:

for tx intransactions:

??? remove_utxos(tx.inputs)

??? add_utxos(tx.outputs)

值得注意的是婴栽,現(xiàn)代的實施方式不會馬上應用這些調(diào)整,而是將增添/刪除存進一個認可用量辈末。在校驗完成后愚争,該認可用量適用于批次UTXO數(shù)據(jù)庫。

通過將它分成兩個回路挤聘,以不在意排序的方式更新UTXO集合成為可能轰枝,這被稱為輸出-然后-輸入(OTI)算法。

for tx in transactions:

???add_utxos(tx.outputs)

for tx in transactions:

???remove_utxos(tx.inputs)

Bitcoin ABC的Jonathan Toomim和ElectrumX的我本人制定的標準表明组去,OTI的兩個回路性能代償(相對于一個回路版本)微不足道鞍陨。

并行塊處理

UTXO更新實際形成一個區(qū)塊處理所需的重要時間片段薯蝎,如果能將它們并行將大有助益肤频。

有一些區(qū)塊校驗并行算法要求擬拓撲排序來正確行使功能饼齿。例如尉共,一開始多個工作人員可以處理上述的標準回路,如果UTXO尚不存在钦扭,一位工作人員就要暫停兔乞,因為可能另一位工作人員將很快生成那個UTXO传透。

這類對排序敏感的并行塊處理算法存在如下問題:

·???????由于TTOR將成為共識規(guī)則艾杏,并行校驗算法也必須在尊重TTOR的基礎上進行驗證。以上所述看似天真的方法實際能夠勝任一些非拓撲排序盅藻,因此為了實行TTOR,需要增添額外的檢驗购桑。

·???????最壞情況下的表現(xiàn)是依次僅一個線程激活,要考慮下區(qū)塊是一個由相互依賴交易組成的長鏈的情況氏淑。

比較而言勃蜘,OTI算法回路是完全可并行的:工作線程可以以任意排序獨立運行,并碰觸交易假残。直到最近缭贡,OTI才被認為無法校驗TTOR,因此撤銷TTOR?的一個理由就是允許調(diào)整為并行OTI辉懒。然而事實證明這并不是真的:Jonathan Toomim已表示阳惹,通過在區(qū)塊內(nèi)記錄新的UTXO索引,然后在撤銷階段比較索引眶俩,TTOR的實施可以輕而易舉地實現(xiàn)莹汤。

無論如何,對我而言任何并行校驗算法都需要這類額外代碼颠印,來確認TTOR的規(guī)則獲得切實遵守纲岭,因此對于并行校驗TTOR?最多算個障礙抹竹。

先進并行技術(shù)

隨著BCH區(qū)塊規(guī)模擴容到一定程度,或許有一天需要升級到包含分片技術(shù)的先進服務器結(jié)構(gòu)止潮,對這種可能性的討論已經(jīng)有很多窃判,但開始為分片進行優(yōu)化還確實尚早,在這種規(guī)模下喇闸,TTOR會沒有幫助袄琳,CTOR能否實現(xiàn)性能優(yōu)化還很難說。

區(qū)塊傳播繁殖(石墨烯)

現(xiàn)在BCH面臨的主要瓶頸是區(qū)塊傳播繁殖仅偎。在壓力測試期間跨蟹,值得注意的是最大區(qū)塊(~20 MB)要耗時數(shù)分鐘在網(wǎng)絡傳播繁殖。由于傳播延遲意味著孤立率升高橘沥,從而令挖礦的經(jīng)濟和激勵機制惡化窗轩,這一點頗令人擔憂。

?“石墨烯”是采用布隆過濾器和可逆布隆查閱數(shù)據(jù)表的一套對賬技術(shù)座咆,它徹底降低了傳輸區(qū)塊所需的帶寬數(shù)量痢艺。不幸的是,核心石墨烯機制并不提供排序信息介陶,因此如果很多排序成為可能堤舒,那么排序信息就需要增添上去。對于大型區(qū)塊而言哺呜,這種排序信息構(gòu)成了石墨烯信息的主體舌缤。

為了縮小排序信息的大小,同時保持TTOR排序某残,礦工們可選擇性決定按照規(guī)范排序(例如Gavin's order)排列交易国撵,并且石墨烯協(xié)議可以是硬編碼,以便這種特殊排序以一個字節(jié)傳輸玻墅,這可能為挖礦軟件(以這種特別不尋常的排序生成區(qū)塊)及石墨烯(必須檢測這一排序介牙,并能夠?qū)⑵渲亟ǎ┰鎏矸敝氐募夹g(shù)負擔。我尚不清楚是否可能有效地將重建這些排序的分類算法并行化澳厢。

采用CTOR可以輕而易舉解決這一切:因為只有一種排序环础,不需要額外增添排序信息,通過并行化優(yōu)于拓撲分類的比較分類恢復排序剩拢,應該也能簡化石墨烯幣基线得,也不再需要開始考慮支持各種可選排序編碼。

可逆性和技術(shù)負債

調(diào)整為CTOR是不是以后也會不了了之徐伐?一切皆有可能框都。

對于檢驗年代久遠區(qū)塊的區(qū)塊驗證器/資源管理器而言,撤銷TTOR將永久取消標準串行處理算法的使用,這其實算不上問題(除了一時的不適)魏保,因為OTI看起來在串行中同并行一樣有效熬尺。

對于涉及處理新區(qū)塊的相關方(如石墨烯、網(wǎng)絡協(xié)議谓罗、挖礦區(qū)塊構(gòu)建器粱哼、新區(qū)塊校驗),以后改變排序不是問題(改成AOR/TTOR檩咱,或再度恢復成CTOR或其他)揭措。這些變化不會增添長期技術(shù)負債,因為它們僅牽涉新區(qū)塊刻蚯。對于過去的區(qū)塊校驗绊含,它可以追溯性宣布舊的區(qū)塊(時間超過幾個月)沒有排序需求。

總結(jié)和前景

·???????由于其他區(qū)塊處理軟件需要進行相應的升級炊汹,以處理按任何排序進來的交易躬充,撤銷TTOR是升級中最具破壞性的部分。但這些調(diào)整非常微小讨便,它們可以自然而然地將軟件轉(zhuǎn)化成并行可以輕而易舉引入的形式充甚。

·??????TTOR/ CTOR近期對于區(qū)塊校驗不會顯現(xiàn)明顯的性能差異。現(xiàn)在明確了這一點霸褒,區(qū)塊校驗不會成為BCH的限制因素伴找。

·???????中期來看,軟件切換為并行區(qū)塊處理可能會更希望采用任意排序算法(例如OTI)废菱。盡管在并行校驗中要實行排序規(guī)則需要一些額外代碼技矮,TTOR / AOR / CTOR三者仍不存在性能差異。

·???????從極其長遠來看殊轴,CTOR 對于配備分片UTXO數(shù)據(jù)庫的全節(jié)點而言展現(xiàn)出優(yōu)勢穆役,如果有必要的話∈崃荩總之,關心這個問題還為時過早梳杏。

·??????隨著TTOR 撤銷韧拒,進一步加入CTOR實際是微乎其微的變化。它并不需要升級任何其他生態(tài)系統(tǒng)軟件(它們并不在意排序)十性。不僅如此叛溢,我們不必非要接受CTOR:未來如果需要,排序可以輕而易舉再度改變劲适。

·??????CTOR近期的基本改進會允許石墨烯協(xié)議簡單楷掉、快速地實施,這將對當前重要的擴容瓶頸-區(qū)塊傳播繁殖造成影響霞势。通過避開復雜自發(fā)性排序方案的話題烹植,讓石墨烯開發(fā)人員不再擔心如何為排序編碼斑鸦,把精力集中在為設定對賬優(yōu)化機制。

廣義上講草雕,石墨烯并非網(wǎng)絡傳播的靈丹妙藥巷屿。即便是經(jīng)過CTOR改良后的石墨烯,性能也不會馬上獲得重大提升墩虹。網(wǎng)絡層也有工作要做嘱巾,以便能實現(xiàn)節(jié)點間信息的快速傳播。在最近的壓力測試中诫钓,我們也看到了內(nèi)存池性能(交易接受和分程傳遞)的局限旬昭。我希望能在下次壓力測試之前看到這些方面獲得優(yōu)化,以便新的瓶頸能夠顯現(xiàn)菌湃。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末问拘,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子慢味,更是在濱河造成了極大的恐慌场梆,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纯路,死亡現(xiàn)場離奇詭異或油,居然都是意外死亡,警方通過查閱死者的電腦和手機驰唬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進店門顶岸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人叫编,你說我怎么就攤上這事辖佣。” “怎么了搓逾?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵卷谈,是天一觀的道長。 經(jīng)常有香客問我霞篡,道長世蔗,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任朗兵,我火速辦了婚禮污淋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘余掖。我一直安慰自己寸爆,他們只是感情好,可當我...
    茶點故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著赁豆,像睡著了一般仅醇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上歌憨,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天着憨,我揣著相機與錄音,去河邊找鬼务嫡。 笑死甲抖,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的心铃。 我是一名探鬼主播准谚,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼去扣!你這毒婦竟也來了柱衔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤愉棱,失蹤者是張志新(化名)和其女友劉穎唆铐,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體奔滑,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡艾岂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了朋其。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片王浴。...
    茶點故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖梅猿,靈堂內(nèi)的尸體忽然破棺而出氓辣,到底是詐尸還是另有隱情,我是刑警寧澤袱蚓,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布钞啸,位于F島的核電站,受9級特大地震影響喇潘,放射性物質(zhì)發(fā)生泄漏体斩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一响蓉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧哨毁,春花似錦枫甲、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽粱栖。三九已至,卻和暖如春脏毯,著一層夾襖步出監(jiān)牢的瞬間闹究,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工食店, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留渣淤,地道東北人。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓吉嫩,卻偏偏與公主長得像价认,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子自娩,可洞房花燭夜當晚...
    茶點故事閱讀 45,860評論 2 361

推薦閱讀更多精彩內(nèi)容