溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Libra數(shù)據(jù)結(jié)構(gòu)和存儲(chǔ)知識(shí)點(diǎn)有哪些

發(fā)布時(shí)間:2022-01-15 10:49:12 來(lái)源:億速云 閱讀:129 作者:iii 欄目:互聯(lián)網(wǎng)科技

本文小編為大家詳細(xì)介紹“Libra數(shù)據(jù)結(jié)構(gòu)和存儲(chǔ)知識(shí)點(diǎn)有哪些”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“Libra數(shù)據(jù)結(jié)構(gòu)和存儲(chǔ)知識(shí)點(diǎn)有哪些”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來(lái)學(xué)習(xí)新知識(shí)吧。

驗(yàn)證的數(shù)據(jù)結(jié)構(gòu)是通過(guò)Merkle樹(shù)來(lái)實(shí)現(xiàn)的。如果大家熟悉其他的區(qū)塊鏈的話,大家可能知道Merkle樹(shù)由于其特殊的結(jié)構(gòu),被用在大多數(shù)區(qū)塊鏈中。

存儲(chǔ)的數(shù)據(jù)結(jié)構(gòu)

如下圖所示,我們來(lái)詳細(xì)的講解其存儲(chǔ)的數(shù)據(jù)結(jié)構(gòu):

Libra數(shù)據(jù)結(jié)構(gòu)和存儲(chǔ)知識(shí)點(diǎn)有哪些

(1)用Merkle樹(shù)來(lái)表示的不斷累加的賬本歷史。而Merkle樹(shù)的根hash值是通過(guò)(2)驗(yàn)證者的簽名來(lái)得到的。

每當(dāng)有交易提交到賬本的時(shí)候,會(huì)把TransactionInfo提交到Merkle樹(shù)的葉子節(jié)點(diǎn)。

3表示的就是和這個(gè)葉子節(jié)點(diǎn),它包含3部分內(nèi)容:

  • 簽名過(guò)的交易(4)。

  • 交易過(guò)程中的事件Event(5),也是以Merkle樹(shù)來(lái)表示。

  • 還有交易i執(zhí)行過(guò)后的賬本狀態(tài)(6),是用Sparse Merkle樹(shù)來(lái)表示的,其中它的葉子節(jié)點(diǎn)是賬戶(hù)信息。

賬本歷史

對(duì)于大多數(shù)區(qū)塊鏈來(lái)說(shuō),比如比特幣,他們存儲(chǔ)的是交易記錄,然后以一個(gè)一個(gè)包含交易的塊來(lái)構(gòu)成的。后面的塊包含了前面塊的hash值。

這樣做的缺點(diǎn)就是,如果我知道某個(gè)區(qū)塊B1是準(zhǔn)確的,那么我想驗(yàn)證現(xiàn)在的區(qū)塊B2,則必須拉取從B1到B2之間的所有交易記錄,這對(duì)于區(qū)塊鏈的驗(yàn)證效率是不高的。

在Libra中,這個(gè)得到了改善。我們使用的是單一的Merkle樹(shù)來(lái)提供表示賬本歷史的驗(yàn)證過(guò)的數(shù)據(jù)結(jié)構(gòu)。

在上面的圖中我們可以看到,TransactionInfo包含了賬本狀態(tài),事件和賬戶(hù)信息。在Merkle樹(shù)中,每個(gè)TransactionInfo都是與一個(gè)數(shù)據(jù)庫(kù)版本號(hào)i相對(duì)應(yīng)的。

在Libra中,我們使用增量的Merkle tree數(shù)據(jù)結(jié)構(gòu),這對(duì)于構(gòu)建效率非常有幫助,因?yàn)槲覀冎恍枰蚶系腗erkle tree中添加新的交易即可。

對(duì)于驗(yàn)證節(jié)點(diǎn)來(lái)說(shuō),新的交易只跟上一個(gè)賬本狀態(tài)相關(guān),那么驗(yàn)證節(jié)點(diǎn)其實(shí)可以刪除掉不需要的賬本狀態(tài)版本來(lái)節(jié)省空間和效率。

賬本狀態(tài)

賬本狀態(tài)Si表示了所有在版本i中的賬戶(hù)的信息。它可以看成是一個(gè)key value的map。其中key是256bit的賬戶(hù)地址,value就是驗(yàn)證過(guò)的賬戶(hù)。

Si也是用Merkle tree來(lái)表示的,既然key是256bit,那么整個(gè)Merkle tree可以表示為一個(gè)2256大小的樹(shù)如下所示:

Libra數(shù)據(jù)結(jié)構(gòu)和存儲(chǔ)知識(shí)點(diǎn)有哪些

如果直接用256大小來(lái)表示太浪費(fèi)空間了,因?yàn)槲覀儾](méi)有這么多的賬戶(hù)。那么我們可以做適當(dāng)?shù)膬?yōu)化:

(1)表示的是原始狀態(tài)的Merkle tree。

在(2)中,我們將所有的空節(jié)點(diǎn)用方框表示。這樣會(huì)導(dǎo)致樹(shù)的不平衡,因?yàn)槿~子節(jié)點(diǎn)總是樹(shù)的最低一層。那么我們可以做適當(dāng)?shù)膬?yōu)化如(3)所示。

當(dāng)狀態(tài)樹(shù)進(jìn)行更新的時(shí)候,可以重用之前未更新的賬戶(hù)數(shù)據(jù),這樣可以在驗(yàn)證者中存儲(chǔ)狀態(tài)樹(shù)的多個(gè)版本,也可以加快驗(yàn)證節(jié)點(diǎn)的驗(yàn)證速度。

賬戶(hù)

在邏輯上,一個(gè)賬戶(hù)是資源和module的集合,并存儲(chǔ)在賬戶(hù)的地址中。

在物理上,賬戶(hù)存儲(chǔ)的是排序后的access paths映射。access paths可以看成類(lèi)似文件路徑一樣的東西。

和其他的區(qū)塊鏈不同的是,在Libra中,我們鼓勵(lì)用戶(hù)將資源存儲(chǔ)在自己的賬戶(hù)中,在現(xiàn)有的版本中,我們對(duì)小賬戶(hù)做了優(yōu)化,在后面的版本中我們同樣會(huì)對(duì)大賬戶(hù)也進(jìn)行優(yōu)化升級(jí)。

如果所有的資源都存儲(chǔ)在賬戶(hù)中,那么隨著時(shí)間的推移,賬戶(hù)信息會(huì)變得越來(lái)越大,這會(huì)是一個(gè)問(wèn)題。

針對(duì)這個(gè)問(wèn)題,Libra提出了空間租賃的概念。簡(jiǎn)單講就是給賬戶(hù)一個(gè)過(guò)期時(shí)間,過(guò)期之后賬戶(hù)就不可以被訪問(wèn)了。當(dāng)然,Libra也提供了過(guò)期賬戶(hù)的恢復(fù)機(jī)制,只需要支付一定數(shù)量的Libra幣即可。

事件

和賬戶(hù)一樣,事件也是使用Merkle tree來(lái)存儲(chǔ)的,并被包含在TransactionInfo中。

讀到這里,這篇“Libra數(shù)據(jù)結(jié)構(gòu)和存儲(chǔ)知識(shí)點(diǎn)有哪些”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過(guò)才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI