译自:官方文档翻译《The Libra Blockchain》之执行交易,第三小节。本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行许可。

执行交易

Libra 协议中,修改区块链状态的唯一方法是执行交易。本节将介绍执行一个交易所必须的条件,定义了交易的结构如何,解释了 Move 虚拟机如何执行一次交易的,还介绍了 Move 语言的关键概念。

Libra 协议的最初版本中,Move 的功能尚未完全开放给用户使用,只是其中的一部分而已。虽然我们说用 Move 来定义系统核心的概念,例如 Libra 货币等,但是用户还不能自定义自己的资源类型,不能自定义模块(module)。当前 Move 及其工具尚未成熟,所以要等到核心系统有足够把握的时候,才会向用户呈现,这也避免了过早地面对那些可伸缩性的问题,例如打造一个通用意义的智能合约,就必须在交易执行和数据存储之间协调。在第十节中,我们将集中谈谈 Move 语言的规划,将来会提供哪些完整的功能。

执行条件

已知初始状态。 所有验证器必须同意初始的系统账本状态,或者创世块(Genesis,译注:区域链的第一个区块在技术上被称为“创世块”)的账本状态。区块链上的核心组件,包括哪些呢?就是账户业务逻辑、交易验证、验证器选区和 Libra 货币。这些都是用 Move 语言的模块(Module)所编写,创世块也不例外,必须有这些模块定义好,也就是说,创世块依赖这些组件来处理交易(必须得至少有一个账户可以为第一笔交易支付费用;另外还得要一组验证器,负责仲裁这笔交易(第一笔)是否合法,合法了就签名认证通过)。

为简化系统的设计,系统的初始状态是一个空的状态。第一笔交易会创建创世块,我们定义这交易为 T0。这笔交易不是一般的交易而是特殊的,它的模块也是特殊的。对于以 T0开头的账本历史,客户端和验证器只能通过配置的方式读取,它由加密哈希标识。账本历史不会通过共识协议添加这些特殊的交易,而是通过配置才行。

可确定性。 交易执行必须是确定性的和密封的。只需要提供了交易信息和当前账本信息,完全可以预测执行交易过程中有什么结果输出。交易过程中没有外部交互(例如打印到控制台或与网络通讯)。即使每个验证器独立执行交易,但是由于确定性和密封执行,使得多个验证器可以就由相同的交易序列产生的状态达成一致。这也意味着区块链的交易历史可以从创世块开始重新执行,以生成当前的账本状态(参见第2.3节)。

关于计费。 为了支付运算的消耗,Libra 协议提出交易费的概念,以 Libra 币本身来计价。这参照了以太坊的气化模型(Gas Model),也是较多人所接收的模式。为满足 Libra 生态系统的需求,我们选择有足够运力的验证器进行运算(参见第八节)。在一些高负载的运行期间(例如 Ddos 攻击时候),我们希望减少交易的需求,于是提出了交易费的概念(译注:这相当于增加成本的做法);在正常运行期间,有足够的运力的话则费用较低。此方法不同于现有的一些区块链,那些区块链的目标是以较低运力的验证器选择性地处理交易而不是吞吐量。在该系统中,在高需求期间交易费用会激增——这增加了验证者的收入来源,但一方面也增加了用户的成本。

费用的多少取决于两个因素:气化价格(Gas Price)和气化成本(Gas Cost)。Libra 中每笔交易都事先标价了提交者愿意支付的单价,此单价便是气化价格。交易执行必然会占用计算资源,Gas Cost 就是反映该成本的多少。价高者的交易,验证器优先执行;而且当系统繁忙时,可能会放弃价格较低的交易。这目的就是减少了高负载下交易的需求。

此外,交易还包括最大气化量,即提交者愿意支付最大的气化量。在执行期间,VM 会跟踪使用的气化量的数量。如果在执行完成之前达到了最大气化量限制,VM 就会立即停止。即使已经发生修改的那些部分都不会提交给状态。但是交易仍会显示在交易历史记录中,发送者帐户依然要支付所用的气化值。

正如我们在本节中讨论的那样,区块链核心逻辑的许多部分都是使用 Move 定义的,包括气化值的扣除。为了避免死循环,VM 在执行这些组件时候禁止气化值计费。这些核心组件必须在创世块状态下定义,并必须以防御性方式编写,以防止恶意交易触发高费用的运算消耗。执行该逻辑的成本可以包含在交易的基本费用中。

资产语义化。 如同我们在2.1小节说的,账本直接编码对应现实世界的数字资产。交易的过程中必须保证不能资产被无限复制的情况发生,所谓资产,Libra 货币就是一种,也要保证不能丢失,或者未经认证就执行了交易。Libra 协议使用 Move 虚拟机来实现交易,这一过程中,自定义资产都是安全的,都保证符合以上安全性的要求。

交易结构

一个交易是包含以下字段的签名消息。

  • 发送者地址:交易发送者的账户地址。VM 读取序列号、认证 key 和该账户下存储的余额(读取 LibraAccount.T)。
  • 发送者的公钥:公钥、私钥对应一起完成交易的签名。公钥之 hash 值必须与发送者 LibraAccount.T 保存的认证 key 一致才行。
  • 程序:要执行的交易脚本,以 Move 字节码形式保存;可选地还可以有脚本的输入列表,或者要发布的 Move 模块字节码列表。
  • 气化值(Gas Price):为执行该次交易,发送者愿意付出的报酬,用气化值单位衡量,也是 Libra 币。
  • 最大气化值:在这次交易中允许消耗气化值的最大值,在停止交易之前。
  • 序列号:无符号的整型数字,必须与发送者 LibraAccount.T 的序列号一致。执行此事务后序列号加1。由于只能为给定的序列号提交一次交易,因此无法重放交易。

官方文档翻译《The Libra Blockchain》之执行交易(一)相关推荐

  1. 官方文档翻译《The Libra Blockchain》之执行交易(二)

    译自:官方文档翻译<The Libra Blockchain>之执行交易,第三小节.本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行许可. 执行交易 执行一 ...

  2. Libra教程之:执行Transactions

    文章目录 Transactions是什么 Transactions运行的基础条件 Transactions的结构 执行Transactions Transactions是什么 我们讲到了Libra是一 ...

  3. Hyperledger Fabric1.4学习笔记(包括官方文档翻译)

    目录 名词概念 账本Ledger 区块 交易 各种节点 fabric1.0典型交易流程 组织 fabric系统逻辑结构图 通道channel 各个命令详解 背书策略 Fabric1.4 fabric1 ...

  4. db4o_8.0对象数据库官方文档翻译_学习笔记三

    紧接上篇:db4o_8.0对象数据库官方文档翻译_学习笔记二 3. Object Manager Enterprise Overview(OME视图)即OME插件的使用 If you did not  ...

  5. Jess 7.2p2——Java平台规则引擎官方文档翻译1

    Jess 7.2p2--Java平台规则引擎官方文档翻译1 本博客转载自本体小本营. 1.入门 1.1.需求 在使用Jess前请先确认JVM是否正确安装并能正常工作. 使用JessDE集成开发环境,你 ...

  6. Jess 7.2p2——Java平台规则引擎官方文档翻译2

    Jess 7.2p2--Java平台规则引擎官方文档翻译2 本博客是本人接着[本体小本营][1]之前关于Jess的官方文档的补充翻译,前一部分请看转载的Jess 7.2p2--Java平台规则引擎官方 ...

  7. [iOS]Advanced Memory Management Programming Guide 高级内存管理编程指南(官方文档翻译)

    Advanced Memory Management Programming Guide - 高级内存管理编程指南(官方文档翻译) 版权声明:本文为博主原创翻译,如需转载请注明出处. 新博客文章地址: ...

  8. iOS程序启动原理---iOS-Apple苹果官方文档翻译

    本系列所有开发文档翻译链接地址:iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译PDF下载地址 //转载请注明出处--本文永久链接:http://www.cnblogs.com/Ch ...

  9. Vue3官方文档翻译之Reactivity Fundamentals

    引言 突然不知道这章写了啥, 感觉内容有点干, 顾着翻译去了, 没有吸收消化. 还是总结下, 主要是就是响应式的对象如何和template结合的, 响应式对象是通过JavaScript的代理对象实现的 ...

最新文章

  1. PHP 获取数组最后一个值
  2. linux 换行符_「linux」libevent demo详细分析(对比epoll)
  3. Windows系统下的Visual studio2019 安装 opencv4.5.1的安装
  4. 26.27.28.29.极区图(南丁格尔玫瑰图)、维恩图 (Venn diagram)、面状图(Area chart)、树地图
  5. php如何定义和使用常量,如何在PHP中定义和使用常量
  6. asp.net core添加全局异常处理及log4net、Nlog应用
  7. linux和mysql重点哪个_重要的MySQL 文档存储知识点扫盲
  8. linux spf13 vim安装,Linux 下安装 spf13-VIM
  9. STM32 - 定时器基础应用说明 - 03 - Application: timer clocking using external clock-source on ETR timer input
  10. linux 删除sysadm用户,linux 用户和组命令整理及详细介绍
  11. spring boot 实现发送邮箱验证码
  12. 蓝桥杯2019年第十届C/C++省赛B组第九题-后缀表达式
  13. Apache Hadoop YARN
  14. python自动注册邮箱_Python自动登录126邮箱的方法
  15. Windows 11系统设置文件夹默认显示方式为“大图标”的方法
  16. 微信开发 免费服务器,微信开发详解:[1]免费服务器
  17. 连续系统分析【信号与系统四】
  18. 分享Canvas简笔画小程序源码
  19. NX二次开发-UF_DRF_ask_dim_info获得图纸尺寸属于哪个视图和图纸页
  20. In silico design of MHC class I highbinding affinity peptides through motifsactivation map

热门文章

  1. VUE-flex布局之 align-self 单个交叉轴对齐方式(11)
  2. k8s+jenkins+docker部署微服务实现CI/CD
  3. java中的“我”不是“我”,NaN特殊标识以及正无穷+负无穷应该等于多少?
  4. SAP中订单结算KO88\ CO88\KO8G的区别
  5. python3 import bz2 ModuleNotFoundError: No module named ‘_bz2‘
  6. 20155305乔磊2016-2017-2《Java程序设计》第二周学习总结
  7. 他山之石、可以攻玉 - 我的2015年总结
  8. 计算机开机后桌面黑屏,电脑开机一直黑屏怎么办 电脑开机后桌面黑屏的解决方法...
  9. 构建全价值链知识创新管理——鸿翼KM知识管理平台
  10. css首字下沉_一个简单CSS首字下沉