前言
本次調研對比了類似以太坊的實現系統,分析了交易并行執行的難點和可能性。鏈本身基于Account模型設計,而不是采用UTXO模型。調研對象
1.國內的眾多聯盟鏈,如FISCO-BCOS,支持并行執行block內部的交易驗證。2.Khipu,公鏈項目,以太坊協議的scala實現。3.Aptos,公鏈項目,Move虛擬機。交易并行執行的難點
我們先來回顧一下傳統的交易執行過程:執行模塊從區塊中取出一個個交易,然后依次去執行。執行的過程中會修改最新的世界狀態,一筆交易執行完成后進行狀態累加,到達區塊完成后的最新的世界狀態。下一區塊的的執行時又嚴格依賴上一個區塊執行后的世界狀態,所以傳統的交易線性執行過程無法很好的進行并行執行優化。
目前在以太坊的并行方案中,主要存在以下幾點沖突:1.賬戶沖突。如果兩個線程同時對一個地址賬號的余額或者其他屬性進行處理,能否跟順序處理的結果保持一致,也就是世界狀態是否是一個確定的有限狀態機。2.同一個地址Storage存儲沖突。兩個合約變量都對同一個全局變量進行了存儲修改。3.跨合約調用沖突。本來合約Ar先部署,合約B需要等到合約A部署完成之后,去調用合約A,但是當交易并行之后,并沒有這種先后順序,這就存在著沖突。交易并行方案對比
FISCO-BCOS
概述
FISCO-BCOS2.0在處理交易的過程中運用了圖結構,設計了一種基于DAG模型的并行交易執行器。PTE能充分發揮多核處理器優勢,使區塊中的交易能夠盡可能并行執行。同時對用戶提供簡單友好的編程接口,使用戶不必關心繁瑣的并行實現細節。基準測試程序的實驗結果表明,相較于傳統的串行交易執行方案,理想狀況下4核處理器上運行的PTE能夠實現約200%~300%的性能提升,且計算方面的提升跟核數成正比,核數越多性能越高。方案細節
一個無環的有向圖被稱為有向無環圖。在一批交易中,可以通過一定的方式識別出各個交易占用的互斥資源,再根據交易在Block中的順序以及互斥資源的占用關系構造出一個交易依賴的DAG圖。如下圖所示,凡是入度為0的交易均可以并行執行。基于左圖的原始交易列表的順序進行拓撲排序后,可以得到右圖的交易DAG。
模塊架構
Beosin:Polygon鏈上Atlantis Loans協議再度發起惡意提案:金色財經報道,區塊鏈安全審計公司Beosin旗下Beosin EagleEye安全風險監控、預警與阻斷平臺監測顯示,Polygon鏈上Atlantis Loans協議再度發起惡意提案,提案ID:18。事前2023年6月11日Atlantis Loans協議曾經因惡意提案篡改管理合約權限,替換后門合約,導致協議損失250W美元。Beosin提醒相關用戶盡快移除相關授權,防止資產損失。[2023/7/14 10:55:03]
?用戶直接或間接通過SDK發起交易。?隨后交易在節點間同步,擁有打包權的節點調用打包器從中取出一定量交易并將其打包成一個區塊。此后,區塊被發送至共識單元準備進行節點間共識。?達成共識前需要執行交易驗證,此處便是PTE工作的開始。從架構圖中可以看到,PTE首先按序讀取區塊中的交易,并輸入到DAG構造器中。DAG構造器會根據每筆交易的依賴項,構造出一個包含所有交易的交易DAG,PTE隨后喚醒工作線程池,使用多個線程并行執行交易DAG。匯合器負責掛起主線程,直到工作線程池中所有線程將DAG執行完畢。此時Joiner負責根據各個交易對狀態的修改記錄計算stateroot及receiptroot,并將執行結果返回至上層調用者。?區塊驗證通過后,區塊上鏈。在交易執行完成后,若各個節點狀態一致,則達成共識。區塊隨即寫入底層存儲,被永久記錄于區塊鏈上。交易DAG構造流程
1.從打包好的區塊中取出區塊的所有交易。2.將交易數量作為最大頂點數量初始化一個DAG實例。3.按序讀出所有交易。如果一筆交易是可并行交易,則解析其沖突域,并檢查是否有之前的交易與該交易沖突。若存在沖突,則在相應交易間構造依賴邊。若該交易不可并行,則認為其必須在前序的所有交易都執行完后才能執行,因此在該交易與其所有前序交易間建立一條依賴邊。備注:都建立依賴邊之后則無法并行,只能順序執行。
DAG執行流程1.主線程會首先根據硬件核數初始化一個相應大小的線程組,若獲取硬件核數失敗,則不創建其他線程.2.當DAG尚未執行完畢時,線程循環等待從DAG的waitPop方法以取出入度為0的就緒交易。若成功取出待執行的交易,則執行該交易,執行后將后續的依賴任務的入度減1。若有交易入度被減至0,則將該交易加入topLevel中。若失敗,則表示DAG已經執行完畢,線程退出。問題與解決方法
Circle Singapore獲新加坡金融監管局頒發的主要支付機構牌照:6月7日消息,美元穩定幣 USDC 發行方 Circle 宣布,旗下 Circle Singapore 已獲得了新加坡金融監管局批準的主要支付機構 (MPI)牌照,現在該機構可以在新加坡提供數字支付代幣服務以及跨境和國內匯款服務。
Circle Singapore 于 2023 年 5 月正式開設了辦事處,2022 年 11 月 Circle Singapore 獲得 MAS 的主要支付機構執照持有人原則性批準。[2023/6/7 21:21:36]
1.對于同一個區塊,如何確保所有的節點執行完成,狀態一致?FISCOBCOS采用驗證stateroot、transactionroot和receiptroot三元組是否相等的方式來判斷狀態是否達成一致。transactionroot是根據區塊內的所有交易計算出的一個哈希值,只要所有共識節點處理的區塊數據相同,transactionroot必定相同。由于這一點比較容易保證,因此重點在于如何保證交易執行后生成的state和receiptroot相同。眾所周知,對于在不同CPU核心上并行執行的指令,指令間的執行順序無法提前預測。并行執行的交易也存在同樣的情況。在傳統的交易執行方案中,每執行一筆交易,stateroot便發生一次變遷,同時將變遷后的stateroot寫入交易回執中。所有交易執行完后,最終的stateroot就代表了當前區塊鏈的狀態,同時再根據所有交易回執計算出一個receiptroot。可以看出,在傳統的執行方案中,stateroot扮演著一個類似全局共享變量的角色。當交易被并行且亂序執行后,傳統計算stateroot的方式顯然不再適用。這是因為在不同的機器上,交易的執行順序一般不同,此時無法保證最后的stateroot的一致性。同理,receiptroot的一致性也無法得到保證。在FISCOBCOS中,先并行執行交易,將每筆交易對狀態的改變歷史記錄下來,待所有交易執行完后,再根據這些歷史記錄綜合計算出一個stateroot。由此就可以保證即使并行執行交易,最后共識節點仍然能夠達成一致。2.如何判定兩筆交易是否有依賴?若兩筆交易本來無依賴關系但被判定為有,則會導致不必要的性能損失;反之,如果這兩筆交易會改寫同一個賬戶的狀態卻被并行執行了,則該賬戶最后的狀態可能是不確定的。因此,依賴關系的判定是影響性能甚至能決定區塊鏈能否正常工作的重要問題。在簡單的轉賬交易中,我們可以根據轉賬的發送者和接受者的地址來判斷兩筆交易是否有依賴關系。以如下3筆轉賬交易為例:A→B,C→D,D→E。可以很容易看出,交易D→E依賴于交易C→D的結果,但是交易A→B和其他兩筆交易沒有聯系,因此可以并行執行。這種分析在只支持簡單轉賬的區塊鏈中是正確的。但因為我們無法準確知道用戶編寫的轉賬合約中到底有什么操作,這種分析一旦放到圖靈完備、運行智能合約的區塊鏈中,則不夠準確。可能出現的情況是:A→B的交易看似與C、D的賬戶狀態無關,但是在用戶的底層實現中,A是特殊賬戶,通過A賬戶每轉出每一筆錢必須要先從C賬戶中扣除一定手續費。在這種場景下,3筆交易均有關聯,則它們之間無法使用并行的方式執行。若還按照先前的依賴分析方法對交易進行劃分,則必定會出現問題。那么我們能否做到根據用戶的合約內容自動推導出交易中實際存在哪些依賴項?答案是否定的。正如靜態分析中提到的,我們很難分析出合約依賴項以及執行過程。FISCOBCOS將交易依賴關系的指定工作交給更熟悉合約內容的開發者。具體來講,交易依賴的互斥資源可以由一組字符串表示。FISCOBCOS暴露接口給到開發者,開發者以字符串形式定義交易依賴的資源,告知鏈上執行器,執行器則根據開發者指定的交易依賴項自動將區塊中的所有交易排列為交易DAG。比如在簡單轉賬合約中,開發者僅需指定每筆轉賬交易的依賴項是{發送者地址+接收者地址}。進一步講,假如開發者在轉賬邏輯中引入了另一個第三方地址,那么依賴項就需要定義為{發送者地址+接受者地址+第三方地址}。這種方式實現起來較為直觀簡單,也比較通用,適用于所有智能合約,但也相應增加了開發者肩上的責任。開發者在指定交易依賴項時必須十分小心,如果依賴項沒有寫正確,后果將無法預料。并行框架合約
Singularity Future Technology與Golden Mainland投資約 2.5 億美元建設比特幣礦場:金色財經報道,在納斯達克上市的區塊鏈技術公司 Singularity Future Technology周一表示,它已與電力服務提供商 Golden Mainland Inc 成立一家合資企業,以在美國建造比特幣采礦設施。在合資企業中,兩家公司將建設總容量為 1 GW的比特幣礦場。根據新聞稿,合資公司計劃投資約 2.5 億美元,在德克薩斯州、俄亥俄州和其他地區建設礦場。
兩家公司將建設總計 1GW 的礦場,可容納多達 300,000 臺比特幣礦機,每臺礦機的能耗為 3,400 瓦/小時。Singularity Future Technology?將在合資企業中占51%的主要股份,Golden Mainland 占49%。此外,Singularity 計劃出資近 1000 萬美元以繼續運營。[2022/4/12 14:18:50]
FISCOBCOS為了開發者能夠使用并行合約這一套框架設定了一些合約編寫的規范,細節如下:并行互斥兩筆交易是否能被并行執行,依賴于這兩筆交易是否存在互斥。互斥是指兩筆交易各自操作合約存儲變量的集合存在交集。例如,在轉賬場景中,交易是用戶間的轉賬操作。用transfer(X,Y)表示從X用戶轉到Y用戶的轉賬接口,則互斥情況如下:
?互斥參數:合約接口中,與合約存儲變量的“讀/寫”操作相關的參數。例如轉賬接口為transfer(X,Y),X和Y都是互斥參數。?互斥對象:一筆交易中,根據互斥參數提取出來的、具體的互斥內容。例如轉賬接口為transfer(X,Y),一筆調用此接口的交易中,具體的參數是transfer(A,B),則這筆操作的互斥對象是;另外一筆交易調用的參數是transfer(A,C),則這筆操作的互斥對象是。判斷同一時刻兩筆交易是否能并行執行,就是判斷兩筆交易的互斥對象是否有交集。相互之間交集為空的交易可并行執行。FISCO-BCOS提供了兩種編寫并行合約的方式,一種是solidity合約,另一種是預編譯合約。這里只介紹solidity合約,預編譯合約同理。solidity合約并行框架編寫并行的solidity合約時,在基礎上只需要將ParallelContract.sol作為需要并行的合約的基類,并調用registerParallelFunction()方法,注冊可以并行的接口即可。parallelContract代碼如下:
Sino Global Capital CEO:中國的DCEP將以美元為目標 而不是比特幣:Sino Global Capital首席執行官Matthew Graham表示,隨著即將推出的央行數字貨幣(DCEP),中國的目標將是與美元競爭,而不是比特幣。此外,他認為,DCEP與比特幣等公共區塊鏈相去甚遠。Graham強調,“如果你從加密或區塊鏈框架來接近DCEP,我認為你真的很難理解它是什么,以及它為什么如此重要。DCEP可以實時收集貨幣鑄造、記賬等相關數據,為貨幣的提供和貨幣政策的實施提供有用的參考。就貨幣政策而言,DCEP可能對實施負利率非常有用。”(Cointelegraph)[2020/7/6]
以下是基于并行框架合約進行編寫的轉賬合約:
確定接口是否可并行可并行的合約接口,必須滿足:?無調用外部合約。?無調用其它函數接口。確定互斥參數在編寫接口前,需要先確定接口的互斥參數,接口的互斥即是對全局變量的互斥。互斥參數的確定規則為:?接口訪問了全局mapping,mapping的key是互斥參數。?接口訪問了全局數組,數組的下標是互斥參數。?接口訪問了簡單類型的全局變量,所有簡單類型的全局變量共用一個互斥參數,用不同的變量名作為互斥對象。例如:合約里有多個簡單類型的全局變量,不同接口訪問了不同的全局變量。如需將不同接口并行,則需要在修改了全局變量的接口參數中定義一個互斥參數,調用時指明使用了哪個全局變量。在調用時,主動給互斥參數傳遞相應修改的全局變量的“變量名”,用以標明此筆交易的互斥對象。如:setA(intx)函數中修改了全局參數globalA,則需要將setA函數定義為set(stringaflag,intx),在調用時,傳入setA("globalA",10),用變量名“globalA”來指明此交易的互斥對象是globalA。確定互斥參數后,根據規則確定參數類型和順序,規則為:確定參數類型和順序-接口參數僅限:string、address、uint256、int256。-互斥參數必須全部出現在接口參數中。-所有互斥參數排列在接口參數的最前。可以看出,FISCO-BCOS交易并行其實很大程度依賴用戶編寫合約的規范。如果用戶編寫合約不規范,系統貿然的進行了并行執行,則有可能會造成賬本root不一致的問題。Khipu
概述
與FISCO-BCOS的觀點不同,Khipu認為讓用戶在編寫合約的時候識別和標明會發生靜態沖突的地址范圍并且不出錯是不現實的。競態是否會出現、在何處出現、在什么條件下會出現,只有當確定性獲取涉及到當前狀態后才可以做判斷。以目前的合約編程語言而言,幾乎不可能通過對代碼進行靜態分析來獲取完全無誤并且沒有遺漏的結果。Khipu針對這方面做了比較全面的嘗試,并且完成了工程實現。方案細節
Sino Global Capital宣布對FTX進行B輪投資:2020年3月2日,總部位于北京的Sino Global Capital的投資機構Liquid Value宣布對香港的加密貨幣衍生品交易所FTX進行B輪投資。[2020/3/2]
在Khipu的實現方案中,同一個區塊里面的每條交易都從前一個區塊的世界狀態開始,然后并行執行,在執行過程中記錄下所有的理想經歷路徑上遇到的以上三種競態。在并行執行階段結束后,轉入合并階段。合并階段開始逐條合并并行的世界狀態,每合并一條交易時,先從記錄下來的靜態條件中判斷是否已經與前面已經合并的競態條件有沖突。如果沒有,直接合并。如果有,則將這條交易以之前已經合并的世界狀態為起點再執行一次。最后合并的世界狀態將用區塊的哈希做最后的校驗。這是最后的一道防線,如果校驗有誤,則放棄前面的并行方案,將區塊內的交易重新串行執行。并行度指標
Khipu在這里引入了一個并行度指標,即一個區塊內能夠不需要再次執行就可以直接合并結果的交易比例。Khipu通過對以太坊從創世區塊到最新的區塊進行幾天的重放觀測發現,這個比例平均可以達到80%。總體而言,如果計算任務可以被完全并行化,單鏈的可擴展性就會是無限的,因為總是可以往一個節點里添加更多的CPU核心數量。若事實并非如此,則最大的理論速率就受限于安達爾定理:你能給系統進行提速的極限取決于那些不能進行并行化的部分的倒數。也就是說,如果你可以進行99%的并行化,那么你就可以提速到100倍。但如果你只能實現95%的并行化,那么你就只能提速到20倍。沖突標記在以太坊所有的交易重放下來看,大概有80%的交易是可以并行化的,有20%不能并行化,所以Khipu對以太坊提速的平均效率是5倍左右。通過對evm代碼指令的解讀可以發現,沖突的地方是一些有限的指令對于stroage產生了讀寫過程,因此可以通過記錄這些讀寫的地方形成一個讀寫集合。僅僅利用靜態的代碼分析無法確保這些過程都被記錄,所以需要在處理每個區塊里面的交易時對每一筆交易并行的預執行一次。通過預執行過程,可以得知這些交易是否是對同一個account或者storage進行讀寫,然后對每筆交易產生一個readSet和writeSet。簡言之,預執行的過程就是首先將世界狀態拷貝多份作為所有交易的初始狀態。假設區塊鏈里面存在100個交易,那么這100多交易就可以通過線程池并行執行。每個合約都有同樣的初始世界狀態,執行過程中會也會產生100個readSet和writeSet,同時也會各自產生100個新的狀態。預執行結束后,開始下一個階段的處理。理想狀態下,如果這100個readSet和writeSet沒有沖突,那么就可以直接進行合并,產生這個區塊里面所有交易執行完畢的最終世界狀態。但是交易往往不會如此理想化,所以正確的處理方式為:先取第一個交易執行后的狀態里面的readSet、writeSet,和第二個合約執行后的readSet、writeSet進行對比,看他們是否有對同一個賬戶或者storage進行讀寫。如果有,那就意味這兩筆交易存在沖突,則以第一個交易執行完成的狀態作為第二個交易的起始狀態,將交易二重新執行一遍。以此類推,隨著不斷進行合并狀態機,沖突集也會不斷地累加。只要后面的交易與前面的交易存在沖突就順序執行,直到執行完所有的交易。通過對以太坊主網的交易重放可以發現,凡是沖突多的地方,大部分是交易所在同一個區塊進行的有互相關聯的交易,這也是與該過程相符合的。
處理流程圖
具體并行執行過程
Aptos
概述
Aptos在Diem的Move語言和MoveVM的基礎上創建了一個高吞吐量的鏈,實現了并行執行。Aptos的方法是檢測關聯關系,同時對用戶/開發者透明。也就是說,不要求交易明確聲明它們使用哪一部分狀態。方案細節
Aptos使用名為Block-STM的軟件交易內存(SoftwaretransactionMemory)的修改版本,基于Block-STM論文實現了并行執行引擎。Block-STM使用MVCC來避免寫-寫沖突。所有到相同位置的寫入都與它們的版本一起存儲,這些版本包含它們的tx-id和寫入tx被重新執行的次數。當交易tx讀取某一個內存位置的值時,它從MVCC中獲得在tx之前出現的寫入該位置的值,以及關聯的版本,從而判斷是否有讀寫沖突。在Block-STM中,交易在區塊內是預先排序的,并在執行期間在處理器線程之間劃分以并行執行。在并行執行中,假設沒有依賴關系執行交易,被交易修改的內存位置被記錄下來。執行后,驗證所有交易結果。在驗證期間,如果發現一個交易訪問了由先前交易修改的內存位置,則該交易無效。刷新交易的結果,重新執行交易。重復該過程,直到區塊中的所有交易都被執行。當使用多個處理器內核時,Block-STM會加快執行速度。加速取決于交易之間的相互依賴程度。可以看到,Aptos采用的方案和前文提到的Khipu大致類似,但是實現細節略有不同。主要區別如下:?Khipu對區塊內交易采用并行執行,順序驗證的方式,而Aptos對區塊內的交易采用并行執行,并行驗證的方式。這兩種方案各有優缺點。Khipu的方案易實現,效率略低。Aptos的Block-STM實現采用了諸多線程中的同步與信號操作,難以進行代碼實現,但效率較高。?由于Move原生支持全局資源尋址,所以在利于并行執行的情況下,Aptos會對交易進行重新排序,甚至是跨區塊進行排序。官方宣稱這個方案既可以提高并行的效率,也可以解決MEV問題,但是這樣是否會影響用戶體驗則有待考慮。?Aptos在執行過程中會將執行得到的寫集存儲在內存中以獲得最大的執行速度,并將其用作要執行的下一個塊的緩存,任何重復的寫入操作都只需要寫入穩定的存儲器一次。基準測試
Aptos針對Block-STM進行集成后做了相應的benchmark,將10k交易一個區塊在順序執行情況下與并行執行情況下的表現進行了對比,結果如下:
從上圖可以看到,BlockSTM在32個線程并行執行的情況下比使用程的順序執行實現了16倍的加速,而在高爭用情況下,Block-STM實現了超過8倍的加速。總結
綜上所述,一些方案需要用戶在編寫合約時按照既定的規則寫存儲,這樣才能夠被靜態和動態分析發現依賴關系。Solana和Sui采用了類似的方案,只是用戶感知度不同。這類方案本質上都是對于存儲模型的更改以獲得更好地分析結果。Khipu和Aptos的方案屬于用戶無感知的。即用戶無需謹慎編寫合約,虛擬機會在執行前進行動態分析依賴關系,從而將沒有依賴關系的并行執行。這類方案實現難度較大,而且并行度在一定程度上取決于交易的賬戶分部情況。當交易沖突較多的時候,不斷地重新執行反而會導致性能嚴重下降。Aptos在論文中提到后續可能也會對用戶編寫合約進行一些優化,從而更好地分析依賴關系,達到更快的執行速度。單純的修改交易串行到并行模式在公鏈環境下可以帶來3~16倍的吞吐量提升。如果能夠結合大區塊和大的gasLimit等優化,L2吞吐量可以提升百倍左右。考慮到工程實現和效率問題,OlaVM大概率會采用Khipu+定制化存儲模型方案。在獲得性能提升的同時,避免引入Block-STM帶來的復雜性,也便于后期更好的進行工程優化。參考:
1.Block-STM論文:Block-STM:ScalingBlockchainExecutionbyTurningOrderingCursetoaPerformanceBlessing(arxiv.org)2.FISCO-BCOSGithub,FISCO-BCOS3.KhipuGithub,GitHub-khipu-io/khipu:AnenterpriseblockchainplatformbasedonEthereum4.AptosGithub,GitHub-aptos-labs/aptos-core:Aptosisalayer1blockchainbuilttosupportthewidespreaduseofofblockchainthroughbettertechnologyanduserexperience.關于我們
Sin7y成立于2021年,由頂尖的區塊鏈開發者組成。我們既是項目孵化器也是區塊鏈技術研究團隊,探索EVM、Layer2、跨鏈、隱私計算、自主支付解決方案等最重要和最前沿的技術。團隊于2022年7月推出OlaVM白皮書,致力于打造首個快速、可擴展且兼容EVM的ZKVM。微信公眾號:Sin7y官網:https://sin7y.org/白皮書:https://olavm.org/社群:http://t.me/sin7y_labs官推:@Sin7y_Labs郵箱:contact@sin7y.orgGithub:Sin7y研究文章:https://hackmd.io/@sin7y
Tags:SINLOCKBLOCKOOTFreedom. Jobs. BusinessINLOCKblockchain錢包短信認證noot幣brc20
12月30日,以太坊聯合創始人“V神”VitalikButerin在社交媒體發文稱:“一些聰明的人告訴我,Solana是一個認真且聰明的開發社區,現在那些可怕、投機取巧的人已經被洗掉了.
1900/1/1 0:00:00原文來源:Reddit原文編譯:Kyle,DeFi之道1月11日,以太坊基金會研究團隊成員在Reddit上展開了第九次AMA。這也是2023年的第一場AMA.
1900/1/1 0:00:00頭條 Coinbase與紐約監管機構達成1億美元和解協議Odaily星球日報訊加密貨幣交易交易所Coinbase同意支付5000萬美元的罰款.
1900/1/1 0:00:00原文來源:華爾街日報原文編譯:MaryLiu,比推BitpushNewsDigitalCurrencyGroup(DCG)首席執行官BarrySilbert曾在傳統金融市場耕耘多年.
1900/1/1 0:00:00臨近跨年,各機構、媒體、KOL等紛紛發布多角度的年度盤點和預測,Odaily星球日報也發表《夢醒2022,期盼2023》,并整理出年度內容精選集.
1900/1/1 0:00:00自FTX崩潰后,機構紛紛曝光的加密儲備證明給搖搖欲墜的市場提供了一線希望。我們很可能會走出這場危機,在交易所信用方面向前邁出一大步。但圍繞儲備證明仍存在大量疑問,交易所們仍任重道遠.
1900/1/1 0:00:00