欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

区块链开发高级教程(五)

最编程 2024-05-05 21:29:38
...

区块链高级开发教程(五)

原文:zh.annas-archive.org/md5/64e2728fdd6fa177d97883a45d7dec42

译者:飞龙

协议:CC BY-NC-SA 4.0

第十七章:构建联盟区块链

联盟(通常由多个参与者组成,如银行、电子商务网站、*实体、医院等)可以利用区块链技术解决许多问题,使事情变得更快更便宜。尽管他们弄清楚了区块链如何帮助他们,以太坊的区块链实现并不特别适合所有情况。尽管还有其他区块链实现(例如 Hyperledger)专门为联盟进行构建,但在本书中我们将看到如何使用以太坊来构建联盟区块链。基本上,我们将使用 parity 来构建联盟区块链。虽然还有其他替代方案,如摩根大通的 quorum,我们将使用 parity,因为在撰写本书时,它已存在了一段时间,并且许多企业已经在使用它,而其他替代方案尚未被任何企业使用。但是对于您的需求,parity 可能并不是最好的解决方案;因此,在决定使用哪种解决方案之前,请调查所有其他解决方案。

在本章中,我们将涵盖以下主题:

  • 为什么以太坊不适用于联盟区块链?

  • 什么是 parity 节点,它有哪些特性?

  • 什么是权威证明共识协议,并且 parity 支持哪些 PoA 类型?

  • Aura 共识协议是如何工作的?

  • 下载和安装 parity

  • 使用 parity 构建联盟区块链

联盟区块链是什么?

要了解什么是联盟区块链,或者换句话说,联盟需要什么样的区块链实现,我们来看一个例子。银行希望构建一个区块链,使资金转账变得更简单、更快捷、更便宜。在这种情况下,他们需要以下内容:

  1. 速度:他们需要一个可以在近实时内确认交易的区块链网络。目前,以太坊区块链网络的区块时间为 12 秒,客户通常要等待几分钟才能确认一笔交易。

  2. 许可:他们希望区块链是有许可的。许可本身意味着不同的事情。例如:许可可以包括获得加入网络的许可,可以包括获得创建区块的许可,也可以包括获得发送特定交易的许可等等。

  3. 安全:对于私有网络来说,工作量证明(PoW)并不安全,因为参与者数量有限;因此,产生的哈希算力不足以使其安全。因此,需要一种可以保持区块链安全和不可变性的共识协议。

  4. 隐私:尽管网络是私有的,在网络本身仍然需要隐私。有两种隐私:

  5. 身份隐私:身份隐私是使身份无法追踪的行为。我们之前看到的获得身份隐私的解决方案是使用多个以太坊账户地址。但是,如果使用多个以太坊账户,则智能合约将无法通过所有权验证,因为无法知道这些账户是否实际上属于同一用户。

  6. 数据隐私:有时,我们不希望数据对网络中的所有节点可见,而只对特定节点可见。

总的来说,在本章中,我们将学习如何解决以太坊中的这些问题。

什么是权威证明共识?

PoA 是一种区块链共识机制,共识是通过参考验证器列表(当它们与物理实体相关联时称为权威)来实现的。验证器是一组被允许参与共识的账户/节点;它们验证交易和区块。

与 PoW 或 PoS 不同,没有涉及挖矿机制。有各种类型的 PoA 协议,它们的差异取决于它们的实际工作方式。Hyperledger 和 Ripple 都是基于 PoA 的。Hyperledger 基于 PBFT,而 Ripple 使用迭代过程。

Parity 简介

Parity 是从头开始为正确性/可验证性、模块化、低资源占用和高性能而编写的以太坊节点。它是用 Rust 编程语言编写的,这是一种具有效率重点的混合命令式/OO/函数式语言。它由 Parity Technologies 专业开发。在撰写本书时,parity 的最新版本是 1.7.0,我们将使用此版本。我们将学习构建联盟区块链所需的所有内容。要深入了解 parity,您可以参考官方文档。

它比 go-ethereum 具有更多功能,如 web3 dapp 浏览器,更高级的账户管理等。但是使它特殊的是它支持权威证明PoA)以及 PoW。Parity 目前支持 Aura 和 Tendermint PoA 协议。未来,它可能支持更多的 PoA 协议。目前,Parity 建议使用 Aura 而不是 Tendermint,因为 Tendermint 仍在开发中。

对于权限区块链来说,Aura 比 PoW 是一个更好的解决方案,因为它拥有更好的区块时间,并且在私有网络中提供了更好的安全性。

理解 Aura 的工作原理

让我们从高层次了解 Aura 的工作原理。Aura 要求在每个节点中都指定相同的验证器列表。这是一组参与共识的账户地址。一个节点可能是验证节点,也可能不是。即使是验证节点,也需要有这个列表,以便它自己能达成共识。

如果验证者列表将永远保持不变,那么可以将此列表作为静态列表包含在创世文件中,或者将其提供在智能合约中,以便可以动态更新并使每个节点都知道它。在智能合约中,您可以配置有关谁可以添加新验证者的各种策略。

区块时间可以在创世文件中进行配置。由你决定区块时间。在私有网络中,3 秒的区块时间效果很好。在 Aura 中,每三秒钟选择一个验证者,这个验证者负责创建、验证、签名和广播该区块。我们不需要太了解实际的选择算法,因为它不会影响我们的 dapp 开发。但这是计算下一个验证者的公式,(UNIX_TIMESTAMP / BLOCK_TIME % NUMBER_OF_TOTAL_VALIDATORS)。选择算法足够智能,给每个人平等的机会。当其他节点接收到一个区块时,它们会检查它是否来自下一个有效的验证者;如果不是,则会拒绝它。与 PoW 不同,当验证者创建一个区块时,它不会受到以太币的奖励。在 Aura 中,决定在没有交易时是否生成空块是由我们决定的。

你一定会想知道,如果由于某些原因,下一个验证节点无法创建和广播下一个区块会发生什么。为了理解这一点,让我们举个例子:假设 A 是第五个区块的验证者,而 B 是第六个区块的验证者。假设区块时间为五秒。如果 A 未能广播一个区块,那么当 B 的轮到时,它将在五秒后广播一个区块。所以实际上没什么严重的事情发生。区块时间戳将揭示这些细节。

你可能也会想知道网络是否有可能出现多个不同的区块链,就像 PoW 中当两个矿工同时挖矿时会发生的情况一样。是的,这种情况可能会发生很多次。让我们举个例子,了解一种可能发生这种情况的方式以及网络如何自动解决这个问题。假设有五个验证者:A、B、C、D 和 E。区块时间为五秒。假设首先选择了 A,它广播了一个区块,但由于某种原因该区块未能到达 D 和 E;因此他们会认为 A 没有广播区块。现在假设选择算法选择了 B 来生成下一个区块;那么 B 将在 A 的区块之上生成下一个区块,并广播给所有节点。D 和 E 将拒绝它,因为前一个区块的哈希值将不匹配。由此,D 和 E 将形成一个不同的链,而 A、B 和 C 将形成另一个不同的链。A、B 和 C 将拒绝来自 D 和 E 的区块,而 D 和 E 将拒绝来自 A、B 和 C 的区块。节点之间将这个问题解决为 A、B 和 C 所持有的区块链比 D 和 E 所持有的区块链更准确;因此 D 和 E 将用 A、B 和 C 所持有的区块链替换他们的版本。这两个版本的区块链将有不同的准确性得分,而第一个区块链的得分将比第二个区块链的得分更高。当 B 广播它的区块时,它还将提供其区块链的得分,由于其得分更高,D 和 E 将用 B 的区块链替换了他们的区块链。这就是冲突如何解决的。区块链的链分数是使用 (U128_max * BLOCK_NUMBER_OF_LATEST_BLOCK - (UNIX_TIMESTAMP_OF_LATEST_BLOCK / BLOCK_TIME)) 计算的。首先按长度对链进行评分(区块越多,得分越高)。对于长度相等的链,选择最后一个区块更旧的链。

你可以在 github.com/paritytech/parity/wiki/Aura 深入了解 Aura。

运行 Parity

Parity 需要 Rust 版本 1.16.0 来构建。建议通过 rustup 安装 Rust。

安装 rust

如果你还没有安装 rustup,你可以这样安装。

Linux

在基于 Linux 的操作系统上,运行此命令:

curl https://sh.rustup.rs -sSf | sh

Parity 还需要安装 gccg++libssl-dev/openssllibudev-devpkg-config 软件包。

OS X

在 OS X 上,运行此命令:

curl https://sh.rustup.rs -sSf | sh

Parity 还需要 clang。Clang 随 Xcode 命令行工具提供,也可以使用 Homebrew 安装。

Windows

确保你已安装了带有 C++ 支持的 Visual Studio 2015。接下来,从 static.rust-lang.org/rustup/dist/x86_64-pc-windows-msvc/rustup-init.exe 下载并运行 rustup 安装程序,启动 "VS2015 x64 Native Tools Command Prompt",并使用以下命令安装和设置 msvc 工具链:

rustup default stable-x86_64-pc-windows-msvc

下载、安装和运行 Parity

现在,一旦您在操作系统上安装了 rust,您就可以运行这个简单的一行命令来安装 parity:

cargo install --git https://github.com/paritytech/parity.git parity

要检查 Parity 是否安装,请运行此命令:

parity --help

如果 Parity 安装成功,那么您将看到子命令和选项列表。

创建私有网络

现在是时候建立我们的财团区块链了。我们将创建两个用 Aura 连接的验证节点。我们将把它们都设置在同一台计算机上。

创建帐户

首先,打开两个 shell 窗口。第一个是给第一个验证者,第二个是给第二个验证者。第一个节点将包含两个帐户,第二个节点将包含一个帐户。第一个节点的第二个帐户将被分配一些初始以太,以便网络将拥有一些以太。

在第一个 shell 中,运行此命令两次:

parity account new -d ./validator0 

两次都会要求您输入密码。现在只需为两个帐户输入相同的密码。

在第二个 shell 中,只运行此命令一次:

parity account new  -d ./validator1 

就像以前一样,输入密码。

创建规范文件

每个网络节点共享一个通用规范文件。该文件告诉节点有关创世块,验证者是谁,等等的信息。我们将创建一个智能合约,其中包含验证者列表。有两种类型的验证者合同:非报告合同和报告合同。我们只需要提供一个。

区别在于,非报告合同仅返回验证者列表,而报告合同可以对良性(良性不端行为可能只是从指定验证者那里收不到一个块)和恶意不端行为(恶意不端行为将释放两个不同的块以同一步骤为基础)采取行动。

非报告合同应至少具有此接口:

{"constant":true,"inputs":[],"name":"getValidators","outputs":[{"name":"","type":"address[]"}],"payable":false,"type":"function"}

getValidators函数将在每个块中调用,以确定当前列表。然后,切换规则由实现该方法的合同确定。

报告合同应至少具有此接口:

[ 
    {"constant":true,"inputs":[],"name":"getValidators","outputs":[{"name":"","type":"address[]"}],"payable":false,"type":"function"}, 
    {"constant":false,"inputs":[{"name":"validator","type":"address"}],"name":"reportMalicious","outputs":[],"payable":false,"type":"function"}, 
    {"constant":false,"inputs":[{"name":"validator","type":"address"}],"name":"reportBenign","outputs":[],"payable":false,"type":"function"} 
]

当有良性或恶意行为时,共识引擎分别调用reportBenignreportMalicious函数。

让我们创建一个报告合同。以下是一个基本示例:

contract ReportingContract { 
   address[] public validators = [0x831647ec69be4ca44ea4bd1b9909debfbaaef55c, 0x12a6bda0d5f58538167b2efce5519e316863f9fd]; 
   mapping(address => uint) indices; 
   address public disliked; 

   function ReportingContract() { 
       for (uint i = 0; i < validators.length; i++) { 
           indices[validators[i]] = i; 
       } 
   } 

   // Called on every block to update node validator list. 
    function getValidators() constant returns (address[]) { 
      return validators; 
   } 

   // Expand the list of validators. 
   function addValidator(address validator) { 
      validators.push(validator); 
   } 

   // Remove a validator from the list. 
   function reportMalicious(address validator) { 
      validators[indices[validator]] = validators[validators.length-1]; 
      delete indices[validator]; 
      delete validators[validators.length-1]; 
      validators.length--; 
   } 

   function reportBenign(address validator) { 
       disliked = validator; 
   } 
}

这段代码是不言而喻的。确保在验证人员数组中用第一个验证节点的地址替换地址,因为我们将使用这些地址进行验证。现在使用您感觉舒服的方式编译上述合同。

现在让我们创建规范文件。创建一个名为spec.json的文件,并将以下代码放入其中:

{ 
    "name": "ethereum", 
    "engine": { 
        "authorityRound": { 
            "params": { 
               "gasLimitBoundDivisor": "0x400", 
               "stepDuration": "5", 
               "validators" : { 
               "contract": "0x0000000000000000000000000000000000000005" 
                } 
            } 
        } 
    }, 
    "params": { 
        "maximumExtraDataSize": "0x20", 
        "minGasLimit": "0x1388", 
        "networkID" : "0x2323" 
    }, 
    "genesis": { 
      "seal": { 
       "authorityRound": { 
         "step": "0x0", 
          "signature": "0x00000000000000000000000000000000000000000
             000000000000000000000000000000000000000000000000000000
                00000000000000000000000000000000000" 
            } 
        }, 
        "difficulty": "0x20000", 
        "gasLimit": "0x5B8D80" 
    }, 
    "accounts": { 
        "0x0000000000000000000000000000000000000001": { "balance": "1", "builtin": { "name": "ecrecover", "pricing": { "linear": { "base": 3000, "word": 0 } } } }, 
        "0x0000000000000000000000000000000000000002": { "balance": "1", "builtin": { "name": "sha256", "pricing": { "linear": { "base": 60, "word": 12 } } } }, 
        "0x0000000000000000000000000000000000000003": { "balance": "1", "builtin": { "name": "ripemd160", "pricing": { "linear": { "base": 600, "word": 120 } } } }, 
        "0x0000000000000000000000000000000000000004": { "balance": "1", "builtin": { "name": "identity", "pricing": { "linear": { "base": 15, "word": 3 } } } }, 
        "0x0000000000000000000000000000000000000005": { "balance": "1", "constructor" : "0x606060405260406040519081016040528073831647" }, 
        "0x004ec07d2329997267Ec62b4166639513386F32E": { "balance": "10000000000000000000000" } 
    } 
}

以下是上述文件的工作方式:

  • engine 属性用于设置共识协议和协议特定的参数。在这里,引擎是 authorityRound,即 aura。gasLimitBoundDivisor 决定了燃料限制的调整,具有常见的 ethereum 值。在 validators 属性中,我们有一个 contract 属性,即报告合同的地址。stepDuration 是以秒为单位的区块时间。

  • params 属性中,只有网络 ID 有关紧要关头;其他参数对于所有链都是标准的。

  • genesis 具有一些标准值用于 authorityRound 共识。

  • accounts 用于列出网络中存在的初始帐户和合同。前四个是标准的以太坊内置合同;这些应包括以使用 Solidity 合同编写语言。第五个是报告合同。确保您在 constructor 参数中用您的字节码替换字节码。最后一个帐户是验证器 1 shell 中生成的第二个帐户。它用于向网络提供以太币。将此地址替换为您自己的地址。

在我们进一步进行之前,请创建另一个名为 node.pwds 的文件。在该文件中,放置您创建的帐户的密码。验证者将使用此文件解锁帐户以签署区块。

启动节点

现在我们已经准备好启动我们的验证节点了。在第一个 shell 中,运行以下命令来启动第一个验证节点:

parity  --chain spec.json -d ./validator0 --force-sealing --engine-signer "0x831647ec69be4ca44ea4bd1b9909debfbaaef55c" --port 30300 --jsonrpc-port 8540 --ui-port 8180 --dapps-port 8080 --ws-port 8546 --jsonrpc-apis web3,eth,net,personal,parity,parity_set,traces,rpc,parity_accounts --password "node.pwds"

以下是前述命令的工作方式:

  • --chain 用于指定规范文件的路径。

  • -d 用于指定数据目录。

  • --force-sealing 确保即使没有交易也会产生区块。

  • --engine-signer 用于指定节点将使用的地址来签署区块,即验证者的地址。如果可能存在恶意验证者,则建议使用 --force-sealing;这将确保正确的链是最长的。确保您将地址更改为您生成的地址,即此 shell 上生成的第一个地址。

  • --password 用于指定密码文件。

在第二个 shell 中,运行以下命令来启动第二个验证节点:

parity  --chain spec.json -d ./validator1 --force-sealing --engine-signer "0x12a6bda0d5f58538167b2efce5519e316863f9fd" --port 30301 --jsonrpc-port 8541 --ui-port 8181 --dapps-port 8081 --ws-port 8547 --jsonrpc-apis web3,eth,net,personal,parity,parity_set,traces,rpc,parity_accounts --password "/Users/narayanprusty/Desktop/node.pwds" 

在这里,请确保将地址更改为您生成的地址,即在此 shell 上生成的地址。

连接节点

最后,我们需要连接两个节点。打开一个新的 shell 窗口并运行以下命令以查找连接到第二个节点的 URL:

curl --data '{"jsonrpc":"2.0","method":"parity_enode","params":[],"id":0}' -H "Content-Type: application/json" -X POST localhost:8541

您将获得这种类型的输出:

{"jsonrpc":"2.0","result":"enode://7bac3c8cf914903904a408ecd71635966331990c5c9f7c7a291b531d5912ac3b52e8b174994b93cab1bf14118c2f24a16f75c49e83b93e0864eb099996ec1af9@[::0.0.1.0]:30301","id":0}

现在运行以下命令,将 enode URL 中的编码 URL 和 IP 地址替换为 127.0.0.1:

curl --data '{"jsonrpc":"2.0","method":"parity_addReservedPeer","params":["enode://7ba..."],"id":0}' -H "Content-Type: application/json" -X POST localhost:8540

您应该获得以下输出:

{"jsonrpc":"2.0","result":true,"id":0}

节点应在控制台中指示 0/1/25 个对等体,这意味着它们彼此连接。这是一个参考图像:

许可和隐私

我们看到 parity 如何解决速度和安全性问题。目前,parity 没有提供任何与权限和隐私相关的特定内容。让我们看看如何在 parity 中实现这一点:

  1. 权限控制:Parity 网络可以通过配置每个节点服务器以仅允许来自特定 IP 地址的连接来实现权限控制。即使 IP 地址没有被阻止,要连接到网络中的一个节点,新节点也需要一个之前我们看到的 enode 地址,这是无法猜测的。因此,默认情况下,存在基本的保护。但是没有强制执行此措施。网络中的每个节点都必须在其端口注意此事。通过智能合约可以对谁可以创建区块和谁不能进行类似的权限控制。最后,节点可以发送什么样的交易目前无法配置。

  2. 身份隐私:有一种技术可以通过仍然启用所有权检查来实现身份隐私。在设置所有权时,所有者需要指定一个非确定性的非对称加密的公钥。每当它想要通过所有权检查时,它将提供常规文本的加密形式,合约将解密该文本并查看帐户是否为所有者。合约应确保不会检查相同的加密数据两次。

  3. 数据隐私:如果你只是使用区块链来存储数据,你可以使用对称加密来加密数据并与希望查看数据的人分享密钥。但是无法对加密数据进行操作。如果需要对输入数据进行操作并仍然保护隐私,那么各方必须完全设置一个不同的区块链网络。

摘要

在本章中,我们学习了如何使用奇偶校验和光环运行以及一些实现奇偶校验和隐私的技术。现在,你至少可以自信地为使用区块链构建联合体构建一个概念验证。现在,你可以继续探索其他解决方案,例如 Hyperledger 1.0 和 Quorum 用于构建联合体区块链。目前,以太坊正式致力于使其更适合联合体;因此,请密切关注各种区块链信息来源,了解市场上的任何新动态。

第十八章:当前格局和未来展望

区块链技术正在改变并将继续改变我们日常业务的进行方式。它挑战了现有的商业模式,并有望在成本节约、效率和透明度方面带来巨大的好处。本章将探讨这项技术的最新发展、新兴趋势、问题和未来预测。

我们通过提出与区块链技术相关的一些开放研究问题和改进来结束本书。

新兴趋势

区块链技术正在快速变化和密集开发,因为学术界和商业界对它的浓厚兴趣。随着技术的日渐成熟,最近开始出现一些趋势。例如,私有区块链最近因其在金融领域的特定用例而引起了相当多的关注。此外,企业区块链是另一个新趋势,旨在开发满足企业级效率、安全性和集成要求的区块链解决方案。这里列举了一些趋势并进行了讨论。

应用特定区块链 (ASBCs)

目前,注意到了对 ASBCs 的倾向,即专门为一个应用程序开发区块链或分布式账本,并专注于特定行业,例如 Everledger (www.everledger.io),它是一种被开发用于为钻石和其他高价值物品提供不可变的追踪历史和审计追踪的区块链。这种方法挫败了任何欺诈企图,因为与物品的所有权、真实性和价值相关的一切都在区块链上得到了验证和记录。这一结果对保险和执法机构非常宝贵。

企业级区块链

由于隐私和可扩展性问题,原始形式的区块链尚未准备好在企业级别使用,最近出现了一种新趋势,即开发企业级区块链,各种公司已开始提供可部署和集成到企业级别的企业级区块链解决方案。这种类型的解决方案已经解决了测试、文档、集成和安全等要求,并可以在企业级别以最小或不需任何更改的方式实施。

这一概念与公共区块链相对立,后者是无监管的,不符合特定的企业级安全要求。这也意味着企业级区块链通常应该在私有配置中实施;然而,公共企业级区块链实施也是可能的。近年来,许多科技初创公司开始提供企业级区块链解决方案,如 Bloq、Tymlez、Chain、Colu、ChainThat、ChromaWay 等。这一趋势正在持续增长,未来几年将会看到更多类似的技术倡议。

私有区块链

随着对隐私和保密性的需求,主要关注点是开发私有分布式分类账,可在一组受信任的参与者中使用。由于公共区块链由于其开放和相对较不安全的特性,不适用于金融、医药和法律等行业,私有区块链有望解决这一局限,并使最终用户更接近于实现区块链的益处,同时满足所有安全和隐私要求。

公共区块链较不安全,因为通常它们不提供隐私和保密服务。私有区块链允许参与者或参与者的子集完全控制系统,因此在需要隐私和控制的金融等行业中使用是可取的。

以太坊可在私有和公有模式下使用,而有一些项目专门开发为私有区块链,例如 Hyperledger 和 Corda。我们在第十三章 Hyperledger中讨论了这两个项目。

初创公司

近年来,出现了许多科技初创公司,它们致力于区块链项目,并提供特定于这项技术的解决方案。提供区块链咨询和解决方案的初创公司数量显著增加。

您可以访问链接angel.co/blockchains,该链接目前显示了 1927 家区块链初创公司的列表。

强烈的研究兴趣

区块链技术已经引起学术界和商业界的强烈研究兴趣。近年来,这种兴趣已经急剧增加,现在世界各地的主要机构和研究人员都在探索这项技术。这种兴趣的增长主要是因为区块链技术可以帮助企业提高效率、降低成本,并使事务透明化。学术兴趣主要集中在解决密码学、共识机制、性能和解决区块链中其他限制的困难问题上。

由于区块链技术属于更广泛的分布式系统范畴,许多分布式计算研究人员将他们的研究重点转向了区块链技术。例如,伦敦大学学院(UCL)设有专门的部门,名为 UCL 区块链技术研究中心,致力于区块链技术的研究。

另一个例子是苏黎世联合计算组(disco.ethz.ch)已发表了关于区块链技术的重要研究成果。最近,一本名为Ledger Journal的杂志刊登了其研究论文的第一期。

该文件可在www.ledgerjournal.org/ojs/index.php/ledger上找到。

如今,在各种学术和商业机构中,都成立了致力于区块链研究和开发的团队和部门。

尽管这里提到的倡议远非详尽无遗,但这仍然是对研究人员极大兴趣的一个明确指示,并且预计在 2018 年及以后会看到更多的研究和开发。另一个名为加密货币与合同倡议IC3)的组织,也在研究智能合约和区块链技术。IC3 旨在解决区块链和智能合约的性能、保密性和安全问题,并开展了多个项目来解决这些问题。

有关 IC3 所进行项目的更多信息可在www.initc3.org/上找到。

标准化

目前,区块链技术还不够成熟,无法轻松地与现有系统集成。甚至在当前技术水平下,两个区块链网络也无法轻松地相互通信。标准化将有助于改进区块链技术的互操作性适应性集成性。最近已经做出一些尝试来解决这个问题,其中最显著的是成立了 ISO/TC 307,这是一个技术委员会,旨在标准化区块链和分布式分类账技术。

委员会的目标在于增强用户、应用程序和系统之间的互操作性和数据交换。另一方面,最近成立的联盟和开源协作努力,如 R3 和 Hyperledger,通过与其他参与者分享想法、工具和代码,有助于推动该技术的标准化。R3 与 80 多家拥有类似目标的银行的联盟合作,这在某种程度上实现了标准化。另一方面,Hyperledger 有一个参考架构,可以用来构建区块链系统,并得到 Linux 基金会和行业内许多其他参与者的支持。

另一个例子是开链标准,这是为金融网络开发的协议。已经有了链 OS1 标准,这是与世界各地主要金融机构合作建立的。该标准可以加快交易结算速度,并直接进行点对点的交易路由。它旨在解决区块链技术中的监管、安全和隐私需求。OS1 还提供了智能合约开发框架,并使参与者轻松满足 AML 和 KYC 要求。

智能合约标准化工作也已经开始,李等人撰写的一篇开创性论文正式定义了智能合约模板,并提出了未来智能合约相关研究和发展的愿景和必要性。

本文可在 arxiv.org/abs/1608.00771v2 查阅。

此外,关于这个话题的一些讨论已经在 第十六章,可扩展性和其他挑战 以及 第四章,智能合约 中进行。

所有提到的努力都清楚地表明,行业标准很快将出现,进一步使区块链技术的采用更容易更快速。标准还将导致区块链行业呈指数增长,因为标准的可用性将消除诸如互操作性等障碍。

增强

过去几年中,已经提出了各种增强和建议,以进一步发展现有的区块链。这些建议大多是为了应对安全漏洞,并解决区块链技术的固有局限性。区块链技术存在一些限制,如可扩展性、隐私性和互操作性,必须在其成为像任何其他技术一样的主流技术之前加以解决。

近年来,针对区块链技术的可扩展性问题进行了大量的努力,这些努力已经在 第十六章,可扩展性和其他挑战 中进行了讨论。此外,开发人员定期提出了针对这些系统的各种关注的 BIPs(比特币改进提案)和 EIPs(以太坊改进提案)等与区块链相关的改进提案。

这两种链的一些最近和显著的改进提案将在本章后面讨论。此外,像状态通道这样的最新进展是区块链技术正在迅速改进,并很快将发展成为一种成熟且更实用的技术的例子。

实际应用

近年来,特别是在 2017 年,已经使用区块链技术开发了许多概念验证。一些应用特定的实现 emerged,比如 Everledger 用于钻石追踪和 filament 用于物联网,但在各个领域仍然存在不足。

现在看来这并不遥远,因为已经开发并证明了许多概念的可行性;下一步是在现实场景中实施这些概念。例如,最近,七家银行同意建立一个名为数字贸易链DTC)的项目,将简化贸易金融流程。

有关 DTC 的信息可在www.bankingtech.com/2017/10/ibm-and-eight-banks-unleash-we-trade-platform-for-blockchain-powered-commerce/上获得。

也已经开始提供具体的、真实的、端到端的实现,甚至在金融行业,例如澳大利亚证券交易所ASX)用区块链替换其传统的交易后系统。

有关该项目的信息可在www.asx.com.au/services/chess-replacement.htm上获得。

联盟

近年来,已经启动了各种各样的联盟和共享开源努力。预计这一趋势将在未来几年继续增长,会有越来越多的联盟、委员会和开源努力很快出现。一个典型的例子是 R3,该组织已与全球最大的金融机构联合开发了 Corda。

技术挑战的答案

由于社区对区块链技术的强烈研究和兴趣,对各种挑战的答案已经开始出现。例如,状态通道的概念已经发展起来,作为对区块链上可伸缩性和隐私问题的回应。使用状态通道,比特币闪电网络和以太坊的雷电网络已经几乎可以实现。

这是一个正在进行中的工作,更新在github.com/raiden-network/raiden/milestones上可用。

此外,出现了各种区块链解决方案,如 Kadena,直接解决了区块链中的机密性问题。其他概念,如 Zcash、CoinJoin 和保密交易,也已开发并在《第十章》,替代币 中讨论过。这一趋势也将在未来几年继续增长,即使几乎所有基本的区块链技术挑战都得到了解决,对区块链技术的进一步增强和优化也永远不会停止。

融合

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

区块链技术教育

虽然区块链技术在全球几乎每个行业中的技术人员、开发者和科学家中引起了极大的兴趣,但缺乏正规的学习资源和教育材料。由于这是一项新技术,许多知名机构,如普林斯顿大学,现在正在开设各种课程,向想要了解这项技术的任何人介绍这项技术。

例如,普林斯顿大学已经开设了一个在线交付的加密货币和数字货币课程(online.princeton.edu/course/bitcoin-and-cryptocurrency-technologies)。许多私人组织也提供类似的在线和课堂培训课程。由于区块链技术的受欢迎和接受度,将很快看到更多这样的努力。

就业

就业市场出现了一种新的趋势,招聘人员现在正在寻找能够为区块链编程的区块链专家和开发人员。这对金融行业尤为重要,最近许多初创企业和大型组织开始聘请区块链专家。随着技术的被接受和成熟度的提高,这种趋势预计将会增长。对缺乏区块链开发人员的担忧也在日益增加,这无疑将随着技术的进步和越来越多的开发人员通过自学获得经验或从培训提供者获得正规培训而得到解决。

密码经济学

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

vitalik.ca/files/intro_cryptoeconomics.pdf 上有一份出色的演示。

密码学研究

尽管在比特币发明之前,加密学是一个备受关注和研究的领域多年,但区块链技术已经再次引起了人们对这一领域的兴趣。随着区块链及相关技术的出现,加密学的兴趣也显著增加。特别是在金融加密领域,新的研究正在定期进行和发布。

正在研究诸如零知识证明、完全同态加密和功能性加密等技术,以在区块链中使用。作为 Zcash 的一种形式,已经在实际水平上实现了零知识证明。可以看出,区块链和加密货币已经促进了加密学和特别是金融加密学的进步。

新的编程语言

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

硬件研究与开发

当人们意识到 2010 年现有方法对挖掘比特币不够高效时,矿工开始转向优化挖矿硬件。这些最初的努力包括使用 GPU,然后在 GPU 达到极限后使用现场可编程门阵列FPGAs)。在那之后很快,特定应用集成电路ASICs)出现了,显著增加了挖矿能力。预计这一趋势将进一步增长,因为现在对进一步优化 ASICs 进行了更多的研究,包括并行化和减小芯片尺寸。

此外,由于新的加密货币现在相当频繁地出现,其中许多使用的是可以从 GPU 处理能力中受益的 PoW 算法,因此预计 GPU 编程计划也将增长。例如,最近 Zcash 已经激发了对使用 NVIDIA CUDA 和 OpenCL 进行 GPU 挖掘设备和相关编程的兴趣。目标是并行使用多个 GPU 以优化挖矿操作。此外,在使用受信任的计算硬件(例如英特尔的软件保护扩展SGX))来解决区块链上的安全问题的领域也进行了一些研究。此外,英特尔的 SGX 已被用于一种称为已过时间证明PoET)的新颖共识算法,该算法已在第十三章 Hyperledger 中讨论过。另一个项目是 21 个比特币计算机,它被开发出来,作为开发人员学习比特币技术并轻松开发应用程序的平台。

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

形式化方法和安全性的研究

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

区块链的替代方案

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

互操作性努力

近期对区块链互操作性的限制的认识导致了跨多个区块链工作的系统的开发。一个最近的例子是 Qtum,它是一个与以太坊和比特币区块链兼容的区块链。它利用比特币的未使用交易输出(UTXO)机制进行价值转移,并使用 EVM 进行智能合约。这意味着以太坊项目可以被移植到 Qtum 上而不需要进行任何更改。

区块链即服务

随着云平台成熟度的提高,许多公司已经开始提供区块链即服务BaaS)。最突出的例子是微软的 Azure,其中提供以太坊区块链作为服务,以及 IBM 的 Bluemix 平台,提供 IBM BaaS。这种趋势预计在未来几年会继续增长,会有更多公司提供 BaaS。电子*即服务eGaaS)是另一个例子,实际上就是 BaaS,但提供针对治理功能的特定应用区块链(egaas.org)。该项目旨在组织和控制任何活动,而无需文件流转和官僚开销。

减少电力消耗的努力

从比特币的区块链可以明显看出,PoW 机制非常低效。当然,这种计算保护了比特币网络,但这种计算没有其他好处,并且浪费了大量电能。为了减少这种浪费,现在更加关注绿色选项,如不需要像比特币的 PoW 算法那样庞大资源的 PoS 算法。这种趋势预计会增长,尤其是随着 PoS 计划应用于以太坊。

其他挑战

除了第十六章中讨论的安全性和隐私性、可扩展性和其他挑战之外,在区块链被主流采用之前,还有其他几个障碍需要解决。这些包括监管、*控制、技术不成熟、与现有系统的整合以及实施成本。

监管

监管被认为是需要解决的最重要挑战之一。核心问题在于,区块链,尤其是加密货币,尚未被任何*认可为合法货币。尽管在某些情况下,它已被美国和德国等国家分类为货币,但距离被普遍接受的正规货币仍有很长一段路要走。此外,当前的区块链状态尚未被承认为金融机构可用的平台。尚无金融监管机构接受它作为可被授权使用的平台。

然而,世界各地的监管机构已经采取了各种举措进行研究并提出法规。尽管一些*曾试图对比特币征税,但目前比特币处于完全无监管状态。在英国,根据欧盟增值税指令,比特币交易免征增值税VAT),但这在英国脱欧后可能会发生变化。然而,在某些情况下,资本利得税CGT)仍然适用。

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

一个普遍的担忧是区块链技术尚未准备好用于生产部署。尽管比特币区块链已经发展成为一个可靠的区块链平台,并且被用于生产,但它并不适用于每一种场景。尤其是在金融和健康等敏感环境中,这一点尤为真实。然而,这种情况正在迅速改变,正如我们在本章中已经看到的各种新区块链项目的例子,这些项目已经在现实生活中得到了实施,例如 ASX 区块链后期解决方案。预计这种趋势将随着本章前面讨论的大量努力改善技术并解决诸如可扩展性和隐私等技术限制而增长。

安全性也是另一个普遍关注的问题,许多研究人员已经强调了这一点,尤其适用于金融和健康领域。欧洲网络与信息安全局(ENISA)的一份报告强调了应该解决的分布式分类账具体问题。

报告可在www.enisa.europa.eu/news/enisa-news/enisa-report-on-blockchain-technology-and-security获得。

报告中强调的一些问题包括智能合约管理、密钥管理、反洗钱(AML)和反欺诈工具。此外,报告还强调了对监管、审计、控制和治理的需求。

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

采用的障碍或多或少与监管、安全性和互操作性相关。与现有系统的集成可以通过多种方式进行。

黑暗面

具有审查抗性和去中心化等关键属性的区块链技术可以帮助提高许多领域的透明度和效率,但这种技术的相对无监管性意味着它也可能被犯罪分子用于非法活动。例如,假设某些非法内容在互联网上发布,可以立即通过联系相关当局和网站服务提供商来关闭,但在区块链中却不可能做到这一点。

一旦某事存在于区块链上,几乎不可能撤销。这意味着一旦不可接受的内容发布到区块链上,就无法移除。如果区块链用于分发不道德内容,那就没有人能关闭它。这带来了一个严峻的挑战,看来在这种情况下,一些监管和控制是有益的,但区块链怎么能被规范呢?这是另一个关键问题。首先制定监管法律,再看区块链技术是否适应可能不明智,因为这可能会破坏这项技术的创新和进步。让区块链技术先发展起来会更明智,就像互联网一样,当它达到临界质量时,治理机构可以呼吁对区块链技术的实施和使用进行一些规范。

有许多例子,暗网与比特币一起用于进行非法活动。例如,丝绸之路用于在互联网上出售非法药物,使用比特币进行支付,而暗网使用洋葱 URL,只能通过 Tor 可见。尽管丝绸之路在执法机构数月的努力后被关闭,但新的类似网站开始出现。现在,其他类似的选择也可以提供服务;因此,通常这类问题仍然是一个大问题。

想象一下,一个非法网站存在于 IPFS 和区块链上;没有简单的方法关闭它。很明显,缺乏控制和监管会促进犯罪活动,类似丝绸之路的问题会不断出现。像 Zcash 这样的完全匿名交易能力的进一步发展可能为犯罪分子提供另一层保护,但与此同时在各种合法场景中可能非常有用。这取决于谁在使用这项技术;匿名性在许多场景中都可能有好处,例如在卫生行业,患者记录应该保持私密和匿名,但如果这也可被犯罪分子用来隐藏他们的活动,那就可能不太合适了。

一种解决方案可能是引入智能机器人、人工智能甚至内嵌有监管逻辑的合同。它们很可能是由监管机构和执法机构编程的,作为一种提供治理和控制的手段留存在区块链上。例如,可以设计区块链,使得每个智能合同都必须经过一个控制合同,该合同会审查代码逻辑并提供一种监管机制来控制智能合同的行为。

可能也可以让监管机构检查每个智能合约的代码,一旦智能合约代码获得监管机构颁发的某一级别的真实性证明,便可部署到区块链网络上。这种二进制签名的概念类似于已经建立的代码签名概念,其中可执行文件被数字签名以确认代码是真实的,而不是恶意的。这个想法更适用于半私有或受监管的区块链情境,在这种情况下,监管机构需要一定程度的控制,例如在金融领域。这意味着需要在可信第三方(监管机构)中放置一定程度的信任,这可能不太可取,因为这会偏离完全分散化的概念。但为了解决这个问题,区块链本身可以用来提供分散化、透明化和安全的证书颁发和数字签名机制。

区块链研究

尽管近年来区块链技术取得了重大创新,但这个领域仍有很大的研究空间。下面列出了一些选择的研究课题,并提供了一些关于现有挑战和最新技术状态的信息。以下子章节还提出了一些解决这些问题的想法。

智能合约

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

中心化问题

尤其是比特币挖矿集中化问题,人们越来越担心比特币如何再次去中心化。

密码学功能的限制

比特币区块链中使用的密码学非常安全且经得起时间的考验。在其他区块链中,也使用了类似的安全技术,