前言
本次調研對比了類似以太坊的實現系統,分析了交易并行執行的難點和可能性。鏈本身基于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:FTX黑客再次清洗部分被盜資產,約830萬美元:金色財經報道,根據區塊鏈安全審計公司Beosin旗下Beosin EagleEye 安全風險監控、預警與阻斷平臺監測顯示,截止北京時間11月17日11點 , FTX黑客再次清洗部分被盜資產,FTX攻擊事件黑客(鏈上地址被標記為FTX Accounts Drainer)從幣安鏈上通過兌換跨鏈將6868 ETH的資產轉移到以太坊,約830萬美元,Beosin Trace正持續對該黑地址進行監控。[2022/11/17 13:16:04]
?用戶直接或間接通過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已經執行完畢,線程退出。問題與解決方法
加密貨幣賭場Bitcasino添加ADA支付:4月22日,首家獲得許可的以比特幣為主的賭場運營商Bitcasino,增加了ADA作為支付方式。ADA是繼BTC、TRX、ETH,LTC,XRP和USDT之后,Bitcasino引入的第7種加密貨幣。(Newsbtc)[2021/4/22 20:48:09]
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。比如在簡單轉賬合約中,開發者僅需指定每筆轉賬交易的依賴項是{發送者地址+接收者地址}。進一步講,假如開發者在轉賬邏輯中引入了另一個第三方地址,那么依賴項就需要定義為{發送者地址+接受者地址+第三方地址}。這種方式實現起來較為直觀簡單,也比較通用,適用于所有智能合約,但也相應增加了開發者肩上的責任。開發者在指定交易依賴項時必須十分小心,如果依賴項沒有寫正確,后果將無法預料。并行框架合約
SingularityNET與IOHK合作以提高AI服務規模:區塊鏈人工智能(AI)平臺SingularityNET宣布與Cardano 開發公司 IOHK進行新合作以提高人工智能服務的規模。新的合作伙伴關系將圍繞Cardano區塊鏈的工程和AI服務的開發。SingularityNET計劃將去中心化協議從以太坊過渡到Cardano。(Cryptoglobe)[2020/10/5]
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代碼如下:
以下是基于并行框架合約進行編寫的轉賬合約:
確定接口是否可并行可并行的合約接口,必須滿足:?無調用外部合約。?無調用其它函數接口。確定互斥參數在編寫接口前,需要先確定接口的互斥參數,接口的互斥即是對全局變量的互斥。互斥參數的確定規則為:?接口訪問了全局mapping,mapping的key是互斥參數。?接口訪問了全局數組,數組的下標是互斥參數。?接口訪問了簡單類型的全局變量,所有簡單類型的全局變量共用一個互斥參數,用不同的變量名作為互斥對象。例如:合約里有多個簡單類型的全局變量,不同接口訪問了不同的全局變量。如需將不同接口并行,則需要在修改了全局變量的接口參數中定義一個互斥參數,調用時指明使用了哪個全局變量。在調用時,主動給互斥參數傳遞相應修改的全局變量的“變量名”,用以標明此筆交易的互斥對象。如:setA(intx)函數中修改了全局參數globalA,則需要將setA函數定義為set(stringaflag,intx),在調用時,傳入setA("globalA",10),用變量名“globalA”來指明此交易的互斥對象是globalA。確定互斥參數后,根據規則確定參數類型和順序,規則為:確定參數類型和順序-接口參數僅限:string、address、uint256、int256。-互斥參數必須全部出現在接口參數中。-所有互斥參數排列在接口參數的最前。可以看出,FISCO-BCOS交易并行其實很大程度依賴用戶編寫合約的規范。如果用戶編寫合約不規范,系統貿然的進行了并行執行,則有可能會造成賬本root不一致的問題。Khipu
REV智能合約已通過Beosin(成都鏈安)的安全審計:據官方消息,Justswap上的明星項目,REV團隊釋放出REV智能合約審計報告,由Beosin(成都鏈安)安全審計完成。
據了解,REV(Revolution Token)是基于區塊鏈的新型社會實驗型代幣。其獨特之處在于內嵌了交易燃燒、尾單博弈、持幣分紅三種獨特的創新機制。
REV技術介紹:智能合約的整體設計清晰,邏輯縝密,代碼安全靠譜,從性能和功能上完全具備了區塊鏈頂級去中心化金融項目的一切條件。合約地址(認準唯一)
TSngG7y4RDSVG6QwoWM4MvVWJb3k8VLZJk。詳情點擊原文鏈接。[2020/9/16]
概述
與FISCO-BCOS的觀點不同,Khipu認為讓用戶在編寫合約的時候識別和標明會發生靜態沖突的地址范圍并且不出錯是不現實的。競態是否會出現、在何處出現、在什么條件下會出現,只有當確定性獲取涉及到當前狀態后才可以做判斷。以目前的合約編程語言而言,幾乎不可能通過對代碼進行靜態分析來獲取完全無誤并且沒有遺漏的結果。Khipu針對這方面做了比較全面的嘗試,并且完成了工程實現。方案細節
在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進行讀寫。如果有,那就意味這兩筆交易存在沖突,則以第一個交易執行完成的狀態作為第二個交易的起始狀態,將交易二重新執行一遍。以此類推,隨著不斷進行合并狀態機,沖突集也會不斷地累加。只要后面的交易與前面的交易存在沖突就順序執行,直到執行完所有的交易。通過對以太坊主網的交易重放可以發現,凡是沖突多的地方,大部分是交易所在同一個區塊進行的有互相關聯的交易,這也是與該過程相符合的。
加密貨幣盜竊案逃犯Vukasin Popovic已于巴黎被捕:金色財經報道,根據蒙特利爾周一的公告,竊取價值300萬美元加密貨幣的逃犯Vukasin Popovic已于6月23日在巴黎被捕。據此前報道,Popovic于2月12日被加拿大拘留,后被保釋并在家中使用跟蹤裝置。他于3月21日切斷追蹤裝置逃亡國外以逃避法律程序。[2020/7/21]
處理流程圖
具體并行執行過程
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:SINBLOCKTOSLOCKrisingsun幣是什么幣blockkilojoulesantos幣怎么樣Green Blocks
WolfGame曾于2021年11月席卷GamFi領域,其游戲內的SheepNFT價格從發售價0.069ETH一度飆升至10ETH,其代幣WOOL價格也在游戲發布后的兩三日內一度翻倍.
1900/1/1 0:00:00OpFi和DPX是什么?從鏈上期權采用到整個DeFi賽道,為什么這二者會開創一個全新的時代?聽起來幾乎是不可能完成的任務,本文將詳細介紹OpFi和DPX如何實現這一宏偉目標.
1900/1/1 0:00:00作為傳統,我每年都會對來年的產品趨勢做出三個不引人注目的預測。讓我們先回顧一下,看看我去年的預測如何,然后再對2023年做出三項預測.
1900/1/1 0:00:00現實生活中手機轉賬數目,卡上余額,通話數據甚至對象信息我們都會小心翼翼的注意數據信息的安全和不對外公開,這是個人隱私也是其對應的數字資產,隱私的相關保護也慢慢成為了大眾共識.
1900/1/1 0:00:00歡迎閱讀新一期的AllCoreDevs(以太坊核心開發者會議)更新——2022年的最后一期。盡管這些更新最初是每月系列,但節奏逐漸趨于每季度一更.
1900/1/1 0:00:0012月15日,在Web3.0CloudDaySingapore2022活動上,Klaytn全球業務發展部負責人,ShiYiFei,擔任主持人.
1900/1/1 0:00:00