對(duì)應(yīng)官方開發(fā)者文檔:https://developers.libra.org/docs/libra-protocol
Libra協(xié)議:核心概念
Libra區(qū)塊鏈?zhǔn)且粋€(gè)通過(guò)加密認(rèn)證的分布式數(shù)據(jù)庫(kù),它基于Libra協(xié)議叛买。本文檔簡(jiǎn)要介紹了Libra協(xié)議中的關(guān)鍵概念胸遇,有關(guān)Libra協(xié)議中所有元素的詳細(xì)說(shuō)明空执,請(qǐng)參閱Libra區(qū)塊鏈技術(shù)白皮書滑频。?
Libra區(qū)塊鏈分布式網(wǎng)絡(luò)由驗(yàn)證器節(jié)點(diǎn)來(lái)維護(hù)橙垢。也稱為驗(yàn)證器豺憔。驗(yàn)證人(驗(yàn)證節(jié)點(diǎn))通過(guò)共同遵守共識(shí)協(xié)議來(lái)促成區(qū)塊鏈中的交易的數(shù)據(jù)的一致驶拱。?
Libra testnet展示了Libra區(qū)塊鏈軟件的早期原型—即Libra Core霜浴。
交易和狀態(tài)
Libra協(xié)議兩個(gè)核心基本概念 - 交易和狀態(tài)。 在任何時(shí)間點(diǎn)蓝纲,區(qū)塊鏈都具有一個(gè)“狀態(tài)”阴孟。狀態(tài)(或稱為分布式賬本狀態(tài))表示鏈上數(shù)據(jù)的當(dāng)前快照。 在執(zhí)行了交易后會(huì)更改區(qū)塊鏈的一個(gè)狀態(tài)税迷。
圖1.1交易狀態(tài)變更.
圖1.1表示執(zhí)行交易時(shí)在Libra區(qū)塊鏈上狀態(tài)的一個(gè)變化永丝。例:在狀態(tài)SN-1時(shí),Alice擁有110Libra Coin箭养,Bob擁有52個(gè)Libra Coin慕嚷。當(dāng)交易(TN)發(fā)生后,區(qū)塊鏈生成一個(gè)新的狀態(tài)毕泌。交易TN(發(fā)送10Libra Coin從Alice到Bob)發(fā)生喝检,狀態(tài)從SN-1到SN『撤海可以看到Alice的Libra Coin減少10挠说,Bob的Libra Coin增加10。新的狀態(tài)(SN)顯示更新后的Libra Coin余額愿题,在圖1.1中可見损俭。
A和B代表區(qū)塊鏈中的Alice和Bob的帳戶。
SN-1表示區(qū)塊鏈中(N-1)的狀態(tài)抠忘。
TN是區(qū)塊鏈上執(zhí)行的第n個(gè)交易撩炊。在圖中例子是外永,TN表示是: “將10個(gè)Libra Coin從Alice的賬戶發(fā)送到Bob的賬戶”崎脉。
F是一個(gè)功能函數(shù)。F始終會(huì)返回一致的初始狀態(tài)或者特定交易后的最終狀態(tài)伯顶。如果區(qū)塊鏈當(dāng)前狀態(tài)是SN-1囚灼,那么在狀態(tài)SN-1上執(zhí)行了交易TN骆膝,最后區(qū)塊鏈的狀態(tài)為SN。
SN是區(qū)塊鏈的第n個(gè)狀態(tài)灶体。 SN是將F應(yīng)用TN中與SN-1后的結(jié)果阅签。
Libra協(xié)議使用Move語(yǔ)言來(lái)實(shí)現(xiàn)功能函數(shù)F的操作。
交易
Libra區(qū)塊鏈的用戶執(zhí)行提交交易來(lái)請(qǐng)求更改分布式賬本的狀態(tài)蝎抽,在區(qū)塊鏈上交易包含如下:
發(fā)送人地址 - 交易發(fā)起人的帳戶地址政钟。
發(fā)送人的公鑰 - 用于簽署交易的私鑰所對(duì)應(yīng)的公鑰。
程序-該程序包含以下內(nèi)容:?
Move的交易字節(jié)碼腳本樟结。?
腳本中相關(guān)選項(xiàng)养交,對(duì)于點(diǎn)對(duì)點(diǎn)的交易中,輸入包含接收人的信息瓢宦,交易發(fā)送給接收人的金額碎连。?
Move字節(jié)碼模塊可選列表。
Gas價(jià)格(以微Libra/Gas為單位)-發(fā)送方執(zhí)行交易時(shí)所需要支付的Gas金額驮履。Gas是支付的是在區(qū)塊鏈上計(jì)算和存儲(chǔ)的費(fèi)用鱼辙,這個(gè)單位是一個(gè)抽象浮動(dòng)的計(jì)量,沒有具體固定的真實(shí)價(jià)值玫镐。
Gas單位上限 - 允許交易消耗的最大Gas單位限制倒戏。
序號(hào) - 無(wú)符號(hào)整型,必須等于發(fā)送者帳戶下存儲(chǔ)的序列號(hào)摘悴。
到期時(shí)間 - 交易有效截止的時(shí)間峭梳。
簽名 - 發(fā)送人的數(shù)字簽名。
交易腳本是一個(gè)自定義的程序蹂喻,腳本中交易邏輯與Libra區(qū)塊鏈分布式數(shù)據(jù)中的相關(guān)內(nèi)容進(jìn)行交互葱椭。
分布式賬本狀態(tài)
分布式賬本或者稱為L(zhǎng)ibra區(qū)塊鏈的全局狀態(tài)是由區(qū)塊鏈中所有賬戶的狀態(tài)組成,在執(zhí)行交易時(shí)口四,每個(gè)驗(yàn)證節(jié)點(diǎn)必須知道區(qū)塊鏈中的分布式數(shù)據(jù)庫(kù)的最新的全局狀態(tài)孵运。查看數(shù)據(jù)庫(kù)版本狀態(tài)。
數(shù)據(jù)庫(kù)版本號(hào)
Libra區(qū)塊鏈中的所有數(shù)據(jù)都保存在分布式節(jié)點(diǎn)的數(shù)據(jù)庫(kù)中蔓彩,那么每個(gè)節(jié)點(diǎn)中都會(huì)有一個(gè)版本號(hào)治笨,版本號(hào)是64位無(wú)符號(hào)型整數(shù),對(duì)應(yīng)系統(tǒng)執(zhí)行的交易數(shù)赤嚼。?
數(shù)據(jù)庫(kù)中的版本號(hào)允許驗(yàn)證者如下操作:
在最新的版本中執(zhí)行交易操作旷赖。
響應(yīng)用戶針對(duì)當(dāng)前版本和之前版本的相關(guān)分布式賬本中歷史記錄的查詢。
賬戶
Libra賬戶包含Move模塊和Move資源(資產(chǎn))更卒。它由賬戶的地址來(lái)標(biāo)識(shí)等孵。這就意味上每個(gè)賬戶的狀態(tài)都包含代碼和數(shù)據(jù):
Move模塊包含代碼(類型和程序聲明),但他們不包含數(shù)據(jù)蹂空。程序中相關(guān)模塊根據(jù)規(guī)則用于更新區(qū)塊鏈的全局狀態(tài)俯萌。
Move資源包含數(shù)據(jù)(資產(chǎn))果录,但是不包含代碼。在區(qū)塊鏈中相關(guān)的資源值都由分布式數(shù)據(jù)庫(kù)中發(fā)布的模塊來(lái)聲明類型咐熙。?
賬戶可以包含任意數(shù)量的Move資源和Move模塊弱恒。
賬戶地址
Libra賬戶的是地址是256位值。用戶使用數(shù)字簽名后來(lái)發(fā)布地址棋恼。賬戶的地址需通過(guò)用戶公鑰Hash加密返弹。用戶(代表用戶或者監(jiān)管的客戶端)要發(fā)送交易要求用戶通過(guò)自己的私鑰簽名后進(jìn)行發(fā)送,?
Libra用戶發(fā)布的地址數(shù)量沒有限制爪飘。申請(qǐng)賬戶需要擁有足夠Libra Coin琉苇,才能支付創(chuàng)建賬戶的費(fèi)用。
證明
Libra區(qū)塊鏈中所有的數(shù)據(jù)都以數(shù)據(jù)庫(kù)副本的模式存儲(chǔ)在各個(gè)節(jié)點(diǎn)中悦施,存儲(chǔ)用于記錄相關(guān)交易及交易函數(shù)執(zhí)行后結(jié)果以及整體區(qū)塊鏈的全局狀態(tài)并扇,區(qū)塊鏈上執(zhí)行的交易數(shù)據(jù)通過(guò)不斷增長(zhǎng)的Merkle交易樹來(lái)保存,通過(guò)Merkle樹中“葉”附加至樹上抡诞。
證明(驗(yàn)證)是一種驗(yàn)證Libra區(qū)塊鏈中數(shù)據(jù)真實(shí)性的方式穷蛹。
存儲(chǔ)在區(qū)塊鏈上的每個(gè)操作都進(jìn)行加密驗(yàn)證處理,結(jié)果驗(yàn)證也保證了沒有數(shù)據(jù)被省略(刪除)昼汗。例如:如果客戶端從賬戶查詢最新的幾個(gè)交易肴熏,那么驗(yàn)證查詢響應(yīng)時(shí)沒有交易被省略。
在區(qū)塊鏈中顷窒,客戶端無(wú)條件信任它從其他節(jié)點(diǎn)過(guò)來(lái)的接收的數(shù)據(jù)蛙吏。客戶端可以查詢賬戶余額鞋吉,可以請(qǐng)求是否處理了特定的交易鸦做,等等。和其他的Merkle樹一樣谓着,分布式賬本歷史記錄中可提供特定交易的O(logn)-sized(大衅糜铡)的證明,其中n是處理的交易的總數(shù)赊锚。
驗(yàn)證器節(jié)點(diǎn)
Libra區(qū)塊鏈的客戶端創(chuàng)建建議治筒,并將他們提交到驗(yàn)證器節(jié)點(diǎn)。驗(yàn)證器節(jié)點(diǎn)(和其他驗(yàn)證器節(jié)點(diǎn)一起)運(yùn)行共識(shí)協(xié)議舷蒲,執(zhí)行交易耸袜,并將交易和執(zhí)行結(jié)果存儲(chǔ)在區(qū)塊鏈中。驗(yàn)證器節(jié)點(diǎn)將決定篩選那些交易通過(guò)何種順序添加到區(qū)塊鏈中牲平。
圖1.2驗(yàn)證器的邏輯組件圖
驗(yàn)證器節(jié)點(diǎn)包含以下邏輯組件:
準(zhǔn)入控制(AC)
準(zhǔn)入控制是驗(yàn)證器節(jié)點(diǎn)的唯一的外部接口堤框。客戶端向驗(yàn)證器節(jié)點(diǎn)發(fā)出的任何請(qǐng)求都首先進(jìn)入AC。
AC對(duì)請(qǐng)求進(jìn)行初始的檢查胰锌,以保護(hù)驗(yàn)證器節(jié)點(diǎn)的其他部分免受損壞或被高頻輸入攻擊。
內(nèi)存池
內(nèi)存池作為一個(gè)緩沖區(qū)藐窄,用于保存“等待”執(zhí)行的交易资昧。
當(dāng)新的交易添加到驗(yàn)證器節(jié)點(diǎn)內(nèi)存池中,該驗(yàn)證器節(jié)點(diǎn)的內(nèi)存池與系統(tǒng)中其他驗(yàn)證器共同處理該交易荆忍。
共識(shí)
網(wǎng)絡(luò)中的驗(yàn)證器節(jié)點(diǎn)通過(guò)共識(shí)組件對(duì)交易數(shù)據(jù)塊進(jìn)行處理格带,且通過(guò)共識(shí)協(xié)議協(xié)商,達(dá)成執(zhí)行結(jié)果一致刹枉。
執(zhí)行
執(zhí)行組件利用虛擬機(jī)(VM)來(lái)執(zhí)行交易操作叽唱。
執(zhí)行主要工作是協(xié)調(diào)一個(gè)交易塊的執(zhí)行,并維持在最終達(dá)成一致狀態(tài)前的一個(gè)過(guò)渡狀態(tài)微宝。
執(zhí)行過(guò)程中的執(zhí)行結(jié)果在內(nèi)存中顯示棺亭,直到共識(shí)將塊提交到分布式數(shù)據(jù)庫(kù)中。
虛擬機(jī)(VM)
AC和內(nèi)存池使用虛擬機(jī)組件對(duì)交易執(zhí)行驗(yàn)證檢查蟋软。
虛擬機(jī)用于運(yùn)行交易中的程序代碼镶摘,并確定執(zhí)行后的結(jié)果。
存儲(chǔ)
存儲(chǔ)用于保存最終交易數(shù)據(jù)塊和執(zhí)行的結(jié)果岳守。
存儲(chǔ)每個(gè)驗(yàn)證器和其他組件交互的信息凄敢,請(qǐng)參閱交易的生命周期。
參考
我的第一筆交易?- 指導(dǎo)您使用Libra CLI客戶端在Libra區(qū)塊鏈上執(zhí)行您的第一筆交易湿痢。
Move入門?- Move新區(qū)塊鏈編程語(yǔ)言涝缝。
交易的生命周期?- 提供交易提交和執(zhí)行時(shí)“幕后”發(fā)生的事情。
Libra核心概述?- Libra核心組件的概念和實(shí)現(xiàn)細(xì)節(jié)譬重。
CLI指南?- 列出Libra CLI客戶端的命令及其用法拒逮。
Libra 詞匯表?- 提供Libra術(shù)語(yǔ)的快速參考。