月亮链 月亮链
Ctrl+D收藏月亮链

ION:以Transaction的生命周期为线索剖析Libra核心组件_Recycle Impact World Association

作者:

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

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的英文是Unspent Transaction Output,直译就是未消费的交易输出,一个Address的当前状态就是一个UTXO列表。UTXO模型下,消费(构造Transaction)的时候拿出一个或者多个UTXO当作当前Transaction的Input,然后生成多个UTXO,Input和Output的总额是相等的。在未来的某个时刻,这些Output又被当做其他Transaction的Input。是不是跟纸钞有些像?而Account模型中,每个Address通常包含一个的总额和SequenceNumber计数器。每次消费(构造Transaction)的时候会从当前Address的总额中减去消费额,在另一个Address中加上相应的消费额,同时通过SequenceNumber递增的方式,保证当前Address构造的出来的所有Transaction有先后顺序,从而保障账号的状态正确。

Alchemy Pay 新增支持澳大利亚和新西兰法币:5月26日消息,加密货币支付提供商 Alchemy Pay 新增支持澳大利亚和新西兰法币,澳大利亚用户可以通过 POLi 和 PayID 等购买加密货币,新西兰用户可以使用 POLi 进行加密支付。[2023/5/26 9:44:11]

Libra使用的Account模型来表达账本数据,所以Transaction有严格的先后顺序。这点在后面我们还会提到。

前面我们了解了账号模型,为了便于理解,以支付的场景做了类比。给我们的感觉就是,Transaction的作用就是对一个数字进行加减运算,例如Alice给Bob转了一笔账。那就不能应用于更多、更复杂的场景吗?比如游戏。区块链起步的时候,表达能力相对比较简单,随着区块链的推广,大家的需求越来越丰富,最初的设计难以满足。我们希望能通过一门语言,在链上表达我们的需求,所以虚拟机、智能合约以及合约语言顺势产生了。这是一个很广阔的话题。Libra推出了Move语言作为合约语言,这里我们不展开讲。那么Transaction、链、Move到底是什么关系呢?

我们假设上图是某个时刻,链上所存储的账号数据,其中Alice有一个Move定义的合约,code被存储在她的账号下。上图的第①步中,Bob构建一个Transaction,在Transaction中指定运行Alice账号下对应的合约的一个方法,并从自己的账号下取出该合约方法能理解的数据作为方法的参数,然后对Transaction进行签名并广播出去。图中第②步,矿工收到Bob的Transaction,打包到Block中,然后执行Bob的Transaction,并且将结果写到Bob的账号下面。整个过程中,大概的理解就是,Move定义了一段逻辑,Transaction设置了运行逻辑用到的数据,链记录了逻辑运行之后的最终状态。

艺术家Pussy Riot和Shepard Fairey通过NFT系列为乌克兰筹集资金:金色财经报道,Pussy Riot的Nadya Tolokonnikova和街头艺术家Shepard Fairey鼓励支持者通过NFT的公开版集合为乌克兰筹集资金。该系列名为Putin's Ashes,将于周五在基于Tezos的NFT市场Objkt上发售。该系列的所有收益将捐赠给自2022年初以来一直与俄罗斯入侵作斗争的乌克兰士兵。公开版将于太平洋标准时间周五上午10点开始铸造,并于2月3日结束。每个NFT的定价为10TEZ(约合11美元)。

Pussy Riot计划于周五在洛杉矶的Jeffrey Deitch画廊以抗议和表演的形式开启该系列。Tolokonnikova于8月开始创作普京的骨灰,当时Pussy Riot成员焚烧了俄罗斯总统弗拉基米尔·普京的肖像以示抗议。从活动中收集骨灰,Tolokonnikova将它们装瓶,为NFT系列创作艺术品。该系列还采用Fairey标志性风格的作品,描绘了Tolokonnikova身穿紧身胸衣,胸前印有普京,看起来像是在燃烧。[2023/1/27 11:32:06]

前面我们讲了两个背景知识,接下来,我们对Transaction的生命周期做一个整体的认识:

这张图也是Libra的技术白皮书中的一张图,跟前面介绍Libra核心组件那张图有些像,但是箭头上多了一些数字。这张图实际上是表示一个Transaction从生成到打包,从执行到上链的完整的生命周期。下面我们依次介绍一下每个数字大概代表的意思:

BitDAO社区提议明年回购价值1亿美元的BIT代币:金色财经报道,BitDAO社区正在考虑从明年年初开始回购价值1亿美元的BIT代币,作为DAO资本部署战略的一部分。该计划包含在周一提交给DAO的治理提案中。该提案要求BitDAO从明年1月1日开始,在50天内将其目标日购买量设定为200万美元的USDT。如果获得批准,DAO将在拟议的50天结束时花费1亿美元USDT回购其BIT代币。(The Block)[2022/12/20 21:56:33]

我们对Transaction的生命周期有了一个直观的认识,接下来,我们深入每一个组件内部,了解更多的设计和实现细节。

从交易被用户提交开始,首先到AC服务。

在讲述第一条主线的时候,我们提到了AC是一个GRPC服务,相当于是Node的一个网关。Node包含多个GRPC服务和很多的RPC接口,然而只有跟用户打交道的两类接口,才有必要暴露出去给wallet或者cli调用:

提交Transaction的接口

用户状态相关的接口

所以AC没有太多的逻辑,只是对Node内部部分GRPC接口的一个封装,以暴露给用户使用。另外AC还有一个作用是对提交过来的Transaction做简单的过滤。

交易通过AC被提交到了Mempool服务。

在讲述第一条主线的时候,我们知道Mempool是用来存储未上链的Transaction。我们先来看一看Mempool的整体设计:

韩国区块链视频游戏开发商Wemade推出USDC锚定稳定币“WEMIX”和DeFi服务“WEMIX.Fi”:金色财经报道,韩国区块链视频游戏开发商 Wemade 宣布推出USDC锚定稳定币“WEMIX”,旨在用于该公司不断发展的 NFT 和 DeFi 区块链生态系统。据悉,稳定币WEMIX 目前已发行 1100 万枚,完全由 Circle 的美元 稳定币 USDC 锚定和支持,使其价值维持在 1 美元。此外,Wemade 还激活了 DIOS 协议,该协议将用于发行和销毁 WEMIX,以保持该稳定币与 USDC 的 1:1 比例。除了稳定币,Wemade 还推出了 DeFi 服务“WEMIX.Fi”,允许用户存储、交换和质押 Wemade 的加密货币。(forkast)[2022/10/24 16:37:01]

Mempool主要包含两个模块:

Mempool Service:是一个Grpc服务,用来接收从AC提交过来的Transaction

Share Mempool:主要有两个作用,一个是通过Mempool协议(在第一条主线的时候有提到)在不同的Mempool节点之间同步Transaction,另外是存储和处理Transaction

我们对Mempool有了一个整体的认识,但是还有些疑问,Mempool究竟对Transaction做了什么处理呢?什么情况下Transaction会被打包?Transaction又是什么时候被广播给其他Mempool?接下来我们就解答一下这些疑问。

Transaction提交到Mempool之后,首先会根据来源将其标记为不同的状态:

Unready:用户主动提交到Mempool Service的交易状态

Art Blocks创始人:平台增长过快“不合理且不可持续”,不利于团队健康发展:7月26日消息,NFT平台Art Blocks创始人Erick Calderon(又名Snowfro)在播客节目中表示,该平台的快速增长“感觉上不合理,且不可持续”。他补充说,加密熊市导致了“更平静”的状况,“让我更容易与人类就艺术进行理性的对话。”

Calderon在谈到该平台在2021年9月和10月的迅速崛起时说:“从心理健康的角度来看,这对Art Blocks作为一个团队来说是不健康的,对Art Blocks的艺术家也不健康。是的,他们可以一下子赚一大笔钱,但这实际上并不总是健康的,尤其是当你质疑作品的实际价值时。”

最近几周,尽管市场处于熊市,Calderon说,“Art Blocks似乎又开始复苏了。”这反过来又让投机再次抬头。但他很快澄清说,“我们对投机没有意见,”但“我们要明确表示,这不是我们在这里的原因。当赚了一大笔钱时,我们会很开心,当赔了一大笔钱时,我们会很难过——但这些事情实际上与我们的目标无关,我们的目标是用这种新方式提供由了不起的艺术家创作的了不起的艺术作品。”

熊市似乎并没有削弱Art Blocks的雄心。Calderon说,该平台正在招聘新人,“我们希望Art Blocks发展壮大,我们意识到时间是关键,”他补充说,该平台最近聘请了一名艺术总监。(Decrypt)[2022/7/26 2:39:08]

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

前面介绍了Mempool的状态转化,用户提交的Transaction处于Ready状态,等待被打包到区块中。考虑到Consensus的复杂性,以及当前主线主要是介绍Transaction的生命周期,这里只简单的介绍一下上链流程(多节点达成共识的过程将在第3条主线中详细介绍),大概如下:

其中compute->execute以及commit->store会在后面讲,vote将在第3条主线详细讲,这里暂时只需要注意两个地方:

Consensus组件主动去Mempool中pull一批Ready状态的Transaction,并打包到Block

Block被选举并提交之后,Consensus组件会主动去删除Mempool中被提交的Transaction

由于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合约中的block prologue。然后再按顺序依次执行Block中打包的Transaction,最后将执行之后的状态返回给Consensus组件。

在介绍Consensus组件的时候,我们提到了Block会被commit,数据最终会被写入Storage服务。也就是commit->store流程,这时候用户提交的Transaction已经被大家认可。关于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直接存储交易,采用Merkle Accumulator来记录交易的顺序。

核心数据结构Libra为了存储用户状态、交易及交易顺序,分别使用了Sparse Merkle Tree和Merkle Accumulator。

SparseMerkleTree使用256比特存储用户状态,理论上总共可以有2的256次方个账号。上图是4比特SparseMerkleTree的例子,每个橙色的叶子节点代表了一个用户;正方形的方块是占位符,表明该分支下没有账号,减少账号的存储;

MerkleAccumulator存储交易以及交易的顺序。上图中,每个深颜色的叶子节点表示一个Transaction;正方形的方块是占位符。新上链的交易会按顺序一个一个被加入到后面。

上面提到了Storage的两个核心数据结构,整个Storage都在围绕他们进行存储和优化,更多细节不再展开。

以上是Transaction整个生命周期的过程,依次经过AC、Mempool、Consensus、Executor、VM的处理,最终存储到Storage。然后我们深入到每一个组件或者服务,既介绍了他们的一些设计和实现,也了解了Transaction被处理的核心细节。

标签:IONACTSACTANSCannationRecycle Impact World AssociationSACT价格GermanShepherdDog

比特币行情热门资讯
MKR:闪贷策略:攻击者能取走Maker的7亿美元抵押品吗?_Rainmaker Games

(自画像,梵高)前言:自从bZx事件之后,闪贷逐渐为大家熟悉。如果利用闪贷对Maker进行治理攻击,会发生什么情况?闪贷之前,要发起治理攻击的成本很高,可能会采用众筹策略,而有了闪贷,只要流动池.

1900/1/1 0:00:00
数字货币:金色深度丨浅析84项“数字人民币”专利_区块链

金色财经 区块链2月17日讯  中国人民银行(PBOC)已经申请了84向与其数字货币计划有关的专利,这些专利揭示了有关央行数字货币的计划.

1900/1/1 0:00:00
加密货币:比川普还富有17倍的总统候选人欲推动加密货币监管_SBF

美国总统候选人迈克尔·布隆伯格正在提议制定规则,以阐明金融系统中加密资产的地位,布隆伯格希望这些措施能够提供更大的政府监督以及消费者保护.

1900/1/1 0:00:00
DAO:挖矿病数量两年暴涨1500% 门罗币最受黑客“宠爱”_APE

2月26日,近日亚信安全威胁情报中心发布了《亚信安全2019威胁态势分析》报告。报告对于2019年的安全演变进行了剖析,报告特别强调,勒索病已经成长为网络世界最大的安全威胁之一,而挖矿病也凭.

1900/1/1 0:00:00
ETF:金色观察 | 火爆的杠杆ETF适合普通投资者参与吗?_什么是比特币ETF

从2014年BitMEX退出衍生品市场开始算起,过去的6年可以算作衍生品的测试期。步入2020年,加密货币衍生品正在逐步发挥更加关键的作用.

1900/1/1 0:00:00
比特币:比特币减半临近 当前市场价格已经涨到位?听听专家怎么说_玩比特币的人是傻子吗

著名的数字资产银行商银河数码(Galaxy digital)创始人迈克诺沃格拉茨( Mike Novogratz)再次对比特币(BTC)的价格做出 了预测.

1900/1/1 0:00:00