Libra涉及的东西比较多,我们从三条线介绍Libra的设计与实现:
通过分析Node启动并加入到Libra网络的过程,介绍Network组件的设计与实现;
围绕Transaction的生命周期,分析其接收交易、打包区块、运行上链的过程,介绍Libra的Mempool、Executor以及Storage、VM等核心组件;
围绕LibraBFT,介绍Consensus组件以及区块达成共识的过程。
前面我们讲述了Libra的第一条主线——Node启动以及加入网络的过程,详细介绍了Network组件的设计与实现。这里,我们将要讲述Libra的第二条主线——Transaction的生命周期,再围绕Transaction的生命周期,逐个讲述Libra各个核心组件的一些设计与实现。在讲述生命周期之前,我们先了解一下账号模型以及Transaction与Move合约的关系。
账号模型
实际上区块链可以简单的理解为:使用Transaction为载体,按大部分人认可的顺序记录每个Address的变更过程。为了达到这个目的,区块链发展至今抽象出两种账号模型:以BTC为代表的UTXO模型和以ETH为代表的Account模型。这两种模型各有优劣,简单对比一下:
UTXO的英文是UnspentTransactionOutput,直译就是未消费的交易输出,一个Address的当前状态就是一个UTXO列表。UTXO模型下,消费(构造Transaction)的时候拿出一个或者多个UTXO当作当前Transaction的Input,然后生成多个UTXO,Input和Output的总额是相等的。在未来的某个时刻,这些Output又被当做其他Transaction的Input。是不是跟纸钞有些像?而Account模型中,每个Address通常包含一个的总额和SequenceNumber计数器。每次消费(构造Transaction)的时候会从当前Address的总额中减去消费额,在另一个Address中加上相应的消费额,同时通过SequenceNumber递增的方式,保证当前Address构造的出来的所有Transaction有先后顺序,从而保障账号的状态正确。
北京政府要求超前布局区块链,加快共识机制、分布式存储和跨链协议等技术突破:8月3日,中共北京市委办公厅、北京市人民政府办公厅向各区委、区政府、市委各部委办、市各国家机关、各国有企业、各人民团体以及各高等院校印发《北京市关于加快建设全球数字经济标杆城市的实施方案》通知,通知指出,要超前布局区块链,围绕区块链高性能、安全性、隐私保护、可扩展性等方向,加快共识机制、分布式存储、跨链协议、智能合约等技术突破,实现大规模区块链算法性能关键技术突破,以及通过汇聚激活超大规模的数据要素资产,率先建设数据原生的城市基础设施,集中建设开放互联的国际数据枢纽等来打造全球领先的数字经济新体系。(北京市人民政府官网)[2021/8/3 1:31:22]
Libra使用的Account模型来表达账本数据,所以Transaction有严格的先后顺序。这点在后面我们还会提到。
Transaction与Move合约
前面我们了解了账号模型,为了便于理解,以支付的场景做了类比。给我们的感觉就是,Transaction的作用就是对一个数字进行加减运算,例如Alice给Bob转了一笔账。那就不能应用于更多、更复杂的场景吗?比如游戏。区块链起步的时候,表达能力相对比较简单,随着区块链的推广,大家的需求越来越丰富,最初的设计难以满足。我们希望能通过一门语言,在链上表达我们的需求,所以虚拟机、智能合约以及合约语言顺势产生了。这是一个很广阔的话题。Libra推出了Move语言作为合约语言,这里我们不展开讲。那么Transaction、链、Move到底是什么关系呢?
我们假设上图是某个时刻,链上所存储的账号数据,其中Alice有一个Move定义的合约,code被存储在她的账号下。上图的第①步中,Bob构建一个Transaction,在Transaction中指定运行Alice账号下对应的合约的一个方法,并从自己的账号下取出该合约方法能理解的数据作为方法的参数,然后对Transaction进行签名并广播出去。图中第②步,矿工收到Bob的Transaction,打包到Block中,然后执行Bob的Transaction,并且将结果写到Bob的账号下面。整个过程中,大概的理解就是,Move定义了一段逻辑,Transaction设置了运行逻辑用到的数据,链记录了逻辑运行之后的最终状态。
动态 | 原比特股CTO 携比特股技术团队共同开发元界DNA去中心化交易所:据官方消息,原BTS比特股CTO Fabian近期携德国与白俄罗斯比特股团队主力开发元界DNA去中心化交易所。Fabian于2014-2016年担任Daniel Larimer的比特股核心技术开发者和技术顾问,主要负责比特股金融服务、免信任投票和公开交易的智能合约建设。BTS比特股是全球最早的去中心化交易所,被誉为去中心化交易所的鼻祖。
据介绍,元界DNA去中心化交易所能够更安全有效且透明地对数字化资产的交易提供支持,更好赋能链上商业生态,拥有透明性及安全性等优点。此次Fabian及比特股核心开发者团队的加入,有望在比特股积累的成熟经验上,将元界DNA去中心化交易所升级打造为世界顶级的新型去中心化交易所。[2020/2/13]
Transaction的生命周期
前面我们讲了两个背景知识,接下来,我们对Transaction的生命周期做一个整体的认识:
这张图也是Libra的技术白皮书中的一张图,跟前面介绍Libra核心组件那张图有些像,但是箭头上多了一些数字。这张图实际上是表示一个Transaction从生成到打包,从执行到上链的完整的生命周期。下面我们依次介绍一下每个数字大概代表的意思:
1.交易被用户使用wallet或者cli提交到AdmissionControl
2.AdmissionControl运行VM做一些Transaction的前置校验,例如交易的签名校验等等,过滤掉一些无效交易
3.Transaction前置校验通过后,会被提交到Mempool中
4.Transaction被设置为Ready状态,等待被打包进Block中
5.Transaction被设置为Ready状态之后,会被广播给其他Mempool
动态 | 荷兰央行将继续试验区块链等技术:据Cointelegraph消息,荷兰央行(DNB)支付和市场基础设施主管Petra Hielkema表示,采用区块链和人工智能等新技术将成为DNB支付战略2018-2021的关键方向,因此将继续试验区块链技术。但Hielkema同时也表示,迄今的调查结果”不太乐观”。Hielkema进一步概述了DLT暴露的一些问题,比如产能短缺、能源消耗高导致的低效率,以及无法完全确定是否已完成支付等。[2019/5/1]
6.Validator节点的Consensus组件pull对应的Mempool组件,获取一批Ready状态的Transaction,用于创建Block
7.新创建的Block被广播给其他Validator节点,并且选举Block
8.拿到新的Block之后,提交到Executor组件执行Block
9.新Block中的所有交易被提交给VirtualMachine组件,VM按顺序执行Block的所有交易
10.提交被共识选举胜出的Block
11.广播被共识选举胜出的Block
12.存储胜出的Block中所有被KEEP的Transaction以及每个address对应的最终状态
我们对Transaction的生命周期有了一个直观的认识,接下来,我们深入每一个组件内部,了解更多的设计和实现细节。
AC服务
从交易被用户提交开始,首先到AC服务。
在讲述第一条主线的时候,我们提到了AC是一个GRPC服务,相当于是Node的一个网关。Node包含多个GRPC服务和很多的RPC接口,然而只有跟用户打交道的两类接口,才有必要暴露出去给wallet或者cli调用:
提交Transaction的接口
用户状态相关的接口
动态 | 首汽旗下“GoFun出行”将推出基于区块链技术的数字资产:今日,首汽集团旗下共享汽车平台“GoFun出行”举办品牌及产品升级发布会。据悉,GoFun出行升级至4.0版本,将引入基于区块链技术的数字资产“能量方块”,用户可通过相关的互动环节以获得“能量方块”,然后可换取用车代金券或其他商品。另外,“GoFun出行”和广东省佛山市禅城区政府签约,将进行区块链方面的战略合作。[2018/10/16]
所以AC没有太多的逻辑,只是对Node内部部分GRPC接口的一个封装,以暴露给用户使用。另外AC还有一个作用是对提交过来的Transaction做简单的过滤。
Mempool服务
交易通过AC被提交到了Mempool服务。
在讲述第一条主线的时候,我们知道Mempool是用来存储未上链的Transaction。我们先来看一看Mempool的整体设计:
Mempool主要包含两个模块:
MempoolService:是一个Grpc服务,用来接收从AC提交过来的Transaction
ShareMempool:主要有两个作用,一个是通过Mempool协议(在第一条主线的时候有提到)在不同的Mempool节点之间同步Transaction,另外是存储和处理Transaction
我们对Mempool有了一个整体的认识,但是还有些疑问,Mempool究竟对Transaction做了什么处理呢?什么情况下Transaction会被打包?Transaction又是什么时候被广播给其他Mempool?接下来我们就解答一下这些疑问。
Mempool内的Transaction状态转化
Transaction提交到Mempool之后,首先会根据来源将其标记为不同的状态:
柬埔寨证券交易监管局与币安资本管理有限公司达成合作:金色财经报道,据官方消息,8月16日上午,柬埔寨证券交易监管机构(SERC)与Binance资本管理有限公司合作,在谅解备忘录的实施框架下,为SERC官员举办了能力建设研讨会,由SERC总干事、王国政府主管代表Sou Socheat主持。该研讨会旨在提高SERC管理层和官员对数字资产业务的认识,以便为制定柬埔寨数字资产市场监管和发展的法律框架获得更多的投入。[2022/8/22 12:40:55]
Unready:用户主动提交到MempoolService的交易状态
NonQualified:其他节点同步过来的交易状态
这些Transaction会按一定的顺序排序,等待被标记成Ready状态。前面我们提到了Libra采用Account模型,通过SequenceNumber将用户发起的Transaction按顺序关联起来,当Mempool发现某个Transaction前面的所有其他Transaction都被上链了或者都是Ready状态了,那么这个Transaction就可以被标记为Ready状态了,也就意味着这个Transaction具备打包进区块的条件了。如果当前被设置成Ready状态的Transaction是从Unready状态转变过来的(也就是用户通过AC提交到当前Mempool),那么该Transaction会被转发给其他的Mempool。
上图是Transaction在Mempool中大致的状态转化过程,而Transaction大概的排序规则是:gas_price>expiration_time>address>sequence_number
Consensus组件
前面介绍了Mempool的状态转化,用户提交的Transaction处于Ready状态,等待被打包到区块中。考虑到Consensus的复杂性,以及当前主线主要是介绍Transaction的生命周期,这里只简单的介绍一下上链流程,大概如下:
其中compute->execute以及commit->store会在后面讲,vote将在第3条主线详细讲,这里暂时只需要注意两个地方:
Consensus组件主动去Mempool中pull一批Ready状态的Transaction,并打包到Block
Block被选举并提交之后,Consensus组件会主动去删除Mempool中被提交的Transaction
Executor&VM组件
由于Executor只是运行VM的一个入口,这里把Executor和VM合并到一起介绍。前面Consensus组件的流程中,Block被Build之后会被提交到Executor中comput,再进入VM中execute,这就是执行Transaction。也就是compute->execute过程,有些细节需要注意:
其中浅颜色由Executor发起,深颜色是在VM中执行的Move合约。Consensus组件将新的Block提交到Executor组件之后,Executor会为Block提供运行环境,初始化VM,依次在VM中运行Block的Coinbase和其他用户Transaction。所以VM会最先执行Coinbase交易,也就运行LibraAccount合约中的blockprologue。然后再按顺序依次执行Block中打包的Transaction,最后将执行之后的状态返回给Consensus组件。
Storage服务
在介绍Consensus组件的时候,我们提到了Block会被commit,数据最终会被写入Storage服务。也就是commit->store流程,这时候用户提交的Transaction已经被大家认可。关于Storage服务,我们可能会有两个疑问:
Storage服务包含哪些模块?
Storage最终存储了哪些数据?
Storage模块
Storage是一个GRPC服务,存储了所有链上的数据,用户的账本状态等信息就是从Storage获取的。Libra选择了RocksDB作为底层存储的数据库,SchemaDB基于RocksDB封装了对数据统一的CRUD操作以及Key-Value的系列化与反序列化方式。LibraDB是围绕Libra的账本数据和特点,定义了一系列数据结构,并针对这些数据结构进行数据库的操作。将所有的这些操作,封装成Storage服务,提供给Executor、AC等组件使用。
账本数据
前面讲述Storage服务包含的模块,我们了解到LibraDB围绕Libra账本的特点定义了一些数据结构,Libra账本有什么特点?那么包含哪些核心数据结构呢?
账本特点Libra采用Account,需要存储全局的用户状态,当前状态的所有历史交易以及交易的顺序。也就是说,Storage需要存储的主要数据:用户状态、交易及交易顺序。跟其他公链不同的是,一般的公链通过记录Block顺序(Block内的交易也是有序的),来达到记录所有交易和交易的顺序的目的。而Libra直接存储交易,采用MerkleAccumulator来记录交易的顺序。
核心数据结构Libra为了存储用户状态、交易及交易顺序,分别使用了SparseMerkleTree和MerkleAccumulator。
SparseMerkleTree使用256比特存储用户状态,理论上总共可以有2的256次方个账号。上图是4比特SparseMerkleTree的例子,每个橙色的叶子节点代表了一个用户;正方形的方块是占位符,表明该分支下没有账号,减少账号的存储;
MerkleAccumulator存储交易以及交易的顺序。上图中,每个深颜色的叶子节点表示一个Transaction;正方形的方块是占位符。新上链的交易会按顺序一个一个被加入到后面。
?上面提到了Storage的两个核心数据结构,整个Storage都在围绕他们进行存储和优化,更多细节不再展开。
总结
?以上是Transaction整个生命周期的过程,依次经过AC、Mempool、Consensus、Executor、VM的处理,最终存储到Storage。然后我们深入到每一个组件或者服务,既介绍了他们的一些设计和实现,也了解了Transaction被处理的核心细节。
标签:RANSACTCTIANSRANKERData Transaction Tokenauction币介绍Tower Defense Titans
来源:PeckSheild2020年03月02日,美国司法部以阴谋和无证经营汇款为由,对名为田寅寅和李家东两位中国人发起了公诉,并冻结了他们的全部资产.
对于印度加密社区来说,这是具有历史意义的一天,印度最高法院终于对该国中央银行印度储备银行的加密货币禁令的案件作出了裁决。该法院裁定,2018年4月6日的印度储备银行通函违反宪法.
比特币博客作者SylvainSaurel发表了一篇关于“成为一名真正的比特币人”所需要具备的基本素质的文章.
写在前面:历史上区块链世界曾多次发生51%攻击,而它们都发生在小币种的身上,而据哈佛大学和MIT的研究者表示,他们在观察到的40次重组攻击中,还看到了可能的反攻击案例,在2020年2月份.
原文:Decrypt,原文作者:Charlesd''Haussy来源:Odaily星球日报,译者:念银思唐,原题《星球前线|加密行业特有的16个新职位》无论你是否相信加密春天即将来临.
作者|哈希派分析团队 Circle于上周四将硅谷银行33亿美元储备进行转账,最快下周一到账:3月12日消息,Circle创始人Jeremy发推特表示,USDC的33亿美元现金储备仍留在SVB.