比特幣交易所 比特幣交易所
Ctrl+D 比特幣交易所
ads

技術入門 | 以Transaction的生命周期為線索剖析Libra核心組件_ION

Author:

Time:1900/1/1 0:00:00

Libra涉及的東西比較多,我們從三條線介紹Libra的設計與實現:

通過分析Node啟動并加入到Libra網絡的過程,介紹Network組件的設計與實現;

圍繞Transaction的生命周期,分析其接收交易、打包區塊、運行上鏈的過程,介紹Libra的Mempool、Executor以及Storage、VM等核心組件;

圍繞LibraBFT,介紹Consensus組件以及區塊達成共識的過程。

前面我們講述了Libra的第一條主線——Node啟動以及加入網絡的過程,詳細介紹了Network組件的設計與實現。這里,我們將要講述Libra的第二條主線——Transaction的生命周期,再圍繞Transaction的生命周期,逐個講述Libra各個核心組件的一些設計與實現。在講述生命周期之前,我們先了解一下賬號模型以及Transaction與Move合約的關系。

賬號模型

實際上區塊鏈可以簡單的理解為:使用Transaction為載體,按大部分人認可的順序記錄每個Address的變更過程。為了達到這個目的,區塊鏈發展至今抽象出兩種賬號模型:以BTC為代表的UTXO模型和以ETH為代表的Account模型。這兩種模型各有優劣,簡單對比一下:

UTXO的英文是UnspentTransactionOutput,直譯就是未消費的交易輸出,一個Address的當前狀態就是一個UTXO列表。UTXO模型下,消費(構造Transaction)的時候拿出一個或者多個UTXO當作當前Transaction的Input,然后生成多個UTXO,Input和Output的總額是相等的。在未來的某個時刻,這些Output又被當做其他Transaction的Input。是不是跟紙鈔有些像?而Account模型中,每個Address通常包含一個的總額和SequenceNumber計數器。每次消費(構造Transaction)的時候會從當前Address的總額中減去消費額,在另一個Address中加上相應的消費額,同時通過SequenceNumber遞增的方式,保證當前Address構造的出來的所有Transaction有先后順序,從而保障賬號的狀態正確。

華盛頓特區聯俱樂部與區塊鏈技術提供商XDC Network達成合作:2月26日消息,美國大聯盟華盛頓特區聯俱樂部(D.C. United)宣布與區塊鏈技術提供商XDC Network達成一項為期三年的協議。在2022年賽季,該俱樂部將在主客場球衣和訓練上衣的正面首次展示XDC Network品牌。

D.C. United將利用XDC Network的區塊鏈技術推出“粉絲代幣”計劃,通過獨家活動和訪問來獎勵粉絲忠誠度。粉絲們還將能夠通過一個視頻平臺了解區塊鏈技術,并在XDC Network上購買、銷售、交易或與NFT交互。(Bitcoinist)[2022/2/26 10:17:24]

Libra使用的Account模型來表達賬本數據,所以Transaction有嚴格的先后順序。這點在后面我們還會提到。

Transaction與Move合約

前面我們了解了賬號模型,為了便于理解,以支付的場景做了類比。給我們的感覺就是,Transaction的作用就是對一個數字進行加減運算,例如Alice給Bob轉了一筆賬。那就不能應用于更多、更復雜的場景嗎?比如游戲。區塊鏈起步的時候,表達能力相對比較簡單,隨著區塊鏈的推廣,大家的需求越來越豐富,最初的設計難以滿足。我們希望能通過一門語言,在鏈上表達我們的需求,所以虛擬機、智能合約以及合約語言順勢產生了。這是一個很廣闊的話題。Libra推出了Move語言作為合約語言,這里我們不展開講。那么Transaction、鏈、Move到底是什么關系呢?

我們假設上圖是某個時刻,鏈上所存儲的賬號數據,其中Alice有一個Move定義的合約,code被存儲在她的賬號下。上圖的第①步中,Bob構建一個Transaction,在Transaction中指定運行Alice賬號下對應的合約的一個方法,并從自己的賬號下取出該合約方法能理解的數據作為方法的參數,然后對Transaction進行簽名并廣播出去。圖中第②步,礦工收到Bob的Transaction,打包到Block中,然后執行Bob的Transaction,并且將結果寫到Bob的賬號下面。整個過程中,大概的理解就是,Move定義了一段邏輯,Transaction設置了運行邏輯用到的數據,鏈記錄了邏輯運行之后的最終狀態。

彩云比特創始人呂磊:比特幣挖礦技術相對而言到了瓶頸期:金色財經現場報道,7月5日,由杭州市余杭區政府指導,杭州未來科技城管委會、巴比特主辦的2020杭州區塊鏈國際周在杭州舉辦。在以《后減半時代礦業進化論》為題的圓桌討論中,彩云比特創始人呂磊指出:比特幣挖礦技術相對而言到了瓶頸期,行業的政策要比以往更為明朗一些。未來,礦業會更加完善,礦場的服務標準正在不斷的整合。礦機的標準也正在提高。在區塊鏈大行業中,比特幣挖礦作為技術行業的小的細分,是最先成熟的。第二個行業趨勢是各個環節更加專業。以后對于比特幣挖礦感興趣的人,肯定是要通過平臺參與的,今年出現這么多的云算力平臺,是一個全流程的整合。[2020/7/5]

Transaction的生命周期

前面我們講了兩個背景知識,接下來,我們對Transaction的生命周期做一個整體的認識:

這張圖也是Libra的技術白皮書中的一張圖,跟前面介紹Libra核心組件那張圖有些像,但是箭頭上多了一些數字。這張圖實際上是表示一個Transaction從生成到打包,從執行到上鏈的完整的生命周期。下面我們依次介紹一下每個數字大概代表的意思:

1.交易被用戶使用wallet或者cli提交到AdmissionControl

2.AdmissionControl運行VM做一些Transaction的前置校驗,例如交易的簽名校驗等等,過濾掉一些無效交易

3.Transaction前置校驗通過后,會被提交到Mempool中

4.Transaction被設置為Ready狀態,等待被打包進Block中

5.Transaction被設置為Ready狀態之后,會被廣播給其他Mempool

6.Validator節點的Consensus組件pull對應的Mempool組件,獲取一批Ready狀態的Transaction,用于創建Block

聲音 | 盤和林:夯實區塊鏈等數字技術,注重拓展數字技術的應用場景:金色財經報道,1月12日,在“2020中國經濟趨勢年會”上,中南財經政法大學數字經濟研究院執行院長盤和林表示,建議構建數字經濟產業與傳統產業的融合生態圈,推動重點技術與產業創新的融合。首先,重點發展數字技術核心企業,形成核心企業、研發、科技金融的良性循環、互動提升的綜合體。其次,夯實數字技術基礎如5G、人工智能、云計算、區塊鏈、工業互聯網平臺等,注重拓展數字技術的應用場景。[2020/1/15]

7.新創建的Block被廣播給其他Validator節點,并且選舉Block

8.拿到新的Block之后,提交到Executor組件執行Block

9.新Block中的所有交易被提交給VirtualMachine組件,VM按順序執行Block的所有交易

10.提交被共識選舉勝出的Block

11.廣播被共識選舉勝出的Block

12.存儲勝出的Block中所有被KEEP的Transaction以及每個address對應的最終狀態

我們對Transaction的生命周期有了一個直觀的認識,接下來,我們深入每一個組件內部,了解更多的設計和實現細節。

AC服務

從交易被用戶提交開始,首先到AC服務。

在講述第一條主線的時候,我們提到了AC是一個GRPC服務,相當于是Node的一個網關。Node包含多個GRPC服務和很多的RPC接口,然而只有跟用戶打交道的兩類接口,才有必要暴露出去給wallet或者cli調用:

提交Transaction的接口

用戶狀態相關的接口

所以AC沒有太多的邏輯,只是對Node內部部分GRPC接口的一個封裝,以暴露給用戶使用。另外AC還有一個作用是對提交過來的Transaction做簡單的過濾。

聲音 | 復旦大學教授:區塊鏈技術在公共服務領域具有較高應用價值:據國際金融報報道,4月19日下午,第七屆中國(上海)國際技術進出口交易會-上海市區塊鏈技術應用論壇在上海世博展覽館召開。上海區塊鏈技術協會副秘書長、復旦大學通訊系教授凌力表示,區塊鏈技術具有信息保密、智能合約、分布存儲、網絡對等、數據保全等優勢,使得區塊鏈技術在公共服務領域具有較高的應用價值。[2019/4/20]

Mempool服務

交易通過AC被提交到了Mempool服務。

在講述第一條主線的時候,我們知道Mempool是用來存儲未上鏈的Transaction。我們先來看一看Mempool的整體設計:

Mempool主要包含兩個模塊:

MempoolService:是一個Grpc服務,用來接收從AC提交過來的Transaction

ShareMempool:主要有兩個作用,一個是通過Mempool協議(在第一條主線的時候有提到)在不同的Mempool節點之間同步Transaction,另外是存儲和處理Transaction

我們對Mempool有了一個整體的認識,但是還有些疑問,Mempool究竟對Transaction做了什么處理呢?什么情況下Transaction會被打包?Transaction又是什么時候被廣播給其他Mempool?接下來我們就解答一下這些疑問。

Mempool內的Transaction狀態轉化

Transaction提交到Mempool之后,首先會根據來源將其標記為不同的狀態:

Unready:用戶主動提交到MempoolService的交易狀態

NonQualified:其他節點同步過來的交易狀態

永續研究平臺:區塊鏈技術將徹底改變金融交易:永續研究平臺研究團隊指出:區塊鏈是一項將徹底改變金融交易的技術,最大的突破來自于能夠簡化復雜的流程、驗證和記錄,對于跨境交易來說,這項技術是一個巨大轉折點,尤其是經濟飛速成長的發展中國家,金融市場無疑希望能盡早擁抱區塊鏈技術。比特幣其實只是加密貨幣市場的代表之一,政府的嚴監管還不如將其加密技術應用于金融領域。[2018/1/1]

這些Transaction會按一定的順序排序,等待被標記成Ready狀態。前面我們提到了Libra采用Account模型,通過SequenceNumber將用戶發起的Transaction按順序關聯起來,當Mempool發現某個Transaction前面的所有其他Transaction都被上鏈了或者都是Ready狀態了,那么這個Transaction就可以被標記為Ready狀態了,也就意味著這個Transaction具備打包進區塊的條件了。如果當前被設置成Ready狀態的Transaction是從Unready狀態轉變過來的(也就是用戶通過AC提交到當前Mempool),那么該Transaction會被轉發給其他的Mempool。

上圖是Transaction在Mempool中大致的狀態轉化過程,而Transaction大概的排序規則是:gas_price>expiration_time>address>sequence_number

Consensus組件

前面介紹了Mempool的狀態轉化,用戶提交的Transaction處于Ready狀態,等待被打包到區塊中。考慮到Consensus的復雜性,以及當前主線主要是介紹Transaction的生命周期,這里只簡單的介紹一下上鏈流程,大概如下:

其中compute->execute以及commit->store會在后面講,vote將在第3條主線詳細講,這里暫時只需要注意兩個地方:

Consensus組件主動去Mempool中pull一批Ready狀態的Transaction,并打包到Block

Block被選舉并提交之后,Consensus組件會主動去刪除Mempool中被提交的Transaction

Executor&VM組件

由于Executor只是運行VM的一個入口,這里把Executor和VM合并到一起介紹。前面Consensus組件的流程中,Block被Build之后會被提交到Executor中comput,再進入VM中execute,這就是執行Transaction。也就是compute->execute過程,有些細節需要注意:

其中淺顏色由Executor發起,深顏色是在VM中執行的Move合約。Consensus組件將新的Block提交到Executor組件之后,Executor會為Block提供運行環境,初始化VM,依次在VM中運行Block的Coinbase和其他用戶Transaction。所以VM會最先執行Coinbase交易,也就運行LibraAccount合約中的blockprologue。然后再按順序依次執行Block中打包的Transaction,最后將執行之后的狀態返回給Consensus組件。

Storage服務

在介紹Consensus組件的時候,我們提到了Block會被commit,數據最終會被寫入Storage服務。也就是commit->store流程,這時候用戶提交的Transaction已經被大家認可。關于Storage服務,我們可能會有兩個疑問:

Storage服務包含哪些模塊?

Storage最終存儲了哪些數據?

Storage模塊

Storage是一個GRPC服務,存儲了所有鏈上的數據,用戶的賬本狀態等信息就是從Storage獲取的。Libra選擇了RocksDB作為底層存儲的數據庫,SchemaDB基于RocksDB封裝了對數據統一的CRUD操作以及Key-Value的系列化與反序列化方式。LibraDB是圍繞Libra的賬本數據和特點,定義了一系列數據結構,并針對這些數據結構進行數據庫的操作。將所有的這些操作,封裝成Storage服務,提供給Executor、AC等組件使用。

賬本數據

前面講述Storage服務包含的模塊,我們了解到LibraDB圍繞Libra賬本的特點定義了一些數據結構,Libra賬本有什么特點?那么包含哪些核心數據結構呢?

賬本特點Libra采用Account,需要存儲全局的用戶狀態,當前狀態的所有歷史交易以及交易的順序。也就是說,Storage需要存儲的主要數據:用戶狀態、交易及交易順序。跟其他公鏈不同的是,一般的公鏈通過記錄Block順序(Block內的交易也是有序的),來達到記錄所有交易和交易的順序的目的。而Libra直接存儲交易,采用MerkleAccumulator來記錄交易的順序。

核心數據結構Libra為了存儲用戶狀態、交易及交易順序,分別使用了SparseMerkleTree和MerkleAccumulator。

SparseMerkleTree使用256比特存儲用戶狀態,理論上總共可以有2的256次方個賬號。上圖是4比特SparseMerkleTree的例子,每個橙色的葉子節點代表了一個用戶;正方形的方塊是占位符,表明該分支下沒有賬號,減少賬號的存儲;

MerkleAccumulator存儲交易以及交易的順序。上圖中,每個深顏色的葉子節點表示一個Transaction;正方形的方塊是占位符。新上鏈的交易會按順序一個一個被加入到后面。

?上面提到了Storage的兩個核心數據結構,整個Storage都在圍繞他們進行存儲和優化,更多細節不再展開。

總結

?以上是Transaction整個生命周期的過程,依次經過AC、Mempool、Consensus、Executor、VM的處理,最終存儲到Storage。然后我們深入到每一個組件或者服務,既介紹了他們的一些設計和實現,也了解了Transaction被處理的核心細節。

Tags:IONRANCTISACaion幣下架Transdata ChainEOS AuctionASAC價格

火幣APP下載
5分鐘看完截止到目前的中國區塊鏈政策概況_區塊鏈

中共中央局就區塊鏈技術發展現狀和趨勢進行了第十八次集體學習后,隨即各地政府也相繼出臺了一系列政策,期望在這一輪區塊鏈發展浪潮中搶占先機,覓得發展.

1900/1/1 0:00:00
從單密鑰到復雜計算:加密交易托管的演變_COIN

2010年末,當第一家加密貨幣交易所出現時,多重簽名錢包還沒有被發明出來。因此,通常使用單個私鑰來控制所有客戶資金.

1900/1/1 0:00:00
精選 | 跨賽博空間、物質世界和 Finspace 生存的比特幣_DAPP

來源:真本聰 今天內容包括: 1)概述比特幣期貨平臺的費用結構和激勵措施;2)DappRadar:枯燥的有錢人是如何影響菠菜應用的;3)StakingHub:NuCypherAMA; 4)比特幣.

1900/1/1 0:00:00
比特幣秘史:2100萬并不是比特幣的最終總量_比特幣

來源:哈希派 作者:LucyCheng「21」是比特幣領域內一個特殊的數字,因為BTC網絡每隔21000個區塊挖礦獎勵就會減半,同時2100萬枚還是比特幣的最終產量.

1900/1/1 0:00:00
減半就升值,半個比特幣更值錢?_BIT

最近疫情影響 大星被強制禁足 但是禁的了我的jio 禁不了我一顆關注鏈圈的心! 所以從今天開始 大星決定給因為在家閑出p而竟然想了解區塊鏈的同學們嘮點鏈圈的細細碎碎、家長里短 各位關注大星的朋友.

1900/1/1 0:00:00
宿命與輪回:比特幣的減產時刻_以太坊

一、引言: 2020年2月初,比特幣價格重新站上10,000美元的大關。然而僅僅在兩個月前,比特幣度過了近半年的熊市,下挫至6,800美元,跌幅高達40%,市場一度充滿悲觀情緒.

1900/1/1 0:00:00
ads