Hyperledger Transact 介绍

我们很高兴宣布我们一个新项目, Hyperledger Transact。Transact代表了超级账本向组件化的持续演进,以允许快速负责任地采用新的区块链技术。Transact提供了一个与平台无关的程序库,用于通过智能合约执行交易。它允许我们更迅速地集成各种智能合约技术,例如在跨超级账本项目之间用WebAssembly执行智能合约。Transact来自于超级账本多个项目的经验,并为多项目设计,包括Hyperledger Sawtooth和Hyperledger Fabric。

Hyperledger Transact 介绍

智能合约是分布式账本的基本构件。在分布式账本框架中,交易代表着提交交易的用户的有意的变化。交易通过智能合约进行解释,结果是更新了系统的当前状态。
现有的智能合约执行解决方案通常与特定的分布式账本实现绑定在一起,这限制了代码的可重用性。通过提供一个与分布式账本执行分离的智能合约的标准接口,Hyperledger Transact将减少分布式账本解决方案的开发工作。
什么是Hyperledger Transact?
Hyperledger Transact通过提供一个共享软件库来处理智能合约的执行,包括调度、交易分配和状态管理的各个方面,从而使编写分布式账本软件变得更加容易。
Hyperledger框架级别的项目和定制的分布式账本可以使用Transact的高级事务执行和状态管理来简化项目中的交易执行代码,并利用Transact的其他特性。
更具体地说,Transact提供了一种可扩展的方法来实现新的智能合约语言,称为“智能合约引擎。”每个智能合约引擎都实现了一个处理智能合约的虚拟机或解释器。这种例子包括处理以太坊虚拟机(EVM)智能合约的Seth,以及处理WebAssembly智能合约的Sabre。Transact还为实现智能合约和智能合约引擎提供了SDK,这使得用各种编程语言编写智能合约业务逻辑变得很容易。
Hyperledger Transact的灵感来自于Hyperledger Sawtooth,并使用Sawtooth的当前交易执行平台的架构元素,包括调度,交易隔离和状态管理的方法。Transact还进一步了解到来自Hyperledger Fabric的需求,以支持不同的数据库后端,以及Sawtooth和Fabric之间的联合经验,以便为执行适配器提供灵活的模型(例如,从集成Hyperledger Burrow中吸取的教训)。
深度分析
Transact基本上是一个状态转换的交易处理系统。状态数据通常存储在一个梅克尔-雷迪克斯树( Merkle-Radix tree)、一个键值数据库或一个SQL数据库中。给定初始状态和交易,Transact将执行交易以生成一个新状态。这些状态转换被认为是“纯粹”的,因为只有初始状态和交易被输入(相比之下,其他系统如以太坊将状态和区块信息组合在一起,以产生新的状态)。其结果就是Transact对于除交易执行和状态之外,与框架功能是无关的。是不是很棒?
故意省略其他特性,如共识、区块、链接和对端。这些特性由Hyperledger框架(例如Sawtooth和Fabric)和其他分布式账本实现负责。对智能合约执行的聚焦意味着Transact可以用于智能合约的执行,而不会与其他平台级体系结构设计元素发生冲突。
在较高的级别上,Transact体系结构如下所示:
· Transact处理包括下列部分:
状态。Transact状态实现提供对数据库的get、set和delete操作。对于梅克尔-雷迪克斯(Merkle-Radix)树状态实现,树结构在LMDB或内存数据库之上实现。
· 上下文管理器。在Transact中,状态读取和写入的作用域为一个特定的“上下文”(沙盒),该上下文包含对状态ID(如梅克尔-雷迪克斯状态根哈希)和一个或多个以前的上下文的引用。上下文管理器实现上下文生命周期,并为从状态读取、写入和删除数据的调用提供服务。
· 调度器。此组件控制要执行的交易的顺序。具体实现包括一个串行调度器和一个并行调度器。并行交易执行是提高网络吞吐量的重要创新。
· 执行器。Transact执行器从调度器获取交易并在特定上下文中执行它们。通过将事务发送到特定的执行适配器(例如ZMQ或静态进程内适配器)来处理执行,后者又将事务发送到一个特定的智能合约。
· 智能合约引擎。这些组件提供了运行智能合约的虚拟机实现和解释器。引擎的示例包括WebAssembly、以太坊虚拟机、Sawtooth交易处理器和Fabric链码。
Transact 特性
Hyperledger Transact包括以下已有和将有的特性(非完整列表):
· 允许不同执行机制的交易执行适配器。例如,Transact最初提供了同时支持进程内和外部交易执行的适配器。进程内适配器允许创建可以执行特定类型交易的单个(自定义)进程。外部适配器允许在单独的进程中执行。
· 串行和并行交易调度,为灵活性和性能提供选项。串行调度按顺序一次执行一个事务。并行调度在同一时间执行多个事务(可能是无序的),带有特定的约束,以保证生成的状态与串行调度中可能发生的订单执行相匹配。并行调度提供了巨大的性能优势。
· 可插入状态后端,初始支持LMDB的梅克尔-雷迪克斯树实现和内存中的梅克尔-雷迪克斯树(主要用于测试)。今后也将支持键值数据库和SQL数据库
· 交易回执,其中包含状态变化结果和交易执行中的其他信息。
· 可以由智能合约生成的事件。这些事件被捕获并存储在交易凭据中。
· 用于下列语言的SDK:Rust、Python、Javascript、Go、Java(包括Android)、Swift(iOS)、C++和.NET。
· 支持多种风格的智能合约,包括Sabre(WebAssembly智能合约)和Seth(EVM智能合约)。
谁参与了该项目?
Hyperledger Transact的最初代码是由Bitwise IO和Cargill开发的,这在很大程度上得益于英特尔之前对Hyperledger Sawtooth的贡献。设计讨论与Fabric,Borrow,和Indy的维护者经过进一步设计讨论后完善了提案。Transact旨在鼓励项目之间的接口对齐。Bitwise IO、Cargill、IBM和Intel目前都参与了Transact项目。
Hyperledger Sawtooth、Hyperledger Fabric和Hyperledger Grid的维护者已表示有兴趣在其项目中使用Hyperledger Transact。我们认为,这仅仅是开始。由于使用Transact标准接口执行智能合约的优势,我们预计随着项目的成熟,采用的人会越来越多。