您好,登錄后才能下訂單哦!
這篇文章主要介紹了Libra protocol的邏輯數(shù)據(jù)模型是什么的相關(guān)知識,內(nèi)容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Libra protocol的邏輯數(shù)據(jù)模型是什么文章都會有所收獲,下面我們一起來看看吧。
Libra區(qū)塊鏈本質(zhì)上是一個加密數(shù)據(jù)庫,這個數(shù)據(jù)庫是通過Libra protocol來維護的。所以Libra protocol是Libra區(qū)塊鏈的核心。
Libra protocol的核心是賬戶,resources和module.
數(shù)據(jù)庫主要存儲可編程的resources賬本,比如:Libra coin。這些resources是由定義的module來約定的,這些module也存儲在數(shù)據(jù)庫中。
resources屬于賬戶,并通過公鑰加密來認證。
帳戶可以代表系統(tǒng)的直接最終用戶,也可以代表實體,例如
代表用戶的保管錢包。
帳戶所有者通過sign transactions來使用帳戶內(nèi)的資源。
下面是一個client和validators使用libra protocol進行交互的例子:
1.client request
2.proposes transactions
3.execute the transactions
3.execute the transactions
4.vote
5.responses
client
leader
other validators
具體分析一下每個步驟:
驗證器維護數(shù)據(jù)庫并處理客戶提交的交易,以將其包括在數(shù)據(jù)庫中。
驗證者使用分布式共識協(xié)議來保證交易的提交。驗證者不是不斷輪動的。當(dāng)驗證人擔(dān)任領(lǐng)導(dǎo)者時,它會提出交易,包括直接由客戶提交給的他的交易以及通過其他驗證者間接提交給其他驗證者的交易。3. 所有驗證程序執(zhí)行交易并形成包含經(jīng)過身份驗證的數(shù)據(jù)結(jié)構(gòu):新的賬本的歷史記錄。
作為共識協(xié)議的一部分,驗證者對該數(shù)據(jù)結(jié)構(gòu)的驗證者進行投票。
作為在版本i上提交事務(wù)Ti的一部分,共識協(xié)議在版本i的數(shù)據(jù)庫完整狀態(tài)上輸出一個簽名-包括其整個歷史記錄來作為對來自客戶端的查詢的驗證響應(yīng)。
客戶端可以向驗證器發(fā)出查詢,以從數(shù)據(jù)庫讀取數(shù)據(jù)。 由于數(shù)據(jù)庫已通過身份驗證,所以可以確??蛻舨樵冺憫?yīng)的準確性。
此外,客戶端可以選擇通過同步驗證者的交易記錄來創(chuàng)建整個數(shù)據(jù)庫的副本。
在創(chuàng)建副本時,客戶端可以驗證驗證者是否正確執(zhí)行交易,從而提高了系統(tǒng)的可靠性。 其他客戶端可以從持有副本的客戶端讀取數(shù)據(jù),方式與從驗證程序讀取客戶端的方式相同。 為了簡單起見,本文其余部分假設(shè)客戶端直接查詢驗證器而不是副本。
Libra區(qū)塊鏈的所有數(shù)據(jù)都存儲在一個單一的帶版本的數(shù)據(jù)庫中。數(shù)據(jù)庫的版本號是由一個無符號的64-bit的整數(shù)來表示。這個整數(shù)是系統(tǒng)目前執(zhí)行的交易個數(shù)。
假如在某個版本i,數(shù)據(jù)庫包含元組(Ti,Oi, Si),其中Ti表示交易,Oi表示交易的輸出,Si表示版本的賬本狀態(tài)。
假如版本執(zhí)行了一個Apply函數(shù),那么這元組的意思就是:在賬本狀態(tài)Si-1執(zhí)行了一個Ti交易,產(chǎn)生了一個輸出Oi,和一個新的賬本狀態(tài)Si。
簡單說就是如下的公式:
Apply(Si?1, Ti)->?Oi, Si?.
Libra協(xié)議使用Move語言來實現(xiàn)這個Apply功能,我們會在后面的文章中介紹。本章我們主要講解版本數(shù)據(jù)庫的交易和查詢功能。
賬本狀態(tài)是Libra區(qū)塊鏈的基礎(chǔ),他包括每個用戶在不同版本的狀態(tài)。 每個驗證者都可以獲取最新的分類賬本狀態(tài)。
賬本結(jié)構(gòu)為鍵值存儲,可將帳戶地址鍵映射到帳戶值。 賬戶
在分布賬本狀態(tài)下,是已發(fā)布的Move資源和模塊的集合。 其中Move資源存儲數(shù)據(jù)值,模塊存儲代碼。
在賬本初始化的過程中,我們會創(chuàng)建一部分內(nèi)置的賬戶。
賬戶地址
賬號地址是一個256-bit的值。用戶可以在本地創(chuàng)建公私鑰對,然后將公鑰的加密hash值作為賬戶的地址。這里要注意的是,這個賬號地址只有發(fā)生交易的時候才會被創(chuàng)建(比如有Libra幣被發(fā)送到這個地址的時候)。
賬戶創(chuàng)建之后,用戶就可以使用私鑰簽名來使用這個賬號來發(fā)送交易。用戶可以在不更換賬號地址的情況下,來更換或者輪循私鑰。
如果你愿意,一個用戶可以創(chuàng)建無限多個賬戶。
Resource
之前講到了狀態(tài)數(shù)據(jù)庫是一個key-value形式的結(jié)構(gòu)。key就是account的地址,value可以是resource也可以是module。
每一個resource都有一個由module聲明的類型。resource的類型包含類型的名字和定義該類型的module的名字和地址。
假如我們有兩個賬戶:Ox12和Ox34. 在Ox12中定義了一個module:Currency,在這個module中定義了一個type T。那么這個類型的名字就叫:Ox12.Currency.T。
這個類型的名字是唯一的,即使你在其他的賬戶中使用這個類型。比如我在Ox34中使用了這個類型,那么可以從Ox34中這樣獲得該resource: 0x34/resources/0x12.Currency.T.
這樣設(shè)計的目的是讓所有的資源類型都有一個統(tǒng)一的名字。
Module
Module主要是使用Move字節(jié)碼來聲明資源和procedures。和資源一樣,Module也是通過賬戶地址來定位的,比如上面的Currency Module的標志就是:Ox12.Currency。
在當(dāng)前的Libra版本中,Module是不可更改的。一旦該Module在賬戶中聲明之后,就不可以刪除和更改,除非進行硬分叉。這個限制可能在未來的版本中發(fā)生改變。
客戶端通過提交Transaction來更新Libra區(qū)塊鏈。通常來說Transaction包含一個交易腳本和交易腳本所需要的參數(shù)。
驗證者使用當(dāng)前賬本狀態(tài)和交易腳本的輸入產(chǎn)生一個固定的輸出結(jié)果。賬本的狀態(tài)只有當(dāng)交易被共識提交之后,才會生效。
交易輸出
執(zhí)行一個交易Ti會產(chǎn)生一個新的賬本狀態(tài)Si,執(zhí)行結(jié)果代碼(執(zhí)行是否成功),使用的gas,和event列表。
事件
事件列表是通過執(zhí)行事務(wù)產(chǎn)生的一系列副作用。Move代碼
在事件structure中出發(fā)時間。 每個事件都與唯一鍵相關(guān)聯(lián),
通過這個唯一鍵,可以確定發(fā)出事件的結(jié)構(gòu)以及有效payload(有關(guān)事件的詳細信息)。
一旦在共識協(xié)議中達成交易,交易產(chǎn)生的事件會被添加到賬本歷史中,并在相應(yīng)的事件中提供成功執(zhí)行的證明。 例如,一個
付款交易會產(chǎn)生一個事件,使接收者可以確認已付款收到并確認付款金額。
看起來好像Event是多余的,因為除了查詢交易產(chǎn)生的事件以外,客戶端還可以通過查詢blockchain是否包含該交易來確定。
但是這很容易出錯,因為包含Ti并不意味著成功執(zhí)行(例如,
gas用完后可能會被打斷)。 在交易可能失敗的系統(tǒng)中,
event中的證據(jù),不僅表明特定交易已執(zhí)行,而且已成功完成
完成了預(yù)期的效果。
交易只能生成events,他們并不能讀取event,這樣的設(shè)計是為了讓交易關(guān)注與最新的state信息,而不是歷史的event信息。
賬本歷史按順序存儲著提交和執(zhí)行的交易及其相關(guān)聯(lián)的事件。賬本歷史主要是用來保存記錄,讓大家知道最新的賬本狀態(tài)是怎么計算出來的。
和其他的區(qū)塊鏈不一樣的是,Libra賬本歷史并沒有交易塊的概念,在邏輯數(shù)據(jù)模型中,交易是順序執(zhí)行的,并不需要區(qū)分到底這個交易在哪個塊里面。
雖然驗證者不需要賬本歷史來產(chǎn)生新的賬本狀態(tài),但是客戶端可以使用這個賬本歷史來驗證和查詢相應(yīng)的交易信息。
驗證者通過查詢歷史賬本來告訴客戶端之前的賬本狀態(tài),交易和相應(yīng)的輸出。
客戶可以通過在在歷史賬本狀態(tài)上重新執(zhí)行特定的交易,通過驗證輸出的結(jié)果和執(zhí)行后的賬本狀態(tài)來驗證該交易是否被正確的執(zhí)行。
關(guān)于“Libra protocol的邏輯數(shù)據(jù)模型是什么”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對“Libra protocol的邏輯數(shù)據(jù)模型是什么”知識都有一定的了解,大家如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。