首页 体育 教育 财经 社会 娱乐 军事 国内 科技 互联网 房产 国际 女人 汽车 游戏

以Transaction的生命周期为线索剖析Libra核心组件

2020-05-01
zhzhenkozh-hklogo

Libra触及的东西比较多,咱们从三条线介绍Libra的规划与完成:

libra_account

UTXO的英文是Unspent Transaction Output,直译便是未消费的买卖输出,一个Address的当时状况便是一个UTXO列表。UTXO模型下,消费的时分拿出一个或许多个UTXO当作当时Transaction的Input,然后生成多个UTXO,Input和Output的总额是持平的。在未来的某个时间,这些Output又被作为其他Transaction的Input。是不是跟纸钞有些像?而Account模型中,每个Address一般包括一个的总额和SequenceNumber计数器。每次消费的时分会从当时Address的总额中减去消费额,在另一个Address中加上相应的消费额,一起经过SequenceNumber递加的办法,确保当时Address结构的出来的一切Transaction有先后次序,然后保证账号的状况正确。

Libra运用的Account模型来表达账本数据,所以Transaction有严厉的先后次序。这点在后边咱们还会说到。

libra-tx-1

咱们假定上图是某个时间,链上所存储的账号数据,其间Alice有一个Move界说的合约,code被存储在她的账号下。上图的第①步中,Bob构建一个Transaction,在Transaction中指定运转Alice账号下对应的合约的一个办法,并从自己的账号下取出该合约办法能了解的数据作为办法的参数,然后对Transaction进行签名并播送出去。图中第②步,矿工收到Bob的Transaction,打包到Block中,然后履行Bob的Transaction,而且将成果写到Bob的账号下面。整个进程中,大约的了解便是,Move界说了一段逻辑,Transaction设置了运转逻辑用到的数据,链记录了逻辑运转之后的终究状况。

libra-tx-2

这张图也是Libra的技能白皮书中的一张图,跟前面介绍Libra中心组件那张图有些像,可是箭头上多了一些数字。这张图实际上是表明一个Transaction从生成到打包,从履行到上链的完好的生命周期。下面咱们顺次介绍一下每个数字大约代表的意思:

1. 买卖被用户运用wallet或许cli提交到AdmissionControl 2. AdmissionControl运转VM做一些Transaction的前置校验,例如买卖的签名校验等等,过滤掉一些无效买卖 3. Transaction前置校验经往后,会被提交到Mempool中 4. Transaction被设置为Ready状况,等候被打包进Block中 5. Transaction被设置为Ready状况之后,会被播送给其他Mempool 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对应的终究状况 

在叙述第一条主线的时分,咱们说到了AC是一个GRPC服务,适当所以Node的一个网关。Node包括多个GRPC服务和许多的RPC接口,但是只要跟用户打交道的两类接口,才有必要露出出去给wallet或许cli调用:

在叙述第一条主线的时分,咱们知道Mempool是用来存储未上链的Transaction。咱们先来看一看Mempool的全体规划:

libra-tx-3

Mempool首要包括两个模块:

libra-tx-4

上图是Transaction在Mempool中大致的状况转化进程,而Transaction大约的排序规则是:gas_price expiration_time address sequence_number

libra-tx-5

其间compute- execute以及commit- store会在后边讲,vote将在第3条主线具体讲,这儿暂时只需要注意两个当地:

热门文章

随机推荐

推荐文章