精通区块链(四)

原文:zh.annas-archive.org/md5/0290aeea847c6aa4c7f7f8ed538e33ef

译者:飞龙

协议:CC BY-NC-SA 4.0

第九章:Hyperledger

Hyperledger 不是一种区块链,而是 Linux 基金会于 2015 年 12 月发起的一个项目,旨在推进区块链技术。该项目是其成员的协作努力,旨在构建一个可以用于开发和实施跨行业区块链应用和系统的开源分布式分类帐框架。其关键重点是构建和运行支持全球业务交易的平台。该项目还专注于改善区块链系统的可靠性和性能。

Hyperledger 旗下的项目经历各种开发阶段,从提案孵化再到活跃状态。项目也可能被废弃或处于终止生命周期状态,不再进行活跃开发。要使项目能够进入孵化阶段,必须拥有完全可用的代码库以及一支活跃的开发者社区。

项目

目前,Hyperledger 旗下有六个项目:Fabric、Iroha、Sawtooth lake、blockchain explorer、Fabric chaintool 和 Fabric SDK Py。最近加入的项目是 Corda,预计将被纳入 Hyperledger 项目。Hyperledger 项目目前有 100 名成员,活跃度很高,有超过 120 名贡献者,全球范围内经常组织 meet-up 和讲座。

以下简要介绍这些项目,之后我们将提供有关 Fabric 和 Sawtooth lake 的设计、架构和实现的更多细节。

Fabric

Fabric 是由 IBM 和 数字资产控股(Digital Asset Holdings) 提出的区块链项目。其意图是为区块链解决方案的开发提供基础,其基础架构采用可插拔架构,可以根据需要将各种组件(如共识算法)插入系统中。项目地址为 github.com/hyperledger/fabric

Sawtooth lake

Sawtooth Lake 是由英特尔于 2016 年 4 月提出的一个区块链项目,具有一些关键创新,重点是将分类帐与交易解耦,通过交易家族在多个业务领域灵活使用,并且具有可插拔共识。 解耦可以通过使用称为交易家族的新概念来更精确地解释,这使得交易不再与共识层紧密耦合。与交易单独与分类帐耦合不同,使用交易家族,这允许更灵活,更丰富的语义和业务逻辑的不受限制的设计。交易遵循交易家族中定义的模式和结构。英特尔还引入了一种新颖的共识算法,简称为 PoET,即经过时间证明,它利用英特尔软件保护扩展Intel’s SGX)架构的可信执行环境TEE)来提供安全和随机的领导者选举过程。它还支持有许可和无许可的设置。该项目位于 github.com/hyperledger/sawtooth-core

Iroha

Iroha 于 2016 年 9 月由 Soramitsu、日立、NTT 数据和 Colu 提出。Iroha 的目标是构建一个可重复使用的组件库,用户可以选择在其基于 Hyperledger 的分布式分类帐上运行。Iroha 的主要目标是通过提供用 C++ 编写的可重复使用的组件来补充其他 Hyperledger 项目,重点是移动开发。该项目还提出了一种新颖的共识算法,称为 Sumeragi,这是一种基于链的拜占庭容错共识算法。Iroha 位于 github.com/hyperledger/iroha。Iroha 已经提出并正在开发的各种库,包括但不限于数字签名库(ed25519)、SHA-3 哈希库、交易序列化库、P2P 库、API 服务器库、iOS 库、Android 库和 JavaScript 库。

区块链浏览器

该项目旨在为 Hyperledger 构建一个区块链浏览器,可用于查看和查询区块链上的交易、块和相关数据。它还提供网络信息和与链代码交互的能力。

目前还有两个正在孵化的项目:Fabric 链工具和 Fabric SDK Py。这些项目旨在支持 Hyperledger Fabric。

Fabric 链工具

Hyperledger 链代码编译器正在开发中,以支持 Fabric 链代码开发。其目标是构建一个工具,可以读取高级 Google 协议缓冲结构并生成链代码。此外,它会对链代码进行打包,以便可以直接部署。预计此工具将帮助开发人员在不同的开发阶段,如编译、测试、打包和部署。它可在 github.com/hyperledger/fabric-chaintool 找到。

Fabric SDK Py

该项目的目标是构建一个基于 Python 的 SDK 库,可用于与区块链(Fabric)进行交互。它可在 github.com/hyperledger/fabric-sdk-py 找到。

Corda

Corda 是 R3 向 Hyperledger 项目贡献的最新项目。它于 2016 年 11 月 30 日开源发布。Corda 在很大程度上面向金融服务行业,并与金融行业的主要银行和组织合作开发。在撰写本文时,它尚未在 Hyperledger 项目的孵化下。技术上,Corda 并不是一个区块链,但具有类似区块链的关键特性,例如共识、有效性、唯一性、不可变性和认证。

在本章的后续部分,将更详细地讨论 Fabric(IBM)、Sawtooth Lake(Intel)和 Corda(R3)。

作为协议的 Hyperledger

Hyperledger 的目标是构建一个由行业使用案例驱动的新区块链平台。由于社区对 Hyperledger 项目做出了许多贡献,Hyperledger 区块链平台正在演变成一个用于商业交易的协议。与先前仅解决特定类型行业或需求的区块链解决方案相比,Hyperledger 也正在演变成可用作构建区块链平台参考的规范。在接下来的部分中,Hyperledger 项目发布了一个参考架构。由于这项工作正在不断且严格地开发中,这其中可能会有一些变化,但核心服务预计将保持不变。

参考架构

Hyperledger 发布了一份白皮书,其中包含参考架构,可作为构建许可分布式分类帐的指南。参考架构包括两个主要组件:Hyperledger 服务和 Hyperledger API、SDK 和 CLI。Hyperledger 服务提供各种服务,例如身份服务、策略服务、区块链服务和智能合约服务。另一方面,Hyperledger API、SDK 和 CLI 通过适当的应用程序编程接口、软件开发工具包或命令行界面提供与区块链服务的接口。此外,一个事件流,基本上是一个 gRPC 通道,运行在所有服务之间。它可以接收和发送事件。事件可以是预定义的或自定义的。验证对等体或链代码可以发出事件,外部应用程序可以响应或监听这些事件。

在撰写本文时,Hyperledger 白皮书中发布的参考架构如下图所示。Hyperledger 是一个快速变化和发展的项目,因此这里显示的架构预计会有所变化。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Hyperledger 架构,如 Hyperledger 白皮书的最新草案 V2.0.0 中所提议的。(来源:Hyperledger 白皮书)

要求

区块链服务有一定的要求。参考架构是由 Hyperledger 项目的参与者提出的需求和要求驱动的,并在研究行业使用案例后制定的。从对工业使用案例的研究中推导出了几类要求,并在以下章节中进行了讨论。

模块化方法

Hyperledger 的主要要求是具有模块化结构。预计,作为跨行业的 fabric(区块链),它将在许多业务场景中使用。因此,与存储、策略、链码、访问控制、共识和许多其他区块链服务相关的功能应该是可插拔的。这些模块应该是即插即用的,用户应该能够轻松地移除和添加满足业务需求的不同模块。

例如,如果一个企业区块链只需要在已经信任的各方之间运行,并执行非常基本的业务操作,那么也许就不需要为保密性和隐私性提供先进的加密支持,因此用户应该能够移除该功能(模块)或将其替换为更适合其需求的模块。同样,如果用户需要运行跨行业区块链,则保密性和隐私性可能至关重要。在这种情况下,用户应该能够将高级加密和访问控制机制(模块)插入到区块链(fabric)中。

隐私和保密性

交易和合同的隐私和保密性在商业区块链中至关重要。因此,Hyperledger 的愿景是提供各种加密协议和算法,并且预计用户将能够根据其业务需求选择适当的模块。该框架应能处理复杂的加密算法,而不会影响性能。

身份

为了提供隐私和机密性服务,还需要一个灵活的 PKI 模型,用于处理访问控制功能。密码机制的强度和类型也预计根据用户的需求和要求而有所不同。在某些场景中,可能需要用户隐藏其身份,因此预计 Hyperledger 将提供此功能。

可审计性

可审计性是 Hyperledger Fabric 的另一个要求。预计会保留所有身份、相关操作和任何更改的不可变审计追踪。

互操作性

目前有许多可用的区块链解决方案,但它们之间无法互相通信,这可能会限制区块链全球商业生态系统的增长。人们希望许多区块链网络将针对特定需求在商业世界中运作,但重要的是它们能够彼此通信。所有区块链都应遵循一套共同的标准,以便实现不同账本之间的通信。预计将开发一种协议,允许在许多模块之间交换信息。

可移植性

可移植性要求关注的是在多个平台和环境中运行而无需在代码级别进行任何更改的能力。预计 Hyperledger 将具有可移植性,不仅在基础设施级别,还包括代码、库和 API 级别,以便支持在各种 Hyperledger 实现中的统一开发。

模块

为了理解 Hyperledger 项目孵化中的各种项目,首先要了解 Hyperledger 的基础。在读者接触更深入的材料之前,有些特定于 Hyperledger 的术语需要一些澄清。首先是 Fabric 的概念。

Fabric 可以被定义为提供基础层的一组组件,用于构建区块链网络。Fabric 网络有各种类型和能力,但所有 Fabric 共享共同属性,如不可变性和共识驱动。一些 Fabric 可以提供模块化方法来构建区块链网络。在这种情况下,区块链网络可以具有多个可插拔模块,在网络上执行各种功能。例如,共识算法可以是区块链网络中的可插拔模块,根据网络的要求,可以选择并插入适当的共识算法到网络中。这些模块可以基于 Fabric 的某些特定规范,并包括 API、访问控制和各种其他组件。Fabric 也可以设计为私有或公开,并允许创建多个业务网络。例如,比特币是在其 Fabric(区块链网络)上运行的应用程序。如前所述,区块链可以是许可的或无许可的,对于 Hyperledger 术语中的 Fabric 也是true

Fabric 也是 IBM 提交给 Hyperledger 基金会的代码贡献的名称,正式称为 Hyperledger Fabric。IBM 还通过其 Bluemix 云服务提供区块链即服务(IBM Blockchain)。

Hyperledger Fabric

Fabric 最初是 IBM 对 Hyperledger 项目的贡献。这一贡献的目标是实现一种模块化、开放和灵活的构建区块链网络的方法。Fabric 中的各种功能是可插拔的,它还允许使用任何语言开发智能合约。这是可能的,因为它基于容器技术,可以托管任何语言。链代码(智能合约)被沙盒化到一个安全容器中,其中包括安全操作系统、链代码语言、运行时环境和用于 Go、Java 和 Node.js 的 SDK。如果需要,也可以支持其他语言。智能合约在 Fabric 中被称为链代码。与以太坊中的领域特定语言或比特币中非常有限的脚本语言相比,这是一个非常强大的功能。它是一个许可网络,旨在解决可扩展性、隐私和机密性等问题。其背后的关键思想是模块化技术,这将允许在设计和实现上灵活性。这可能会导致实现可扩展性、隐私和其他所需属性。Fabric 中的交易对于普通用户是私有的、机密的和匿名的,但它们仍然可以被授权的审计员追踪和与用户关联。作为一个许可网络,所有参与者都必须在成员服务中注册,以便访问区块链网络。这个分类帐还提供了审计功能,以满足监管和合规性需求。

Fabric 架构

Fabric 在逻辑上分为基于提供的服务类型的三个主要类别。这包括会员服务、区块链服务和链码服务。在下一节中,将详细讨论所有这些类别和相关的组件。Hyperledger Fabric 的当前稳定版本为 v0.6,但最新版本 v1.0 可用,但尚未稳定。在 1.0 版本中,进行了许多架构更改,在本章后面的部分中也将讨论 1.0 版本中所做的一些更改。

会员服务

这些服务用于为织物网络的用户提供访问控制功能。接下来的列表显示了会员服务执行的功能:

  1. 用户身份验证。

  2. 用户注册。

  3. 根据其角色为用户分配适当的权限。

会员服务利用公钥基础设施(PKI)以支持身份管理和授权操作。会员服务由各种组件组成:

  • 注册机构(RA):用于认证用户并评估织物参与者的身份以发放证书的服务。

  • 注册证书颁发机构注册证书(Ecerts)是由 ECA 颁发给注册参与者的长期证书,旨在为参与网络的实体提供身份识别。

  • 交易证书颁发机构:为了在网络上发送交易,参与者需要持有交易证书。TCA 负责向注册证书持有者颁发交易证书,并从 Ecerts 派生。

  • TLS 证书颁发机构:为了确保在 Fabric 节点间的网络级通信安全,使用 TLS 证书。TLS 证书颁发机构颁发 TLS 证书,以确保在区块链网络上传递的消息的安全性。

区块链服务

区块链服务是 Hyperledger Fabric 的核心。此类别中的组件如下。

共识管理器

共识管理器负责提供共识算法的接口。这充当一个适配器,接收来自其他 Hyperledger 实体的交易,并根据选择的算法类型执行它们。共识是可插拔的,当前在 Fabric 中有三种共识算法,分别是批处理 PBFT 协议、筛子算法和 NOOPS。

分布式账本

区块链和世界状态是分布式账本的两个主要元素。区块链只是一个区块链表(如前几章介绍的)和世界账户是一个键值数据库。这个数据库被智能合约用来通过交易在执行期存储相关状态。区块链由包含交易的区块组成。这些交易包含链码,运行可以更新世界状态的交易。每个节点将世界状态保存在 RocksDB 中的磁盘上。以下图表显示了超级账本 Fabric 中一个典型区块及相关字段:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

区块结构

上图中显示的字段如下:

  • 版本: 用于跟踪协议更改的内容。

  • 时间戳: UTC 时戳时间戳,由区块提议者更新。

  • 交易哈希: 此字段包含区块中交易的默克尔根哈希。

  • 状态哈希: 这是世界状态的 Merkle 根哈希。

  • 上一个哈希: 这是之前区块的哈希,在序列化区块消息后计算,并应用 SHA3 SHAKE256 算法创建消息摘要。

  • 共识元数据: 这是一个可选字段,用于共识协议提供有关共识的相关信息。

  • 非哈希数据: 这是一些存储在区块中但未哈希的元数据。这个功能使得不同节点可以拥有不同的数据。它还提供了在不影响区块链的情况下丢弃数据的能力。

点对点协议

超级账本 Fabric 中的 P2P 协议是使用Google RPCgRPC)构建的。它使用协议缓冲区来定义消息的结构。

节点之间传递消息以执行各种功能。在超级账本 Fabric 中有四种主要类型的消息:发现、交易、同步和共识。当启动时,发现消息在节点之间交换,以发现网络上的其他对等方。

交易消息可分为两种类型:部署交易和调用交易。前者用于将新链码部署到账本上,后者用于调用智能合约中的函数。交易可以是公开的、机密的和机密链码交易。公开交易对所有参与者开放和可用。机密交易只允许交易所有者和参与者查询。机密链码交易具有加密链码,只有验证节点才能解密。验证节点运行共识、验证交易并维护区块链。非验证节点则提供交易验证、流媒体服务器和 REST 服务。它们还充当交易者和验证节点之间的代理。同步消息由节点用于保持区块链与其他节点同步更新。共识消息用于共识管理和向验证节点广播有效负载。这些消息由共识框架内部生成。

账本存储

为了保存账本状态,使用 RocksDB,并且存储在每个对等节点上。 RocksDB 是一种高性能数据库,可在rocksdb.org/获得。

链码服务

这些服务允许创建用于执行链码的安全容器。这个类别中的组件如下:

  • 安全容器: 链码部署在为智能合约执行提供经过锁定的隔离环境的 Docker 容器中。目前支持 Golang 作为主要智能合约语言,但如果需要,可以添加和启用任何其他主流语言。

  • 安全注册表: 这提供包含智能合约的所有映像的记录。

事件

区块链上的事件可以由验证节点和智能合约触发。外部应用程序可以通过事件适配器监听这些事件,并在需要时做出反应。它们类似于在上一章节中引入的 Solidity 的事件概念。

API 和 CLI

应用程序编程接口通过暴露各种 REST API 提供对区块链的接口。此外,还提供了提供 REST API 子集并允许快速测试和有限与区块链交互的命令行接口。

Fabric 的组件

区块链可以包括各种组件。 这些组件包括但不限于账本、链码、共识机制、访问控制、事件、系统监控和管理、钱包和系统集成组件。

对等节点

在 fabric 网络上可以运行两种主要类型的对等节点:验证的和非验证的。简单来说,验证节点运行共识,创建和验证交易,并有助于更新账本和维护链码。

非验证节点不执行交易,只构建交易,然后将其转发给验证节点。

两个节点都管理并维护了由成员服务发行的用户证书。

区块链上的应用

Fabric 上的典型应用通常由用户界面组成,通常是用 JavaScript/HTML 编写的,通过 API 层与存储在分类账上的后端链码(智能合同)交互。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

典型的区块链应用

Hyperledger 提供各种 API 和命令行界面以实现与分类账的互动。这些 API 包括身份、交易、链码、分类账、网络、存储和事件的接口。

链码实现

链码通常是用 Golang 或 Java 编写的。链码可以是公共的、机密的或受控制的。这些代码充当用户可以通过 API 与之交互的智能合同。用户可以调用链码中的函数,导致状态改变,并因此更新分类账。还有一些函数仅用于查询分类账,不会导致任何状态改变。

首先通过在代码中创建链码 shim 接口来执行链码实现。它可以是 Java 或 Golang 代码。为了实现链码,需要以下四个函数:

  • Init(): 当链码部署到分类账上时,会调用此函数。这将初始化链码并导致状态改变,从而相应地更新分类账。

  • Invoke(): 当合同执行时,使用此函数。它以函数名和参数数组作为参数。此函数会导致状态改变并写入分类账。

  • Query(): 用于查询已部署链码的当前状态。此函数不会对分类账进行任何更改。

  • Main(): 当节点部署自己的链码副本时,将执行此函数。使用此函数向节点注册链码。

以下图表说明了 Hyperledger Fabric 的一般概要:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Hyperledger Fabric 的高层概览

应用模型

对于 Hyperledger Fabric 的任何区块链应用程序都遵循 MVC-B 架构。这是基于流行的 MVC 设计模式。该模型中的组件包括模型、视图、控制和区块链:

  • 视图逻辑:这与用户界面有关。它可以是桌面、Web 应用程序或移动前端。

  • 控制逻辑:这是用户界面、数据模型和 API 之间的协调者。

  • 数据模型:此模型用于管理链下数据。

  • 区块链逻辑:这是通过控制器管理区块链和通过交易管理数据模型。

由于 Hyperledger 当前版本 v0.6 正在进行大规模重构以构建 V1.0,因此本节中没有引入实际的练习。

有望在本书出版时,有关 Hyperledger fabric 实际设置的信息可能已经过时。 因此,鼓励读者关注来自hyperledgerfabric.readthedocs.io/en/latest/ 的更新。

此外,IBM Bluemix 服务提供了区块链示例应用,属于其区块链即服务。 它可以在console.ng.bluemix.net/docs/services/blockchain/ibmblockchain_tutorials.html 上找到。 该服务允许用户在易于使用的环境中创建自己的区块链网络。

锯齿湖

锯齿湖可以在许可和非许可模式下运行。 它是一个分布式分类账,提出了两个新概念:第一个是介绍了一种名为经过时间证明PoET)的共识算法;第二个是交易系列的概念。 对这些新提议的简要描述在下一节中给出。

PoET

PoET 是一种新颖的共识算法,允许根据节点在提出区块之前等待的时间来随机选择节点。 这与其他基于领导选举和彩票的工作量证明算法形成对比,在这些算法中,为了被选为区块提议者,例如在比特币的情况下,需要使用大量电力和计算资源。 PoET 是一种工作量证明算法,但是,它不需要消耗计算资源,而是使用可信计算模型提供一种满足工作量证明要求的机制。 PoET 利用英特尔的 SGX 架构提供受信任的执行环境,以确保过程的随机性和密码安全性。 值得注意的是,锯齿湖目前的实现不需要真实的硬件 SGX 基于 TEE,因为它仅用于实验目的进行模拟,因此不应在生产环境中使用。

交易系列

传统的智能合约范式提供了一个基于所有领域的通用指令集的解决方案。 例如,在以太坊的情况下,已经开发了一组用于以太坊虚拟机(EVM)的操作码,可以用来构建解决任何行业需求的智能合约。 尽管这种模式有其优点,但明显可见这种方法并不是非常安全的,因为它为总账提供了一个强大且表达力强的单一接口,这可能为恶意代码提供了更大的攻击面。 这种复杂性和通用虚拟机范式最近已导致一些漏洞被黑客发现和利用。 最近的一个例子是 DAO 被黑客攻击,以及利用一些 EVM 操作码的限制进行拒绝服务(DoS)攻击。 下图描述了传统智能合约模型,其中使用通用虚拟机为所有领域提供了区块链的接口:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

传统的智能合约范式

为了解决这个问题, Sawtooth lake 提出了交易族的概念。 交易族是通过将逻辑层分解成一组规则和特定领域的组合层来创建的。 其核心理念是将业务逻辑组合在交易族内,这提供了一种更安全、更强大的构建智能合约的方式。 交易族包含特定领域的规则以及另一个允许为该领域创建交易的层。 另一种看待它的方式是,交易族是数据模型和实现特定领域逻辑层的交易语言的组合。 数据模型代表了区块链(总账本)的当前状态,而交易语言修改总账本的状态。 预期用户将根据其业务需求构建自己的交易族。

下图代表了这一模型,其中每个特定领域,如金融服务、数字版权管理(DRM)、供应链和健康行业,都有其自己的逻辑层,包括特定于该领域的操作和服务。 这使得逻辑层既限制又强大。 交易族可以确保仅包含与所需领域相关的操作,从而消除执行不需要的、任意的和潜在有害操作的可能性。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Sawtooth(交易族)智能合约范式

英特尔已经为 Sawtooth 提供了三个交易族:端点注册、Integerkey 和市场。

  1. 端点注册 用于注册账本服务。

  2. Integerkey 用于测试已部署的账本。

  3. MarketPlace 用于销售、购买和交易操作和服务。

Sawtooth_bond 已开发为证明概念,以演示债券交易平台。它可在 github.com/hyperledger/sawtooth-core/tree/master/extensions/bond 上获得。

Sawtooth 中的共识

Sawtooth 根据网络选择具有两种类型的共识机制。如前所述,PoET 是基于信任执行环境的抽奖功能,根据节点等待区块提议的时间随机选择领导者。还有另一种称为 quorum 投票的共识类型,这是由 Ripple 和 Stellar 构建的共识协议的一种适应。这种共识算法允许即时交易最终性,这在权限网络中通常是可取的。

开发环境

本节介绍了如何为 Sawtooth lake 设置开发环境的快速介绍。为了设置开发环境,需要一些先决条件。本节中的示例假定正在运行 Ubuntu 系统并具有以下内容:

  1. vagrant,至少版本 1.9.0,在 www.vagrantup.com/downloads.html 上可用。

  2. Virtual box,至少 5.0.10 r104061,在 www.virtualbox.org/wiki/Downloads 上可用。

一旦上述两个先决条件成功下载并安装,下一步是克隆存储库。

$ git clone https://github.com/IntelLedger/sawtooth-core.git

这将产生类似以下截图的输出:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

GitHub Sawtooth 克隆

一旦 Sawtooth 正确克隆,下一步是启动环境。首先,运行以下命令将目录更改到正确位置,然后启动vagrant箱:

$ cd sawtooth-core/tools
$ vagrant up

这将产生类似以下截图的输出:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Vagrant up 命令

如果在任何时候需要停止 Vagrant,则可以使用以下命令:

$ vagrant halt

或者

$ vagrant destroy

停止vagrant机器的 halt,而 destroy 将停止并删除vagrant机器。

最后,可以使用以下命令启动交易验证器。首先ssh进入vagrant Sawtooth 箱。

$ vagrant ssh

vagrant提示可用时,运行以下命令。

首先使用以下命令构建Sawtooth湖核心:

$ /project/sawtooth-core/bin/build_all

构建成功后,为了运行交易验证器,发出以下命令:

$ /project/sawtooth-core/docs/source/tutorial/genesis.sh

这将创建创世区块并清除任何现有的数据文件和密钥。这应该显示类似以下截图的输出:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

创建创世区块和生成密钥

下一步是运行交易验证器,并按照以下所示更改目录:

$ cd /project/saw-toothcore

运行交易验证器:

$ ./bin/txnvalidator -v -F ledger.transaction.integer_key --config /home/ubuntu/sawtooth/v0.json

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

运行交易验证器

通过按下Ctrl + C组合键停止验证器节点。一旦验证器正常运行,就可以在另一个终端窗口中启动各种客户端来与交易验证器进行通信并提交交易。

例如,在下面的屏幕截图中,市场客户端已启动,准备与交易验证器进行通信。请注意,通过以下命令创建/keys/mkt.wif下的密钥:

./bin/sawtooth keygen --key-dir validator/keys mkt

此演示只是从 Sawtooth Lake 文档衍生的基本示例。但是,使用 Sawtooth Lake 进行开发是一个非常复杂的过程,完整的章节都可以专门讨论这个问题。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

用于市场交易家族的市场客户端

Sawtooth Lake 也在持续发展,因此建议读者留意intelledger.github.io/上的文档,以便了解最新的发展动态。

Corda

Corda 不是一个区块链。传统的区块链解决方案,正如前面讨论的,有将交易捆绑在一起形成一个区块的概念,每个区块都与其父区块进行密码学连接,这样就提供了不可变的交易记录。但 Corda 并非如此:Corda 完全从零开始设计,提供了一种全新的模型来提供所有区块链的好处,但没有传统的区块链。它纯粹是为金融行业开发的,旨在解决由于每个组织都管理自己的总账而产生的真相的不同视图,导致了矛盾和运营风险。此外,数据也会在每个组织中复制,这导致了管理各自基础设施和复杂性成本的增加。这些都是 Corda 旨在通过搭建一个分布式数据库平台来解决的金融行业内的问题。

Corda 源代码可以在github.com/corda/corda找到。它是用一种叫做 Kotlin 的语言编写的,这是一种针对Java 虚拟机JVM)的静态类型语言。

架构

Corda 平台的主要组件包括状态对象、合同代码、法律文书、交易、共识和流程。

状态对象

状态对象代表表示金融协议的最小数据单位。它们是作为交易执行的结果创建或删除的。它们引用合同代码法律文书。法律文书是可选的,并为合同提供法律约束。但是,合同代码是强制性的,以便管理对象的状态。它是根据合同代码中定义的业务逻辑为节点提供状态转换机制所必需的。状态对象包含表示对象当前状态的数据结构。例如,在下图中,状态对象表示对象的当前状态。在这种情况下,它是甲方 A乙方 B之间的简单模拟协议,其中甲方 ABC已支付乙方 XYZ****1,000 GBP。这代表了对象的当前状态;但是所引用的合同代码可以通过交易改变状态。状态对象可以被视为状态机,它们被交易消耗以创建更新的状态对象。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一个状态对象示例

交易

交易用于在不同状态之间执行转换。例如,前图所示的状态对象是作为交易的结果创建的。Corda 使用类比特币的 UTXO 模型进行交易处理。交易通过交易进行状态转换的概念与比特币相同。与比特币类似,交易可以有零、单个或多个输入,以及单个或多个输出。所有交易都是数字签名的。此外,Corda 没有挖矿的概念,因为它不使用区块来安排区块链上的交易。相反,记账服务用于提供交易的时间顺序。在 Corda 中,可以使用 JVM 字节码开发新的交易类型,这使其非常灵活和强大。

共识

Corda 中的共识模型相当简单,基于稍后讨论的记账服务。其一般思路是通过记账服务评估交易的唯一性,如果它们是唯一的,就会被签署为有效的。Corda 网络上可以运行单个或多个集群记账服务。记账服务可以使用各种共识算法如 PBFT 或 Raft 达成共识。

Corda 共识有两个主要概念:关于状态有效性的共识,以及关于状态唯一性的共识。第一个概念涉及交易的验证,确保所有必需的签名都可用且状态适当。第二个概念是检测双花攻击的手段,并确保交易尚未被花费且唯一。

流程

Corda 中的流程是一种新颖的概念,它允许开发分散式工作流程。Corda 网络上的所有通信都由这些流程处理。这些是可以使用代码定义任何复杂的金融流程的交易构建协议。流程作为异步状态机运行,并且与其他节点和用户进行交互。在执行过程中,它们可以根据需要暂停或恢复。

组成部分

Corda 网络有多个组件。所有这些组件在下一节中有描述。

节点

Corda 网络中的节点以无信任模型运行,并由不同的组织运行。节点作为经过身份验证的点对点网络的一部分运行。节点使用经过认可的国际标准(ISO/IEC 19464)高级消息队列协议AMQP)直接与彼此通信,确保跨不同节点的消息安全地和安全地传输。AMQP 在 Corda 中通过 传输层安全TLS)工作,从而确保了节点之间通信的隐私和数据的完整性。

节点还使用本地关系数据库进行存储。网络上的消息以紧凑的二进制格式进行编码。它们通过 Apache Artemis message brokerActive MQ)进行传递和管理。节点可以作为网络地图服务、公证机、Oracle 或常规节点。下图显示了两个节点相互通信的高级视图:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在 Corda 网络中通信的两个节点

在上面的图表中,Node 1通过 AMQP 协议在 TLS 通信信道上和Node 2进行通信,节点有一个本地关系数据库用于存储。

权限服务

权限服务用于提供安全的 TLS 证书。为了参与网络,参与者需要由根证书颁发机构签发的签名身份。网络上的身份需要是唯一的,权限服务用于签署这些身份。用于识别参与者的命名约定基于 X.500 标准。这确保了名称的唯一性。

网络地图服务

此服务用于提供网络地图,形式为网络上所有节点的文件。此服务发布 IP 地址、身份证书和节点提供的服务列表。当节点首次启动时,所有节点通过注册到此服务来宣布其存在,在节点接收到连接请求时,首先在网络地图中检查请求节点的存在。换句话说,此服务解析参与者的身份至物理节点。

公证服务

在传统的区块链中,挖矿用于确定包含交易的块的顺序。在 Corda 中,公证服务用于提供交易排序和时间戳服务。网络中可以有多个公证人,并通过组合公钥进行标识。公证服务可以根据应用程序的要求使用不同的共识算法,如 BFT 或 Raft。公证服务签署交易以指示交易的有效性和最终性,然后将其持久化到数据库中。

为了将负载分布在节点之间以提高性能,公证人可以以负载平衡的配置方式运行;为了减少延迟,建议节点在物理上靠近交易参与者。

Oracle 服务

Oracle 服务要么对包含事实的交易进行签名(如果事实为真),要么可以自己提供事实数据。它们允许真实世界的信息进入分布式账本。

交易

Corda 网络中的交易永远不会全球传输,而是在半私密网络中进行。它们仅在与交易相关的参与者子集之间共享。这与传统的像以太坊和比特币这样的区块链解决方案形成对比,其中所有交易都会全球广播到整个网络。交易被数字签名,要么消耗状态,要么创建新状态。

Corda 网络上的交易由以下元素组成:

  • 输入引用:这是指交易将要消耗和使用的状态的引用。

  • 输出状态:这些是交易创建的新状态。

  • 附件:这是附加的 zip 文件哈希列表。Zip 文件可以包含与交易相关的代码和其他相关文档。文件本身不作为交易的一部分,而是单独传输和存储。

  • 命令:命令表示交易的预期操作的信息,作为合同的参数。每个命令都有一个公钥列表,表示需要签署交易的所有参与方。

  • 签名:这表示交易所需的签名。所需签名的总数与命令的公钥数量成正比。

  • 类型:交易有两种类型,即正常或更改公证。更改公证的交易用于重新分配状态的公证。

  • 时间戳:此字段表示交易发生的时间段。这些时间戳由公证服务验证和执行。此外,如果需要严格的时间限制,这在许多金融服务场景中是可取的,公证应与原子钟同步。

  • 摘要:这是描述交易操作的文本描述。

保险库

保险库在一个节点上运行,类似于比特币中的钱包概念。由于交易不是全球广播的,因此每个节点只会在它们的保险库中存储对他们而言被认为是相关的数据部分。保险库将它们的数据存储在标准的关系数据库中,因此可以使用标准的 SQL 进行查询。保险库可以包含在账本上和离账本上的数据,这意味着它也可以有一些不在账本上的数据部分。

CorDapp

Corda 的核心模型包括状态对象、交易和交易协议,当结合合约代码、API、钱包插件和用户界面组件时,形成一个 Corda 分布式应用程序CorDapp)。

Corda 中的智能合约使用 Kotlin 或 Java 编写。代码针对 JVM。 JVM 已经略微修改,以实现 JVM 字节码执行的确定性结果。 Corda 智能合约有三个主要组件,如下所示:

  1. 可执行代码定义了验证逻辑,用于验证对状态对象的更改。

  2. 状态对象表示合约的当前状态,并且可以被交易消耗或由交易产生(创建)。

  3. 命令用于描述操作和验证数据,以定义如何验证交易。

开发环境

Corda 的开发环境可以通过以下步骤轻松设置。

必需软件包括以下内容:

  1. JDK 8,可在 www.oracle.com/technetwork/java/javase/downloads/index.html 下载。

  2. 免费的 IntelliJ IDEA 社区版可在 www.jetbrains.com/idea/download 下载。

  3. H2 数据库是一个平台无关的 zip 包,可从 www.h2database.com/html/download.html 下载。

  4. Git,可从 git-scm.com/downloads 下载。

  5. Kotlin 语言,可用于 IntelliJ,更多信息可在 kotlinlang.org/ 找到。

  6. Gradle 是另一个用于构建 Corda 的组件。

安装了所有这些工具后,可以开始智能合约开发。可以利用 github.com/corda/cordapp-template 上提供的示例模板来开发 CorDapps。有关如何开发合约代码的详细文档,请参阅 docs.corda.net/

可使用以下命令从 GitHub 克隆 Corda:

$ git clone https://github.com/corda/corda.git

当克隆成功时,您应该看到类似以下的输出:

Cloning into 'corda'...
remote: Counting objects: 74695, done.
remote: Compressing objects: 100% (67/67), done.
remote: Total 74695 (delta 17), reused 0 (delta 0), pack-reused 74591
Receiving objects: 100% (74695/74695), 51.27 MiB | 1.72 MiB/s, done.
Resolving deltas: 100% (42863/42863), done.
Checking connectivity... done.

一旦仓库被克隆,就可以在 IntelliJ 中打开进行进一步开发。仓库中有多个示例,如 Corda 的银行、利率互换、演示和交易者演示。读者可以在 corda/samples 目录下找到它们,并可以使用 IntelliJ IDEA IDE 进行探索。

摘要

在本章中,我们介绍了 Hyperledger 项目。首先,讨论了 Hyperledger 项目背后的核心思想,并简要介绍了 Hyperledger 孵化中的所有项目。详细讨论了三个主要的 Hyperledger 项目,分别是 Hyperledger Fabric、Sawtooth Lake 和 Corda。所有这些项目目前都在积极开发中,预计下一版本会有所变化。因此,本章未提供深入的实践练习。然而,上述所有项目的核心概念预计将保持不变,或仅进行非常小的更改。鼓励读者访问本章提供的相关链接,以获取最新更新。显然,这个领域正在发生很多事情,像来自 Linux 基金会的 Hyperledger 这样的项目在推动区块链技术的发展中起着关键作用。本章讨论的每个项目都对解决各行业面临的问题有新颖的方法,并且正在解决区块链技术中的当前限制,如可扩展性和隐私性。预计将很快向 Hyperledger 项目提出更多项目,并预计通过这种协作和开放的努力,区块链技术将得到极大推进,并将使整个社区受益。

第十章:替代区块链

本章旨在介绍替代区块链解决方案。随着比特币的成功和对区块链技术潜力的后续认识,一个寒武纪爆发开始了,导致了各种区块链协议、应用和平台的发展。一些项目没有获得太多的关注,但许多项目成功地在这个领域站稳了脚跟。

在本章中,读者将介绍替代区块链和平台,它们要么是全新的区块链,要么是补充其他现有区块链的平台。这些新平台的基本理念是提供 SDK 和工具,以使区块链解决方案的开发和部署更加容易。以太坊和比特币的成功导致了各种项目的产生,这些项目通过利用它们引入的基础技术和概念而存在。这些新项目通过解决当前区块链的限制或提供在其上提供一层用户友好工具来增加价值。

本章的第一节将介绍新的区块链解决方案,后续章节将涵盖各种补充现有区块链的平台和开发工具。例如,BlockApps STRATO 是一个符合以太坊标准的平台,用于区块链应用的开发,而 Kadena 是一个具有 Scalable BFT 等新理念的新型私有区块链。随着区块链技术的发展,诸如侧链、驱动链和锚定等概念也首次被引入。本章将详细介绍所有这些技术和相关概念。当然,不可能涵盖所有替代链和平台,但本章包括了所有与区块链相关的平台,这些平台在前几章中已经涵盖,或者预计在不久的将来将获得重视。

区块链

本节将介绍新的区块链解决方案。首先,在接下来的章节中将讨论一种名为 Kadena 的新区块链。

Kadena

Kadena 是最近推出的一个私有区块链,成功解决了区块链系统中的可伸缩性和隐私问题。Kadena 还引入了一种名为 Pact 的新的图灵不完备语言,可以用来开发智能合约。Kadena 的一个关键创新是其可扩展的 BFT 共识算法,具有潜力在不降低性能的情况下扩展到数千个节点。可扩展的 BFT 基于最初的 Raft 算法,并继承了 Tangaroa 和 Juno。Tangaroa 是 Raft 的一种容错实现(BFT Raft),旨在解决 Raft 算法中拜占庭节点行为所引起的可用性和安全性问题,而 Juno 则是由摩根大通开发的 Tangaroa 的一个分支。 共识算法在第一章的区块链 101中有更详细的讨论。这两个方案都存在一个基本限制 - 无法在保持高水平性能的同时进行扩展。因此,Juno 很难获得很好的反响。私有区块链具有更理想的性能维护性能属性,随着节点数量增多,性能可以保持恒定,但前述的方案缺乏这一特性。Kadena 通过其专有的可扩展 BFT 算法解决了这个问题,预计可在不降低性能的情况下扩展到数千个节点。

此外,保密性是 Kadena 的另一个重要方面,可确保区块链上交易的隐私。通过使用密钥轮换、对称链上加密、增量哈希和双摇杆协议的组合来实现。

密钥轮换被用作保护私有区块链安全的标准机制。被定期更改加密密钥的最佳做法可防止密钥被破坏,从而防止任何攻击。 Pact 智能合约语言原生支持密钥轮换。

对称链上加密允许在区块链上对交易数据进行加密。这些交易可被特定私有交易的参与者自动解密。双摇杆协议用于提供密钥管理和加密功能。

可扩展的 BFT 共识协议确保在智能合约执行之前已经实现了足够的复制和共识。实现共识的过程如下所述:

  1. 首先,用户签署并广播新的交易到区块链网络,这被领导节点接收并添加到其不可变日志中。在此时,也计算了不可变日志的增量哈希。增量哈希是一种哈希函数,基本上允许在原始消息稍微改变的情况下计算哈希消息,如果已经哈希的先前原始消息稍微改变,那么新的哈希消息将从已经存在的哈希计算。这种方案比传统的哈希函数更快,资源消耗更少,在原始消息只有轻微改变时也需要生成全新的哈希消息。

  2. 一旦领导节点将交易写入日志,它会签署复制和增量哈希,并将其广播到其他节点。

  3. 其他节点在接收到交易后,验证领导节点的签名,将交易添加到自己的日志中,并向其他节点广播自己计算得到的增量哈希(法定证明)。最终,在从其他节点收到足够数量的证明后,交易被永久地提交到账本中。

在下图中显示了这个过程的简化版本,其中 leader 节点记录新的交易,然后将其复制到 follower 节点:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Kadena 中的共识机制

一旦达成共识,智能合约执行就可以开始,并采取以下步骤:

  1. 首先,验证消息的签名。

  2. Pact 智能合约层接管。

  3. Pact 代码被编译。

  4. 交易被发起并执行嵌入在智能合约中的任何业务逻辑。在发生任何失败时,会立即启动回滚,将状态恢复到执行开始之前的状态。

  5. 最后,交易完成并更新相关日志。

Pact 已被 Kadena 开源,并可在 kadena.io/pact/downloads.html 下载。这可以作为一个独立的二进制文件进行下载,提供 Pact 语言的 REPL。在 Linux 控制台中输入命令 ./pact 即可运行 Pact,示例如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Pact REPL,显示示例命令和错误输出

Pact 中的智能合约通常由三个部分组成:keysets、modules 和 tables。首先,keyset 定义了表和模块的相关授权方案。其次,module 定义了智能合约代码,以 functionsPacts 的形式包含业务逻辑。模块内的 Pacts 由多个步骤组成,并按顺序执行。

Pact 可以在多种执行模式下使用。这些模式包括合同定义交易执行查询。合同定义模式允许通过单个交易消息在区块链上创建一个合同。交易执行模式涉及执行代表业务逻辑的智能合同代码模块。查询仅与简单地探测合同数据有关,并且出于性能原因在节点上执行。

Pact 使用类似 LISP 的语法,并在代码中准确表示将在区块链上执行的内容,因为它以人类可读格式存储在区块链上。这与以太坊的 EVM 相反,后者编译为字节码以执行,这使得难以验证在区块链上执行的代码。此外,它不完整支持图灵不完备,支持不可变变量,并且不允许空值,从而提高了事务代码执行的整体安全性。

在本章中无法涵盖 Pact 的完整语法和功能,但下面显示了一个小示例,显示了在 Pact 中编写的智能合同的一般结构。该示例展示了一个简单的加法模块,定义了一个名为addition的函数,它接受三个参数。执行代码时,将所有三个值相加并显示结果。

以下示例是使用位于kadena.io/try-pact/的在线 Pact 编译器开发的:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Pact 示例代码

运行代码时,将产生以下输出:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

代码的输出

如前例所示,执行输出与代码布局和结构完全匹配,这有利于增加透明度,限制恶意代码执行的可能性。

Kadena 是一种引入普遍确定性新概念的私人区块链,除了标准的基于公钥/私钥的数据来源安全性之外,还提供了一个完全确定性共识的附加层。它在区块链的所有层面提供了加密安全性,包括交易和共识层。

注意

Pact 的相关文档和源代码可以在这里找到:github.com/kadena-io/pact

瑞波

Ripple 于 2012 年推出,是一种货币兑换和实时毛额结算系统。在 Ripple 中,支付无需等待,与传统的结算网络相比,后者可能需要数天才能结算。它有一种本地货币称为瑞波币XRP)。它还支持非 XRP 支付。此系统被认为类似于一种称为哈瓦拉的旧传统货币转移机制。该系统通过利用代理接收来自发送者的钱和密码,然后联系受款人的代理并指示他们向能够提供密码的人释放资金来运作。受款人然后联系当地代理,告诉他们密码并收取资金。与代理类似的类比在 Ripple 中称为网关。这只是一个非常简单的类比,实际协议相当复杂,但原则上是相同的。

Ripple 网络由各种节点组成,这些节点根据其类型可以执行不同的功能。首先是用户节点:这些节点用于支付交易,并可以进行支付或接收支付。其次是验证节点:这些节点参与共识机制。每个服务器维护一组唯一节点,它需要在实现共识时查询这些节点。唯一节点列表UNL)中的节点是由参与共识机制的服务器信任的,它们只会接受来自此唯一节点列表的投票。有时 Ripple 被认为不是真正的去中心化,因为涉及到网络运营商和监管机构。然而,由于任何人都可以通过运行验证节点成为网络的一部分,因此它可以被认为是去中心化的。此外,共识过程也是分散的,因为对账本提出的任何更改都必须通过超过半数的多数投票来决定。然而,这是研究人员和爱好者之间的热门话题,对于每种思想流派都有支持和反对的论点。

Ripple 维护着一个由新颖的低延迟共识算法Ripple Protocol Consensus AlgorithmRPCA)管辖的全球分布式交易分类账。共识过程通过迭代地从验证服务器中寻求验证和接受来实现对包含交易的开放账本状态的一致意见,直到获得足够数量的投票为止。一旦收到足够的投票(超过半数的多数,最初为 50%,随着每次迭代逐渐增加至至少 80%),则验证更改并关闭账本。此时,向整个网络发送警报,指示账本已关闭。

总的来说,共识协议是一个三阶段的过程。首先是收集阶段,在此阶段,验证节点收集由账户所有者在网络上广播的所有交易并对其进行验证。一旦被接受,交易就被称为候选交易,并且可以根据验证标准被接受或拒绝。然后开始共识过程,完成后账本被关闭。这个过程每隔几秒钟异步运行一次,以轮次形式进行,因此账本相应地被打开和关闭(更新)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Ripple 共识协议阶段

Ripple 网络中有多个组件共同工作,以实现共识并形成支付网络。下面逐个讨论这些组件:

  • 服务器:这个组件作为共识协议中的参与者。为了能够参与共识协议,需要使用 Ripple 服务器软件。

  • 账本:这是网络上所有账户余额的主要记录。账本包含各种元素,例如账本编号、账户设置、交易、时间戳以及指示账本有效性的标志。

  • 最后关闭的账本:一旦由验证节点达成共识,账本就会关闭。

  • 开放账本:这是尚未验证且尚未就其状态达成共识的账本。每个节点都有自己的开放账本,其中包含提议的交易。

  • 唯一节点列表:这是验证服务器使用的一组唯一可信节点列表,用于寻求投票和随后的共识。

  • 提议者:顾名思义,这个组件提议将新的交易纳入共识过程中。通常是一组节点(上述定义的 UNL),可以向验证服务器提出交易提案。

交易

交易由网络用户创建,以更新账本。交易必须经过数字签名并有效,才能被视为共识过程中的候选事务。每笔交易都需要支付少量的 XRP,这是一种防止由于垃圾邮件攻击而导致的服务拒绝攻击的保护机制。Ripple 网络中有不同类型的交易。Ripple 交易数据结构中的一个字段称为TransactionType,用于表示交易的类型。交易通过四个步骤执行。首先,准备交易,按照标准创建一个未签名的交易。第二步是签名,对交易进行数字签名以授权。然后,通过连接的服务器将实际提交到网络。最后,执行验证以确保交易已成功验证。

大致上,交易可以分为三种类型,即与支付相关、与订单相关和与账户和安全相关。所有这些类型都在下一节中描述。

与支付相关的

此类别中有几个字段会导致某些操作。所有这些字段都描述如下:

  1. Payment: 这种交易最常用,允许一个用户向另一个用户发送资金。

  2. PaymentChannelClaim: 用于从支付通道中索取RipplesXRP)。支付通道是一种允许双方进行定期和单向支付的机制。这也可以用于设置支付通道的到期时间。

  3. PaymentChannelCreate: 这个交易创建一个新的支付通道,并以为单位添加 XRP。一个滴等于 0.000001 个 XRP。

  4. PaymentChannelFund: 用于向现有通道添加更多资金的交易。类似于PaymentChannelClaim交易,这也可以用于修改支付通道的到期时间。

与订单相关

这种类型的交易包括以下两个字段:

  1. OfferCreate: 这种交易代表一个限价订单,它代表了一种货币交换的意图。如果无法完全满足,它将在共识账本中创建一个挂单节点。

  2. OfferCancel: 用于从共识账本中删除先前创建的挂单节点,表示撤回订单。

与账户和安全相关

这种类型的交易包括以下列出的字段。每个字段负责执行特定功能。

  1. AccountSet: 用于修改 Ripple 共识账本中账户的属性。

  2. SetRegularKey: 用于更改或设置账户的交易签名密钥。账户使用从账户的主公钥派生的 base-58 Ripple 地址来标识。

  3. SignerListSet: 可用于创建一组签名者,以用于多重签名交易。

  4. TrustSet: 用于在账户之间创建或修改信任线。

Ripple 中的交易由各种字段组成,这些字段对所有交易类型都是通用的。以下列出了这些字段以及它们的描述:

  1. Account , 交易发起者的地址。

  2. AccountTxnID,这是一个可选字段,包含另一个交易的哈希值。

  3. Fee,XRP 数量。

  4. Flags,交易的可选标志。

  5. LastLedgerSequence,交易可能出现的账本中的最高序列号。

  6. Memos,可选的任意信息。

  7. Sequence,每个交易递增 1 的数字。

  8. SigningPubKey,公钥。

  9. Signers,表示多重签名交易中的签名者。

  10. SourceTag,代表交易发送者或交易原因。

  11. TransactionType,交易类型。

  12. TxnSignature,交易的验证签名。

各种开发者 API 可以通过 Ripple 使外部实体连接到 Ripple 网络。两个关键组件Interledger协议和Ripple connect协同工作,以实现分布式、安全、可扩展和互操作的支付网络。

Interledger 协议已特别开发,以实现两个不同账本之间的互操作性。它可以用于连接来自各种不同组织的账本和区块链,包括但不限于支付网络、金融机构、清算机构和交易所。

Interledger 是一个由四个层组成的简单协议:应用、传输、Interledger 和分账。每个层负责在特定协议下执行各种功能。这些功能和协议在下面的部分描述。

应用层

运行在此层的协议统辖支付交易的关键属性。应用层协议的例子包括Simple Payment Setup protocolSPSP)和Open Web payment schemeOWPS)。 SPSP 是一个 Interledger 协议,通过在不同账本之间创建连接器,实现跨不同账本的安全支付。OWPS 是另一种方案,允许在不同网络之间进行消费者支付。一旦这一层的协议成功运行,传输层的协议将被调用,以开始支付流程。

传输层

该层负责管理支付交易。目前,该层提供的协议包括Optimistic Transport protocolOTP)、Universal Transport protocolUTP)和Atomic Transport protocolATP)。 OTP 是最简单的协议,可以在没有任何赔偿保护的情况下管理支付转账,而 UTP 提供赔偿保护。 ATP 是最先进的协议,不仅提供赔偿转账机制,还利用受信任的公证人进一步确保支付交易的安全性。

Interledger 层

这一层提供了互操作性和路由服务。这一层包含诸如Interledger protocolILP)、Interledger quoting protocolILQP)和Interledger control protocolILCP)等协议。 ILP 数据包提供了转账中交易的最终目标。发送方在实际传输之前使用 ILQP 进行报价请求。 ILCP 用于在支付网络的连接器之间交换与路由信息和支付错误相关的数据。

分账层

此层包含促进支付交易在连接器之间进行通信和执行的协议。连接器基本上是实现在不同账本之间转发支付的协议的对象。它可以支持各种协议,如简单账本协议、各种区块链协议、传统协议和不同的专有协议。

Ripple 连接由各种即插即用的模块组成,通过使用 ILP 实现账本之间的连接。它使各方在交易之前能够交换所需的数据,包括可见性、费用管理、交付确认和使用传输层安全性进行安全通信。第三方应用程序可以通过各种连接器连接到 Ripple 网络。

总的来说,Ripple 是针对金融行业的解决方案,使实时支付成为可能,没有任何结算风险。由于这是一个非常功能丰富的平台,在本章中无法涵盖其所有方面。Ripple 平台有非常丰富的文档,可在 ripple.com/ 上找到。

Stellar

Stellar 是基于区块链技术的支付网络,采用一种新颖的共识模型称为联邦拜占庭协议FBA)。FBA 通过创建受信任方的法定人数来工作。Stellar 共识协议SCP)是 FBA 的一种实现。

Stellar 白皮书中确定的关键问题是当前金融基础设施的成本和复杂性。这一限制需要一个能够解决这些问题而又不损害金融交易的完整性和安全性的全球金融网络。这一要求导致了Stellar 共识协议SCP)的发明,这是一种可证明安全的共识机制。

它具有四个主要属性:分散控制,允许任何人参与而没有中央方;低延迟,满足了快速处理交易的需求;灵活的信任,允许用户选择他们信任的特定目的的方;最后,渐进安全性,利用数字签名和哈希函数为网络提供所需级别的安全性。

Stellar 网络允许通过其本机数字货币 Lumens(简称 XLM)转移和表示资产的价值。当交易在网络上广播时,Lumens 会被消耗,这也可以防止拒绝服务DOS)攻击。

Stellar 网络的核心是维护一个分布式账本,记录每一笔交易,并在每个 Stellar 服务器上复制。通过在服务器之间验证交易并更新账本来实现共识。Stellar 账本还可以作为一个分布式交易所订单簿,允许用户存储他们的买卖货币的报价。

Stellar 网络由各种工具、SDK 和软件组成。核心软件可在 github.com/stellar/stellar-core 上找到。

Rootstock

在深入讨论 Rootstock 之前,定义和介绍一些对 Rootstock 设计基础至关重要的概念是很重要的。这些概念包括侧链、驱动链和双向锚定。侧链概念最初是由 Blockstream 公司开发的。

双向锚定是一种机制,通过它价值(硬币)可以在一个区块链之间以及反之互相转移。没有真正的硬币在链之间转移。这个概念围绕在比特币区块链(主链)中锁定相同数量和价值的硬币,然后在次级链中解锁相同金额的代币周转。

牢记这个定义,侧链可以如下所述被定义在以下章节。牢记这个定义,侧链可以如下所述被定义在以下章节。

侧链

这是一个与主区块链并行运行的区块链,允许在它们之间转移价值。这意味着一条区块链的代币可以在侧链中使用,反之亦然。这也被称为锚定侧链,因为它支持双向锚定的资产。

驱动链

这是一个相对较新的概念,在这个概念中,解锁比特币(在主链上)的控制权交给了矿工,他们可以投票决定何时解锁它们。这与侧链形成对比,侧链通过简单支付验证机制验证共识,以便将硬币转回主链。

Rootstock 是一个智能合约平台,它与比特币区块链具有双向锚定。其核心理念是提高比特币系统的可扩展性和性能,并使其能够与智能合约一起运行。Rootstock 运行一个图灵完备的确定性虚拟机,称为Rootstock 虚拟机RVM)。它还兼容以太坊虚拟机,允许用 Solidity 编译的合约在 Rootstock 上运行。智能合约还可以在比特币区块链的时间测试安全下运行。Rootstock 区块链通过与比特币进行合并挖矿来工作。这使得 RSK 区块链能够达到与比特币相同的安全水平。这对于防止双重支付和实现结算最终性尤为重要。它允许可扩展性,每秒最多处理 100 笔交易。

RSK 最近发布了一个名为 Turmeric 的测试网络。它可以在www.rsk.co/ 找到。

股份比

这是通过增强现有的以太坊区块链构建的区块链解决方案。在 Quorum 中引入了几个增强功能,如交易隐私和一个新的共识机制。Quorum 引入了一种称为 QuorumChain 的新共识模型,它基于大多数投票和基于时间的机制。另一个称为 Constellation 的功能也被引入,它是一个用于提交信息并允许对等方之间进行加密通信的通用机制。此外,节点级别的权限控制由智能合约管理。与公共以太坊区块链相比,它还提供了更高水平的性能。

Quorum 区块链生态系统由几个组件组成。这些在以下部分列出。

事务管理器

此组件使得访问加密交易数据成为可能。它还管理本地存储并与网络上的其他事务管理器进行通信。

加密保险库

正如其名称所示,该组件负责提供加密服务以确保交易隐私。它还负责执行密钥管理功能。

QuorumChain

这是 Quorum 中的关键创新。它是一种拜占庭容错共识机制,允许通过区块链网络上的交易进行投票的验证和流通。在此方案中,智能合约用于管理共识过程,并且节点可以被赋予投票权以投票应接受哪个新块。一旦选民收到足够数量的选票,该块就被视为有效。节点可以扮演两种角色,即 投票者制造者投票者 节点被允许投票,而 制造者 节点则是创建新块的节点。一个节点可以具有权利、无权或只有一种权利。

网络管理器

此组件为权限网络提供了访问控制层。

Quorum 网络中的节点可以扮演多种角色,例如,允许创建新块的 Maker 节点。使用密码学和某些交易仅适用于其相关参与者的概念来提供交易隐私。这个想法类似于上一章讨论的 Corda 的私有交易的概念。由于它允许在区块链上进行公共和私有交易,状态数据库已分为表示私有和公共交易的两个数据库。因此,有两个单独的 Patricia-Merkle 树,表示网络的私有和公共状态。私有合同状态哈希用于在交易方之间的私有交易中提供共识证据。

Quorum 网络中的交易包括各种元素,如收件人、发送者的数字签名(用于识别交易发起者)、可选的以太数量、允许查看交易的参与者的可选列表以及在私有交易的情况下包含哈希的字段。

交易在达到目的地之前经过几个步骤。这些步骤详细描述如下:

  1. 用户应用程序(DAPP)通过区块链网络提供的 API 将交易发送到 quorum 节点。这也包含接收地址和交易数据。

  2. API 然后加密有效负载,并应用任何其他必要的加密算法,以确保交易的隐私,并发送给事务管理器。在此步骤还计算了加密有效负载的哈希。

  3. 收到交易后,事务管理器验证交易发送者的签名并存储消息。

  4. 先前加密有效负载的哈希值被发送到 Quorum 节点。

  5. 一旦 Quorum 节点开始验证包含私有交易的区块,它会向事务管理器请求更多相关数据。

  6. 一旦事务管理器收到此请求,它会将加密有效负载和相关对称密钥发送给请求者 quorum 节点。

  7. 一旦 Quorum 节点拥有所有数据,它会解密有效负载并将其发送到 EVM 进行执行。这就是 Quorum 如何通过区块链上的对称加密实现隐私,同时能够使用本地以太坊协议和 EVM 进行消息传输和执行的方式。

  8. 之前曾以Hydrachain的形式提出了类似概念,但在某些方面有很大的不同,它基于以太坊区块链,允许创建权限分布式分类账。

Quorum 可在github.com/jpmorganchase/quorum下载。

Tezos

Tezos 是一个通用的自修正密码分类账,这意味着它不仅允许在区块链状态上进行去中心化共识,还允许就协议和节点如何随时间演变达成共识。Tezos 已经开发出来,以解决比特币协议中的限制,如由硬分叉引起的问题,成本,由于工作量证明而导致的挖矿中心化,有限的脚本能力和安全问题。它是用一种纯函数式语言 OCaml 开发的。

Tezos 分布式分类账的架构分为三个层次:网络层、共识层和交易层。这种分解允许协议以分散的方式发展。为此,在 Tezos 中实现了一个通用的网络外壳,负责维护区块链,由共识和交易层组合表示。这个外壳在网络和协议之间提供接口层。还引入了种子协议的概念,用作允许网络上的利益相关者批准协议变更的机制。Tezos 区块链从种子协议开始,而不是从传统区块链的创世块开始。

此种子协议负责定义区块链中的修正程序,甚至自身的修正协议。Tezos 中的奖励机制基于股权证明PoS)算法,因此没有挖矿要求。

Tezos 开发了用于编写智能合约的合约脚本语言,这是一种基于堆栈的图灵完备语言。Tezos 中的智能合约是经过形式验证的,这允许对代码进行数学上的正确性证明。

Tezos 代码可以在 github.com/tezos/tezos 找到。

Storj

云存储的现有模型都是集中化的解决方案,可能不如用户期望的那样安全。需要有一个安全、高可用性,最重要的是分散的云存储系统。Storj 旨在提供基于区块链的、分散的、分布式存储。这是一个由社区共享的云,而不是一个中央组织。它允许节点之间执行存储合同,充当自治代理。这些代理(节点)执行各种功能,如数据传输,验证,并执行数据完整性检查。其核心概念基于分布式哈希表DHT)- Kademlia,但是通过向 Storj 添加新的消息类型和功能来增强此协议。它还实现了一种点对点的发布/订阅pub/sub)机制,称为 Quasar,这确保消息成功到达对存储合同感兴趣的节点。这是通过基于布隆过滤器的存储合同参数选择机制来实现的,称为topics

Storj 在网络上以加密格式存储文件。在文件存储在网络上之前,它使用 AES-256-CTR 对称加密进行加密,然后以分布式方式逐个存储在网络上。这种将文件分割成片段的过程称为sharding,这样可以增加网络的可用性、安全性、性能和隐私。此外,如果一个节点出现故障,片段仍然可用,因为默认情况下,一个片段存储在网络上的三个不同位置。

它维护一个区块链,作为共享账本,并实现标准安全功能,例如公钥/私钥加密和哈希函数,类似于任何其他区块链。由于该系统基于节点之间的硬盘共享,任何人都可以通过在驱动器上共享其额外空间来做出贡献,并使用 Storj 自己的加密货币 StorjcoinxSJCX)获得支付。SJCX 是作为 对手方 资产开发的,使用比特币区块链进行交易。

Storj 代码位于 github.com/Storj/

Maidsafe

这是另一个类似于 Storj 的分布式存储系统。用户通过向网络贡献存储空间来获得 Safecoin 支付。这种支付机制由 资源证明 管理,该机制确保用户向网络承诺的磁盘空间可用,如果不可用,则 Safecoin 的支付会相应减少。在传输到网络进行存储之前,文件会被加密并分成小部分。Maidsafe 还引入了 机会缓存 的另一个概念,这是一种机制,用于在访问请求来自的物理位置附近创建经常访问数据的副本,从而提高网络性能。SAFE 网络的另一个新颖功能是,它会自动删除网络上的任何重复数据,从而减少存储要求。此外,还引入了 搅拌 的概念,基本上意味着数据不断在网络中移动,以便数据不能被恶意对手针对。它还在网络上保留数据的多个副本,以提供冗余,以防节点下线或失败。

BigChainDB

这是一个可扩展的区块链数据库。它严格来说并不是一个区块链本身,而是通过提供分布式数据库来补充区块链技术。在其核心,它是一个分布式数据库,但具有区块链的附加属性,例如去中心化、不可变性和数字资产处理。它还允许使用 NoSQL 来查询数据库。它旨在提供一个数据库,位于分散的生态系统中,其中不仅处理是分散的(区块链)或文件系统是分散的(例如 IPFS),而且数据库也是分散的。这使整个分散式应用生态系统变得分散。此处提供:www.bigchaindb.com/

Multichain

Multichain 已经开发成为一个用于开发和部署私有区块链的平台。它基于比特币代码,并解决了安全性、可扩展性和隐私问题。这是一个高度可配置的区块链平台,允许用户设置不同的区块链参数。它通过一个细粒度的权限管理层支持控制和隐私。Multichain 的安装非常快速,并且安装文件的链接可在www.multichain.com/download-install/找到。

Tendermint

Tendermint 是一种软件,为应用程序提供了拜占庭容错共识机制和状态机复制功能。它的主要动机是开发一个通用的、安全的和高性能的复制状态机。

Tendermint 有两个组件,将在下一节中描述。

Tendermint Core

这是一个共识引擎,可以在网络中的每个节点上安全地复制交易。

Tendermint Socket Protocol (TMSP)

这是一个应用程序接口协议,允许与任何编程语言进行接口,以处理交易。

Tendermint 允许将应用程序过程和共识过程分离,从而使任何应用程序都能从共识机制中受益。

Tendermint 共识算法是一个基于轮次的机制,在每个轮次中,验证节点提出新的区块。使用锁定机制来确保防止在区块链的同一高度上选择提交两个不同的区块的情况。每个验证节点保持包含交易的完整本地复制分类账。每个区块包含一个头部,其中包括上一个区块的哈希值、区块提议的时间戳、当前区块高度和区块中包含的所有交易的默克尔根哈希值。

Tendermint 最近被用于Cosmos,它是一个区块链网络,允许在运行 BFT 共识算法的不同区块链之间进行互操作。在该网络上的区块链称为“区”。Cosmos 的第一个区被称为 Cosmos hub,实际上是一个公共区块链,负责为其他区块链提供连接服务。为此,该中枢使用跨链通信协议IBC)。IBC 协议支持称为IBCBlockCimmitTxIBCPacketTx的两种交易类型。第一种类型用于向任何方提供区块链中最新块哈希的证明,而后一种类型用于提供数据源认证。从一个区块链到另一个区块链的数据包是通过首先向目标链发布证明来发布的。接收(目标)链检查此证明以验证发送链确实已发布该数据包。此外,它有自己的本机货币称为 Atom。这个方案通过允许多个区块链连接到中枢来解决可伸缩性和互操作性问题。

Tendermint 可以在tendermint.com/找到。

平台

本节介绍了用于增强现有区块链解决方案体验的各种平台。首先,将讨论一个名为 BlockApps STRATO 的与以太坊兼容的解决方案。

BlockApps

BlockApps 是一个提供丰富工具集来构建区块链应用程序的平台。该平台用 Haskell 编写,基于模块化架构。该解决方案具有可伸缩性,并使部署智能合约和区块链应用程序变得更加容易。它可以在www.blockapps.net/找到。

在下一节中,将讨论安装和一个简单的部署示例。

安装

可以使用以下命令通过 npm 安装 BlockApps:

$ sudo npm install -g blockapps-bloc

sudo是可选的,如果不需要管理员权限。这将产生类似于以下截图所示的输出:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

通过 npm 安装 bloc(输出已截断)

安装完成后,可以按照以下部分中显示的步骤创建应用程序。下面的示例显示如何在 BlockApps 中初始化一个新应用程序,在 BlockApps TestNet 上部署它并与其交互。

使用 BlockApps 进行应用程序开发和部署

第一步是使用以下命令初始化 BlockApps 应用程序:

$ bloc init

它将要求输入几个参数:应用程序名称,您的姓名,电子邮件,API URL(apiUrl)和区块链配置文件。如下截图所示。

一旦命令运行并成功完成,它将创建一个带有模板和样本的应用程序目录。在此示例中,将创建一个名为 testApp 的目录,其中包含相关的目录和示例合约。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

bloc init

下一步是安装testApp,可以通过运行以下命令实现:

$ sudo npm install

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

testApp 安装

为了签署交易,需要生成一个新的密钥。可以使用以下命令生成密钥:

$ bloc genkey

一旦发出,将需要输入密码以保护密钥。一旦提供,密钥将被创建,并且将创建一个 JSON 文件。请注意,JSON 文件名是区块链上帐户的实际地址。此外,它将显示消息“transaction mined”,指示密钥和交易(帐户创建)的成功部署。

过程如下截图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

生成密钥

现在,在此时刻,可以通过使用 curl 查询新帐户。只需在 URL 中传递地址作为参数,结果将以 JSON 格式返回。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用 curl 查询新帐户

或者,可以通过任何网页浏览器执行查询,如下面的截图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

通过网页浏览器进行 BlockApps 查询

接下来,将描述将新合同上传到测试链的过程。请注意,所有合同都放在testApp目录下的./app/contracts目录中。作为示例,选择了要部署到网络的Greeter.sol合同。BlockApps 提供了一种简单的方法来实现此部署。

所有合同都需要放在 contracts 目录下,以便编译命令能够找到它们并进行编译。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

contracts 目录下的 Greeter 合同

合同可以通过使用下面截图中显示的命令进行编译。请注意,它以合同文件名作为参数。编译成功后,所有相关的 JSON 文件将写入./meta目录下。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

编译 Greeter 合同

最后,可以使用以下命令上传合同。此命令期望传递给合同的参数与合同代码中定义的相同。在示例中,它期望一个文本字符串,如下面的示例截图所示:

$ bloc upload Greeter "Hello bloc"

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

上传 Greeter 合同

请注意,如果没有传递正确的参数或缺少参数,将会发生类似下面截图的错误:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在传递错误或缺少参数的情况下出现错误

一旦部署成功,可以验证以太从现有合约转移到新合约。请注意,余额已下降。如下截图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

通过 Web 浏览器部署的合约

合约部署后,可以使用 Web 浏览器或诸如 cURL 之类的 CLI 工具进行查询。需要将 URL strato-dev4.blockapps.net/eth/v1.2/account?address=05ee3af04e903f413402d5438b9de3827b1f4e70 传递给 Web 浏览器。如下截图所示。请注意,二进制格式的代码也在输出中可用。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

浏览已部署的合约,代码以二进制格式

此外,BlockApps 还提供了一个用于运行本地 HTTP 服务器的功能,可以使用以下命令启动:

$ bloc start

这将启动 Web 浏览器,并在 TCP 端口 8000 上进行侦听。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

bloc start

在 Web 服务器启动后,可以通过本地网页查看和查询已编译的合约,如下面的截图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

通过浏览器可用的已编译合约

正如前面的示例所示,使用 BlockApps 更容易构建、部署和管理合约。BlockApps 旨在为区块链应用程序提供工具和核心基础设施,而不仅仅是区块链。

Eris

Eris 不是一个单一的区块链,它是由 Monax 开发的用于开发基于区块链的 生态系统应用程序 的开放模块化平台。它提供了各种框架、SDK 和工具,可以加速开发和部署区块链应用程序。Eris 应用平台背后的核心理念是实现带有区块链后端的 生态系统应用程序 的开发和管理。它允许与多个区块链集成,并使各种第三方系统能够与其他系统交互。该平台利用 solidity 语言编写的智能合约。它可以与以太坊或比特币等区块链进行交互。交互可以包括连接命令、启动、停止、断开连接和创建新区块链。Eris 中已经将与区块链设置和交互相关的复杂性抽象化了。所有命令对于不同的区块链都是标准化的,无论目标区块链类型如何,都可以在整个平台上使用相同的命令。

生态系统应用可以包括 Eris 平台,从而实现 API 网关,允许传统应用程序连接到密钥管理系统、共识引擎和应用程序引擎。Eris 平台提供各种工具包,用于向开发人员提供各种服务。这些模块描述如下:

  • :这允许创建和与区块链进行交互。

  • :这允许开发智能合同。

  • 秘钥:用于密钥管理和签名操作。

  • 文件:这允许使用分布式数据管理系统。可用于与 IPFS 和数据湖等文件系统进行交互。

  • 服务:这提供了一组服务,允许对生态系统应用进行管理和集成。

Eris 还开发了几个 SDK,允许开发和管理生态系统应用。这些 SDK 包含经过全面测试的智能合同,满足业务的特定需求和要求。例如,财务 SDK,保险 SDK 和物流 SDK。还有一个基础 SDK,用作管理生态系统应用生命周期的基本开发工具包。

Monax 已开发了自己的权限区块链客户端,称为 Eris:db。这是一个基于权益证明PoS)的区块链系统,允许与多种不同的区块链网络集成。Eris:db包括三个组件:

  • 共识:这是基于 Tendermint 共识机制的,之前已经讨论过。

  • 虚拟机:Eris 使用以太坊虚拟机EVM),因此支持经过编译的 solidity 合同。

  • 权限层:作为权限账本,Eris 提供访问控制机制,可用于在网络上为不同实体分配特定角色。

  • 界面:这提供了各种命令行工具和 RPC 接口,以便与后端区块链网络进行交互。

以太坊区块链和 Eris:db 之间的关键区别在于 Eris:db 使用了实用拜占庭容错算法,该算法实现为基于存款的权益证明(DPOS 系统),而以太坊使用工作证明PoW)。此外,Eris:db使用 ECDSA ed22519 曲线方案,而以太坊使用 secp256k1 算法。最后,它通过访问控制层具有权限,并且以太坊是公共区块链。

Eris 是一个功能丰富的应用平台,提供大量的工具包和服务,用于开发基于区块链的应用程序。可在monax.io/上获取。

摘要

本章以替代区块链的介绍开始,并分为两个主要部分讨论区块链和平台。区块链技术是一个非常蓬勃发展的领域,因此现有解决方案的变化相当迅速,几乎每天都有新的相关技术或工具被引入。在本章中,对平台和区块链进行了仔细的选择。讨论了几种解决方案,这些解决方案补充了之前章节中介绍的材料,例如,支持以太坊开发的 BlockApps。还讨论了新的区块链,如 Kadena,各种新协议,如 Ripple,以及诸如侧链和驱动链等概念。本章涵盖的材料旨在为读者对感兴趣的领域进行更深入的研究提供坚实的基础。正如之前所说,区块链是一个发展非常迅速的领域,还有许多其他区块链提案项目,如TauchainHydrachainElementscredits等,这些项目在本章中没有讨论。鼓励读者关注这一领域的发展,以便及时了解这一快速发展领域的进展。

第十一章:区块链-超越货币

数字货币是区块链技术的第一个应用,可以说并没有意识到其真正的潜力。随着比特币的发明,区块链的概念第一次被介绍了,但直到 2013 年,随着 Blockchain 2.0 的出现,区块链的真正好处才被认识到,并且发现了它在许多不同行业中的应用可能性。自那时以来,已经提出了区块链技术在不同行业中的许多用例,包括但不限于金融、物联网、数字版权管理、政府和法律。在本章中,选择了四个主要行业,即物联网IoT)、政府、医疗和金融,进行讨论。读者将被介绍到所有这些领域,并将提供各种相关用例。

物联网

物联网或简称 IoT 最近因其改变商业应用和日常生活潜力而受到了广泛关注。物联网可定义为具有计算智能的物理对象网络,这些对象能够连接到互联网,感知现实世界的事件或环境,对这些事件做出反应,收集相关数据,并通过互联网进行通信。这个简单的定义具有巨大的影响,并导致了令人兴奋的概念,如可穿戴设备、智能家居、智能电网、智能互联汽车和智能城市,这些概念都是基于物联网设备的基本概念。在分解上述 IoT 定义之后,可以看到 IoT 设备执行的四个功能。这些功能包括感知、反应、收集和通信。所有这些功能都是通过 IoT 设备上的各种组件来实现的。

感知是由传感器执行的。反应或控制是由执行器执行的,收集是由各种传感器的功能执行的,通信是由提供网络连接的芯片执行的。需要注意的是,在物联网中,所有这些组件都可以通过互联网进行访问和控制。一个独立的物联网设备可能在一定程度上有用,但如果它是更大物联网生态系统的一部分,则更有价值。

一个典型的物联网可以由许多物理对象相互连接,并连接到一个集中的云服务器。如下图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一个典型的 IoT 网络:来源–IBM

物联网的元素分布在多个层次上,存在多种可以用来开发物联网系统的参考架构。一般来说,可以使用五层模型来描述 IoT,其中包含物理对象层、设备层、网络层、服务层和应用层。每个层或级别负责各种功能,并包含各种组件。这些将在下面详细描述。

物理对象层

这些包括任何物理世界中的对象,包括人、动物、汽车、树木、冰箱、火车、工厂、住宅,事实上任何需要被监测和控制的东西都可以连接到物联网。

设备层

该层包含组成物联网的东西,例如传感器、传感器、执行器、智能手机、智能设备和射频识别标签RFID)。根据它们执行的工作类型,传感器可以有许多类别,例如身体传感器、家庭传感器和环境传感器。这是物联网生态系统的核心,各种传感器被用来感知现实世界的环境。这包括可以监测温度、湿度、液体流量、化学物质、空气、压力等的传感器。通常,设备上需要一个模拟到数字转换器ADC)来将真实世界的模拟信号转换为微处理器可以理解的数字信号。

该层中的执行器提供了启动电机或打开门等的外部环境控制手段。这些组件还需要数字到模拟转换器,以便将数字信号转换为模拟信号。当物联网设备需要控制机械部件时,这一点尤其重要。

网络层

该层由用于在设备之间提供互联网连接以及与物联网生态系统中的云或服务器的网络设备组成。这些设备可以包括网关、路由器、集线器和交换机。此层可以包括两种类型的通信。第一种是水平通信方式,包括无线电、蓝牙、WiFi、以太网、局域网、ZigBee 和 PAN,可用于在物联网设备之间提供通信。其次,我们有与下一层通信,通常通过互联网提供与机器和人或其他更高层之间的通信。第一层可以选择性地包含在设备层中,因为它物理上位于设备层,在该层设备可以彼此通信。

管理层

该层为物联网生态系统提供管理层。这包括使来自物联网设备收集的数据进行处理并将其转化为有意义的见解的平台。此外,设备管理、安全管理和数据流管理也包含在此层中。它还管理设备与应用程序层之间的通信。

应用程序层

该层包括在物联网网络顶部运行的应用程序。这可能包括根据需求的各种应用程序,例如运输、医疗保健、金融、保险或供应链管理。当然,这并不是一个详尽的列表;有许多物联网应用程序可以归入此层:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

物联网五层模型

随着廉价传感器、硬件和带宽的可用性,物联网近年来备受青睐,在医疗保健、保险、供应链管理、家庭自动化、工业自动化和基础设施管理等许多不同领域都有应用。此外,技术的进步,如 IPv6 的可用性、更小巧和功能强大的处理器以及更好的互联网接入,也在物联网受欢迎中起着至关重要的作用。物联网的好处从节约成本到使企业能够根据物联网设备提供的数据做出重要决策,从而提高性能。数以百万计的物(物联网设备)的原始数据被分析,从中得到有意义的见解,有助于及时和有效地制定业务决策。

普通物联网模型基于集中式范式,物联网设备通常连接到云基础设施或中央服务器,以报告和处理相关数据。这种集中化提出了某些可能性的利用,包括黑客攻击和数据窃取。此外,在没有对个人数据进行控制的单一集中式服务提供商的情况下,也增加了安全和隐私问题的可能性。虽然有方法和技术可以建立基于普通物联网模型的高度安全的物联网生态系统,但区块链可以为物联网带来一定更可取的好处。基于区块链的物联网模型与传统物联网网络范式不同。据 IBM 称,区块链对于物联网可以帮助建立信任、减少成本和加速交易。此外,区块链技术的核心——分散化,能够消除物联网网络中的单点故障。例如,一个中央服务器可能无法处理数十亿个物联网设备(物)以高频率产生的数据量。此外,区块链所提供的点对点通信模型可以帮助降低成本,因为无需建设高成本的集中式数据中心或实施复杂的公钥基础结构来确保安全。设备可以直接或通过路由器互相通信。

根据各种研究人员和公司的估计,到 2020 年,将有大约 220 亿台设备连接到互联网。随着数十亿台设备连接到互联网的爆炸,很难想象中心化的基础设施能够在不过度支出的情况下满足带宽、服务和可用性的高需求。基于区块链的物联网将能够解决当前物联网模型中的可扩展性、隐私和可靠性问题。

区块链使能够直接与其他物通信和交易,并且在智能合约的可用性下,谈判和金融交易也可以直接在设备之间发生,而无需中间人、权威或人类干预。例如,如果酒店的一个房间空闲,它可以自行出租,谈判租金,并且可以为支付了足够资金的人开门锁。另一个例子可能是,如果洗衣机用完了洗涤剂,它可以在智能合约中编程的逻辑基础上,在线订购洗涤剂并找到最佳价格和价值。

上述五层物联网模型可以通过在网络层之上添加一个区块链层来适应基于区块链的模型。该层将运行智能合约,并为物联网生态系统提供安全性、隐私性、完整性、自治性、可扩展性和去中心化服务。在这种情况下,管理层可以仅包括与分析和处理相关的软件,安全性和控制可以移至区块链层。这可以在以下图表中可视化:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

基于区块链的物联网模型

在这个模型中,其他层可能保持不变,但是会引入一个额外的区块链层作为物联网网络所有参与者之间的中间件。

在将上述所有层抽象化后,也可以将其视为点对点的物联网网络。在下面的图表中显示了这一点,所有设备都在互相通信和协商,没有中央命令和控制实体:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

基于区块链的直接通信模型,来源–IBM

这也可以导致成本节约,这是由于使用基于区块链的去中心化方法更容易进行设备管理。可以通过使用区块链来优化物联网网络的性能。在这种情况下,将不需要为数百万设备集中存储物联网数据,因为存储和处理要求可以分配给区块链上的所有物联网设备。这可以完全消除处理和存储物联网数据的大型数据中心的需求。

基于区块链的物联网也可以防止拒绝服务攻击,其中黑客可以更容易地针对集中式服务器或数据中心,但是使用区块链的分布式和去中心化特性,这样的攻击不再可能。此外,如果根据估计,在不久的将来将有数十亿台设备连接到互联网,那么从传统的集中式服务器管理所有这些设备的安全性和更新几乎是不可能的。区块链可以通过允许设备以安全的方式直接相互通信,甚至从彼此请求固件和安全更新来解决这个问题。在区块链网络上,这些通信可以被不可变地和安全地记录下来,这将为系统提供审计性、完整性和透明性。这是传统 P2P 系统所无法实现的。

总的来说,物联网(IoT)和区块链的融合可以带来明显的好处,学术界和工业界已经在进行大量的研究和工作。已经有各种各样的项目提出了基于区块链的物联网解决方案。例如,IBM 的蓝色地平线(Blue Horizon)和 IBM Bluemix 是支持区块链物联网平台的物联网平台。各种初创公司,如 Filament,已经提出了如何构建一个允许物联网上的设备直接和自主地通过智能合约交易的分散网络的新颖想法。

在接下来的部分中,提供了一个实际示例,介绍了如何构建一个简单的物联网设备并将其连接到以太坊区块链。该物联网设备连接到以太坊区块链,并在区块链上的用户发送适当数量的资金时用于打开门(在本例中,门锁由 LED 表示)。这是一个简单的示例,需要一个更严格测试的版本才能将其投入生产,但它展示了如何连接、控制和响应以太坊区块链上某些事件的物联网设备。

IoT 区块链实验

此示例使用的是一个树莓派设备,它是一种单板计算机SBC)。树莓派是一种低成本的计算机,旨在促进计算机教育,但也因其在构建物联网平台方面的选择而广受欢迎。树莓派 3 型 B 型号如下图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

树莓派 B 型号

在接下来的部分中,将讨论一个例子,在该例子中,一个树莓派将作为一个物联网设备连接到以太坊区块链,并在对智能合约调用作出响应时执行一个动作。

首先,需要设置 Raspberry Pi。可以使用提供 Raspbian 或任何其他操作系统安装的简便方法的 NOOBS 来完成此操作。这可以从链接www.raspberrypi.org/downloads/noobs/下载并安装。或者,可以只从链接www.raspberrypi.org/downloads/raspbian/安装 Raspbian。还可以使用github.com/debian-pi/raspbian-ua-netinst提供的另一种选择来安装 Raspbian OS 的最小非 GUI 版本。在本示例中,已使用 NOOBS 安装了 Raspbian,因此本练习的其余部分假设 Raspbian 已安装在 Raspberry Pi 的 SD 存储卡上。

安装 Raspbian 操作系统后,下一步是为 Raspberry Pi ARM 平台下载适当的geth二进制文件。可以通过在 Raspberry Pi Raspbian 操作系统的终端窗口中运行以下命令来确认平台。命令输出显示操作系统正在运行的体系结构。在这种情况下,它是armv71,因此将下载适用于geth的 ARM 兼容二进制文件。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Raspberry Pi 架构

下面详细描述了以下步骤:

  1. geth下载:请注意,在下面的示例中下载了特定版本,但还有其他版本可供下载,可从geth.ethereum.org/downloads/下载。
wget https://gethstore.blob.core.windows.net/builds/geth-linux-     
        arm7-1.5.6-2a609af5.tar.gz

  1. 解压缩并提取到一个目录中,将自动创建名为geth-linux-arm7-1.5.6-2a609af5的目录,并使用下一个 tar 命令提取到该目录中:
tar -zxvf geth-linux-arm7-1.5.6-2a609af5.tar

这将创建一个名为geth-linux-arm7-1.5.6-2a609af5的目录,并将geth二进制文件和相关文件提取到该目录中。可以将geth二进制文件复制到 Raspbian 上的/usr/bin或适当的路径中,以便从操作系统中的任何位置都可以访问它。下载完成后,下一步是创建创世区块。

需要使用之前在第八章中创建的相同的创世区块,以太坊开发。可以从网络上的其他节点复制创世区块文件。这在以下截图中显示。或者,可以生成全新的创世区块。这在第八章中有详细讨论,以太坊开发

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

创世区块文件

一旦将genesis.json文件复制到 Raspberry Pi 上,就可以运行以下命令以生成创世区块。非常重要的是要使用之前生成的完全相同的创世区块,否则节点将有效地运行在不同的网络上:

$ ./geth init genesis.json

这将显示与以下截图中显示的类似的输出:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

初始化创世文件

创建创世块后,需要向网络中添加对等节点。这可以通过创建一个名为static-nodes.json的文件来实现,其中包含树莓派上的 geth 将用于同步的对等节点的 enode ID 信息。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

静态节点配置

可以通过运行以下显示的命令从 geth JavaScript 控制台上获得这些信息,此命令应该在树莓派要连接的对等节点上运行:

> Admin.nodeInfo

这将显示与以下截图中显示的类似的输出:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

geth nodeinfo

完成此步骤后,可以按照下面呈现的进一步说明来连接树莓派到私人网络上的其他节点。在本例中,树莓派将连接到第八章中创建的网络 ID 为 786 的以太坊开发。关键是使用之前创建的相同创世文件和不同的端口号。不过,不同的端口不是严格要求的。如果两个节点正在私人网络下运行,并且需要从网络外部的环境访问,则需要使用 DMZ/路由器和端口转发的组合。因此建议使用不同的 TCP 端口以便允许端口转发正常工作。以下命令中介绍的身份切换,之前还未介绍,让节点能够指定一个标识名称。

第一个节点的设置

首先,需要使用以下命令在第一个节点上启动geth

$ geth --datadir .ethereum/privatenet/ --networkid 786 --maxpeers 5 --rpc --rpcapi web3,eth,debug,personal,net --rpcport 9001 --rpccorsdomain "*" --port 30301 --identity "drequinox"

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

第一个节点上的geth

一旦geth启动起来,它应该得持续运行,而且来自树莓派节点的另一个geth实例应该被启动。

树莓派节点设置

在树莓派上,需要运行以下命令才能启动geth并与其他节点同步(在本例中只有一个节点)。命令如下:

$ ./geth --networkid 786 --maxpeers 5 --rpc --rpcapi web3,eth,debug,personal,net  --rpccorsdomain "*" --port 30302 --identity "raspberry"

这应该产生与以下截图中显示的类似的输出。当输出包含显示块同步已开始的行时,这意味着节点已成功连接到其对等节点。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

树莓派上的geth

可以通过在两个节点上的geth控制台上运行命令来进一步验证这一点,如下截图所示。仅需在树莓派上运行以下命令就可以连接geth

$ geth attach

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

运行在树莓派上的geth控制台管理员 peers 命令

类似地,可以通过在第一个节点上运行以下命令来附加到geth

$ geth attach ipc:.ethereum/privatenet/geth.ipc

一旦控制台可用,admin.peers 可以运行以显示关于其他连接节点的详细信息,如以下截图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在另一节点上运行 geth console admin peers 命令

一旦两个节点都正常运行,可以安装更多的先决条件以设置实验。需要安装 Node.js 和相关的 JavaScript 库。以下列出了所需的库和依赖项。首先需要在树莓派的 Raspbian 操作系统上更新 Node.js 和 npm。可以按照以下步骤进行:

  1. 使用以下命令在树莓派上安装最新的 Node.js:

    $ curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash      
              -
    
    

    这应该显示类似于以下内容的输出。由于输出相当大,因此以下截图仅显示了输出的顶部部分:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    Node.js 安装

  2. 通过 apt-get 运行更新:

    $ sudo apt-get install nodejs
    
    

    可以通过运行以下命令来执行验证,以确保正确版本的 Node.js 和npm已安装,如下面的截图所示:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    npm 和 node 安装验证

    应该注意,这些版本不是必需的;任何最新版本的npmnode都可以工作。本章的示例使用的是 npm 4.0.5 和 node v7.4.0。

  3. 安装以太坊 web3 npm,这是为了让 JavaScript 代码能够访问区块链:外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    npm install web3

  4. 同样地,可以安装npm install onoff,这是与树莓派通信和控制 GPIO 所必需的:外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    onoff 安装

当所有先决条件都安装好后,可以进行硬件设置。为此,使用面包板和一些电子元件建立一个简单的电路。

这些组件列如下:

  1. LED发光二极管的缩写,可以用作事件的可视指示。

  2. 电阻器:需要一个 330 欧姆的元件,根据其额定值提供对通过电流的阻抗。不需要理解背后的理论,这个实验涵盖了所有这些主题的标准电子工程文本详细讨论。

  3. 面包板:这提供了一种在不需要焊接的情况下构建电子电路的方法。

  4. T 形布线板:如下图所示插入到面包板上,并为树莓派的所有GPIO通用输入/输出)引脚提供标记视图。

  5. 平坦电缆连接器:简单地用于通过 GPIO 在树莓派和面包板之间提供连接。所有这些组件都显示在以下图像中:外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    所需组件

电路

如下图所示,LED 的正极(长腿)连接到 GPIO 的 21 号引脚,而负极(短腿)连接到电阻,然后连接到 GPIO 的GND)引脚。一旦连接设置好,可以使用平排线简单地连接到树莓派上的 GPIO 连接器。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

连接面包板上的元件

一旦连接正确设置并且树莓派已更新到适当的库和 geth,下一步是开发一个简单的智能合约,该合约期望一个值。如果提供给它的值不是它所期望的,它不会触发事件;否则,如果传递的值与正确值匹配,则触发事件,客户端 JavaScript 程序可以通过 Node.js 运行,可以读取事件。当然,Solidity 合约可以非常复杂,并且还可以处理发送给它的以太币,如果以太币的数量等于所需数量,则事件可以触发;但在这个示例中,目的是演示使用智能合约来触发可以由运行在 Node.js 上的 JavaScript 程序读取的事件,然后进一步可以使用各种库触发 IoT 设备上的操作。

智能合约源代码如下所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

简单 IOT 的 Solidity 代码

可以使用 Solidity 在线编译器运行和测试该合约。与该合约交互所需的应用二进制接口ABI)也可在以下截图中的接口字段中找到:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Solidity 在线编译器

树莓节点可以通过 web3 接口连接到私有区块链的两种方法。第一种是树莓设备运行自己的 geth 并维护自己的账本,但对于资源受限的设备来说,很难运行完整的geth节点,甚至在某些情况下运行轻量级节点也不可能。在这种情况下,可以初始化 web3 提供程序以连接到适当的 RPC 通道。这将在后面的客户端 JavaScript Node.js 程序中显示。这两种方法的比较如下图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

房租 IoT 应用程序的应用架构(带本地账本的 IoT 设备)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

房租 IoT 应用程序的应用架构(没有本地账本的 IoT 设备)

显然,暴露 RPC 接口会带来安全问题,因此建议仅在私有网络上使用此选项,如果需要在公共网络上使用,则需采取适当的安全措施,例如仅允许已知 IP 地址连接到 geth RPC 接口。这可以通过禁用对等发现机制和 HTTP-RPC 服务器监听接口的组合来实现。有关此的更多信息,请参阅 geth 帮助文档。传统的网络安全措施,如防火墙、传输层安全性TLS)和证书也可以使用,但在本示例中未讨论。

现在,Truffle 可以用于部署合约到私有网络 ID 786,该网络此时连接的是树莓派。可以通过以下显示的命令简单执行 truffle 部署;假设已经执行了 truffle init 和其他章节 8 讨论的前提条件,《以太坊开发》:

$ truffle migrate 

它应该会产生类似以下屏幕截图的输出:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Truffle 部署

一旦合约正确部署,就可以开发 JavaScript 代码,通过 web3 连接到区块链,在区块链上监听智能合约的事件,并通过树莓派将 LED 打开。以下是 JavaScript 代码的示例:

var Web3 = require('web3'); 
if (typeof web3 !== 'undefined') 
{ 
  web3 = new Web3(web3.currentProvider); 
}  
else  
{ 
   web3 = new Web3(new       
   Web3.providers.HttpProvider("http://localhost:9002")); 
} 
var Gpio = require('onoff').Gpio; 
var led = new Gpio(21,'out'); 
var coinbase = web3.eth.coinbase; 
var ABIString = '[{"constant":false,"inputs": [{"name":"x","type":"uint8"}],"name":"getRent","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"returnValue","type":"bool"}],"name":"roomRented","type":"event"}]'; 
var ABI = JSON.parse(ABIString); 
var ContractAddress = '0x151ce17c28b20ce554e0d944deb30e0447fbf78d'; 
web3.eth.defaultAccount = web3.eth.accounts[0]; 
var simpleiot = web3.eth.contract(ABI).at(ContractAddress); 
var event = simpleiot.roomRented( {}, function(error, result) { 
if (!error) 
{
led.writeSync(1);
}
}); 

请注意,在上面的示例中,合约地址 0x151ce17c28b20ce554e0d944deb30e0447fbf78d 是特定于部署的,当读者运行此示例时将会不同。只需将文件中的地址更改为读者在部署合约后看到的地址。此 JavaScript 代码可以放置在树莓派上的一个文件中,例如 index.js。可以使用以下命令运行它:

$ sudo nodejs index.js

这将启动程序,该程序将在 Node.js 上运行,并监听来自智能合约的事件。一旦程序正确运行,就可以使用 Truffle 控制台调用智能合约,如下面的屏幕截图所示。

在这种情况下,调用 .getRent 函数,并传递参数 10,这是预期的值。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

与合约的交互

在合约被挖出后,将触发 roomRented,这将打开 LED。在此示例中,它是一个简单的 LED,但可以是任何物理设备,例如通过执行器控制的房间锁。如果一切正常,LED 将因智能合约函数调用而打开,如下图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

带有 LED 控制的树莓派

正如前面的例子所示,可以建立一组运行每个节点上的 geth 客户端并监听来自智能合约的事件并相应触发动作的物联网设备私有网络。此目的是简化示例,但展示了利用物联网设备和智能合约驱动的物理设备控制所需的基本原则。

在下一部分中,将讨论区块链技术在政府、金融和医疗领域的其他应用。

政府

目前正在研究各种支持政府职能并将当前的电子政务模式提升到新水平的区块链应用。首先,在本节中将提供电子政务的一些背景,然后将讨论一些用例,如电子投票、国土安全(边境控制)和电子身份证(公民身份证)。

电子政务或电子政府是一种利用信息和通信技术向公民提供公共服务的范式。这个概念并不新鲜,在世界各地的许多国家都有实施,但是区块链开辟了一个新的探索途径。许多政府正在研究利用区块链技术来管理和提供公共服务的可能性。区块链的透明性、可审计性和完整性是管理各种政府职能的有效属性。

边境控制

自动边境控制系统已经使用了几十年,旨在阻止非法进入国家,并防止恐怖主义和人口贩运。

机器可读旅行文件,尤其是生物识别护照,为自动边境控制铺平了道路;然而,目前的系统在一定程度上受限,而区块链技术可以提供解决方案。国际民航组织(ICAO)的文件 ICAO 9303 中定义了一个机器可读旅行文件MRTD)标准,并已由世界许多国家实施。

每个护照都包含各种安全和身份属性,可用于识别护照所有者,也可以防范篡改护照的企图。这些包括生物特征,如视网膜扫描、指纹、面部识别,以及标准的 ICAO 指定特征包括机器可读区MRZ)和护照第一页可见的其他文本属性。

当前边境控制系统的一个关键问题是集中化,即系统由单一实体控制,并且数据不容易在执法机构之间共享。这使得跟踪疑似个体变得困难。另一个问题与立即实施旅行文件黑名单相关,例如,在需要立即跟踪和控制疑似旅行文件时。目前,没有机制可以立即将疑似护照列入黑名单或吊销。

区块链可以通过在智能合约中维护黑名单来解决这个问题,该黑名单可以根据需要进行更新,任何更改都将立即对所有机构和边境控制点可见,从而实现对疑似旅行文件移动的即时控制。可以提出这样的论点,即传统机制如 PKI 和 P2P 网络也可以用于此目的,但它们不提供区块链可以提供的好处。使用区块链,整个系统可以简化,无需复杂的网络和 PKI 设置,这也将导致成本降低。此外,基于区块链的系统将提供加密保证的不可变性,有助于审计,并且会阻止任何欺诈活动。

由于可扩展性问题,当前可能无法将所有旅行文件的完整数据库存储在区块链上,但是后端分布式数据库,如 BigChainDB、IPFS 或 Swarm 可以用于此目的。在这种情况下,可以将个人的旅行文件哈希与生物特征识别 ID 存储在简单的智能合约中,然后可以使用文档的哈希来引用分布式文件系统(例如 IPFS)中可用的详细数据。这样,当任何地方的旅行文件被列入黑名单时,该信息将立即可用,具有其在整个分布式分类帐中的真实性和完整性的加密保证。这种功能也可以在反恐活动中提供有效支持,从而在政府的国土安全职能中发挥重要作用。

Solidity 中的一个简单合约可以定义一个数组,用于存储身份和相关的生物识别记录。该数组可用于存储有关护照的识别信息。身份可以是护照或旅行文件的机器可读区域MRZ)的哈希,与 RFID 芯片中的生物识别记录连接而成。一个简单的布尔字段可以用于识别被列入黑名单的护照。一旦通过了这个初始检查,传统系统可以执行进一步的详细生物识别验证,最终当关于护照持有者入境的决定被做出时,该决定可以传播回区块链,从而使网络上的所有参与者可以立即分享决定的结果。

构建基于区块链的边境控制系统的高级方法可以如下图所示进行可视化。 在这种情况下,护照被呈现给一个 RFID 和页面扫描器进行扫描,该扫描器读取数据页并提取机器可读信息以及存储在 RFID 芯片中的生物特征数据的哈希。 在这个阶段,还会拍摄护照持有者的实时照片和视网膜扫描。 然后,将这些信息传递给区块链,智能合约负责验证旅行文件的合法性,首先检查自己的黑名单护照列表,然后从后端 IPFS 数据库请求更多数据进行比较。 请注意,诸如照片或视网膜扫描之类的生物特征数据不存储在区块链上,而是只存储在区块链后端(IPFS 或 BigChainDB)中对此数据的引用。

如果呈现护照的数据与 IPFS 中的文件或 BigChainDB 中的数据匹配,并且通过智能合约的逻辑检查,则边境门可以打开。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用区块链的自动边境控制

在验证后,此信息将传播到整个区块链,并立即提供给边境控制区块链上的所有参与者。 这些参与者可以是各国国土安全部门的全球财团。

投票

在任何政府中投票是一个关键功能,允许公民参与民主选举过程。 虽然投票随着时间的推移逐渐发展成为一个更加成熟和安全的过程,但仍然存在需要解决的限制,以达到期望的成熟水平。 通常,当前投票系统的限制围绕着欺诈、运营流程中的弱点以及特别是透明度展开。 多年来,已建立了安全投票机制,这些机制利用专门的投票机器承诺提供安全和隐私,但它们仍然存在漏洞,可以被利用来破坏这些机器的安全机制。 这可能会对整个投票过程产生严重的影响,并导致公众对政府的不信任。

基于区块链的投票系统可以通过在过程中引入端到端的安全性和透明性来解决这些问题。安全性通过使用公钥加密技术提供,这是区块链中的标准功能,从而保证了选票的完整性和真实性。此外,由区块链保证的不可变性确保了一次投票的选票不能再次投票。这可以通过生物特征和智能合约结合使用来实现,智能合约维护一个已经投票的选票列表。例如,智能合约可以维护一个带有生物识别 ID(例如指纹)的已投票列表,并可以使用它来检测和防止双重投票。其次,零知识证明也可以在区块链上用于保护选民的隐私。

公民身份证(ID 卡)

目前,各国发行了电子身份证或国家身份证。这些卡是安全的,并具有许多防止复制或篡改尝试的安全功能。然而,随着区块链技术的出现,这个过程可以做出几个改进。

数字身份不仅仅局限于政府发行的身份证,这是一个在在线社交网络和论坛中也适用的概念。可以有多个用于不同目的的身份。基于区块链的在线数字身份可以控制个人信息的共享。用户可以看到谁使用了他们的数据以及目的,并可以控制对其的访问。这在目前由中央控制的基础设施中是不可能的。关键优势在于政府发行的单一身份可以通过单一的政府区块链轻松且透明地用于多项服务。在这种情况下,区块链充当了政府提供各种服务(如养老金、税收或福利)的平台,而单一身份被用于访问所有这些服务。在这种情况下,区块链为每次数字身份的变更和交易提供了不可变的记录,从而确保了系统的完整性和透明性。此外,公民可以将出生证明、婚姻证书、契约等许多其他文件在与其数字身份相关联的区块链上进行公证,作为存在的证据。

目前,各国已经成功实施了各种工作良好的身份方案,有人认为区块链在身份管理系统中并不真正需要。尽管存在诸如隐私和对身份信息使用的控制等多个好处,但由于当前区块链技术的不成熟,也许还没有准备好用于现实世界的身份系统。然而,各国政府正在进行研究,探索区块链在身份管理方面的使用。

此外,像被遗忘权这样的法律由于区块链的不可变性而很难整合。

杂项

其他政府职能领域可以实施区块链技术以提高成本和效率的包括税收征收、福利管理和发放、土地所有权记录管理、生活事件登记(婚姻、出生)、机动车登记和许可证等。这并不是一个详尽的清单,随着时间的推移,政府的许多职能和流程都可以适应基于区块链的模式。区块链的关键优势,如不可变性、透明度和去中心化,可以帮助改进大多数传统政府系统。

健康

健康产业被确定为另一个可以通过采用区块链技术获益的主要行业。区块链提供了一个传统 P2P 网络无法提供的不可变、可审计和透明的系统。此外,与传统的复杂 PKI 网络相比,区块链提供了一种经济、简单的基础架构。在医疗保健领域,由于缺乏互操作性、过度复杂的流程、透明度、可审计性和控制,可能会出现隐私泄漏、数据泄露、高成本和欺诈等主要问题。另一个紧迫的问题是假药;特别是在发展中国家,这是一个主要的关注点。

通过将区块链应用于健康领域,可以实现多种好处,从节省成本、增加信任、更快地处理索赔、高可用性、操作程序复杂性导致的没有操作错误,到防止假药的分发。

从另一个角度来看,提供数字货币作为挖矿激励的区块链可以用来提供处理能力,以解决可以帮助找到某些疾病治愈方法的科学问题。例如,FoldingCoin 奖励其矿工使用他们计算机的处理能力来解决需要特别大量计算的科学问题。FoldingCoin 可在foldingcoin.net/获得。另一个类似的项目是 CureCoin,可在www.curecoin.net/获得。这些项目能否成功实现目标尚待观察,但这个想法非常有前途。

金融

区块链在金融领域有许多应用。金融领域的区块链是目前行业中最热门的话题,主要银行和金融组织正在研究如何适应区块链技术,特别是由于其极具潜力的节省成本的能力。

保险

在保险行业中,区块链技术可以帮助阻止欺诈索赔,增加索赔处理速度,并实现透明度。想象一下,所有保险公司之间共享的账本可以为处理公司间索赔提供快速高效的机制。此外,随着物联网和区块链的融合,可以想象出一种智能设备生态系统,其中所有这些设备都能够通过区块链上的智能合约进行协商和管理其自身的保险政策。

区块链可以减少处理索赔所需的总体成本和工作量。索赔可以通过智能合约自动验证和支付,并与保险单持有人的身份相关联。例如,通过智能合约和可能的物联网的帮助,可以确保发生事故时可以记录相关的遥测数据,并根据这些信息释放付款。如果智能合约在评估付款条件后得出付款条件不应该被释放的结论,还可以暂停付款。例如,在车辆在未经授权的车间维修或在指定区域外使用的情况下等等。智能合约可以评估许多条件来处理索赔,而这些规则的选择取决于保险人,但总体想法是智能合约与物联网和 Oracles 的结合可以自动化整个车辆保险行业。

如 Dynamis 等多家初创公司已提出基于以太坊区块链的智能合约对等保险平台。最初计划用于失业保险,并不需要模型下的承保人。可在dynamisapp.com/上使用。

后期交易结算

这是区块链技术最受追捧的应用。目前,许多金融机构正在探索使用区块链技术简化、自动化和加快昂贵和耗时的后期交易结算流程的可能性。

为了更好地理解问题,简要描述了交易生命周期。交易生命周期包含三个步骤:执行、清算和结算。执行涉及两方之间的交易承诺,可以通过前台订单管理终端或交易所输入系统。清算是下一步,其中交易根据价格和数量等某些属性在卖方和买方之间匹配。在此阶段,还确定涉及支付的帐户。最后,结算是最终买方和卖方之间交换安全性以换取支付的地方。

在传统的交易生命周期模型中,需要一个中央清算所来促进交易双方之间的交易,承担双方的信用风险。当前的方案有些复杂,卖方和买方必须走一条复杂的路线才能进行交易。这包括各种公司、经纪人、结算所和保管人,但是通过区块链,一个具有适当智能合约的单一分布式分类账可以简化整个流程,并使买方和卖方可以直接交流。

特别是,后期交易结算流程需要两到三天,并且依赖于中央结算所和对账系统。通过共享账本的方法,区块链上的所有参与者可以立即看到有关交易状态的真实版本。此外,点对点结算是可能的,这将减少复杂性、成本、风险和结算交易所需的时间。最后,通过在区块链上使用适当的智能合约,中介可以完全被淘汰。

金融犯罪预防

了解您的客户KYC)和反洗钱AML)是防止金融犯罪的关键。在 KYC 的情况下,目前每个机构都维护着他们自己的客户数据副本,并通过集中的数据提供者进行验证。这可能是一个耗时的过程,可能会导致新客户的注册延迟。区块链可以通过在所有金融机构之间安全共享已验证和准确的客户身份信息的分布式分类账来解决这个问题。这个分布式账本只能通过参与者之间的共识来更新,从而提供透明性和可审计性。这不仅可以降低成本,还可以更好地满足监管和合规要求。

在 AML 的情况下,由于区块链的不可变性、共享性和透明性,监管机构可以轻松地获得访问私有区块链的权限,从而可以获取相关监管报告的数据。这也将导致降低与当前监管报告范式相关的复杂性和成本,其中数据是从各种遗留系统中获取并聚合和格式化用于报告目的。区块链可以提供系统中所有金融交易的单一共享视图,这些交易是经过加密安全、真实和可审计的,从而降低了与目前采用的监管报告方法相关的成本和复杂性。

媒体

媒体行业的关键问题围绕着内容分发、版权管理和对艺术家的版税支付。例如,数字音乐可以无限制地复制,任何试图施加复制保护的尝试都会以某种方式被破解。对音乐家或作曲家创作的内容的分发没有任何控制;它可以被无限制地复制,因此对版税支付产生影响。此外,支付并不总是保证的,并且是基于传统的播放次数数据。所有围绕复制保护和版税支付的问题可以通过连接消费者、艺术家和行业中的所有参与者来解决,实现透明度和对流程的控制。区块链可以提供一个网络,数字音乐在其中具有密码学上的保证,只能被付费购买的消费者拥有。这种支付机制由智能合约控制,而不是由集中式媒体机构或权威管理。根据嵌入在智能合约中的逻辑和“下载”数量,支付将自动进行。此外,数字音乐文件的非法复制可以完全停止,因为一切都以透明的方式记录和不可变地拥有在区块链上。例如,音乐文件可以带有所有者信息和时间戳,这可以在整个区块链网络中追溯。此外,拥有某些内容的合法拥有者与他们拥有的内容被加密地绑定在一起,除非获得所有者的许可,否则内容无法转移到其他所有者名下。一旦所有数字内容都被不可变地记录在区块链上,版权和转移就可以通过区块链轻松管理。智能合约可以控制向所有相关方的分发和支付。

摘要

区块链技术有许多应用,正如本章所讨论的,它们可以在各个行业中实现,为现有解决方案带来多重好处。在本章中,讨论了五个主要行业可以从区块链中受益。首先讨论了物联网(IoT),这是另一项革命性的技术;通过将其与区块链相结合,可以解决一些基本限制,从而为物联网行业带来巨大的好处。物联网受到了更多的关注,因为它是最大、最适合采用区块链技术的候选者。已经出现了一些实际的用例和平台,如基于区块链的物联网的平台即服务PaaS),如 IBM Watson IoT 区块链。IBM Blue Horizon 也已经可以用于实验,这是一个分散的基于区块链的物联网网络。其次,讨论了政府部门的应用,政府流程如国土安全、身份证和福利发放等可以变得透明、安全和更健壮。此外,还讨论了金融领域的问题以及区块链技术可以提供的可能解决方案。尽管金融行业正在积极探索使用区块链的可能性,但离生产就绪的基于区块链的系统还有很长的路要走。最后,还讨论了医疗和音乐行业的一些方面。所有这些用例以及行业中的许多其他用例都建立在区块链技术的核心属性之上,如分散化、透明度、可靠性和安全性。然而,在完全采用区块链技术之前,需要解决一些挑战;这些将在下一章中讨论。

第十二章:可扩展性和其他挑战

本章旨在介绍在区块链成为主流技术之前需要解决的各种挑战。尽管已经开发了各种用例和概念验证系统,并且该技术在许多场景下运作良好,但仍然需要解决一些存在于区块链中的根本限制,以使这项技术更具适应性。

在这些问题清单的最顶端是可扩展性,然后是隐私。这两个问题都是需要解决的重要限制,特别是在区块链被设想用于对隐私要求较高的行业时。金融、法律和健康领域的交易机密性有具体要求,而可扩展性通常是一个关注点,即区块链未能满足用户期望的充分性能水平。这两个问题正在成为阻碍区块链技术更广泛接受的因素。本章将介绍目前在这两个特定领域提出的和正在进行的研究。除了隐私和安全性之外,其他挑战包括监管、整合、适应性和总体安全性。尽管在比特币区块链中,安全性经过证明是无懈可击的,经受住了时间的考验,但仍然存在一些细微情景可能会使安全性受到某种程度的损害。此外,在其他区块链中,如以太坊,也存在一些合理的安全性问题,涉及智能合约、拒绝服务攻击和大型攻击面。所有这些将在下文中详细讨论。

可扩展性

这个问题在过去几年一直是激烈辩论、严格研究和媒体关注的焦点。这是一个最重要的问题,可能意味着区块链的更广泛适用性,或者仅限于由财团使用。由于在这个领域进行了大量研究,许多解决方案已被提出,在下一节中进行了讨论。

从理论角度来看,解决可扩展性问题的一般方法通常围绕协议级别的增强展开。例如,通常提到的解决比特币可扩展性的方法之一是增加其区块大小。其他提案包括将某些处理卸载到链下网络的链下解决方案,例如,链下状态网络。根据上述解决方案,一般来说,提案可以分为两类:基于改变区块链运行的基本协议的想法的链上解决方案,以及利用链下网络和处理资源来增强区块链的链下解决方案。

最近,米勒和其他人在他们的立场论文关于扩展去中心化区块链中提出了另一种解决区块链限制的方法。在这篇论文中,表明了区块链可以被划分为称为的各种抽象层。每个平面负责执行特定功能。这些功能包括网络平面、共识平面、存储平面、视图平面和侧平面。这种抽象允许单独和结构化地处理每个平面的瓶颈和限制。以下简要概述了每个层,并参考了一些比特币系统的内容。

首先讨论网络层。网络层的一个关键功能是交易传播。在上述论文中已经确定,在比特币中,由于节点在传播和复制交易之前进行交易验证的方式,网络平面未充分利用网络带宽,首先在交易广播阶段,然后在挖掘区块之后。应该注意的是,这个问题由BIP 152紧凑区块中继)解决。

第二层称为共识平面。这一层负责挖矿和达成共识。这一层的瓶颈围绕着工作量证明算法的限制,其中增加共识速度和带宽会导致网络安全受损,因为分叉数量增加。

存储平面是第三层,负责存储分类帐。这一层的问题围绕着每个节点需要保留整个分类帐的副本,这导致了某些效率低下,如增加的带宽和存储要求。比特币有一种称为剪枝的方法,允许节点在不下载完整区块链的情况下运行。这个功能在存储方面带来了重大改进。

接下来是视图平面,提出了一种基于比特币矿工不需要完整的区块链来操作的优化方案,可以从完整的分类帐中构建视图作为整个系统状态的表示,这对于矿工运行是足够的。实施视图将消除挖矿节点存储完整区块链的需要。

最后,作者们提出了侧平面的概念。这个平面代表着离链交易的概念,其中支付或交易通道的概念用于将交易处理分担给参与者,但仍由主比特币区块链支持。

上述模型可以用于以结构化方式描述当前区块链设计的限制和改进。此外,过去几年提出了几种可以解决当前区块链设计(如以太坊和比特币)限制的一般策略。这些方法也在下一节中以个别的方式进行了特征化和讨论。

区块大小增加

这是增加区块链性能(交易处理吞吐量)最受争议的提议。目前,比特币每秒只能处理约三到七笔交易,这是限制将比特币区块链用于处理微交易的主要因素。比特币的区块大小被硬编码为 1 MB,但如果增加区块大小,它可以容纳更多交易并导致更快的确认时间。已经提出了几个比特币改进提案BIPs)以支持增加区块大小。其中包括 BIP 100、BIP 101、BIP 102、BIP 103 和 BIP 109。在以太坊中,区块大小不受硬编码限制;相反,它受到燃气限制的控制。理论上,在以太坊中,区块的大小没有限制,因为它取决于燃气的数量,这个数量可以随时间增加。这是可能的,因为如果在前一个区块中达到了限制,矿工可以允许在后续区块中增加燃气限制。

区块间隔缩短

另一个提议是缩短每个区块生成之间的时间。减少区块之间的时间可以实现更快地完成区块的最终确认,但可能会因分叉数量增加而导致安全性降低。以太坊已经实现了大约 14 秒 的区块时间,有时可能会增加。这是与比特币区块链相比的显著改进,比特币区块链需要 10 分钟 来生成一个新区块。在以太坊中,由于区块之间的时间缩短导致的高孤块问题通过使用贪婪最重子树GHOST)协议来缓解,其中孤块(叔块)也被包括在确定有效链的过程中。一旦以太坊转向股权证明,这将变得无关紧要,因为不需要挖矿,几乎可以立即完成交易的最终确认。

可逆布隆查找表

这是另一种旨在减少比特币节点之间所需传输的数据量的方法。可逆布隆查找表IBLTs)最初是由Gavin Andresen提出的,这种方法的主要吸引力在于,如果实施,它不会导致比特币的硬分叉。关键思想基于这样的事实:不需要在节点之间传输所有交易;相反,只需要传输同步节点的交易池中尚未存在的交易。这使节点之间的交易池同步更加迅速,从而提高比特币网络的整体可扩展性和速度。

分片

分片并不是一种新技术,它已被用于分布式数据库以提高可扩展性,如 MongoDB 和 MySQL。分片背后的关键思想是将任务分成多个块,然后由多个节点进行处理。这可以提高吞吐量并减少存储需求。在区块链中,采用类似的方案,将网络状态划分为多个分片。状态通常包括余额、代码、随机数和存储。分片是区块链在同一网络上运行的松散耦合分区。与分片之间的通信以及每个分片的历史达成共识方面存在一些挑战。这是一个正在进行中的研究领域。

状态通道

这是另一个旨在加速区块链网络交易的方法。基本思想是使用侧通道来进行状态更新和在主链之外处理交易;一旦状态确定下来,就将其写回主链,从而将耗时的操作从主要区块链上移除。状态通道通过执行以下三个步骤来工作:

  1. 首先,部分区块链状态被锁定在智能合约之下,以确保参与者之间的协议和业务逻辑。

  2. 现在,链外交易处理和交互在参与者之间开始,只在他们之间更新状态。在这一步,几乎可以执行任意数量的交易而不需要区块链,这正是使该过程快速并成为解决区块链可扩展性问题的最佳候选方法。然而,可以说这并不是一个真正的区块链内解决方案,例如分片,但最终结果是一个更快、更轻便、更强大的网络,在微支付网络、物联网网络和许多其他应用中非常有用。

  3. 一旦达到最终状态,状态通道就会关闭,最终状态会写回主要区块链。在这个阶段,锁定的区块链部分也被解锁。

这种技术已被用于比特币闪电网络和以太坊的雷电网络。

私有区块链

私有区块链本质上是快速的,因为不需要真正的去中心化,网络上的参与者不需要挖矿;相反,他们只能验证交易。这可以被视为公共区块链可扩展性问题的一种变通方法;然而,这并不是解决可扩展性问题的办法。此外,应注意私有区块链只适用于特定领域和设置。

权益证明

基于权益证明算法的区块链基本上更快。

侧链

侧链可以通过允许许多侧链与主区块链并行运行,同时允许使用或许相对不那么安全但更快的侧链进行交易,但仍然与主区块链挂钩,从而间接改善可扩展性。侧链的核心思想称为双向锚定,它允许将硬币从父链转移到侧链,反之亦然。

子链

这是彼得·R·里宗最近提出的一种相对较新的技术,其基础是弱块的概念,这些块是分层创建的,直到找到强块为止。弱块可以定义为那些尚未满足标准网络难度条件而已经完成了足够工作以满足其他更弱难度目标的块。矿工可以通过将弱块层层叠加在一起来构建子链,除非找到满足标准难度目标的块。此时,子链关闭并成为强块。这种方法的优点包括减少了交易第一次验证的等待时间。这种技术还导致了孤块的减少和交易处理的加速。这也是解决可扩展性问题的一种间接方式。子链不需要任何软分叉或硬分叉来实现,但需要社区的接受。

树链

还有其他提高比特币可扩展性的提案,比如树链,它将区块链布局从线性顺序模型改变为树形结构。这个树基本上是一个二叉树,从主比特币链衍生出来。这种方法类似于侧链实现,消除了对主要协议更改或区块大小增加的需要。它允许提高交易吞吐量。在这个方案中,区块链本身被分割并分布在网络中以实现可扩展性。此外,在树链上验证块不需要挖矿;相反,用户可以独立验证块头。然而,这个想法目前还没有准备好投入生产,需要进一步研究才能使其变得实用。

除了上述的一般技术之外,克里斯蒂安·德克 在他的书籍《论比特币的可扩展性和安全性》中还提出了一些比特币特定的改进。这个提议基于加快信息传播时间的想法,因为当前的信息传播机制导致了区块链分叉。这些技术包括验证的最小化,区块传播的流水线处理和连接性的增加。这些变化不需要根本性的协议层面的改变;相反,这些改变可以独立地在比特币节点软件中实现。关于验证的最小化,有人指出区块验证过程正在导致传播延迟。这背后的原因是一个节点花费了很长时间来验证区块的唯一性和区块内的交易。有人建议,一旦完成了初始的工作量证明和区块验证检查,一个节点就可以立即发送库存消息。通过这种方式,传播可以通过仅执行第一个难度检查而不等待交易验证完成来改善。除了上述提议之外,还提出了区块传播的流水线处理,这是基于预期区块的可用性的想法。在这个方案中,区块的可用性已经在实际区块可用之前就宣布了,从而减少了节点之间的往返时间。最后,交易发起者和节点之间的长距离也导致了区块传播的减速问题。克里斯蒂安·德克 进行的研究表明,增加连接性可以减少区块和交易的传播延迟。这是可能的,因为如果比特币节点在任何时候连接到许多其他节点,它将减少节点之间的距离,并可以加速网络上的信息传播。

解决可扩展性问题的一个优雅的解决方案很可能是上述一些或所有一般方法的组合。为了解决区块链的可扩展性和安全性问题,已经采取了许多举措,现在几乎已经准备好实施。例如,比特币隔离见证是一个可以大规模帮助提高可扩展性的提议,只需要软分叉即可实施。所谓segwit 的关键思想是将签名数据与交易分离,从而解决了交易可变性问题,并允许增加区块大小。

另一个提议是比特币 NG,它基于微块和领导者选举的想法,最近引起了一些关注。其核心思想是将区块分为两种类型,即领导者区块(也称为关键区块)和微块。领导者区块负责工作证明,而微块包含实际的交易。微块不需要任何工作证明,由选定的领导者在每个区块生成周期生成。这个区块生成周期由领导者区块发起。唯一的要求是用选定的领导者的私钥对微块进行签名。领导者(矿工)可以以非常高的速度生成微块,从而提高性能和交易速度。

另一方面,最近,以太坊创始人维塔利克·布特林在上海举办的以太坊 Devcon 2 上发表了一篇名为 mauve 的论文;它描述了一个可扩展的以太坊愿景。 mauve 提案基于分片和实现权益证明算法的组合。该论文确定了一些目标,如通过权益证明实现效率提升,尽可能快的区块时间,经济确定性,可扩展性,跨分片通信和抗审查性。

隐私

交易隐私是区块链的一个非常期望的属性。然而,由于其特性,特别是在公共区块链中,一切都是透明的,从而抑制了它在金融、健康等许多隐私至关重要的行业中的使用。已经提出了不同的方案来解决隐私问题,并且已经取得了一些进展。几种技术,如不可区分性混淆、同态加密的使用、零知识证明和环签名。所有这些技术都有其优点和缺点,并在以下部分进行了讨论。

不可区分性混淆

这种密码技术可能成为解决区块链中所有隐私和机密性问题的救世主,但技术尚未准备好投入生产部署。不可区分性混淆IO)允许进行代码混淆,这是密码学中一个非常成熟的研究课题,如果应用于区块链,可以作为一个不可破解的混淆机制,将智能合约转换为黑匣子。IO 的关键思想是研究人员称之为多线性拼图,基本上通过将程序代码与随机元素混合来混淆程序代码,如果程序按预期运行,它将产生预期的输出,但以其他方式执行将使程序看起来是随机的和垃圾的。这个想法最初是由Sahai等人在他们的研究论文Candidate Indistinguishability Obfuscation and Functional Encryption for All Circuits中提出的。

同态加密

这种类型的加密允许在加密数据上执行操作。想象一下数据被发送到云服务器进行处理的情景。服务器处理数据并返回输出,而不知道已处理的数据的任何信息。这也是一个值得研究的领域,全同态加密允许对加密数据进行所有操作,但目前尚未完全投入生产;然而,这一领域已经取得了重大进展。一旦在区块链上实施,它就可以允许对密文进行处理,从而固有地保护交易的隐私和机密性。例如,存储在区块链上的数据可以使用同态加密进行加密,可以在数据上执行计算而无需解密,从而在区块链上提供隐私服务。这个概念也已经在麻省理工学院媒体实验室的一个名为Enigma的项目中实施。 Enigma 是一个点对点网络,允许多个参与方在不透露数据的情况下对加密数据进行计算。

零知识证明

零知识证明最近在 Zcash 中成功实现,正如前几章所见。更具体地说,已经实现了 SNARKs 以确保区块链上的隐私。相同的思想也可以在以太坊和其他区块链中实现。在以太坊上集成 Zcash 已经是由以太坊研发团队和 Zcash 公司进行的非常活跃的研究项目。

状态通道

使用状态通道实现隐私也是可能的,这仅仅是因为所有交易都是在链下运行的,主区块链根本看不到交易,除了最终的状态输出,从而确保隐私和保密性。

安全多方计算

安全多方计算的概念并不新鲜,它基于这样一个概念:数据在参与方之间通过秘密共享机制分成多个分区,然后在不需要在单一机器上重建数据的情况下对数据进行实际处理。处理后产生的输出也在参与方之间共享。

使用硬件提供机密性

可信计算平台可以用来提供一种机制,通过该机制可以在区块链上实现交易的保密性,例如,使用英特尔软件保护扩展SGX),它允许在称为保护域的硬件保护环境中运行代码。一旦代码在隔离的保护域中成功运行,它可以生成一个称为报价的证明,该证明可以由英特尔的云服务器进行验证。然而,信任英特尔将导致某种程度的集中化,并且与区块链技术的真正精神不符。然而,这种解决方案也有其优点,在现实中,许多平台已经使用英特尔芯片,因此在某些情况下信任英特尔可能是可以接受的。

如果这项技术应用于智能合约,那么一旦一个节点执行了智能合约,它就可以生成正确和成功执行的报价,并且其他节点将只需验证它。 这个想法可以通过使用任何受信任执行环境TEE)来进一步扩展,它可以提供与飞地相同的功能,并且甚至可以在带有近场通讯NFC)和安全元件的移动设备上使用。

Coinjoin

Coinjoin 是一种用于通过交互混合来匿名化比特币交易的技术。 这个想法是基于从多个实体中构建单个交易而不改变输入和输出。 它消除了发送者和接收者之间的直接联系,这意味着单个地址不再与交易相关联,这可能导致用户的身份被识别。 Coinjoin 需要多个愿意通过混合支付创建单个交易的参与方之间的合作。 因此,应该注意,如果 Coinjoin 方案中的任何单个参与者不遵守承诺合作的约定,即不按要求签署交易,那么它可能导致拒绝服务攻击。 在此协议中,不需要单个受信任的第三方。 这个概念与混合服务不同,混合服务充当比特币用户之间的受信任第三方或中介,并允许混洗交易。 这种交易的混洗会防止追踪和将支付链接到特定用户。

机密交易

保密交易利用 Pedersen 承诺来提供机密性。 承诺方案允许用户承诺某个价值,并保密其能力以便后来能够揭示它。 设计承诺方案需要满足的两个属性是绑定隐藏。 绑定确保承诺者一旦承诺便无法更改所选的价值,而隐藏属性确保任何敌手无法找到承诺者所承诺的原始值。 Pedersen 承诺还允许在承诺中进行加法操作并保留承诺的交换性质,这使其在提供比特币交易的保密性方面特别有用。 换句话说,它支持对值进行同态加密。使用承诺方案允许在比特币交易中隐藏支付价值。 此概念已经在 Elements 项目(elementsproject.org/)中实施。

小偷神盾

MimbleWimble 方案有点神秘地在比特币 IRC 频道上提出,自那以后就变得非常受欢迎。 MimbleWimble 扩展了保密交易和 Coinjoin 的概念,允许在不需要任何交互的情况下对交易进行聚合。 但是,它不支持与标准比特币协议的各种其他特性以及比特币脚本语言的使用。 这使其与现有的比特币协议不兼容。 因此,它可以作为比特币的侧链实现,也可以作为替代加密货币自行实现。

此方案可以同时解决隐私和可扩展性问题。 使用 MimbleWimble 技术创建的区块不像传统的比特币区块链那样包含交易; 相反,这些区块由三个列表组成:一个输入列表、一个输出列表和称为 excesses 的东西,其中包含签名列表和输出与输入之间的差异。 输入列表基本上是对旧输出的引用,输出列表包含保密交易输出。 通过使用签名、输入和输出来验证这些区块的节点,以确保区块的合法性。 与比特币不同,MimbleWimble 交易输出仅包含公钥,而旧输出与新输出之间的差异由参与交易的所有参与者签名。

安全

尽管区块链通常是安全的,并根据需要在整个区块链网络中使用非对称和对称加密,但仍然存在一些注意事项,可能会危及区块链的安全性。

在某些情况下,比特币中存在交易可塑性、信息日食攻击和双重花费的几个示例,这些示例已被各种研究人员证明是有效的。 交易可塑性通过允许黑客在比特币网络确认之前更改交易的唯一标识符,从而使交易似乎未发生,从而打开了双重提款或存款的可能性。 BIP 62 是提出解决此问题的提案之一,与隔离见证(segwit)一起。 应当注意,这仅在未确认交易的情况下存在问题,即运行流程依赖于未确认交易的情况。 对于仅依赖于已确认交易的正常应用程序而言,这不是问题。

比特币中的信息日食攻击可能导致双重花费。 日食攻击的理念是使比特币节点被欺骗,只连接到攻击者节点的 IP。 这打开了攻击者发动 51% 攻击的可能性。 这在比特币客户端 v0.10.1 中已在一定程度上得到解决。

智能合约安全性

最近,智能合约安全方面的工作已经开始,并且特别是正在讨论和研究智能合约的形式验证。这一切特别是由于臭名昭著的 DAO 攻击而引发的。形式验证是验证计算机程序以确保其满足某些形式陈述的过程。这现在不是一个新概念,对于其他语言,已经有一些可用的工具可以实现这一点;例如,Frama-C 用于分析 C 程序。形式验证背后的关键思想是将源程序转换为一组可由自动证明器理解的陈述。为此,通常使用 Why3,并且 solidity 的形式验证器也利用了这一点。浏览器 solidity 中已经提供了一个实验性但可操作的验证器。

智能合约安全现在至关重要,为了制定能够分析 Solidity 程序并找到漏洞的方法,许多其他举措也已经被采取。一个最近而开创性的例子是 Oyente,这是研究人员构建的工具,并在他们的论文《让智能合约更智能》中介绍了它。该论文发现并分析了智能合约中的几个安全漏洞。其中包括事务排序依赖性、时间戳依赖性、异常处理不当,比如调用堆栈深度限制的利用,以及重入漏洞。事务排序依赖性漏洞基本上是利用了合约的感知状态可能与执行后合约的状态不同的情况。这种弱点是一种竞争条件。它也被称为前加载,并且由于可以操纵块内事务的顺序而变得可能。由于所有事务首先出现在内存池中,因此可以在它们包含在块中之前监视那里的事务。这允许在另一个事务之前提交事务,从而控制智能合约的行为。

时间戳依赖性漏洞可能出现在块的时间戳被用作合约内某些决策的依据的情况下,但时间戳可以被矿工操纵。调用堆栈深度限制是另一个可能被利用的漏洞,因为 EVM 的最大调用堆栈深度为 1,024 帧。如果在合约执行时达到堆栈深度,则在某些情况下,发送或调用指令可能失败,导致资金未支付。调用堆栈深度漏洞已在 EIP50 硬分叉中解决。重入漏洞在 DAO 攻击中被利用,将数百万美元转移到了子 DAO。重入漏洞基本上意味着可以在前一个(第一个)调用函数完成之前重复调用函数。这在 solidity 智能合约的以太提取函数中特别不安全。

除了上述提到的错误之外,在撰写合同时还应该注意几个其他问题。这些错误包括,如果向另一个合同发送资金,则需谨慎处理,因为发送可能失败,即使使用throw作为捕获所有机制,也不起作用。

其他标准软件 bug,如整数溢出和下溢,在 solidity 中也非常重要,任何使用整数变量的地方都应该小心实现。例如,使用uint8来解析具有超过 255 个元素的数组的简单程序可能会导致无限循环。这是因为 uint8 仅限于 256 个数字。

在接下来的几节中,将分别使用 Why3 和 Oyente 展示两个合同验证示例。

Why3 形式验证

Solidity 代码的形式化验证现在作为 solidity 浏览器的一项功能提供。首先,将代码转换为验证器可以理解的 Why3 语言。在下面的示例中,显示了一个简单的 solidity 代码,将变量 z 定义为 uint 的最大限制。当此代码运行时,将返回0,因为uint z会溢出并重新从0开始。这也可以使用 Why3 进行验证,如下所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

具有形式验证的 Solidity 在线编译器

一旦 solidity 编译完成并在形式验证选项卡中可用,就可以将其复制到位于 why3.lri.fr/try/ 的 Why3 在线 IDE 中。下面的示例显示它成功检查并报告了整数溢出错误。此工具正在积极开发中,但仍然非常有用。此外,此工具或任何其他类似工具都不是万能解药。即使形式化验证通常也不应被视为万能药,因为首先应适当定义规范:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Why3

Oyente 工具

目前,Oyente 可作为 Docker 镜像供轻松测试和安装。它位于 github.com/ethereum/oyente,可快速下载和测试。在下面的示例中,测试了从 solidity 文档中获取的一个简单合同,其中包含一个重入 bug,并显示了 Oyente 成功分析了代码并找到了该 bug:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

具有重入 bug 的合同 - 来源:solidity 文档

此示例代码包含一个重入漏洞,基本上意味着如果一个合同与另一个合同交互或转移以太币,它实际上是将控制权交给了那个其他合同。这允许被调用的合同回调到调用它的合同的函数,而无需等待完成。例如,这个漏洞可以允许反复调用前面示例中显示的withdraw函数,导致多次获得以太币。这是可能的,因为份额值直到函数结束时才被设置为0,这意味着任何后续的调用都将成功,导致反复提款。

显示了一个 Oyente 运行的示例,用于分析下面显示的合同,并且正如下面的输出所示,分析成功找到了重入漏洞。建议通过结合 Solidity 文档中描述的 Checks-Effects-Interactions 模式来处理此漏洞:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Oyente 工具用于检测 Solidity 漏洞

摘要

在本章中,读者已经介绍了区块链技术的安全性、保密性和隐私性方面。隐私性是另一个影响公共区块链在各行业中应用的主要阻碍因素。接下来,讨论了智能合约安全性,这是一个当前非常热门的话题。这是一个深入广泛的主题,但在各个方面都进行了简要介绍,这应该为进一步研究提供了坚实的基础。例如,形式化验证本身就是一个广阔的研究领域。此外,还提供了形式化验证的示例,让读者了解可用的工具。值得注意的是,上述提到的工具正在积极开发中,缺少各种理想的功能。此外,文档相当稀缺;因此,鼓励读者密切关注发展,特别是围绕形式化验证和与以太坊紫色论文相关的发展,因为它即将迅速发展。区块链安全,特别是智能合约安全领域现在非常成熟,以至于可以撰写整本书来讨论此主题。许多学术界和商业界的专家和研究人员正在探索这个领域,很快将会有许多自动化工具可用于智能合约的验证。

第十三章: 当前情况和未来展望

区块链技术将改变我们日常业务的进行方式。它挑战了现有的商业模式,并承诺在节省成本、提高效率和透明度方面带来巨大的好处。本章将探讨这项技术的最新发展、新兴趋势、问题和未来预测。此外,本章还将详细讨论一些与开放性研究问题和改进相关的主题。

新兴趋势

由于学术界和商业部门对其极大的兴趣,区块链技术正在快速变化和密集发展。随着技术的成熟,最近出现了一些趋势。例如,由于其在金融领域中的特定用例,私有区块链最近受到了相当多的关注。此外,企业级区块链是另一个新趋势,旨在开发符合企业级效率、安全性和集成需求的区块链解决方案。下面列出并讨论了一些趋势。

应用特定区块链 (ASBCs)

目前,注意到了一种对特定应用程序的区块链或分布式分类账的倾向,这些区块链或分布式分类账是专门为一种应用程序而开发的,并专注于特定行业,例如,everledger,这是一种为钻石和其他高价值物品提供不可变追踪历史和审计跟踪的区块链。这种方法阻碍了任何欺诈企图,因为与物品的所有权、真实性和价值相关的所有内容都是经过验证并记录在区块链上的。这对保险和执法机构非常有价值。

企业级区块链

由于区块链在其原始形式下由于隐私和可扩展性问题而不适合在企业级别使用,因此最近出现了开发企业级区块链的趋势,各种公司已开始提供企业级区块链解决方案,这些解决方案已准备好在企业级别部署和集成。这种类型的解决方案已经解决了测试、文档编制、集成和安全性等要求,并且可以在企业级别进行最小或没有变更的实施。这与不受监管并且不符合特定企业级安全要求的公共区块链形成了对比。这也意味着企业级区块链通常应该以私有配置实施;然而,公共企业级区块链实施也是可能的。2016 年是许多技术初创公司开始提供企业级区块链解决方案的一年,如 bloq、tylmez、chain 等。这种趋势还在继续发展,2017 年将看到更多类似的技术倡议。

私有区块链

随着对隐私和保密性的需求,重点是开发可以在一组受信任的参与者之间使用的私有分布式账本。由于其开放且相对不安全的特性,公共区块链不适用于金融、医疗和法律等行业,私有区块链有望解决这一限制,并使最终用户更接近获取区块链的好处,同时满足所有安全和隐私要求。公共区块链较不安全,因为通常它们不提供隐私和保密性服务。私有区块链允许参与者或部分参与者完全控制系统,因此在需要隐私和控制的金融等行业中使用是可取的。

以太坊可以在私有和公共模式下使用,而有一些项目是专门开发为私有区块链的,例如 Hyperledger 和 Corda。

初创企业

近年来,许多技术初创企业涌现出来,致力于区块链项目,并提供专门针对这项技术的解决方案。特别是在 2016 年,涌现了大量提供区块链咨询和解决方案的初创企业。

强烈的研究兴趣

区块链技术在学术界和商业领域引发了极大的研究兴趣。近年来,对该技术的兴趣大大增加,世界各地的主要机构和研究人员都在探索这项技术。这种兴趣的增长主要是因为区块链技术可以帮助企业提高效率,降低成本,并使事物透明化。学术界的兴趣集中在解决加密学、共识机制、性能和解决区块链中其他限制性问题。由于区块链技术属于更广泛的分布式系统范畴,许多分布式计算研究人员已将研究重点放在区块链技术上。例如,伦敦大学学院(UCL)设有专门的部门——UCL 区块链技术研究中心,专注于区块链技术研究。另一个例子是苏黎世联邦理工学院的分布式计算组,该组已发表了关于区块链技术的开创性研究。最近创刊了一本名为《Ledger Journal》的期刊并发布了其第一期研究论文。该期刊可在www.ledgerjournal.org/ojs/index.php/ledger上获取。目前,各种学术和商业机构都设有致力于区块链研究和开发的团队和部门。尽管上述倡议远非全面,但这仍然明确表明,这是研究人员极度关注的课题,预计在 2017 年及其以后将看到更多的研究和发展。另一个名为加密货币与合同倡议(IC3)的组织,也在智能合约和区块链技术方面进行研究。IC3 旨在解决区块链和智能合约中的性能、机密性和安全性问题,并开展多个项目以解决这些问题。有关 IC3 正在运行的项目的更多信息可在线获取:www.initc3.org/

标准化

区块链技术目前尚未成熟到可以轻松与现有系统集成的程度。甚至,就目前的技术而言,两个区块链网络之间也不能轻松通信。标准化将有助于改善区块链技术的互操作性、可采用性和集成性。最近已经有一些尝试来解决这个问题,其中最值得注意的是成立了 ISO/TC 307,这是一个专门负责标准化区块链和分布式分类账技术的技术委员会。该委员会的目标在于增加用户、应用程序和系统之间的互操作性和数据交换。另一方面,最近成立的财团和开源合作努力,如 R3 和 Hyperledger,通过与其他参与者分享想法、工具和代码,也有助于该技术的标准化。R3 与 80 多家银行组成的财团合作,所有这些银行都有着类似的目标,这在某种程度上实现了标准化。另一方面,Hyperledger 则有一个参考架构,可用于构建区块链系统,并得到了 Linux 基金会和行业内许多其他参与者的支持。另一个例子是 chain 开放标准,这是一个为金融网络开发的协议。chain OS1 标准已经可用,是与全球主要金融机构合作制定的。该标准允许更快地结算交易和立即进行点对点交易路由。它旨在解决区块链技术中的监管、安全和隐私要求。OS1 还提供了智能合约开发框架,并允许参与者轻松满足 AML 和 KYC 要求。

智能合约标准化工作也已经开始,Lee 和其他人撰写的一篇重要论文正式定义了智能合约模板,并提出了智能合约相关研究和发展的未来愿景和必要性。该论文可在 arxiv.org/abs/1608.00771v2 找到。此外,在 第十二章 可扩展性和其他挑战 和 第六章 智能合约 中也进行了一些讨论。

上述所有努力清楚地表明,很快将在该行业出现标准,这将进一步使区块链技术的采用变得更加容易和快速。标准的出现也将导致区块链行业的指数增长,因为标准的可用性将消除诸如互操作性之类的障碍。

增强

在过去几年中,已经提出了各种增强和建议,以进一步发展现有的区块链。这些建议大多是针对安全漏洞和解决区块链技术固有限制而提出的。区块链技术存在一定的限制,例如可伸缩性、隐私和互操作性,在它成为像任何其他技术一样的主流技术之前,必须解决这些限制。最近,人们已经付出了巨大的努力来解决区块链技术的可扩展性问题,这些问题已经在前一章中讨论过。此外,开发人员定期提出针对这些系统的各种关注的区块链特定改进提案,如BIPs(比特币改进提案)和EIPs(以太坊改进提案)。稍后将讨论这两个链的一些最近和值得注意的改进提案。此外,最近的进展,如状态通道,是区块链技术迅速改进并很快将成熟和更实用的技术的例子。

实际世界的实施

近年来,特别是在 2016 年,使用区块链技术开发了许多概念验证,例如钻石跟踪的 everledger 和物联网(IoT)的 filament 等应用特定实现 emerged,但在各个领域仍然存在缺失。具体的、真实的、端到端的实施尚未实现,特别是在金融行业。由于许多概念验证已经开发并证明有效,因此现在看来并不遥远;下一阶段是将这些实施到实际场景中。例如,最近,一组七家银行同意构建一个将简化贸易融资流程的数字贸易链DTC)。

合作团体

2016 年被视为合作团体和共享开源努力开始的一年。预计这种趋势将会增长,更多的合作团体、委员会和开源努力将很快出现。一个典型的例子是 R3,它与世界上最大的金融机构共同开发了 Corda。

对挑战的回答

由于区块链技术受到社区的高度关注和研究,对于各种挑战已经开始出现了一些答案。例如,状态通道的概念已经被开发出来,作为对区块链可扩展性和隐私问题的应对方案。利用状态通道,比特币闪电网络和以太坊的雷电网络已经几乎准备就绪,可以进行实施。此外,出现了各种解决区块链机密性问题的区块链解决方案,比如 Kadena。其他概念,比如 Zcash,Coinjoin 和机密交易也已经被开发出来,并在之前的章节中已经讨论过。这种趋势在未来几年也将持续增长,即使几乎所有基本的区块链技术挑战都得到了解决,进一步的增强和优化也将永远不会停止。

融合

区块链与其他技术的融合带来了重大好处。在核心层面,区块链提供了弹性、安全性和透明度,当与其他技术结合时,将会产生一种相互补充的非常强大的技术。例如,当通过区块链实施物联网时,可以获得一些重大的好处,比如完整性、去中心化和可扩展性。人工智能AI)预计将从区块链技术中获得好处,事实上,在区块链技术中,可以以自治代理AAs)的形式实现人工智能。更多的例子和上述融合的技术将在本章节的后续部分详细讨论。

区块链技术教育

尽管区块链技术在全球几乎所有行业的技术人员、开发人员和科学家中引起了极大的兴趣,但却缺乏正式的学习资源和教育材料。由于这是一项新技术,各种声誉良好的机构如普林斯顿大学现在正在提供各种课程,向希望了解这项技术的任何人介绍这项技术。例如,普林斯顿大学已经开始了一门加密货币和数字货币的在线课程,相当受欢迎。许多私人机构也提供类似的在线和课堂培训课程。由于区块链技术的受欢迎和接受程度,近期将会看到更多类似的努力。

就业

最近,招聘人员在职场上出现了一种新趋势,他们现在正在寻找区块链专家和能够为区块链编程的开发人员。这对金融行业尤其相关,最近许多初创公司和大型组织开始雇佣区块链专家。随着技术的得到更多的认可和成熟,这种趋势无疑会增长。人们还担心缺乏区块链开发人员的问题,随着技术的进步,越来越多的开发人员会通过自学或从某些培训提供者处获得正式培训,这个问题肯定会得到解决。

加密经济学

随着区块链的出现,出现了新的研究领域,其中最值得注意的是加密经济学,这是研究管理去中心化数字经济的协议的学科。随着区块链和加密货币的出现,这一领域的研究也在增长。Vitalik Buterin将加密经济学定义为数学、密码学、经济学和博弈论的结合。

加密学研究

尽管在比特币发明之前的几十年里,密码学一直是一个备受关注和研究的领域,但区块链技术导致了对这一领域的重新关注。随着区块链和相关技术的出现,对密码学的兴趣也显著增加。特别是在金融密码学领域,正在进行并定期发布新的研究。技术如零知识证明、完全同态加密和功能性加密正在研究其在区块链中的应用。在 Zcash 中,零知识证明已经首次在实践层面上得到实现。可以看出,区块链和加密货币促进了密码学的发展,尤其是金融密码学。

新的编程语言

对开发智能合约的编程语言的发展也越来越受到关注。努力更加集中在领域特定语言上,例如以太坊的 Solidity 和 Kadena 的 Pact。这只是一个开始,随着技术的进步,很可能会开发出许多新语言。

硬件研发

当在 2010 年意识到当前的挖矿方法不高效时,矿工开始转向优化挖矿硬件。这些最初的努力包括使用图形处理单元GPUs),然后在 GPUs 达到极限后开始使用现场可编程门阵列FPGAs)。之后很快,特定应用集成电路ASICs)出现了,大大提高了挖矿能力。预计这种趋势将进一步增长,因为现在有更多的研究在进一步优化 ASICs,通过并行化和减小芯片尺寸。此外,预计 GPU 编程项目也将增长,因为现在新的加密货币相当频繁地出现,其中许多利用了 GPU 处理能力的工作量证明算法。例如,最近 Zcash 激发了对使用 NVidia CUDA 和 OpenCL 进行 GPU 挖矿设备及相关编程的兴趣。其目标是利用多个 GPU 并行优化挖矿操作。此外,也有一些研究是在使用可信计算硬件,如英特尔的软件保护扩展SGX)来解决区块链上的安全问题。英特尔的 SGX 还被用于一种称为时间证明PoET)的新型共识算法中,该算法已在前几章中讨论过。另一个项目,21 比特币计算机,也已经开发出来,它作为一个平台,供开发人员学习比特币技术并轻松地为比特币平台开发应用程序。

预计硬件研发趋势将继续,并且很快将探索更多硬件方案。

形式化方法和安全性研究

随着对智能合约编程语言中的安全问题和漏洞的认识,现在对在生产部署之前对智能合约进行形式化验证和测试的兴趣日益浓厚。为此,已经展开了各种努力,包括针对以太坊的 Solidity 的 Why3。Hawk 是另一个例子,它已经开发出来,以实现智能合约的保密性。

区块链的替代方案

近年来,随着区块链技术的发展,研究人员开始思考是否有可能创建可以提供区块链提供的保证和服务,但却无需使用区块链的平台。这导致了 R3 公司的 Corda 的开发,实际上 Corda 并不是真正的区块链,因为它不是基于包含交易的区块的概念;相反,它基于一个状态对象的概念,该对象根据网络参与者的要求和规则在 Corda 网络中传播,代表网络的最新状态。其他例子包括 IOTA,它是一个物联网区块链,使用 有向无环图DAG)作为分布式分类账,命名为 Tangle,而不是传统的区块链与区块。据称,这个分类账已经解决了可扩展性问题,同时提供了高级别的安全性,甚至可以抵御基于量子计算的攻击。需要注意的是,比特币也在某种程度上受到量子攻击的保护,因为量子攻击只能针对公开的公钥进行,而这些公钥仅在区块链上进行发送和接收交易时才会暴露。如果公钥没有暴露,这种情况发生在未使用的地址或者仅用于接收比特币的地址上,那么可以保证量子安全性。换句话说,为每笔交易使用不同的地址可以防止量子攻击。此外,在比特币中,如果需要,很容易切换到另一种量子签名协议。

互操作性的努力

最近意识到区块链互操作性的限制导致开发了可以跨多个区块链运行的系统。一个最近的例子是 Qtum,它是与以太坊和比特币区块链兼容的区块链。它利用比特币的 UTXO 机制传输价值,以太坊虚拟机执行智能合约。这意味着以太坊项目可以无需任何更改就移植到 Qtum 上。

区块链即服务

随着云平台成熟度的提高,许多公司已经开始提供 区块链即服务BaaS)。最突出的例子是微软的 Azure,提供以太坊区块链作为服务,以及 IBM 的 bluemix 平台,提供 IBM BaaS。预计这种趋势在未来几年将会持续增长,并会涌现出更多提供 BaaS 的公司。EgaaS电子政府即服务)是另一个例子,实际上也是 BaaS,但为治理功能提供特定应用的区块链。该项目的目标是组织和控制任何活动,而无需文件流转和繁文缛节。

降低电力消耗的努力

从比特币的区块链中显然可以看出,工作证明机制非常低效。当然,这一计算确保了比特币网络的安全,但这一计算没有其他好处,并且浪费了大量电能。为了减少这种浪费,现在更加关注更环保的选择,如不需要像比特币的工作量证明算法那样庞大资源的权益证明算法。这一趋势预计将继续增长,特别是随着以太坊计划采用权益证明。

改进提案

两种主要的区块链技术,比特币和以太坊,都有正式机制来提出对现有协议的改进。这些被称为改进提案,即 BIPs 和 EIPs。这两种机制都允许来自世界各地的开发人员和技术爱好者参与,并帮助比特币和以太坊在时间的推移中发展成为更成熟和更安全的技术。下面将讨论两个区块链的著名改进提案。

BIPs

在本部分将讨论一些最新的 BIPs。

BIP 152

这一提议是为了在比特币网络中引入紧凑区块以节省带宽的改进建议。目前,比特币协议在带宽利用方面并不高效,这一提议旨在通过允许节点之间中继紧凑区块来解决这一问题。为了实现这一提议,需要进行若干更改,如引入新的数据结构和消息。目前,这一提议仍处于草案状态。在 GitHub 上可以找到:github.com/bitcoin/bips/blob/master/bip-0152.mediawiki

BIP 151

这一改进提案旨在引入点对点通信加密。这一提议是针对比特币协议中存在的各种安全问题,如可能的流量分析和操纵而提出的。这一提议将有助于阻止试图通过源 IP 和在比特币网络上的交易内容识别用户的尝试。在 BIP 中提出了几条用于请求和在参与节点之间启用加密的新消息。在 github.com/bitcoin/bips/blob/master/bip-0151.mediawiki 可以找到。

BIP 150

这一提案介绍了一种用于对等身份验证的方法。这将允许解决中间人攻击,并确保对等方正在连接到合法节点。在 GitHub 上可以找到:github.com/bitcoin/bips/blob/master/bip-0150.mediawiki

BIP 147

这项提案旨在解决虚拟栈元素的可变性问题。签名的可变性是一个已知的问题,可以通过任何中继节点简单地更改与交易相关联的签名来执行。这是一个共识层级的改进提案,需要软分叉来实施。BIP 147 在 GitHub 上有文档记录,网址为 github.com/bitcoin/bips/blob/master/bip-0147.mediawiki

BIP 146

这项改进是为了解决签名编码的可变性问题。这需要软分叉来实施。如果实施,这将解决与 ECDSA 签名编码机制中的基本限制相关的签名可变性问题。这个限制是 ECDSA 固有的。其次,由于如果签名失败,验证脚本评估仍将继续,并允许设置任何值到签名上。这个 BIP 是一个解决这个问题的提案。文档位于 github.com/bitcoin/bips/blob/master/bip-0146.mediawiki

还有许多 BIPs 用于提出比特币协议的改进建议。在本节中,仅介绍了最新的五项提案。近年来已提出了近 90 个比特币改进提案,这个过程还在继续。

EIPs

以太坊有自己版本的改进提案,称为 EIPs。最近的几个 EIPs 如下讨论。

EIP 170

这项改进提案旨在解决由于预处理阶段大型合同代码触发的过多气体使用而引起的某些漏洞,或者在从磁盘读取代码时引起。该提案是将合同代码大小限制为 23,999 字节。关于此提案的进一步讨论已经导致进一步改进并得到接受。然而,这尚未实施。

EIP 150

这项改进提案是为了应对以太坊区块链上的拒绝服务攻击。自以太坊现场区块链的区块 2463000 起,已作为硬分叉实施。此 EIP 解决了由交易垃圾邮件攻击引起的问题,例如,重复调用 EXTCODESIZE 操作码,导致区块链验证过程减慢。该 EIP 是为了增加几个操作码的气体成本,以防止由于过度重复使用这些操作码而导致的拒绝服务攻击。

EIP 161

这个提案旨在允许从以太坊区块链中删除空账户。这是为了应对以太坊区块链遭受的拒绝服务攻击而制定的措施,攻击者创建了大量空账户。这是由于账户创建成本低所导致的。这被称为状态 Trie 清理,通过对账户进行 CALL 指令来删除空账户。

EIP 160

这个建议旨在增加 EXP Opcode 的成本。这个改进提案背后的核心思想是使 EXP 操作的成本与操作的复杂性成比例。该提案有助于阻止由于调用计算密集型操作而引起的拒绝服务攻击。

EIP 155

该改进提案旨在消除在主要以太坊区块链上从不同链上重放交易的可能性。例如,如果在以太坊网络上进行了交易,那么它就可以在以太经典网络上重放;这个 EIP 解决了这个问题。此外,已在测试网络上进行的任何交易都不应该能够在主要的实时网络上重播。

所有上述改进都导致了硬分叉,并作为对最近以太坊拒绝服务攻击的响应而实施。改进提案是引入以太坊区块链的新增强和协议级别的漏洞修复的关键机制。已经在以太坊上实施或提出了约 11 个改进提案。所有这些都在 GitHub 上有记录:github.com/ethereum/EIPs/

其他挑战

除了上一章讨论的安全性和隐私性外,实现区块链主流应用还需要解决其他一些障碍。这些包括监管、政府控制、技术不成熟、与现有系统集成以及实施成本。

规管被认为是需要解决的最大挑战之一。核心问题是,区块链,尤其是加密货币在任何政府中都不被认可为合法货币。尽管在某些情况下,美国和德国已将其归类为货币,但它仍远未被接受为正常货币。此外,目前的区块链技术状态未被认可为金融机构可用的平台。尚无任何金融监管机构接受其作为可被授权使用的平台。然而,各国监管机构已采取各种倡议来研究和提议相关规定。目前比特币完全没有受到监管,尽管一些国家已尝试征税比特币。在英国,根据欧盟增值税指令,比特币交易不受增值税(VAT)的免税规定,但这可能在脱欧后发生改变。然而,某些情况下仍可能适用资本利得税CGT)。

预计各国金融监管机构将很快提出一些关于区块链技术的监管尝试,特别是在英国金融行为监管局(FCA)最近宣布可能批准一些使用区块链的公司之后。

人们普遍担心区块链技术并不真正准备好用于生产部署。尽管比特币区块链已发展成为一个稳固的区块链平台并投入使用,但并不适合每种情况。特别是在金融和健康等敏感环境中尤为真实。但很可能很快会发生改变,因为正如前面讨论过的,大量努力正在进行中以改善技术,并解决任何技术限制,如可扩展性和隐私性。安全性也是另一个普遍关注的问题,许多研究人员已经强调过,并特别适用于金融和健康领域。欧盟网络与信息安全局(ENISA)最近发布的一份报告强调了应该解决的分布式分类账特定问题。报告中强调的一些问题包括智能合约管理、密钥管理、反洗钱和反欺诈工具。此外,报告中还强调了对监管、审计、控制和治理的需求。

与现有遗留系统的集成也是一个主要关注点。目前尚不清楚区块链如何与现有金融系统集成。

采用区块链技术可能遇到的障碍或多或少与监管、安全和互操作性有关。与现有系统的集成可以通过多种方式实现。

暗面

具有审查抵抗和去中心化的关键属性,区块链技术可以帮助提高许多领域的透明度和效率,但这种技术的相对无监管性意味着它也可以被犯罪分子用于非法活动。例如,比较一种情景,如果一些非法内容在互联网上发布,可以立即通过联系有关当局和网站服务提供商来关闭,但这在区块链上是不可能的。一旦某事出现在区块链上,几乎不可能将其恢复。这意味着一旦在区块链上发布了任何不可接受的内容,就无法删除。如果区块链用于分发不道德的内容,那么任何人都无法关闭它。这带来了严重的挑战,看起来在这种情况下一些监管和控制是有益的,但如何监管区块链呢?这是另一个重要的问题。首先制定监管法律,然后看区块链技术是否适应这些法律可能不明智,因为这可能会扰乱该技术的创新和进步。更明智的做法是先让区块链技术发展起来,就像互联网一样,当它达到临界质量时,监管机构可以呼吁对区块链技术的实施和使用施加一些监管。

有许多例子显示,暗网与比特币一起用于进行非法活动。例如,SilkRoad用于在互联网上出售非法药物,使用比特币进行支付,而暗网则使用只能通过Tor看到的洋葱 URL。尽管SilkRoad在经过执法机构数月的努力后被关闭,但新的类似网站开始出现。现在还有其他提供类似服务的选择;因此,通常,这种问题仍然是一个重大关注点。想象一下,一个非法网站存在于 IPFS 和区块链上;关闭它并不容易。显然,缺乏控制和监管可能会鼓励犯罪活动,并且类似SilkRoad的问题将继续出现。完全匿名交易能力的进一步发展,例如 Zcash,可能为犯罪分子提供另一层保护,但同时也可能在各种合法情况下非常有用。这取决于谁在使用该技术;匿名性在许多情况下可能是有益的,例如在医疗行业中,患者记录应该保持私密和匿名,但如果也可以被犯罪分子用于隐藏其活动,这可能就不合适了。

一种解决方案可能是引入内嵌有监管逻辑的智能机器人或 AAs 甚至合同。它们很可能由监管机构和执法机构编程,并且生存在区块链上,作为提供治理和控制的手段。例如,可以设计一种区块链,使每个智能合约都必须经过一个控制器合约进行审查代码逻辑,并提供监管机制以控制智能合约的行为。监管机构还可以检查每个智能合约的代码,一旦智能合约代码具有监管机构颁发的证书所附的一定水平的真实性,就可以部署在区块链网络上。这种二进制签名的概念类似于已经建立的代码签名概念,其中可执行文件是数字签名的,以确认代码是真实的且不是恶意的。这个想法在半私有或受监管的区块链的背景下更为适用,其中监管机构需要一定程度的控制,例如在金融领域。这意味着需要对可信第三方(监管机构)放置一定程度的信任,这可能不太理想,因为它偏离了完全去中心化的概念。然而,为了解决这个问题,可以使用区块链本身提供的去中心化、透明和安全的证书发行和数字签名机制。

区块链研究

尽管近年来区块链技术取得了重大创新,但该领域仍然非常适合进一步研究。以下列出了一些选定的研究主题,并提供了一些关于现有挑战和技术水平的信息。还提出了一些关于如何解决这些问题的想法。

智能合约

在定义智能合约的关键要求和模板开发方面已经取得了重大进展。然而,在使智能合约更安全的领域仍需要进一步的研究。

中心化问题

特别是在与比特币挖矿中心化相关的问题上,人们越来越担心如何使比特币重新实现真正的去中心化。

密码学函数的局限性

比特币区块链中使用的密码学非常安全,并经受住了时间的考验。在其他区块链中,也使用类似的安全技术,同样非常安全。然而,特定的安全问题,比如在椭圆曲线数字签名方案中生成和使用重复签名随机数的可能性(导致私钥恢复攻击)、哈希函数中的碰撞以及可能破解底层加密算法的量子攻击仍然是一个有趣的研究领域。

共识算法

对权益证明算法或替代权益证明的研究也是一个重要的研究领域。这尤其重要,因为预计到 2020 年,当前比特币网络的功耗将达到近 14 千兆瓦。还有人建议,与比特币的工作证明一样,可以利用网络的算力来解决一些数学或科学问题,而不是进行低效或单一目的的工作。此外,替代方案,如权益证明算法,已经得到了很多关注,并将在主要的区块链中实施,例如以太坊的 Casper。然而,到目前为止,工作证明仍然是保护公共区块链的最佳选择。

可扩展性

在上一章已经对可扩展性进行了详细讨论;简而言之,在本节中可以说,虽然已经取得了一些进展,但仍然需要更多的研究来实现链上可扩展性,并进一步改进诸如状态通道之类的链下解决方案。一些倡议,如增加区块大小和仅限交易的区块链(无区块)已被提出,以解决增加区块链自身容量而不使用侧通道的可扩展性问题。无区块的实现示例包括 IOTA(Tangle)。它是一个有向无环图DAG),用于存储交易,而不是传统的区块链解决方案,其中一个区块用于存储交易。与比特币等基于区块的区块链相比,这使其本质上更快,因为在区块生成之间的等待时间至少约为 10 分钟。

代码混淆

如上一章所讨论的,通过使用无法区分性混淆的代码混淆可以作为在区块链中提供机密性和隐私的手段。然而,这仍然不太实际,需要进行重大的研究工作才能实现这一目标。

显著项目列表

以下是当前在进行中的区块链领域的一些显著项目列表。除了这些项目之外,还有许多初创公司和企业在区块链领域工作,并提供与区块链相关的产品。

以太坊上的 Zcash

以太坊研发团队最近的一个项目是在以太坊上实现 Zcash。这是一个有趣的项目,开发人员正在尝试使用在 Zcash 项目中已经使用的 zk-SNARKs 为以太坊创建一个隐私层。通过在以太坊上实现 Zcash,旨在创建一个允许诸如投票等隐私至关重要的应用的平台。它还将允许在以太坊上创建匿名代币,这些代币可以在许多应用程序中使用。

CollCo

这是由德意志证券交易所开发的一个项目,基于 Hyperledger 的代码库,用于管理商业银行的现金转账。担保币(CollCo)提供了一个基于区块链的平台,允许商业银行货币的实时转移,同时依然依赖于 Eurex 清算 CCP 提供的传统功能。这是一个可以解决交易结算流程中的效率低下的重大项目。

Cello

截至 2017 年 2 月,这是 Hyperledger 项目的最新增加内容。该项目的目标是提供按需的 BaaS,使多个区块链的部署和管理对于用户来说更加方便和简单。预计 Cello 将支持所有未来和当前的 Hyperledger 区块链,比如 Fabric 和 Sawtooth Lake。

Qtum

这个项目基于将比特币和以太坊区块链的功能结合在一起的想法。Qtum 利用比特币的代码库,但使用以太坊的 EVM 来执行智能合约。以太坊智能合约可以在比特币的 UTXO(未花费交易)模型下运行。可在qtum.org/获取。

比特币-NG

这是比特币区块链中解决可扩展性、吞吐量和速度问题的另一个提案。下一代(NG)协议基于领导者选举机制,验证交易发生后立即进行,相比比特币协议,区块之间的时间和区块大小是与可扩展性相关的主要限制。

Solidus

这是一种新的加密货币,解决了自私挖矿问题,同时解决了扩展性和性能问题。它还解决了保密性问题。它基于无许可的拜占庭共识。目前的协议状态相对复杂,并且是一个开放的研究领域。

Hawk

这是一个旨在解决区块链智能合约隐私问题的项目。这是一个智能合约系统,允许在区块链上对交易进行加密。Hawk 能够自动生成与区块链交互的安全协议,而无需手动编程密码协议。

Town-Crier

这是一个旨在为智能合约提供真实世界的可信数据源的项目。该系统基于英特尔的 SGX 信任硬件技术。这是在智能合约可以从在线数据源请求数据时,同时保护机密性的 Oracle 设计的一步进展。

SETLCoin

这是由高盛公司构建的一个系统,并在《证券结算加密货币》申请中申请了专利。正如名称所示,这种加密货币“币”可以用于快速高效的结算。该技术利用虚拟钱包在对等方之间交换资产,并通过拥有 SETLCoin 的所有权允许即时结算。

TEEChan

这是使用受信执行环境TEEs)提供可扩展和高效的解决方案来扩展比特币区块链的新颖想法。这类似于支付通道的概念,其中使用链下通道来更快地传输交易。这个想法的主要吸引力在于它可以在比特币区块链上实施,而无需对比特币网络进行任何更改,因为这是一个链下解决方案。然而,有一个小的警告,这个解决方案确实需要信任英特尔进行远程验证,因为英特尔的 SGX CPU 被用于提供 TEEs。在去中心化区块链中,这并不是一个理想的特性;但需要注意的是,即使使用远程验证,交易的机密性仍然得以保留,因为远程验证人(英特尔)不能看到用户之间通信的内容。这限制了它是否是一个完全去中心化和无需信任的解决方案是值得争论的。

猎鹰

猎鹰是一个帮助比特币扩展的项目,通过为在网络上传播比特币区块提供快速中继网络来实现。其核心理念围绕着一种减少孤儿区块的技术,从而帮助提高比特币网络的总体可扩展性。为了实现这一目的,采用了被称为应用层截止路由的技术。

布莱切利

该项目由微软引入,表明微软对区块链技术的承诺。布莱切利允许使用 Azure 云服务以用户友好的方式构建区块链。布莱切利介绍的一个重要概念被称为密码片段,可以被认为是区块链之外的高级版本的预言机,可以通过安全通道被智能合约调用。这些可以用任何语言编写,并在安全容器内执行。

密码片段有两种类型:实用型密码片段和合同型密码片段。第一种类型用于提供基本服务,如加密和从外部来源获取基本数据,而后者是更智能的版本,当在链上创建智能合约时会自动生成,并存储在链外但仍与链上合约相关联。由于它的链外存在,无需在区块链网络的所有节点上执行合同密码片段,因此这种方法会提高区块链的性能。

卡斯柏

这是以太坊的权益证明算法,正在开发中。该领域已经进行了重大研究,并预计将在 2017 年实施。节点在基于 Casper 的以太坊网络中成为绑定验证器,并需要支付保证金以便能够提出新的区块。

大都会

这是以太坊的下一个版本,已经完成了大量工作。为了实现该版本,需要进行硬分叉。已发布了一系列 EIP(以太坊改进提案),其中包括了此版本的所有主要改进。改进包括将签名验证和随机数逻辑移到智能合约中,这将为开发人员在选择安全方案方面提供更大的灵活性。另一个改进涉及块哈希和状态根变化,这将简化协议并允许并行事务处理。其他提案包括支持加密功能(椭圆曲线加密)的大整数。上述所有改进以及其他各种改进都包括在 EIP86、EIP98、EIP96、EIP100、EIP101、EIP116、EIP195、EIP140 和 EIP141 中。尚无发布日期,尚不清楚是否所有 EIP 将在新版本中实施;然而,此版本的主要目标是协议简化、隐私和为开发人员提供更大的灵活性。

杂项工具

以下列出了一些之前未讨论的工具,并简要介绍,以便让读者了解可用于区块链开发的多种选择。此列表包括可用于区块链开发的平台、工具和实用程序。

Microsoft Visual Studio 的 Solidity 扩展

此扩展提供智能感应、自动完成和分散应用程序的模板,并在熟悉的 Visual Studio IDE 中工作,使开发人员更容易熟悉以太坊开发。

MetaMask

这是一个 DAPP 浏览器,从 DAPP 浏览的角度来看类似于 Mist,但允许用户在浏览器中运行以太坊去中心化应用程序,而无需运行完整的以太坊节点。这可以从 metamask.io/ 安装为 Chrome 插件。

Stratis

这是一个区块链开发平台,允许创建自定义的私人区块链,并与主要的 Stratis 区块链(Stratis chain)一起工作,出于安全原因。它可以轻松提供比特币、以太坊和 Lisk 等主要区块链的开发。此外,它允许使用 C# .Net 技术进行开发。还可以通过 Microsoft Azure 作为 BaaS 提供。该平台可以在 stratisplatform.com/ 上找到。

Embark

这是以太坊的开发框架,它允许类似于之前章节中讨论的 truffle 的功能。它可以自动部署智能合约,更容易地与 JavaScript 集成,特别是更容易地与 IPFS 集成。这是一个非常功能丰富的框架,可用的功能还有很多。它可以通过 npm 安装。该框架在 GitHub 上可以找到:github.com/iurimatias/embark-framework

DAPPLE

这是另一个以太坊的框架,它通过处理更复杂的任务,使智能合约的开发和部署更加简单。它可用于包管理、合约构建和部署脚本。这也可通过 npm 获得。也可以在 GitHub 上找到它,网址为github.com/nexusdev/dapple

Meteor

这是一个单页面应用的全栈开发框架。它可用于以太坊 DAPP(去中心化应用)开发。在 meteor 中有开发环境,并允许更轻松和可管理的复杂 DAPP 的开发。在www.meteor.com/和以太坊特定 DAPP 构建信息在github.com/ethereum/wiki/wiki/Dapp-using-Meteor都可以找到。

uPort

该平台建立在以太坊上,并提供了一个去中心化的身份管理系统。这使用户完全控制其身份和个人信息。这基于声誉系统的理念,使用户可以证明彼此并建立信任。该平台可在www.uport.me/找到。

INFURA

该项目旨在提供企业级的以太坊和 IPFS 节点。INFURA 包括以太坊节点、IPFS 节点和一个名为 Ferryman 的服务层,该层提供路由和负载平衡服务。

与其他行业的收敛

区块链与物联网的融合在上一章中已经有了详细讨论。简而言之,由于区块链的真实性、完整性、隐私性和共享性,物联网网络将从区块链技术大大受益。这可以以物联网网络的形式实现,该网络在区块链上运行,并利用去中心化的网状网络进行通信,以实现实时的机器对机器M2M)通信。所有由 M2M 通信产生的数据可以在机器学习过程中使用,以增强人工智能 DAOs 或简单 AAs 的功能。AAs 可以在由区块链提供的分布式人工智能DAI)环境中作为代理,并可以利用机器学习过程随着时间而学习。

AI 是计算机科学的一个领域,旨在构建能够根据它们观察到的场景和环境做出理性决策的智能代理。机器学习通过利用原始数据作为学习资源,在 AI 中发挥着至关重要的作用。AI-based 系统中的一个关键要求是具有可用于机器学习和模型构建的真实数据。来自物联网设备、智能手机和其他数据采集装置的数据激增意味着 AI 和机器学习变得越来越强大。然而,数据的真实性是一个要求。一旦消费者、生产者和其他实体进入区块链,由这些实体之间交互产生的数据就可以被直接用作机器学习引擎的输入,并且保证了其真实性。这就是 AI 与区块链融合的地方。可以说,如果物联网设备被黑客攻击,它可以向区块链发送畸形数据。这个问题得到缓解,因为物联网设备是区块链的一部分(作为节点),并且具有区块链网络中普通节点所应用的所有安全属性。这些属性包括激励良好行为、拒绝畸形交易以及严格验证交易和区块链协议的各种其他检查。因此,即使某个物联网设备被某种方式黑客攻击,它也将被区块链网络视为拜占庭节点,并且不会对网络产生任何不利影响。

此外,结合智能 Oracle、智能智能合约和 AAs 的可能性将催生人工智能去中心化自治组织AIDAOs),它们可以代表人类独立运行整个组织。这是未来的另一面 AI 可能成为常态。然而,为了实现这一愿景,需要进行更多的研究。

此外,区块链技术与 3D 打印、虚拟现实、增强现实和游戏行业等其他领域的融合也在计划中。例如,在多人在线游戏中,区块链的去中心化方法可以实现更多的透明度,并确保没有中央权威通过操纵游戏规则获得不公平优势。所有这些话题目前都是研究的活跃领域,并且预计在不久的将来这些领域将会受到更多的关注和发展。

未来

预测 2017 年将是区块链技术在实际生产环境中实施并从之前几年的概念验证和理论阶段迈向的一年。在本节中进行了一些小心的预测,这些预测基于所涉领域的当前进展和进展速度。所有这些预测很可能在 2020 年至 2050 年之间实现:

  • 物联网将在多个区块链上运行,并将催生 M2M 经济。

  • 医疗记录将在各种由健康服务提供者组成的联盟运行的私有区块链之间安全共享,同时保护患者的隐私。可能会有一个由所有服务提供者共享的单一私有区块链。

  • 选举将通过去中心化的网络应用程序以透明和安全的方式在区块链后端进行。

  • 金融机构将会运行许多私有区块链,用于在参与者之间共享数据以及内部流程。

  • 金融机构将利用半私有区块链,为反洗钱和了解客户功能提供身份信息,并将在全球的许多或所有金融机构之间共享。

  • 移民和与边境控制相关的活动将被记录在区块链上,并且护照控制将通过世界各地所有口岸和边境机构共享的区块链进行。

  • 加密学和分布式系统的研究将达到新的高度,大学和教育机构将提供专门的加密经济学、加密货币和区块链课程。

  • 人工智能 DAO(Machina Economicus)将占主导地位,代表人类做出理性决策。

  • 一个公开可用的受监管的区块链将被公民日常使用来执行他们的日常活动。

  • BaaS 将作为标准服务提供给任何希望在区块链上运行其业务或日常交易的人。事实上,可以设想,就像互联网一样,区块链将无缝地融入我们的日常生活中,人们将使用它们而不需要了解底层技术和基础设施。

  • 区块链将通常用于为艺术和媒体提供数字版权管理(DRM)服务,并可用于将内容传送给消费者,实现消费者和生产者之间的直接沟通。这将消除任何中央方管理有价值商品的许可和版权管理的需求。

  • 现有的加密货币,如比特币,将继续增值,并且随着状态通道和可扩展性工作的推出,这一趋势预计将继续增长。

  • 加密货币投资将大幅增加,一个新的加密经济社会将出现。

  • 比特币价值将达到每个硬币数万美元。

  • 数字身份将会被常规性地管理在区块链上,不同的政府功能,如投票、税收和资金发放,将通过区块链平台进行。

  • 金融机构和清算所将开始为他们的客户推出基于区块链的解决方案,预计在 2017 年底或 2018 年初。

概要

区块链将改变世界。革命已经开始,预计将以指数级规模增长。本章探讨了各种项目以及区块链技术的当前状态。首先,讨论了一些随着技术进步而预计会持续下去的趋势。全球许多研究人员和组织对区块链技术有着深入的研究兴趣,并且本章还介绍了一些研究课题。此外,还讨论了与物联网和人工智能等其他领域的融合。最后,对区块链技术的增长进行了一些预测。这些预测中大多数可能在未来十年左右实现,而有些可能需要更长的时间。区块链技术有改变世界的潜力,已经有一些成功的概念验证实施以及越来越多的爱好者和开发人员对这项技术感兴趣的积极迹象。很快,区块链将像互联网现在一样与我们的生活紧密相连。本章只是对区块链巨大潜力的简要概述,在不久的将来,预计这项技术将呈指数增长。

  • 28
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值