零零客微文大全00ke.net

  • Libra区块链论文解析6-交易的执行-part 1
  • 来源:格密链

本文由陈智罡博士撰写

整个技术论文分为10部分:

 

1 Introduction--引言

2 Logical Data Model--逻辑数据模型

3 Executing Transactions--交易的执行

4 Authenticated Data Structures and Storage--可认证的数据结构和存储

5 Byzantine Fault Tolerant Consensus--拜占庭容错共识

6 Networking--网络

7 Libra Core Implementation-- Libra 内核实现

8 Performance--性能

9 Implementing Libra Ecosystem Policies with Move--使用Move实现Libra生态系统规则

10 What's Next for Libra?-- Libra发展规划

我们开始分析第3节。很多人看完我们的分析文章后问:为什么能把这篇论文的本质分析的这么清楚。

 

这个问题只有一个答案,如果你对区块链的本质很清楚的话,所有后续的方案全是“换汤不换药”。

 

那么如何搞清区块链技术的本质呢?

 

我想如果把比特币的白皮书理解的非常透彻的话,你已经理解了区块链的本质。可以参考我们以前公众号的文章:解读比特币白皮书


说实在的,比特币的技术要比Libra技术有趣得多。比特币是一个公链,完全没有中心,全要靠各方博弈最后形成共识,有很多很有趣的数字,例如:每隔10分钟出一个块,每6个块确认后就认可该交易等等。Libra中你几乎看不到这样的数字。因为它更像是一个数据库,操作规范而单一。

 

言归正传,分析第3节。

 

本节第一话就开宗明义的指出:在Libra协议中,改变区块链状态的唯一方式就是执行交易。千万别忘了Libra是一个支付系统,是基于区块链的支付系统,所有的内容都是围绕着这个主题在转

 

本节概括了交易的执行条件,定义了交易的结构,解释了Move虚拟机如何执行一个交易,描述了Move 语言的核心概念。

 

在Libra 协议的最初版本里,只对用户提供了很小一部分Move语言功能。事实上,Move语言通常用来定义系统的核心概念,例如Libra币。用户是不允许发布模块来声明自己的资源类型。这种设计理念让Move语言在构建Libra 核心系统中逐步成熟,而且也回避了在智能合约中,执行交易与数据存储所带来的扩展性问题的挑战。

 

可见,在Libra 系统构建中,采用的是逐步求精的原则,尽量简单实用,不断进化。采取的很务实的态度。

 

至于Move语言的全部功能特性,将在第10节展开描述。如果你着急知道,可以跳到第10节,不过是英文的。

 

由于最近比较忙,我会坚持更新。写作和跑步对于我来说,都是一种放松和愉悦。

3.1
交易执行之前的规则制定

比特币里有创世块的概念,即区块链中第一个块(称为创世块)是如何形成的呢?在Libra 系统中,系统一开始就设置好了创世状态,所有验证者默认即可,非常方便。

 

在Libra创世状态里,通过“模块”定义了系统的核心对象,例如:账户间的逻辑关系、交易验证、验证者的选择、Libra币等。在Libra创世状态中,必须考虑周全,例如至少有一个账户,能够支付得起第一笔交易产生的费用;必须要有一些验证者,能够对交易的认证进行签名确认。

 

账本的初始状态是什么?创世状态如何产生呢?注意,初始状态是系统原始状态,而创世状态是系统开始第一笔交易的状态,也就是启动系统的状态。

 

为了简化设计,系统的初始状态通过“空状态”表示。而创世状态是通过一个特殊的交易T0所创建,并且定义了所需要的模块与资源。注意,这里并没有通过正常的交易过程来建立创世状态,系统直接默认的设置执行特殊交易T0。因此,客户和验证者也被设置为只接受T0开始的账本记录,可以通过密码学的哈希技术标识T0的开始。

 

值得注意的是像T0 这样的特殊交易,只能通过设置的方式加入账本记录,而不能通过正常的共识算法加入账本记录。

 

这种方式的好处是处理简单,例如通过设置一个特殊交易来定义分叉的开始。像客户也可以设置一个特殊交易对模块和资源进行改变。这种特殊交易的执行都是在正常交易执行之外进行的,增加了系统对特殊事件的响应处理能力。当然,中心化的色彩就很浓了。不过,凡事都通过共识来完成,效率也太低。

 

●确定性

 

交易的执行具有确定性和封闭性。这意味着交易的输出结果完全是可以预计的,仅依赖于交易包含的信息和账本的当前状态。而且交易的执行不受外部的影响。

 

对于相同的交易序列号,确定性和封闭性使得不同验证者产生相同的验证结果。所以从创世块开始执行交易,一直到当前账本状态,可以重复获得相同的区块链的交易历史记录。

 

●可度量的

 

为了管理对计算资源的需求,Libra协议对每一笔交易收取交易费,通过Libra 币支付该费用。该方法遵循了以太坊的Gas理念。

 

Libra系统中,选择具有充分计算资源的验证者,以满足Libra系统的正常运行。收取交易费用的唯一目的,是为了当资源需求超过系统所能提供的资源时,降低系统资源的需求量,从而保证系统正常的运行。

 

系统正常运行时,对于正常的操作只收取较低的费用。这与目前一些区块链的思路不同,有些区块链选取不具有充分计算资源的验证者。当资源需求变高的时候,交易费急剧增加,对于验证者能得到可观的回报,但是对于客户就是成本。

 

一笔交易的执行是以消耗的Gas成本来表示所消耗的计算资源的多少,该成本是动态的,因每个用户而不同。验证者会优先选择价格更高的交易执行,当系统繁忙时可能会漏掉价格低的交易。

 

交易中包含一个Gas的最大值,该值说明了在某个具体Gas价格下,发送者愿意支付的最大数量Gas。

 

在交易执行期间,虚拟机会跟踪Gas使用数量。如果在执行完成前,最大Gas数量用完,则虚拟机立刻终止。该交易不会对当前账本状态有任何影响,但是交易任然会出现在交易历史中,并且会对发送者收取交易费。

 

在这节我们看到,区块链中的核心逻辑的许多部分都是使用Move进行定义的,包括Gas费的扣除。为了避免循环扣除费用,虚拟机禁止在核心组件执行期间对扣Gas费。这些核心组件都是在创世状态下定义的,而且具有写保护以防止恶意交易触发的高额交易费用的代码执行。执行核心组件的费用将包含在后面对交易的收费中,是一项基础费用。

 

●资产语义

 

账本状态直接通过现实世界的数值对数字资产进行编码。交易执行中必须保证Libra币不能够被复制、丢失以及非授权转移。Libra协议只用Move虚拟机来实现交易和客户资产具有这些安全属性。

3.2
交易的结构


一个交易是通过数字签名认证的信息,其内容如下:

 

发送者的地址:就是交易发送者的账户地址。虚拟机通过存储在发送者地址下的LibraAccount.T资源,来读取序列号、认证公钥、余额等内容。

 

发送者的公钥:该公钥对应于该交易数字签名所使用的私钥。公钥的哈希值与存储在LibraAccount.T资源中的认证公钥相匹配。

 

程序:包括用于执行交易脚本的Move字节编码,脚本所需的输入参数列表,所需发布的Move字节编码模块列表。

 

Gas价格:执行交易是需要掏钱的,和我们用的银行转账不一样。为了执行交易,发送者需要给出愿意支付每一Gas单元的Libra币数量。

 

Gas数量的最大值:执行交易允许被消耗的最大Gas数量值。

 

序列号:是一个无符号型整数,与在发送者在LibraAccount.T resource下的序列号相同。交易执行完后,序列号加1。由于每个交易有唯一一个序列号,所以不能重复交易。

未完待续

Libra区块链论文解析5-数据逻辑模型-part 2

Libra区块链论文解析4-数据逻辑模型-part 1

Libra区块链论文解析3-引言-part 2

Libra区块链论文解析2-引言-part 1

Libra区块链论文解析1-摘要

Libra技术概览

Facebook的野心

Facebook发行的Libra与支付宝的关系

2019年ACNS接受论文

如何保证同态密文的完整性

什么是算法?

多长的密钥能够抗量子计算

欢迎收听“区块链杂谈”节目,国内最有质量的区块链知识分享节目。




◆ ◆ ◆  ◆ 

格密链

专注于区块链上的密码学技术

长按扫码可关注


文章好看就点这里





















    已同步到看一看
















    发送中













    区块

    1 2 3 4 5 >> 

    公众号 • 格密链

    Flag Counter