進入libra源碼,學(xué)Rust(一)

今天呢,跟大家一起學(xué)習(xí)Rust,? 學(xué)習(xí)的項目就是 facebook 的 Libra 項目。 搞懂Libra項目,學(xué)習(xí)區(qū)塊鏈的思想和項目的build,是我學(xué)習(xí)Rust的主要動力。 因此我們首先從Libra 的項目說起,把各個模塊都大概了解下,然后在分析代碼的時候,我將以自己的想法,談?wù)?設(shè)計 和 讀 源碼(Rust).

首先簡單的說說 Libra項目, Libra(天秤座)的使命是建立一個簡單的全球貨幣和金融基礎(chǔ)設(shè)施,為數(shù)十億人提供支持。這個貨幣叫做 Libra,號稱是以分散式區(qū)塊鏈為基礎(chǔ),構(gòu)建出低波動性加密貨幣(相比比特幣), 和智能合約平臺(相比以太坊). facebook的雄心計劃可見 Libra 具有發(fā)幣(國家央行)的作用,為全球人提供金融服務(wù)(全球的央行). 發(fā)幣是以有價資產(chǎn)作為支撐。

先不考慮Libra 的經(jīng)濟邏輯,咱們先轉(zhuǎn)過來看看Libra 項目的源碼和思路??纯创a層面上是如何支持這么大的一個宏觀計劃的? 在分析代碼前,我們需要看看Libra 的一些核心概念,和Libra的源碼項目結(jié)構(gòu),然后我們來分析源碼的每個模塊的設(shè)計和源碼。

核心概念:

發(fā)送方地址: 發(fā)送方的賬戶地址

發(fā)送方公鑰: 公鑰可以驗證私鑰的簽名,公鑰可以產(chǎn)生許多的賬戶地址,賬戶地址一共是有32個字節(jié)組成

發(fā)送方私鑰: 私鑰是用來做簽名的.?

Gas 價格: 這個價格是用來付費的,這個費用是用來執(zhí)行一筆交易。我的理解相當(dāng)于手續(xù)費,費用越高,越優(yōu)先的成交這筆交易.

交易的狀態(tài): 意思是在區(qū)塊鏈上每個人賬戶最終狀態(tài),比如 這個人賬戶余額是多少,轉(zhuǎn)賬是多少,等。

分類帳狀態(tài):? Libra 區(qū)塊鏈的狀態(tài),這個狀態(tài)是由在這個區(qū)塊鏈上的所有賬戶的狀態(tài)的組成, 為了執(zhí)行這比交易,區(qū)塊鏈的 節(jié)點的validator 必須知道最新的全局狀態(tài)。

工作量證明(PoW):? 這個跟? Merkle tree 有關(guān)系,后面會單獨的來談?wù)?Merkle tree 背后的原理是什么。工作量證明機制, 簡單來說就是?來實現(xiàn)競爭結(jié)果判定。

但是對于Libra這個項目來說,不會像比特幣那種方式 造成很大的資源浪費,Libra 應(yīng)該提出自己的解決方式來 解決工作量證明的問題。

好了,咱們來看看 Libra的項目的構(gòu)建,然后再看看源碼項目的結(jié)構(gòu): 下圖是來自于官方的validator node 大致 各個模塊的流程。咱們來一個一個看看 每個模塊是大致做什么的。

Client: 客戶端就是發(fā)起transaction的,和user 打交道的。

Admission Control: admission control 是一個對外的接口,任何的一個client 發(fā)起的request,都會首先進入admission control 這個節(jié)點。

AC 這個模塊是對client request 做一個初始的檢查, 比如可以做流量的控制,合法合規(guī)性的檢查。 Libra 是用 grpc 來做 各個節(jié)點之間的調(diào)用的。

Mempool: 這個節(jié)點是用來做buffer的,將待處理的交易存儲到這個buffer 里,等待被執(zhí)行。因為是分布式系統(tǒng),這池里面存儲的交易, 和其他節(jié)點是共享的。

Consensus: 這個一致性組件, 一是為了 排序交易的區(qū)塊,二是為了 對一筆交易 和其他節(jié)點達成共識。

Execution: 執(zhí)行節(jié)點,一是 利用虛擬機(VM) 執(zhí)行這段交易(以太坊智能合約 是有vm 執(zhí)行合約里面的代碼).? 二是協(xié)調(diào)一個區(qū)塊交易的執(zhí)行,并且在其他各個節(jié)點中去維護一個透明的交易狀態(tài)

Virtual Machine(VM): AC 和 Mempool 是使用VM 組件 執(zhí)行每個交易的校驗檢查。VM 是用來執(zhí)行程序。

Storage: storage 是用來存儲達成協(xié)議的交易區(qū)塊鏈,和執(zhí)行結(jié)果(執(zhí)行的最終狀態(tài)).?

大家看到這里,是不是很激動

1. 這些模塊是怎么組織到一起的? 代碼的邏輯是怎么樣實現(xiàn)的呢?

2. 好多分布式的共有的問題是如何解決的呢? 比如共識。 Rust 是如何基于CAP 理論來做分布式系統(tǒng)的呢? 相信構(gòu)架的朋友們,會很好奇。

3. Rust 本身號稱安全性的語言,依靠Rust 類型系統(tǒng)和 所有權(quán)系統(tǒng)。Rust 語言本身就很神奇。

好了,咱們一起去探究探究。 首先咱們先看看Libra 項目的代碼結(jié)構(gòu)。后面我們一個一個來討論。

1. 編譯器: CLion

2. 在CLion 里配置好環(huán)境,下載Rust 插件和 cargo 的toml 插件包管理。?

3. 安裝Rust 和 cargo,請見官網(wǎng)。

4. 更改cargo 的鏡像源,速度會快點。鏡像 查詢請見:?https://crates.io/

鏡像源更改:? (1)?cd? ~/.cargo/ (2) vi?config (3) copy 下面的內(nèi)容.?

[source.crates-io]

registry = "https://github.com/rust-lang/crates.io-index"

replace-with = 'ustc'

[source.ustc]

registry = "git://mirrors.ustc.edu.cn/crates.io-index"

好了,配置好了之后,去download 的 Libra項目?https://github.com/libra/libra.git, 然后使用 CLion 大家項目。 執(zhí)行cargo build: 這個步驟會執(zhí)行很久,最好有外網(wǎng)的環(huán)境。 因為網(wǎng)絡(luò)的原因,很可能build 是失敗。

下圖是build 成功的 項目,看著都感覺到激動, 每個模塊的層次很清楚。 后面就是慢慢學(xué)習(xí)的時候了。

下一篇博客,將從這個項目的依賴構(gòu)建說起,然后我們從client 模塊探究。逐層分析。

咱們下期見!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容