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组件。
开源矿池官方声明:未参与FILBANK任何产品的设计,仅为其提供技术和运维服务:据开源矿池官方声消息,有不少用户向开源矿池官方了解与FILBANK的合作情况,特此发布官方声明:开源矿池从未参与FILBANK售卖的任何产品的设计,仅为其提供Filecoin挖矿的技术和运维服务。[2021/4/30 21:13:15]
注意,上面介绍各个核心组件的时候,我们区分了组件和服务,两者的区别是:组件没有额外监听端口,与node共用同一个端口,而服务会单独监听一个端口,通常是GRPC服务。
Libra设计与实现
Libra涉及的东西比较多,我们从三条线介绍Libra的设计与实现:
通过分析Node启动并加入到Libra网络的过程,介绍Network组件的设计与实现;
围绕Transaction的生命周期,分析其接收交易、打包区块、运行上链的过程,介绍Libra的Mempool、Executor以及Storage、VM等核心组件;
围绕LibraBFT,介绍Consensus组件以及区块达成共识的过程
如果想了解或者使用Libra,我们需要先启动一个节点,并将它加入到网络中。接下来,我们看看第一条主线,了解一下Node的启动以及Network的设计与实现。
Node启动流程
我们先看一下Node大概的启动流程,主要包含两部分:
生成configLibra的Config的模块中,能构建3种类型的配置文件,分别是validator、faucet、fullnode的配置文件。其中faucet配置是水龙头服务相关的一些配置,通常只有测试网络中第一个validator节点才需要。
北京大学教授刘晓蕾:区块链技术可推进跨境支付,助力人民币国际化:近期,北京大学光华管理学院金融系及会计系教授刘晓蕾在接受采访时表示,当下跨境支付与区块链的结合是数据信息上链,就像今年6月蚂蚁金服发布了港版支付宝AlipayHK,并在现场利用区块链的分布式账本技术来实现AlipayHK、渣打银行和菲律宾钱包Gcash间的跨机构协同,完成了第一笔跨境汇款。这是一场跨境支付实验,优势在于能降低跨境支付中的风险;使得资源得到合理利用,减少了中间的手续费;提高了交易效率。基于联盟链的基础实现跨境支付,是巨头企业和银行更容易接受的方式。联盟链主要是将旧资产上链,本质上并没有改变资产数量,只是转换了原有资产的形态。但是目前的实验应用还限于信息上链,而不是真正的资金链上转移。(华夏时报)[2020/9/24]
启动node
声音 | 四川省政协委员:将区块链技术应用到知识产权服务领域 可加快维权进度:据人民网报道,近日,在各地两会上,如何完善知识产权保护、不断优化营商环境得到高度关注。四川省政协委员、致公党四川天府新区成都支部副主委温雪倩提出,区块链技术去中心化、不可篡改的技术属性,是目前最公正、公开和透明的科技手段,如果将其应用到知识产权服务领域,可实现加密状态下的过程存证,简化维权申请流程,加快维权进度。
利用区块链技术等新兴科技手段搭建知识产权服务平台,建立“政府支持、政策引导、企业主体”的运作机制,联合政府有关部门、法院、平台、企业等相关方共同参与,能使知识产权保护过程中的权利存证、权利申报和权利确权,交易过程中的即时交易、利益分配,维权过程中的证据固定、证据采信、在线审判、判决执法等全流程都做到有法可依、有据可查、有理有节。
全球众多国家和机构已开始尝试利用区块链技术开展知识产权保护应用,特别是在音乐、创意设计、图形图像等文化创意产业领域应用更加广泛,也取得了良好的应用成果。[2019/1/30]
上图中Libra-node用于启动单节点,Libra-swarm用于批量启动多节点。接下来,我们分别看一下这两步的一些实现细节,以及之前的准备工作。
准备工作
在一切继续之前,我们先准备需要依赖的环境
?1).获取Libra代码
?gitclone?https://github.com/libra/libra.git
?2).编译和运行环境
声音 | 王兆星:区块链等新技术在金融领域得到广泛应用:据中国证券报消息,银保监会副主席王兆星28日在2018中国金融学会学术年会暨中国金融论坛年会上表示,金融业要通过改革开放为自身持续发展注入新动能。当前,新一轮科技革命正在重新塑造产业变革,释放巨大潜能,已经催生出大量的新产业、新业态、新模式,世界经济数字化、智能化转型已是大势所趋,物联网、大数据、云计算、人工智能、区块链等新技术在金融领域得到广泛应用。金融科技的快速发展,使得金融服务覆盖更加广泛,形态不断丰富,效率更加提高,都开始对金融业生态产生重大而深远的影响。[2018/12/28]
?a.建议使用Libra自带的脚本script/dev_setup.sh安装环境依赖
?b.或者自己手动安装rust、cargo、git、pb、go、CMake等工具
?
生成config
?从前面的Node启动流程我们了解到,启动node首先需要生成配置。Libra包含的配置文件比较多,我们来整体看一下配置文件:
不过没有特殊需求的话,需要我们特别注意和关注的配置其实也不算多,主要有:
声音 | Helen Hai:需要行业塑造者来推动区块链技术走向正确应用:据Nasdaq消息,区块链慈善基金会(BCF)的负责人Helen Hai在马耳他三角洲峰会上发表讲话:“当你谈论区块链的社会利益时,这不仅仅是一个技术问题,它实际上是关于如何与传统世界合作。因此,领导力是非常重要的。在这个阶段,我们需要行业塑造者来推动技术走向正确的应用。”[2018/10/7]
?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
文:比萨 来源:一本区块链 “中国医生是一个特殊的群体。没有其他任何一个国家的医生,能承受中国医生这样的压力。”纪录片《中国医生》的导演张建珍曾这样感慨。她发现,近五分之一的中国医生,每周的工作时间超过80小时.
1900/1/1 0:00:00来源:哈希派 作者:LucyCheng无人售货机是方便和快捷的代名词,比特币是所有确认交易均被打包进区块的共识网络.
1900/1/1 0:00:00来源:哈希派 作者:LucyCheng「21」是比特币领域内一个特殊的数字,因为BTC网络每隔21000个区块挖矿奖励就会减半,同时2100万枚还是比特币的最终产量.
1900/1/1 0:00:00周一,德国联邦金融监管局公布了监管指南,将数字资产归类为金融工具。 图片来源:PixabayAnimoca Brands主席澄清:Animoca Brands和Yuga Labs均无法访问Otherside用户KYC信息:5月1日消息.
1900/1/1 0:00:00疫情就是一面照妖镜,让妖魔鬼怪全部现了原型,关注多了,闹心。这一段时间以来,我们对未来经济不确定性的恐慌焦虑,害怕中小企业撑不住,担心失业潮降临;我们对社会众生相暴露出来之后丑陋面,在网上进行激烈地道德审判,却承受着“无力感”的反噬;.
1900/1/1 0:00:002月12日晚,FCoin交易所的一则“关于系统维护最新进度及开放提现申请”公告在社区引发巨大争议。公告称:一、经核查,系统未曾遭受过外部黑客入侵。二、由于团队关键人员失联,以及部分系统和数据严重受损,导致无法按计划及时恢复.
1900/1/1 0:00:00