2019年6月18日,Facebook發布了Libra白皮書及源碼,引起了業界的廣泛關注與討論。
這里我們通過分析Libra的源碼,探索Libra的各個組件,來了解一下Libra的整體設計與實現。
Libra核心組件
在進入主題之前,我們先對Libra有一個整體的認識:
看過Libra技術白皮書的朋友,應該都記得這張圖,下面簡單介紹一下這些核心的組件:
?a.AdmissionControl服務:簡稱AC,翻譯過來叫準入控制,可以理解為Libra的網關,將跟用戶打交道的接口暴露給用戶,例如提交Transaction、獲取用戶狀態等等
?b.Mempool服務:存儲未上鏈交易
?c.Consensus組件:LibraBFT共識組件
?d.VirtualMachine組件:簡稱VM,運行Move合約的虛擬機
?e.Execution組件:VM的入口,已換成Executor組件
?f.Storage服務:存儲所有鏈上數據
?g.Network組件:上圖中隱含了一個Network組件,不論是Node啟動還是跟其他節點通信,都需要Network組件。在第一條主線中,我們重點介紹Network組件。
東北財經大學禹鐘華:在保證制度及技術因素的情況下 數字貨幣是歷史發展的必然:今日,東北財經大學副教授、博士、中國國際金融學會理事禹鐘華在國際金融報刊文稱,作為實踐的先導,我們首先需要實現理念上的突破,確立“貨幣是信息、金融是信息系統”的觀點,進而從構筑信息系統的角度來理解構筑金融服務平臺。因此,在制度因素、技術因素得以保證的情況下,“數字貨幣”是歷史發展的必然。“數字貨幣”這一價值符號形式恰恰證明了貨幣的本質——信息。如果,貨幣的本質是價值信息,那么,金融系統就應該為信息系統,金融機構本質上就應該是這一信息系統中的構成節點。因此,金融系統的終極形式應該是信息系統,而金融機構的終極形式應該是信息平臺。[2020/6/8]
注意,上面介紹各個核心組件的時候,我們區分了組件和服務,兩者的區別是:組件沒有額外監聽端口,與node共用同一個端口,而服務會單獨監聽一個端口,通常是GRPC服務。
Libra設計與實現
Libra涉及的東西比較多,我們從三條線介紹Libra的設計與實現:
通過分析Node啟動并加入到Libra網絡的過程,介紹Network組件的設計與實現;
圍繞Transaction的生命周期,分析其接收交易、打包區塊、運行上鏈的過程,介紹Libra的Mempool、Executor以及Storage、VM等核心組件;
FinCEN主任:監管機構不是敵人 加密技術屬于所有人:美國金融犯罪執法網絡(FinCEN)主任Kenneth Blanco在接受采訪時堅稱監管機構不是敵人。Blanco感嘆道,“我們正在允許一種可能如此有益的技術被人劫持”。他解釋FinCEN在保護加密領域中的作用,“這項技術屬于我們所有人。不要讓少數人用它來做壞事,也不要讓流氓國家用它來做壞事。”但加密領域許多人懷疑,像FinCEN這樣的機構是否出于行業的最大利益而運作。采訪Blanco的是加密分析公司Chainalysis全球政策主管Jesse Spiro。Chanalysis是美國政府撥款的主要接受者,它招致了反對政府介入的加密倡導者的批評。Blanco否定加密貨幣在正常金融規則之外運作的概念。“如果你在美國境內全部或大部分地區開展業務,必須遵守我們的法規和法律。順便說一句,在一天結束時,這也讓你更安全。”KYC是否提高安全性的問題存在有爭議。Chanalysis最近的研究表明,去年只有超過1%的加密交易是用于非法目的,消除非法交易是KYC要求的明確目的。許多人擔心將客戶端信息集中到交易所數據庫中會帶來更大的風險。(Cointelegraph)[2020/5/28]
圍繞LibraBFT,介紹Consensus組件以及區塊達成共識的過程
如果想了解或者使用Libra,我們需要先啟動一個節點,并將它加入到網絡中。接下來,我們看看第一條主線,了解一下Node的啟動以及Network的設計與實現。
聲音 | 美SEC主席:DLT技術發展有助于促進資本形成:最近,美國證交會(SEC)主席Jay Clayton在參議院委員會作證,就包括區塊鏈技術和加密貨幣在內的幾個問題發表了看法。Clayton稱,“我樂觀地認為,分布式賬本技術(DLT)的發展有助于促進資本形成,為機構投資者和主要投資者提供很好的投資機會。”Clayton還表示,他認為SEC已采取了一種“審慎而積極的監管方法”,在考慮投資者和市場的同時,解決了創新、資本形成等方面的問題。對Facebook的Libra,他表示,它在這里,我們不應該繞過它。針對交易所交易基金(ETF),尤其是比特幣ETF,Clayton表示SEC已經發布了一項新規定,對現有的規定進行了修訂,以使ETF監管更加現代化。(AMBCrypto)[2019/12/11]
Node啟動流程
我們先看一下Node大概的啟動流程,主要包含兩部分:
生成configLibra的Config的模塊中,能構建3種類型的配置文件,分別是validator、faucet、fullnode的配置文件。其中faucet配置是水龍頭服務相關的一些配置,通常只有測試網絡中第一個validator節點才需要。
動態 | 人民日報:區塊鏈等新技術出現為解決數據安全性等問題提供了新的思路和辦法:《人民日報》今日發表題為“數字網絡世界的雛形已經出現,信息化催生全新生活方式”的評論文章。文中指出,讓信息化為我們創造更加美好生活,需要進一步發展現代信息技術。文章中進一步表示,數據作為數字網絡世界中的核心資產,具有與物理世界中的物品完全不同的性質。如何保證數據的安全性、真實性、有效性、不可復制性成為數字世界中數據流轉的關鍵問題,而區塊鏈等新技術的出現為解決這些問題提供了新的思路和辦法。[2019/6/21]
啟動node
上圖中Libra-node用于啟動單節點,Libra-swarm用于批量啟動多節點。接下來,我們分別看一下這兩步的一些實現細節,以及之前的準備工作。
準備工作
在一切繼續之前,我們先準備需要依賴的環境
?1).獲取Libra代碼
?gitclone?https://github.com/libra/libra.git
?2).編譯和運行環境
?a.建議使用Libra自帶的腳本script/dev_setup.sh安裝環境依賴
動態 | 日本Recruit公司旗下子公司投資基于DAG技術的平臺COTI:據Crypto Times消息,日本Recruit公司通過其子公司RSP Blockchain Tech Fund對基于DAG的去中心化賬本平臺COTI進行了投資。[2019/5/25]
?b.或者自己手動安裝rust、cargo、git、pb、go、CMake等工具
?
生成config
?從前面的Node啟動流程我們了解到,啟動node首先需要生成配置。Libra包含的配置文件比較多,我們來整體看一下配置文件:
不過沒有特殊需求的話,需要我們特別注意和關注的配置其實也不算多,主要有:
?a.Node的角色分為Validator和FullNode
?b.生成3個秘鑰,2個ed25519算法生成,分別用于打包block簽名、網絡的消息簽名,Libra提供了一個generate_keypair工具生成ed25519秘鑰(cargorun-pgenerate_keypair–-omint.key),1個是x25519算法生成,用于標識節點身份
?c.數據存儲路徑,默認會生成臨時路徑
?d.network_peers:存放網絡中Node的公鑰等信息,主要包含網絡消息簽名的公鑰和節點身份的公鑰
?e.seed_peers:當前節點加入網絡主動去連接的node的信息
?f.consensus_peers:所有Validator節點的信息,Libra網絡是一個許可形網絡
?g.各服務的端口以及其他配置,沒有特殊要求的話,默認就好
啟動Node
連接Libra的測試網絡shscripts/cli/start_cli_testnet.sh
自建節點cargorun-plibra-node或者cargorun-plibra-swarm–-s
當前node啟動起來之后,會根據seed_peers的配置,去連接相應的node節點,加入到網絡中去,如果沒有seed_peers則會啟動一個單獨的網絡。接下來,我們深入了解一下Node的Network的一些設計與核心實現。
Network組件
1.Network核心模塊
我們整體看一下Network包含哪些模塊:
上面中,從下往上看:
?a.MemSocket實現了UNIXdomainsocket的功能,一般用于測試
?b.TcpSocket網絡連接
?c.Transport可以理解為MemSocket和TcpSocket的一層抽象,封裝了socket的操作
?d.Noise是一種加密協議,前面提到的用于網絡消息簽名的ed25519私鑰,就是作用在這里
?e.Rpc是Libra自己實現的遠程過程調用協議,調用方會等待被調用方返回結果
?f.DirectSend從字面理解是直接發送,調用方發送完立即返回,不等待被調用方返回結果
?g.Negotiate可以理解為對Rpc和DirectSend的抽象
?h.MultiStream用于多路復用,使用了yamux協議。通俗的理解就是在同一個Tcp連接上,從邏輯上將每種上層協議封裝成一個單獨SubStream,以實現多個上層協議共用一個Tcp連接的情況。這一點后面我們還會提到。
以上是Libra的Network組件的一個整體實現,接下來我們介紹一下Libra的協議。
2.Libra的主要協議
上面我們對Network組件有了一個宏觀的認識,這里我們介紹一下Libra包含的協議:
上圖中,從下往上看:
?a.PeerManager封裝了網絡連接以及多路復用的操作
?b.Identity協議:前面提到的x25519私鑰,就是Identity協議用于標識當前節點的身份,協議會根據節點的Role將Validator網絡與Fullnode網絡進行隔離
?c.Health協議:定期隨機選擇一個節點發送探活消息
?d.Discovery協議:每個round從相鄰的節點同步節點信息,以發現新節點,可以理解為gossip協議
?e.AdmissionControl協議:只有RPC的實現,Fullnode節點在收到用戶提交的Transaction之后,通過AC協議將Transaction轉發給Validator節點
?f.Mempool協議:只有DirectSend實現,用于不同的Mempool之間同步Transaction
?g.Consensus協議:包含RPC和DirectSend,用于Validator之間達成共識
?h.StateSynchronizer協議:只有DirectSend實現,不同node之間尋找Block
前面我們提到了多路復用,上面的協議都是通過MultiStream分別開了SubStream,邏輯上把消息協議區分出來。其中Identity、Health、Discovery是所有node都會包含的基本協議,而Consensus是只有Validator節點才會包含的協議。
總結
最開始我們講了Node啟動流程,講述了config配置需要注意的地方以及node啟動的方式和流程。然后我們深入到Network組件,講了Network的組成模塊以及提供的協議能力。我們以單節點為例,將整個啟動以及加入網絡的過程總結如下圖:
其中黃色部分表示在Network的端口是開啟了SubStream,添加了相應的協議和協議處理過程;綠色部分部分表示服務或者組件實例化,可以看出Storage和Executor不依賴Network;初始化Discovery協議的時候,節點會去連接seed節點,并且seed節點會驗證Identity。以上是節點啟動以及加入到網絡的大概流程。
相關鏈接
https://github.com/libra/libra
https://developers.libra.org/docs/the-libra-blockchain-paper
什么是重放攻擊? 重放攻擊是計算機網絡中常見而古老的攻擊手段。在區塊鏈中,重放攻擊特指在硬分叉中,攻擊者將一條鏈上的交易拿到另一條鏈上“重放”,從而獲取不正當利益的攻擊手段.
1900/1/1 0:00:00前言:ETH2.0有很多新內容新術語,對于剛接觸的讀者來說,會有不少疑惑。本文簡要地將其中比較常用的術語進行簡單闡述,以幫助大家理解。本文適合ETH2.0的初學者閱讀.
1900/1/1 0:00:00北京時間3月3日23點,美聯儲意外宣布降息,將聯邦基金利率目標區間下調50個基點,至1.00-1.25%,同時將超額準備金率下調50個基點至1.1%.
1900/1/1 0:00:00來源:券商中國 作者:王君暉 在全球資本市場及大宗商品市場面臨較大不確定性的情況下,從春節假期開始,幣圈卻出現了“小陽春”,在經歷幾個月時間的沉寂后,比特幣又一次開始上攻且漲勢較為迅猛.
1900/1/1 0:00:00來源:人民網-輿情頻道 作者:胡瑞鷹、張姍姍 編者按:新型冠狀病肺炎疫情爆發以來,全國民眾上下同心,當前疫情防控已進入關鍵時期.
1900/1/1 0:00:00作者|哈希派分析團隊 Pyth Network提供的BTC價格曾有數分鐘低于市場均價,團隊正調查原因:Solana生態跨鏈預言機項目Pyth Network在推特上表示.
1900/1/1 0:00:00