區塊鏈端對端交易性能分析

區塊鏈端到端交易性能分析

區塊鏈從微觀上來說就是一個不可篡改的可溯源系統,從宏觀上來說具有三個特點:共識機制(這個被很多人所研究,包括改進,例如POW、POS、BPFT等等)、分佈式存儲(每個節點對於鏈信息的存儲,也是個比較有意思的方向,例如RS編碼)、P2P。對於區塊鏈端對端交易性能的分析,我想從P2P網絡講起,交易的基礎都是基於搭建的網絡進行的,在網絡上信息傳輸的延遲對於性能的影響是巨大的。然後對共識機制的改進就沒有做過多的涉及,因爲這一部分比較常見。當然後面講到的像fabric、分片都是比較基礎的講到,如果每一部分要細講的話,感覺篇幅會較長,所以也就沒有再深入寫下去。

1、P2P網絡模型(路由查詢分類模型)

P2P網絡不同於傳統的客戶端\服務端的C\S結構,在P2P的網絡結構中,每一個節點都是一個客戶端以及服務端的存在,同時它們就不再適用HTTP,而是採用Socket進行網絡編程。

在P2P網絡模型分類中一般有:集中式、純分佈式、混合式以及結構化四種模型,不過在這裏需要注意的是這些分了模型是路由查詢模型,也就是不同節點之間怎麼建立連接,而至於它們連接之後的交易內容就不是分類模型關注的問題了。

**集中式:**對於第一種模型集中式,就是存在一箇中心節點保存網絡中每一個節點的索引信息,一般這樣的索引信息包括IP地址、端口、節點資源等等,也就是說一個節點存儲所有節點的路由信息,當普通節點要訪問其他節點時,都是通過這個中心節點來得到信息,這樣做的缺點就是節點規模擴大後,出現性能瓶頸,也存在單點故障。

**純分佈式:**第二種模型就是純分佈式,也就是說網絡中沒有中心節點,節點之間都是隨機建立的拓撲網絡,如果有一個新節點要加入網絡中,最簡單的就是隨機選擇一個存在的節點建立鄰居關係,例如在比特幣網絡中,就是使用DNS的方式查詢節點,DNS一般使用硬編碼到代碼中,它可以提供比特幣節點的IP地址列表,從而新節點要找到其他節點就可以通過DNS服務器查詢建立連接。但是新節點加入網絡後要進行全網廣播,也就是泛洪機制。純分佈式的模型沒有單點性能瓶頸問題,但是因爲泛洪機制,因此容易出現泛洪循環,同時也會出現消息風暴,也就是例如節點要求的資源有很多個節點擁有,那麼大量這些節點同時發送給這個節點導致消息請求的節點癱瘓。

**混合式:**混合式就是集合了集中式和分佈式結構,網絡中存在多個超級節點組成分佈式網絡,而每個超級節點擁有自己的集中式網絡,也就是它連着自己管理的多個普通節點。如果有一個節點要加入,那麼它首先與一個超級節點通信,得到其他超級節點的列表,然後選擇要加入哪個超級節點的網絡,這樣就把泛洪廣播限制在超級節點之間,避免大規模泛洪循環,比特幣網絡也是類似這種架構。

**結構化:**相比於純分佈式網絡的隨機網絡,結構化分佈式網絡就是讓所有節點都按照某種結構進行有序組織,例如一個環狀網絡,基本它們的實現都是根據DHT思想:在網絡中,可以抽象出來兩種空間:資源空間、節點空間,資源空間是代表了所有節點保存的資源集合,節點空間就是所有節點的集合,首先我們對資源和節點都進行編號,,例如把資源名稱或者它的內容取一個Hash變成一個數值ID,這樣就可以對資源ID和節點ID進行一個映射關係,例如把資源n的索引信息放到節點n上,搜索的時候就是按照這個映射關係進行查找,避免了泛洪廣播,這種模型的有點是更加的快捷以及準確,但是事實上映射中是很難一一對應的,儘管如此還是可以通過一定的大小關係進行映射,和就是DHT思想。

2、比特幣網絡

對於比特幣的網絡系統中,節點的主要功能是:錢包、挖礦、區塊鏈數據庫、網絡路由;不同類型的節點具有不同的部分功能,但是每一個節點都有路由功能,一般只有比特幣核心才包含了四大功能。所有節點都會參與校驗以及廣播交易以及區塊的信息,同時會發現並且維持其他節點的連接,而那些包含了完整的區塊鏈數據庫的就稱爲全節點,而相比之下,只包含了區塊頭而沒有交易數據的節點被稱爲輕節點,例如錢包。還有一部分的節點是獨立礦工節點,這裏強調獨立礦工是爲了與礦池,也就是所謂的集體挖礦區分開來,獨立礦工節點則是全節點包含了挖礦功能的節點,至於礦池礦工節點,它們是分佈在一個局部的集中式礦池網絡,中心節點式一個礦池挖服務器,其他節點連接到這個服務器,它們之間依據的式礦池挖礦協議,也就是中心節點作爲一個全節點與它的下屬節點形成一個網絡與主網按照比特幣協議進行通信。

所以綜上所述,在整個比特幣網絡中,除了那些節點使用比特幣協議進行通信外,還包含了礦池裏面的礦池協議,此外因爲挖礦創建出新的區塊後,需要廣播到全網節點,如果區塊使用上面所述的比特幣協議網絡,有很高的網絡延遲,所以需要一個專門的傳播網絡來加快區塊在礦工之間的同步傳播,這個網絡叫做比特幣傳播網絡或者比特幣中繼網絡。**比特幣傳播網絡:**爲了最小化礦工之間的傳輸延遲,原始的比特幣傳播網絡由幾個專門的組成,並且連接大多數的礦工和礦池,也就是類似於混合式的網絡模型,降低了同步延遲。

**節點間:**下面比較具體的介紹節點之間的連接,對於一個新的節點的加入,首先會發現至少一個網絡中存在的節點進行連接,並且記住最近成功連接的網絡節點,當重新啓動後,會快速與這個節點連接,如果失去了連接會嘗試發現新的節點,建立連接後節點會將自己的IP地址發送給相鄰節點,這些節點又進行廣播,保證信息被多個節點知道,當然這個節點也可以請求相鄰節點把他們知道的其他節點的IP發送給它自己,同時客戶端會維護一個長期穩定運行的節點提供連接,和BT下載類似。細節如下:比特幣核心部分維護一個節點列表,當一個節點第一次啓動時,會被自舉到網絡,通過DNS獲取可連接IP連接到網絡,然後如果要進行塊傳播,節點之間會互相發送最新區塊哈希值的消息,如果某個節點堅信自己有更長鏈,它會發送inv信息,包含至多500個最新塊的哈希值來證明更長,收到的節點進行驗證確認。

**交易池:**具體到交易方面,節點之間的交易通過inv消息來實現,如果收到了getdata信息,那麼交易通過發送tx實現,節點收到有效的交易的信息後會通過類似的方式將其擴散,如果交易的信息在一段時間內沒有被放進塊中,那麼交易將被從內存池中清除,而原節點將重新發送交易信息。比特幣網絡中幾乎每個節點都會維護一份未確認交易的臨時列表,這就是內存池或交易池,節點們利用這個池來記錄被網絡知道但是沒有被區塊包含的交易,例如,保存用戶錢包的節點會利用這個交易池來記錄那些網絡已經接收但還未被確認的、屬於該用戶錢包的預支付信息。隨着交易被接收和驗證,它們被添加到交易池並通知到相鄰節點處,從而傳播到網絡中。有些節點的實現還維護一個單獨的孤立交易池。如果一個交易的輸入與某未知的交易有關,如與缺失的父交易相關,該 孤立交易就會被暫時儲存在孤立交易池中直到父交易的信息到達,當一個交易被添加到交易池中,會同時檢查孤立交易池,看是否有某個孤立交易引用了此交易的輸出(子交易)。任何匹配的孤立交易會被進行驗證。如果驗證有效,它們會從孤立交易池中刪除,並添加到交易池中,使以其父交易開始的鏈變得完整。對新加入交易池的交易來說,它不再是孤立交易。前述過程重複遞歸尋找進一步的後代,直至所有的後代都被找到。通過這一過程,一個父交易的到達把整條鏈中的孤立交易和它們的父級交易重新結合在一起,從而觸發了整 條獨立交易鏈進行級聯重構。交易池和孤立交易池(如有實施)都是存儲在本地內存中,並不是存儲在永久性存儲設備(如硬盤)裏。更準確的說, 它們是隨網絡傳入的消息動態填充的。節點啓動時,兩個池都是空閒的;隨着網絡中新交易不斷被接收,兩個池逐漸被填充。

有些比特幣客戶端的實現還維護一個UTXO數據庫,也稱UTXO池,是區塊鏈中所有未支付交易輸出的集合。“UTXO 池”的名字聽上去與交易池相似,但它代表了不同的數據集。UTXO池不同於交易池和孤立交易池的地方在於,它在初始 化時不爲空,而是包含了數以百萬計的未支付交易輸出條目,有些條目的歷史甚至可以追溯至2009年。UTXO池可能會被安置在本地內存,或者作爲一個包含索引的數據庫表安置在永久性存儲設備中。交易池和孤立交易池代表的是單個節點的本地視角。取決於節點的啓動時間或重啓時間,不同節點的兩池內容可能有很 大差別。相反地,UTXO池代表的是網絡的突顯共識,因此,不同節點間UTXO池的內容差別不大。此外,交易池和孤立交易池只包含未確認交易,而UTXO池之只包含已確認交易。

3、對於比特幣網絡交易以及塊傳播的論文記錄:

Information Propagation in the Bitcoin Network

在這篇文章裏面主要分析了區塊以及交易信息在比特幣網絡中的傳輸性能,同時提出了可能存在的優化方案。正如前面我們所說的,節點發布的區塊信息或者交易信息是通過發出inv信息來實現的,這個信息包含了自己最新塊或者交易的哈希值,接受到的節點通過發送getdata信號來獲取自己所需要的那部分區塊或者交易,基於上面的這個流程,在廣播中的每一跳,消息都會產生傳播延遲,傳播延遲是傳輸時間和塊或事務的局部驗證的結合,傳輸時間包括以inv消息、來自接收方的請求和信息交付。雖然inv和getdata消息的大小相對較小(多數情況下爲61b,如果即時廣播只包含正在宣佈的單個塊或事務),但文章中提到的塊消息可能非常大–高達500 kb。而驗證部分是指在向節點的鄰居宣佈該塊之前,將對其進行驗證,塊的驗證包括對塊中每個事務的驗證,事務驗證反過來又需要對磁盤的隨機訪問。

性能特點:

**傳輸延遲時間分佈:**文章中提到網絡中節點接受信息的模型呈現兩個階段:首先是初始指數增長階段,其中接收inv消息的大多數節點將請求相應的數據項,因爲它們還沒有數據;之後是指數收縮階段,在該階段中,接收通知的大多數節點已經具有相應的數據項。在實驗中,他們測試得到的傳輸延遲性能是:節點收到塊的中值時間爲6.5秒,而平均值爲12.6秒。分佈的長尾意味着即使在40秒之後,仍有5%的節點尚未接收到塊。(如圖一)

在這裏插入圖片描述

**區塊影響:**同時文章對於傳輸延遲與區塊大小的關係進行了討論,(如圖二),在這裏的討論使用了一個指標–每千字節的延遲時間,在統計中發現,大於20KB的區塊的每千字節延遲基本不變,而對於小區塊而言,因爲他們的傳輸塊壓力很小,但是需要同樣進行inv信息、請求信息等流程,所以每千字節延遲顯得很大。

在這裏插入圖片描述

**分叉:**文章還通過建模證明了分叉是由較長的傳播時間引起的。

優化傳播性能:

文章提出的加快傳播性能的措施主要是三點:減小驗證時間、流水線塊傳播、增加連通性。

**減小驗證時間:**對於驗證時間,一般分爲困難檢查以及事物驗證,困難檢查包括通過所接收的塊並將其哈希與當前目標難度進行比較來驗證工作證明,此外,它檢查該塊不是最近塊的副本,並將最近的塊引用爲其前身,以驗證該塊不是舊塊的重新提交。大部分的驗證是在事務驗證中完成的,事務驗證檢查塊中每個事務的有效性。一旦檢查了困難情況,並且在必須對事務進行驗證之前,可以將該塊轉發給鄰居。因此,改進的方案就是一旦完成困難檢查,節點就可以更改爲發送inv消息,而不是等待相當長的事務驗證時間。

流水線塊傳播則是再困難檢查之前就進行inv信息的傳播。而最有影響的問題是事務或塊的起源與節點之間的距離,也就是增加連通性,爲了最小化兩個節點之間的距離,文章創建一個用作中心通信的星型子圖,從而加快inv消息、塊和事務的傳播速度。

4、比特幣網絡與容量及改進

根據TradeBlock的數據參考,只要節點連接到的其他節點達到3000個以上,它能贏得孤塊競賽的概率將高到90%,也就是在孤塊競賽中獲勝的區塊通常是第一個被廣播到網絡中的那一個,這也證實了傳輸延遲對於分叉的影響,同時區塊的大小也很大程度上影響了傳輸時間,這也從數據可以看出,參與孤塊競賽的區塊大小平均要比非孤塊競賽的區塊大20%(約100kb),這可能由於大區塊需要廣播的時間更長,這也是區塊擴容的爭論之一,所以如果要擴容可能孤塊的概率會更高,因此礦工會選擇打包更少的交易,因此需要更好的改善,例如挖礦骨幹網、交易緩存更新及可逆布盧姆查找表。

可逆布盧姆查找表

可逆布盧姆查找表:更大的區塊,允許比特幣網絡可以承載更多的交易,但也會帶來問題,它需要更多的時間來傳播交易,這將有利於大礦工和礦池,同時增加的數據傳遞對於用戶運行全節點而言,也是一種打擊。爲了增加比特幣網絡的效率,並減少更大區塊會產生的風險,就出現了可逆式布魯姆查找表,簡稱爲IBLT。後面會提到的閃電網絡就是根據這個思想進行設計的。

可逆式布魯姆查找表解決的是一個冗餘的問題:在比特幣交易中,都是通過節點到節點來完成對等式網絡的交易,然後通過個人節點的內存池進行存儲。當一位礦工發現一個區塊時,它包括區塊中的交易,隨後在同一對等網絡中廣播該區塊,這意味着,區塊中所有的交易,都有效地在網絡上發送了兩次:一次作爲一筆交易,另一次則作爲區塊的一部分。更通俗地說法就是:在區塊中已經有了冗餘,大多數節點已知道該區塊包含的一些內容了,因爲他們已經看到過了,如果我們能夠優化它,那我們就可以加快區塊的廣播速度,這也降低了中心化的壓力,因爲礦工們可以更快地將他們的區塊弄出來,同時網絡也可以更好地運行。

它的基本原理: 首先,在一個區塊中包含的所有交易,都會寫入一個表(table)中,每一筆交易會始於表上每一個不同的點,然而,存在的交易數遠多於表的空間(room),所以它會導致重疊結果,這使得IBLT顯得非常地密集。當然還有一點,對於那些無法訪問任何交易數據的人而言,IBLT是無法讀取的,也是無法破譯的;而那些擁有交易數據的人,可通過使用類似的邏輯,將他自己的交易填充到一個IBLT,然後比較IBLT上的重疊交易數據。如果兩個IBLT最終看起來完全一樣,這意味着所有的交易,是完全匹配的,即使這兩個IBLT,最終看起來並不是完全相同,但只要交易集是非常相似的,這可能仍然是有用的。這種情況下,這兩個IBLT可以進行比較,用這種方式,所有相同的交易就可以抵消掉一方。而IBLT中“剩餘的”交易,往往可以用於重構丟失的交易。 因此沒必要在對等式網絡上廣播完整的區塊,節點可以廣播更小的IBLT。這需要的數據也就更少了,速度也就更快了。

閃電網絡:

比特幣交易網絡性能只能是每秒7筆的交易速度,遠遠不能滿足金融交易系統,同時要等待6個塊的確認,也就是1小時的時間,因此爲了提高網絡性能,有了閃電網絡,也就是把大量的交易放到比特幣區塊鏈之外進行。閃電網絡使用智能合約來完善交易性能,主要用到的兩個概念是RSMC和HTLC;

RSMC就是可撤銷的順序成熟度合同,類似於準備金機制,先假定交易雙方之間存在一個“微支付通道”(資金池)。雙方都預存一部分資金到“微支付通道”裏,之後每次交易,就對交易後的資金分配方案共同進行確認,同時簽字作廢舊的版本。當需要提現時,將最終交易結果寫到區塊鏈網絡中,被最終確認。可以看到,只有在提現時候才需要通過區塊鏈。任何一個版本的方案都需要經過雙方的簽名認證才合法。任何一方在任何時候都可以提出提現,提現需要提供一個雙方都簽名過的資金分配方案(意味着肯定是某次交易後的結果)。在一定時間內,如果另外一方提出證明表明這個方案其實之前被作廢了(非最新的交易結果),則資金罰沒給質疑成功方。這就確保了沒人會拿一箇舊的交易結果來提現。另外,即使雙方都確認了某次提現,首先提出提現一方的資金到賬時間要晚於對方,這就鼓勵大家儘量都在鏈外完成交易。

HTLC:微支付通道是通過 Hashed Timelock Contract 來實現的,也就是“哈希的帶時鐘的合約”。這個其實就是限時轉賬。理解起來其實也很簡單,通過智能合約,雙方約定轉賬方先凍結一筆錢,並提供一個哈希值,如果在一定時間內有人能提出一個字符串,使得它哈希後的值跟已知值匹配(實際上意味着轉賬方授權了接收方來提現),則這筆錢轉給接收方。不太恰當的例子,約定一定時間內,有人知道了某個暗語(可以生成匹配的哈希值),就可以拿到這個指定的資金。推廣一步,甲想轉賬給丙,丙先發給甲一個哈希值。甲可以先跟乙簽訂一個合同,如果你在一定時間內能告訴我一個暗語,我就給你多少錢。乙於是跑去跟丙簽訂一個合同,如果你告訴我那個暗語,我就給你多少錢。丙於是告訴乙暗語,拿到乙的錢,乙又從甲拿到錢。最終達到結果是甲轉賬給丙。這樣甲和丙之間似乎構成了一條完整的虛擬的“支付通道”。

通俗一點地講,基於上面的支付通道與合約實現,我們在區塊鏈上增加了另外的一層,使得用戶在額外的這一層上創建支付渠道,交易幾乎是即時的,費用極低,而不是每一筆交易都需要記錄在區塊鏈上,只有最後的提現涉及的交易纔會記錄上鍊。

整體來說,閃電網絡的優點就是交易速度可以與visa、Paypal相當了,同時交易的費用也是很低的,當然因爲建立在支付通道的交易沒有寫到鏈上,所以微支付是無法追蹤的,是安全而匿名的。當然也有缺點,那就是微支付渠道建立的複雜性,還有通道交易數量的上限,當然還有路由集中,違背去中心化的問題。

區塊鏈交易緩衝與加速方法(一個專利):

基於區塊鏈的交易緩衝、加速方法與處理系統

這個專利講的是:當用戶通過區塊鏈網絡層的一個節點在應用層發起一個帶有交易參數的交易請求時,區塊鏈上的智能合約對該請求的交易參數進行參數合法性的校驗,當參數合法性校驗完成後,智能合約將交易請求發送給交易緩衝\加速子系統進行交易處理,再通過異步方式寫入區塊鏈存儲層中的存儲區塊,這個步驟具體是:定時將所有待入鏈的交易處理結果按照生成時間的先後順序進行排序,當所有待入鏈的交易處理結果數量小於或者等於第一閾值時,按照順序,將待入鏈存儲的交易結果寫入存儲層中的存儲區塊,當交易數量大於第一閾值時,將排序在前面的第一閾值數量的交易處理並寫進區塊,而剩餘的交易進行緩存,以此來提高區塊鏈的TPS,並且對需要入鏈存儲的交易異步入鏈,實現平穩性。

5、區塊鏈的交易性能分析:

ripple:號稱轉賬神器,1500tps;eth:15.6;使用DAG的iota:1000tps而且節點越多,交易越多,tps反而越大;btc:5.68tps;總的來說,限制了tps的因素很多,包括共識算法、廣播和驗證時間、交易確認等等,現在也有很多試圖解決這個問題的方案,比如說fabric可以達到數千的tps,而比特幣和以以太坊的off-chain方案理論上支持無限的tps;按照VB的一個理論,這些東西都可以用CAP理論來解釋:

“比如說:聯盟鏈通過准入機制,控制了驗證節點的數量,通過犧牲Decentralization提升了Scalability;石墨烯系列的DPOS,RippleNet的共識也是同理;比特幣通過提高每個區塊的容量,也可以達到擴容的目的,但結果是對礦機提出了更高的要求,形成自然的准入門檻,實際上也是犧牲了Decentralization;比特幣和以太坊挖礦難度都可以調整,降低挖礦難度實際上也可以提升Scalability,但付出的代價是抗攻擊能力下降了,犧牲的是Security。”

比較不同的是off-chain,這個方案對於CAP無效,但是它的缺點上面我也講過,就是閃電網絡的缺點,這裏再擴展:1、閃電網絡中鎖定的比特幣只能用在閃電網絡中,只有交易通道關閉的時候才能真正成爲鏈上承認的貨幣,這在理論上會出現類似銀行擠兌的情況。如果大家對閃電網絡失去信心,集中關閉通道,會拖垮比特幣網絡。但這個似乎也不是很大的問題,只要閃電網絡沒有爆出什麼漏洞,比如說簽名算法被攻破之類的。2、交易是在鏈外執行,鏈上無法驗證提交的交易是否最新版本,雖然腳本保證了提交舊版本交易的攻擊者有被罰沒準備金的風險,但前提是要防禦者監控網絡並提交更新版本交易的證據。也就是說從原來比特幣的被動防禦(私鑰不丟失就能保證資金安全)轉變成主動防禦。從這個角度看也算是降低了Security吧。這個主動防禦的操作交給用戶也不太現實,最終必然會衍生出一些服務公司,代替用戶保存鏈外交易憑證,並防止作弊。某種意義上面又從“去中介化的信任”轉變爲需要信任中介了。這個角度看,似乎也是犧牲了Decentralization。3、閃電網絡中只有保存最終的資金狀態保存,中間的交易細節全部被忽略,支持者認爲是保護了用戶的隱私,反對者認爲是損失了交易數據。4、因爲通道需要準備金維持,不可能任意兩個用戶間都存在交易通道,用戶之間轉賬可以通過中轉的方法,最終很可能會有大資金形成中心化的中轉節點。

總的來看,解決交易性能的嘗試方案很多,主要有:分片、子鏈和側鏈、鏈下擴容、DPOS等不同共識機制。

提高tps的幾種已有方法以及分析:

1、以太坊的二次性分片技術

對於二次分片技術的理解大概就是將原先一本固定A4賬本記錄交易數據的方式打破,產生多本A4賬本,其中有多本子賬本及一本主賬本,子賬本作爲記錄驗證交易數據爲主,多本賬本可以同時進行並行記賬,互不影響,主賬本一般只有一本,主要用做分配記錄各個子賬本的是誰在記錄的,子賬本們的分佈位置以便於後期查找,子賬本記錄的獎勵及懲罰是什麼,因爲有可能存在惡意記錯的賬本。這時候設立子賬本越多,代表每秒可同時記錄的交易數據就越多,的確理論上可以達到百萬級別的吞吐量,較比只有一本賬本的比特幣,以太坊的重心已經慢慢由記錄完整賬本過渡到如何讓記錄賬本的人儘可能的協同合作記賬,讓記錄數據速度更快。分片主要要解決的問題是跨片交易,包括普通的跨片轉賬和跨片合約,另一個問題就是動態分片,根據網絡總體節點的數量,業務量和安全性等級要求的變化動態增減分片數。

但是分片也有一定問題:它是提高公鏈性能的一把雙刃劍。在網絡規模一定時,分片越多,則分配給單個分片的節點也會越少,抗攻擊能力也會相應用減弱,這樣整個網絡的安全性也會隨之線性衰減。因此,在去中心化思想主導的區塊鏈世界裏,單純強調分片數量或性能均不具備太大意義,效率與安全的最優協調才能促進區塊鏈生態的良性發展。

2、 EOS採用BFT-DPoS機制技術

EOS採用的股份授權證明(BFT-DPoS)機制的石墨烯技術,選出可信任的記賬人進行記賬,單條鏈可以做到每秒1萬至10萬筆交易,在通過並行鏈記賬的方式,理論上可以達到百萬級的TPS。對比比特幣的記賬方式pow算力競爭模式,演變成大礦池之間的競爭,其他小型的基本沒有太大得到記賬的機會,鑑於此乾脆放棄算力堆積模式,改用投票方式,投出記賬人(超級節點),不需要在像比特幣一樣算出特定解去競選記賬人的權利,由此省出了不少時間,然後在引入BFT協議,也就是記賬人在生產區塊的同時馬上對該區塊簽名確認,並讓別的記賬人也過來簽名確認,並行驗證交易數據將不可逆區塊確認的時間縮短,但這種確認的時間官方給出的數據是1秒內完成,加上EOS生產塊的時間是0.5秒,所以大概是3秒內完成不可逆區塊的確認。在EOS系統上,發現其最大化的去除了隨機的成份,如當節點的規則,連續生產區塊的更換的規則,改用固定的規則加速記賬的進行,就好比用了固定的記賬人,固定的獎勵方式,記賬方式,去除交易費用,將精力全部用在記賬上。

EOS比較多的詬病是中心化已經太明顯了。

3、 DAG有向無環圖

最知名的DAG有三架馬車 ----IOTA、字節雪球、Nano以及最近的xdag,早期的如IOTA將記賬人去除,只需要驗證前倆個有效單元即可,去除塊的概念,也就是不需要記賬頁的概念了,是一張無限大的紙,任何人隨時都可以在上面任何一處記錄交易數據,並且交易的人就是記賬的人(交易的人需要運行交易錢包軟件等待交易完成),這種方式不需要費用,而且隨着使用的人越多,其驗證速度就越快,tps也可以達到1000以上級別。

交易性能:

影響到交易性能的一個因素很主要是共識機制,例如EOS的簽名機制直接讓自己的出塊速度縮減到0.5秒,所以通過對於POW、POS、DPOS、PBFT等等共識機制的研究與改進是解決性能瓶頸的一種方法;然後還有一種是p2p的通信協議,例如fabric利用gRPC庫與Gossip消息協議構建p2p通信機制,以太坊使用基於RLP編碼以及認證的加密P2P協議,這些都是是適應與它們應用場景的網絡機制的設計。最後就是很多機制的改進,例如分片、消息機制等等。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章