Libra教程之:Transaction的生命周期
文章目錄
- Transaction的生命周期
- 提交一個Transaction
- 交易入鏈的詳細過程
- 接收Transaction
- 和其他Validators共享這個Transaction
- 區塊Proposing
- 執行區塊并達成共識
- 提交區塊
Transaction的生命周期
本文會以一個提交到Libra validator的transaction為例,來講解Transaction和其他組件的交互,和具體的狀態變化過程。
提交一個Transaction
這里我們舉個例子,還是上篇文章的例子,A擁有110LBR,B擁有52LBR。接下來會構建一個原始交易Tn,將A擁有的10LBR轉給B。
這個原始交易將包含如下字段:
-
A的帳戶地址。
-
一個要代表A執行的動作的程序。它包含:
一個Move字節碼表示的peer-to-peer交易腳本。
一個該腳本的輸入列表(例如,B的帳戶地址和付款金額)。
-
Gas價格 -A愿意為執行交易而為每單位Gas支付的金額。Gas是一種支付計算和存儲費用的方式。Gas單位是對計算的抽象度量,沒有固有的實際值。
-
A愿意為此交易支付的最大Gas金額。
-
交易的到期時間。
-
序列號
每個賬號的交易都有一個唯一的序列號,用來標記這個賬號發出的交易。
有了這個原始交易之后,我們會使用A的私鑰對這個原始交易進行簽名,簽名后的交易包含如下內容:
- 原始交易
- A的公鑰
- A的簽名
我們假設這個Libra區塊鏈上面有100個validators, 我們用V1到V100來表示。客戶將這個Transaction提交到了V1。V1是這一輪共識的發起者。
交易入鏈的詳細過程
我們先用一張圖來表示這個Transaction入鏈的過程:
Transaction的入鏈過程可以分為五大步:
- 接收Transaction
- 和其他Validators共享這個Transaction
- 區塊Proposing
- 執行區塊并達成共識
- 提交區塊
接收Transaction
客戶端將transaction提交給V1,V1的admission Control(AC)模塊將會接收這個transaction。
AC是驗證器的唯一外部接口。 客戶端對驗證器的任何請求都將首先轉到AC。
AC調用虛擬機(VM)的接口來驗證該交易的正確性,包括:簽名認證,判斷賬戶是否有足夠的金額,Tn不是一個重放交易等等信息。用以防止惡意節點。
這里虛擬機是用來執行Move腳本,也是Libra業務邏輯運行的地方。
如果Tn通過了VM的驗證,那么進入下一步,AC將會把Transaction送到MemPool中。
Mempool是一個共享緩沖區,用于保存“等待”執行的事務。 將新事務添加到內存池后,內存池將與系統中的其他驗證程序共享此事務。 為了減少“共享內存池”中的網絡消耗,每個驗證器負責將自己的事務傳遞給其他驗證器。 當驗證者從另一個驗證者的內存池接收到事務時,該事務將添加到接收者驗證者的內存池中。
和其他Validators共享這個Transaction
區塊Proposing
我們假設V1是Proposing節點,那么它會將自己mempool的交易打包成一個Block,然后通過共識模塊向其他驗證節點提交一個Proposal。
共識模塊負責通過與網絡中的其他驗證者一起參與共識協議來對交易塊進行排序并就執行結果達成一致。
V1的共識模塊負責協調所有驗證者之間對擬議區塊中交易順序的協議。
執行區塊并達成共識
為了達成共識,在第六步生成的Block會被傳遞到執行模塊。執行的工作是協調一組事務的執行,并保持一個可以通過共識投票的臨時狀態。
執行模塊管理虛擬機(VM)中事務的執行。 請注意,這里的執行是在區塊中的交易達成一致之前進行的推測性執行。
將Block中的Transaction執行完成后,執行模塊將Block中的Transaction追加到Libra區塊鏈的Merkle累加器。 這是Merkle累加器的內存/臨時版本。 執行這些事務的(提議/推測)結果將返回到共識組件。從“共識”到“執行”的箭頭表示執行交易的請求是由共識組件發出的。
V1(共識領導者)試圖與參與該共識的其他驗證者就塊的執行結果達成共識。
提交區塊
如果區塊的執行結果由一組具有多數表決權的驗證器達成一致并簽名,則驗證器V1的執行模塊從推測執行緩存中讀取區塊執行的結果,并提交區塊中的所有事務并永久存儲。
A的帳戶現在將具有100LBR,其序列號將為n+1。如果Tn被B重放,則它將被拒絕,因為A的帳戶的序列號n+1大于重放的事務的序列號n。
更多精彩內容且看:
- 區塊鏈從入門到放棄系列教程-涵蓋密碼學,超級賬本,以太坊,Libra,比特幣等持續更新
- Spring Boot 2.X系列教程:七天從無到有掌握Spring Boot-持續更新
- Spring 5.X系列教程:滿足你對Spring5的一切想象-持續更新
- java程序員從小工到專家成神之路(2020版)-持續更新中,附詳細文章教程
更多教程請參考 flydean的博客
總結
以上是生活随笔為你收集整理的Libra教程之:Transaction的生命周期的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Libra教程之:Libra协议的关键概
- 下一篇: JDK13的六大重要新特性