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组件。
现场 | 中国移动通信集团首席专家冯征:5G+区块链是新一代信息化革命技术:金色财经现场报道,首届区块链服务网络(BSN)全球技术创新发展峰会暨湖北区块链技术创新大会11月27日在武汉举行。中国移动通信集团首席专家冯征在会上表示,数据要素是数字社会发展的新动能,其要作为市场化生产要素,要具备安全性、可靠性、可确权、可定价等特点,才能保证数据要素的便捷交易和共享、充分发挥生产性价值,而5G和区块链能让数据具备这些特征。因此,5G+区块链是新一代信息化革命技术。[2020/11/27 22:18:53]
注意,上面介绍各个核心组件的时候,我们区分了组件和服务,两者的区别是:组件没有额外监听端口,与node共用同一个端口,而服务会单独监听一个端口,通常是GRPC服务。
Libra设计与实现
Libra涉及的东西比较多,我们从三条线介绍Libra的设计与实现:
通过分析Node启动并加入到Libra网络的过程,介绍Network组件的设计与实现;
围绕Transaction的生命周期,分析其接收交易、打包区块、运行上链的过程,介绍Libra的Mempool、Executor以及Storage、VM等核心组件;
围绕LibraBFT,介绍Consensus组件以及区块达成共识的过程
如果想了解或者使用Libra,我们需要先启动一个节点,并将它加入到网络中。接下来,我们看看第一条主线,了解一下Node的启动以及Network的设计与实现。
声音 | 郭宇航:呼吁国家试点比特币挖矿特别税,反哺区块链技术研发:12月8日,由中国区块链应用研究中心主办的区块链高峰论坛在北京召开。中国区块链应用研究中心理事长郭宇航在演讲中表示,回顾区块链技术的发展,我们看到一个现象,投入并不赚钱的区块链技术的这些人,绝大部分是早期在比特币挖矿中获得财富自由的极度信仰者。他们知道区块链技术成熟、商业模式盈利的那一天,还遥遥不可期。但他们坚信区块链技术能够造福人类,并将自己从比特币中获取的财富投入到了区块链技术的研发过程中。随着国家政策对于区块链技术的推崇,各地政府的引导基金开始对这一领域产生兴趣,但我们始终担忧,由国家所主导的资本进入这个新技术的领域,未必会产生完全百分之百的正面影响。我们更期待,允许比特币财富的创造者和享有者能够合规纳税,让他们的财富能够安心地放在口袋里,让这部分税收进入到区块链技术的研发和投入当中。我们也希望未来能够看到更多产生利润和现金收益的区块链模式,这在当前并不多见。[2019/12/9]
Node启动流程
我们先看一下Node大概的启动流程,主要包含两部分:
生成configLibra的Config的模块中,能构建3种类型的配置文件,分别是validator、faucet、fullnode的配置文件。其中faucet配置是水龙头服务相关的一些配置,通常只有测试网络中第一个validator节点才需要。
声音 | 浙江大学计算机学院副教授:杭州真正做区块链技术应用的企业只有20多家:浙江大学计算机学院副教授、杭州区块链技术与应用联合会秘书长季江民近日在接受采访时表示,浙江大学是国内率先在本科生和研究生中开设区块链选修课的高校,上课的老师中除了陈纯等知名教授,实践环节还会请IBM、微软、趣链科技的工程师,学生的兴致很高。浙江的区块链技术起步早,不管是区块链的研究还是产业发展,都走在全国前列。区块链项目要上网,必须要备案,两期下来北京有150家、广东130家、浙江有77家。浙江与冠亚军的差距是因为很多金融系统总部在北京和广东,除去这个因素浙江的实力是非常不错的。不过杭州真正做区块链技术和应用的企业不多,只有20多家。反应最热烈的还是币圈的人。(央广网)[2019/11/5]
启动node
上图中Libra-node用于启动单节点,Libra-swarm用于批量启动多节点。接下来,我们分别看一下这两步的一些实现细节,以及之前的准备工作。
准备工作
在一切继续之前,我们先准备需要依赖的环境
?1).获取Libra代码
?gitclone?https://github.com/libra/libra.git
声音 | 圣盈信将运用区块链等技术助力金融业务及科技业务双向发展:据证券时报报道,近日圣盈信金服集团董事长林建欣表示,现阶段圣盈信在金融科技领域已拥有人工智能技术、大数据应用、区块链应用、智能投研等多方面的技术储备。依托这些技术,金融科技逐渐成为圣盈信传统金融服务的高效催化剂及科技业务的发展起点,从而助力集团金融业务及科技业务的双向发展。[2018/7/18]
?2).编译和运行环境
?a.建议使用Libra自带的脚本script/dev_setup.sh安装环境依赖
?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算法生成,用于标识节点身份
珠海横琴新区党委书记:瞄准“区块链”等高端前沿技术,发展战略性新兴产业:5月31日,广东省珠海市政府党组成员、横琴新区党委书记牛敬发表文章《勇当新时代珠海“二次创业”尖兵》。文中指出,横琴要把战略性新兴产业发展作为重中之重,重点发展“新一代信息技术、绿色低碳、生物医药、数字经济”等战略性新兴产业,瞄准“区块链、人工智能、大数据”等高端前沿技术,加快聚集一批“独角兽”“瞪羚”及成长性好的企业和项目,加快形成一批主营业务收入超过10亿元的科技创新型龙头企业。[2018/5/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
文丨互链脉搏·金走车银行业和区块链的结合正驶上快车道。就在2月末,央行发布了《金融分布式账本技术安全规范》。此举被认为区块链在金融领域的应用被央行认可,区块链在金融领域的发展障碍破除大半.
1900/1/1 0:00:00文:JXkin来源:蜂巢财经编者注:原标题为《“夹心层”交易所边缘化危机》今年2月,交易所平台通证争春,配合着各个交易所公链主网的进展,OKB、HT、MX轮番登台表演.
1900/1/1 0:00:00Web3基金会宣布资助云和区块链基础设施公司SecondState,将以太坊青睐的WebAssembly虚拟机引入Polkadot生态系统.
1900/1/1 0:00:00作者|?YuLiebing责编|Carol出品|区块链大本营拜占庭将军问题(TheByzantineGeneralsProblem)提供了对分布式共识问题的一种情景化描述.
1900/1/1 0:00:003月4日,印度最高法院最终对印度储备银行的银行禁令进行了裁决,判决支持了加密货币交易所和项目方上诉,裁定印度储备银行在2018年4月禁止金融机构向加密货币企业提供银行服务的行为违反宪法.
1900/1/1 0:00:00作者:LiangCHE来源:比推bitpush.news印度储备银行计划就本周早些时候最高法院的加密裁决提交复审申请.
1900/1/1 0:00:00