木星链 木星链
Ctrl+D收藏木星链
首页 > 非小号 > 正文

LIB:技术入门 | 剖析Libra的Network组件

作者:

时间:1900/1/1 0:00:00

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组件。

欧科云链梁晨:Web 3.0时代中的区块链技术发挥重要作用:9月10日消息,在第九届中国中小企业投融会中的区块链产业峰会分论坛上,欧科云链运营总监梁晨受邀参与圆桌对话,与河南省大数据研究院副院长管涛,中科院软件所区块链应用研究实验室副主任武景刚等嘉宾齐聚一堂,就区块链重塑政务与互联网进行深入探讨。

谈到价值互联的下一个网络时代中,即Web 3.0模式,梁晨表示,第一,Web 3.0个人的身份信息、资产和所有行为数据,可能会由自己掌握,用户授权给应用层,而不是每个人在不同平台进行注册,所有个人数据沉淀在平台上,形成数据垄断和数据孤岛。

第二,web 3.0阶段,从用户参与的角度来看,会有更强的沉浸感,更低的进入门槛,更便捷地在应用之间进行用户历史活动数据的迁移。这一切变化都需要强大的区块链基础设施。

据了解,欧科云链集团一直深耕在技术研发,行业科普,专业研究等领域。[2021/9/10 23:15:48]

注意,上面介绍各个核心组件的时候,我们区分了组件和服务,两者的区别是:组件没有额外监听端口,与node共用同一个端口,而服务会单独监听一个端口,通常是GRPC服务。

Libra设计与实现

Libra涉及的东西比较多,我们从三条线介绍Libra的设计与实现:

通过分析Node启动并加入到Libra网络的过程,介绍Network组件的设计与实现;

围绕Transaction的生命周期,分析其接收交易、打包区块、运行上链的过程,介绍Libra的Mempool、Executor以及Storage、VM等核心组件;

动态 | 泰国国产税厅计划利用数字平台和区块链技术来改善服务:泰国财政部下属机构国产税厅(The Excise Department)总干事Patchara Anuntasilpa透露,随着泰国迈向4.0时代,国产税厅正计划利用数字平台和区块链技术来改善服务,以配合政府和财政部的政策,提升公共服务。 Anuntasilpa表示:“数字平台和区块链技术可以提高系统安全性,并减少获取复杂信息的时间。国产税厅将与泰京银行(Krung Thai Bank)合作,在3个试点项目中使用这些技术,以提高税收和退税系统的安全性、准确性和透明度。”[2019/11/15]

围绕LibraBFT,介绍Consensus组件以及区块达成共识的过程

如果想了解或者使用Libra,我们需要先启动一个节点,并将它加入到网络中。接下来,我们看看第一条主线,了解一下Node的启动以及Network的设计与实现。

Node启动流程

我们先看一下Node大概的启动流程,主要包含两部分:

生成configLibra的Config的模块中,能构建3种类型的配置文件,分别是validator、faucet、fullnode的配置文件。其中faucet配置是水龙头服务相关的一些配置,通常只有测试网络中第一个validator节点才需要。

声音 | 贵阳市人民代表大会副主任:以区块链技术得以应用引领技术创新:据Odaily消息,5月28日,以“技术创新与融合”为主题的区块链技术发展论坛(GBF)在贵阳国际生态会议中心举办。 贵州省贵阳市人民代表大会副主任张海涛发表现场致辞,他表示,数据的开放共享主要是指政府数据的开放共享,应该发展大数据方面的战略方向,通过数据开放分享,以区块链技术的应用引领技术创新,共兴社会发展技术。[2019/5/28]

启动node

上图中Libra-node用于启动单节点,Libra-swarm用于批量启动多节点。接下来,我们分别看一下这两步的一些实现细节,以及之前的准备工作。

准备工作

在一切继续之前,我们先准备需要依赖的环境

?1).获取Libra代码

?gitclone?https://github.com/libra/libra.git

?2).编译和运行环境

?a.建议使用Libra自带的脚本script/dev_setup.sh安装环境依赖

?b.或者自己手动安装rust、cargo、git、pb、go、CMake等工具

声音 | 农业部孙君茂:区块链技术可推动农产品实现优质优价:据中国经济网消息,在中国食品安全30人论坛——区块链技术与食品安全研讨会上,农业部食物与营养发展研究所副所长、研究员孙君茂认为,事实上,近年来我国食品安全水平有了切实的提高,但如何让消费者看到并信任这些成果,需要区块链技术来传递。

不仅如此,孙君茂指出,由于农产品之间的差异大,也可以通过区块链技术向消费者做出展示。在农业从质量安全的方向向高质量发展的方向转变的过程中,区块链技术还可以起到推动农产品实现优质优价的作用。[2018/12/7]

?

生成config

?从前面的Node启动流程我们了解到,启动node首先需要生成配置。Libra包含的配置文件比较多,我们来整体看一下配置文件:

不过没有特殊需求的话,需要我们特别注意和关注的配置其实也不算多,主要有:

?a.Node的角色分为Validator和FullNode

?b.生成3个秘钥,2个ed25519算法生成,分别用于打包block签名、网络的消息签名,Libra提供了一个generate_keypair工具生成ed25519秘钥(cargorun-pgenerate_keypair–-omint.key),1个是x25519算法生成,用于标识节点身份

帕克基因利用区块链技术革新城市停车场:帕克基因是全球首个利用区块链技术发力停车服务的企业,它为城市空间管理和智能交通普及带来革命性变化。区块链技术与智能合约将使停车车主在短时间内就可以租到停车位。[2017/12/31]

?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

标签:LIBLIBRAODENODElibra币官网LIBRAF币IndoDEXTNODE

非小号热门资讯
以太坊:以太坊2.0客户端Prysm与Lighthouse实现交互,多客户端测试网发布更近一步

据Trustnodes3月7日消息,来自PrysmaticLabs的以太坊2.0客户端开发者NishantDas近日表示.

1900/1/1 0:00:00
加密货币:澄清!德国正式将数字资产归类为金融工具,不具备货币法律地位

周一,德国联邦金融监管局公布了监管指南,将数字资产归类为金融工具。 图片来源:Pixabay美国众议员:拟议的加密货币法案将有助于澄清SEC的最新指控:金色财经报道,美国众议员French Hi.

1900/1/1 0:00:00
BCH:巴比特专栏 | 科研经费支出模式和币开发资金优化方案

“每一次Amaury进入我的视野,都是要钱。。。”一位BCH持币大户在微信上跟我抱怨这次BCH开发者对近日发表的对挖矿进行抽成,以筹集成立BCH基础实施开发资金.

1900/1/1 0:00:00
区块链:从华为、海尔的治理中,思考区块链分布式自治公司的形态

疫情期间,互联网公司纷纷开启线上办公模式。与17年前相比,今天的互联网规模早已将个人与世界连接起来,让我们的沟通更加便捷高效.

1900/1/1 0:00:00
以太坊:数据:一年增长294%,DeFi终成以太坊的杀手级应用

去年,以太坊去中心化应用的使用量猛增,这主要是由于人们对去中心化金融应用的兴趣增加了。相比之下,区块链平台EOS和Tron在Dapp平台方面的使用已经显示出了崩溃迹象.

1900/1/1 0:00:00
TRU:洒脱喜一周评 | 区块链抢先交易太无赖?共识算法引入顺序公平性或可破解

写在前面:“天下武功,唯快不破”,这句话经常会出现在武侠作品当中。其衍生出来的意思是,只要一方抢占了先机,就可以立身于不败之地.

1900/1/1 0:00:00