Libra教程之:执行Transactions
文章目錄
- Transactions是什么
- Transactions運行的基礎條件
- Transactions的結構
- 執行Transactions
Transactions是什么
我們講到了Libra是一個分布式賬本,存儲著賬本狀態,從賬本狀態里面,我們可以獲取現在每一個賬戶的資金情況和存儲的相應資源。
而這個賬本狀態就是通過執行Transactions來進行改變的。
用戶定義的Transactions是通過Move來編寫的,目前來說Libra處于早期版本,只有有限的功能開放給Move語言(不如用戶不能自定義資源類型等),但是隨著Libra的發展,我相信Move語言將會得到更多的功能支持。
Transactions運行的基礎條件
在Libra中,我們運行Transactions,這里面包含著如下幾個基礎條件:
賬本的初始狀態。所有的驗證者節點都必須接受賬本的初始狀態,并在該初始狀態之上進行后續的驗證操作。
在賬本的初始狀態中,我們需要定義Libra的核心組件(比如: 賬戶的邏輯,交易的驗證,驗證者的選擇,Libra幣等),這些核心組件都是以Move modules的形式存在的。
同樣的,要保證交易的執行,我們還需要一個初始賬戶,和初始的驗證節點,這些都是需要在初始狀態中定義。
為了簡便起見,我們假設賬本的初始狀態為空,然后通過執行一個Transaction T0來生成上面提到的modules。注意這里的T0是一個特殊的交易,他和普通的交易不一樣,他只能通過配置來實現。
交易的確定性。Libra的所有交易都必須是確定的并且和重復發送的。就是說如果知道了給定交易的輸入,則必定能得到相同的輸出。
前面的文章我也提到過函數式編程,這里的作用和函數式編程很像。交易沒有任何副作用。我們可以通過重新執行交易的歷史記錄來得到和現在賬本狀態一樣的賬本。
可度量的。同其他區塊鏈一樣,為了防止DDOS攻擊,Libra引入了gas的概念。每個交易都必須花費一定的gas,這樣可以有效的阻止無效的交易產生。
Libra的gas和其他的區塊鏈的gas有一點不同的是,Libra的gas只是用來減少系統在高負載的情況運行的可能性,對于正常交易來說,Libra的gas花費很少。
gas包括gas價格和gas數目。驗證節點會優先執行gas價格高的交易,而丟棄gas價格低的交易,這樣就可以有效的防止系統在高負載的情況下運行。
同樣的,我們也有一個最大的gas數目,如果交易執行超過了gas的最大數目,則Libra虛擬機會停止執行,交易結果不會寫入到賬本狀態中,但是會被記錄在交易記錄中。
資產特性。我們知道Libra幣是要與真實世界的金錢掛鉤的,所以Libra幣必須不能重復,不能丟失,也不能未授權被使用。這些特征都是通過Move虛擬機來實現的。
Transactions的結構
在Libra中,一個Transaction就是一個簽名過的數據,它包含如下內容:
發送者地址。交易發送者的地址,VM可以通過讀取該地址內的LibraAccount.T資源來獲取該地址的序列號,認證密鑰和余額等信息。
發送者公鑰。和該公鑰相匹配的私鑰用來對交易進行簽名。上面提到的LibraAccount.T資源里面的認證密鑰就是該公鑰的hash值。
程序。程序是一個Move字節碼的腳本代碼,有可能還包括所需額參數列表。
最大gas數目。VM允許的最大gas數目。
序列號。 序列號是一個無符號整數,每次交易后,賬戶的序列號都會加1。序列號主要用來防止重放攻擊。
執行Transactions
執行Transactions通常來說,有6個步驟。
檢查簽名。簽名主要檢查Transaction是否跟發送者的public key和實際數據相匹配。
運行prologue。運行prologue階段主要檢查交易的發送者(是否有足夠的Libra幣),該交易是否是一個重放交易。所有的功能都是通過LibraAccount模塊的prologue過程來實現的。
驗證交易腳本和模塊。VM會使用Move字節碼驗證器來驗證交易的腳本和模塊是不是有效的(類型安全,引用安全,資源安全等)。
發布模塊。程序里面的模塊都會被發布到交易發起者的賬戶中。注意:模塊的名字必須是唯一的,否則交易會失敗。
運行交易腳本。VM構建腳本參數,并運行交易腳本。如果交易成功,將會把交易和相關的事件寫入賬本狀態中。如果交易失敗,賬本狀態不會改變。
運行epilogue。 最后VM運行epilogue來計算相應的gas并減掉相對應的數值,并增加發送者賬戶的序列號。和prologue一樣,epilogue也是LibraAccount模塊的一個過程。
更多精彩內容且看:
- 區塊鏈從入門到放棄系列教程-涵蓋密碼學,超級賬本,以太坊,Libra,比特幣等持續更新
- Spring Boot 2.X系列教程:七天從無到有掌握Spring Boot-持續更新
- Spring 5.X系列教程:滿足你對Spring5的一切想象-持續更新
- java程序員從小工到專家成神之路(2020版)-持續更新中,附詳細文章教程
更多教程請參考 flydean的博客
總結
以上是生活随笔為你收集整理的Libra教程之:执行Transactions的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Libra教程之:Libra proto
- 下一篇: Libra教程之:数据结构和存储