28

在Fabric、 Quorum以及Corda之间实现跨链,超级账本的集成框架是这样的

 4 years ago
source link: https://news.huoxing24.com/20191125170837893724.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

7zmAf26.jpg!web

文 | 洒脱喜

当前区块链平台的数量正在迅速增长,这对于行业而言无疑是一件好事,但区块链之间信息孤岛的问题,一直是个未解难题。

在公链领域,比特币和以太坊是最大的两个公链,因此很多跨链协议主要解决的就是这两大区块链之间的通信问题。

而在联盟链领域,IBM的Fabric、摩根大通的Quorum以及R3的Corda是企业使用最多的区块链框架,那如何去实现这些联盟链之间的通信呢?

在去年的时候,埃森哲(Accenture)宣布,他们开发并测试了两个解决方案,其旨在使两个或多个主要的联盟链生态系统能够实现集成。从那时起,Hyperledger(超级账本)联盟开发了一个新的解决方案,专门为没有中央连接者节点的许可区块链创建,而这个新的区块链集成框架,被称为Hyperledger Lab。

而这个区块链集成框架的设计原则是这样的:

  1. 在不同联盟链账本之间实现直接传输;
  2. 可插拔模型和组件;
  3. 灵活的需求和数据协议;
  4. 利用预先存在的角色;

201911250728451693.png 这个区块链集成框架为每个可互操作的区块链(这里指联盟链)引入了一个“互操作性验证者”覆盖网络。

互操作性验证者将通过验证本地节点的账本版本(步骤1到3)来共同处理来自本地节点的导出请求。每个请求都由验证者签名的(可配置的)最低quorum数应答(步骤4和5)。即使某些验证者关闭或不参与,网络也可以继续工作,前提是可以保证最低quorum数。任何安全的链外通信系统,都可以传递由分布式账本的传输验证者认证的消息(步骤6)。而来自外部分布式账本的证明,可以由接收者在本地或使用链上逻辑(通常是智能合约)根据该外部分布式账本的传输验证者的公钥进行验证(步骤7和8)。

而下面这个教程,演示了如何在Fabric、Quorum以及Corda网络之间传输简单资产。

一、部署先决条件

  1. Docker
  2. Docker-compose
  3. Node.js npm>=5.6,node >= 8.9
  4. Fabric1.4
  5. JDK 8

注意:Fabric SDK有更严格的引擎要求(npm<6.0和node<9.0)

脚本和以下命令只在Ubuntu 18.04上测试过

一、安装程序

由于该示例运行在Hyperledger Fabric和Quorum上,因此我们首先需要安装并运行这两种结构的本地网络。考虑到我们需要运行2个或更多的DLT网络,演示的首选设置是在Docker容器中,目前我们还没有支持手动安装。我们将部署2条对接的区块链(每条链4个节点加上联盟),我们建议在不同的机器上部署环境:例如,在一台机器上部署Fabric区块链和相关联盟,在另一台机器上部署Quorum区块链和相关联盟。

导航到示例文件夹: cd examples/simple-asset-transfer  安装 npm 依赖项: npm i

导航到示例Fabric API文件夹: cd example/simple-asset-transfer/fabric/api  安装 npm 依赖项: npm i

导航到示例Quorum API文件夹: cd example/simple-asset-transfer/quorum/api 安装 npm 依赖项: npm i

有关可用命令,请查看example package.json,它在简单资产转移(simple-asset-transfer)文件夹中: cat package.json

1、1 Fabric区块链

要运行Fabric区块链,你可使用以下脚本: npm run fabric

这将自动为Fabric节点拉取必要的镜像(image),并运行一个由同一通道( channel)内的2个组织划分的4个节点组成的环境,以及监听端口4000 的Fabric SDK。如果你已经有一个进程在监听端口4000,那么你可以在 Fabric api 配置文件 Fabric/api/config.json 中更改它。注意:一些bash脚本将直接引用在端口4000上运行的应用程序,如果你更改了Fabric SDK端口,完成后,你可能需要自己终止应用程序。

Fabric 网络和SDK将在后台启动,你可以使用 npm run fabric:log 显示Fabric节点输出,并使用 cat fabric/logs/start.log 显示SDK输出。

或者,你可以使用 Fabric/artifacts 中的配置来遵循 Fabric文档 ,并部署来自 `fabric/contracts` 的合约。

1、2 Fabric联盟

要启用验证者的覆盖网络,我们需要在本地构建docker 镜像 : npm run fed:build

然后,你就可以运行4个验证者的联盟: npm run fed:fabric 联盟验证者依赖于Fabric节点和连接器来执行区块链操作和验证,默认配置设置为在端口4000本地查找Fabric SDK的运行实例。如果要在不同端口或其他计算机上运行Fabric SDK,则相应地修改 federations/docker-compose-Fabric.yml ,为每个服务查找URL: http://172.20.0.1:4000 ,并修改字符串以指向正确的端点。

联盟将在后台启动,你可以使用 npm run fed:fabric:log 显示Fabric联盟验证者输出。

1、3 Quorum区块链

要运行Quorum区块链,你可以使用以下脚本: npm run quorum

这将使用Tessera和RAFT运行一个由7个节点组成的Quorum网络,Tessera可能需要几分钟才能完全启动,你必须等待它,然后才能启动以下命令。当Tessera准备好时,你可以列出你的docker容器 docker ps ,并等待它们全部变为“健康”(healthy)状态。

然后,你就可以构建 npm run quorum:api:build ,然后运行自定义Quorum API npm run quorum:api ,Quorum API将默认使用端口5050、5051、5052和5053,你可以在Quorum api docker-compose文件 quorum/api/docker-compose.yml 中更改它,为每个服务查找 APP_PORT: 505

Quorum网络和SDK将在后台启动,你可以分别使用 npm run quorum:lognpm run Quorum api:log 来显示Quorum节点和Quorum API输出。

1、4 Quorum联盟

与Fabric联盟相同,为了启用验证者的覆盖网络,我们需在本地构建docker镜像: npm run fed:build 。如果你计划在同一台计算机上部署两个联盟,则不必重新生成镜像。

然后,你就可以运行4个验证者组成的联盟: npm run fed:quorum Quorum联盟验证者依赖于Fabric 节点和连接器执行区块链操作和验证,默认配置设置为在端口5050上本地查找Fabric SDK的运行实例。如果要在不同端口或其他计算机上运行Fabric SDK,则相应地修改 federations/docker-compose-Fabric.yml ,为每个服务查找URL: http://172.20.0.1:5050 ,并修改字符串以指向正确的端点。

1、5  Corda区块链

首先你需要建立和部署一个Corda网络,为此,你需要运行以下脚本: npm run corda:build

加载必要的组件和组装Corda节点的过程,可能会消耗你几分钟的时间。在成功部署Corda节点和web服务器后,你就可以运行Corda网络了。

要运行Corda区块链,你可以使用以下脚本: npm run Corda

这将运行一个由5个节点和4个web服务器组成的Corda网络。部署过程大概需要几分钟的时间。

1、6 Corda联盟

如上所述,如果你已经建立了docker镜像,那么你就不需要重建它了。建立完后,运行下脚本: npm run fed:build

然后,你就可以运行一个由4个验证者组成的联盟: npm run fed:corda Corda联盟验证者依赖于连接器来触发Corda流和验证。

联盟将在后台启动,你可以使用 npm run fed:corda:log 来显示Corda联盟验证者输出。

二、场景

所有的场景都连接到了上面提到的三个区块链及其联盟。如果使用默认端口在本地运行所有内容,则可以前进并使用以下命令启动其中一个场景。否则,你将不得不修改位于场景(scenarios)文件夹/simple-asset-transfer(简单资产转让)文件夹中的配置文件,以匹配每个网络的正确url。

场景1 : share-pub-key(共享公钥): npm run scenario:share

从Corda、Quorum和Fabric区块链获取所有验证者的公钥,并在参与区块链之间共享它们。

askForPubKey
askForPubKey
askForPubKey
addForeignValidator
addForeignValidator
addForeignValidator

注:如果已经存储了公钥,则最后的步骤将失败,多次启动脚本将自动导致此问题。

场景2:  fabric到quorum: npm run scenario:FtQ

场景3 :quorum到fabric: npm run scenario:QtF

场景4:  corda到quorum: npm run scenario:CtQ

场景5:  corda到fabric: npm run scenario:CtF

场景6: fabric到corda: npm run scenario:FtC

场景7: quorum到corda: npm run scenario:QtC

而上面的应用场景,就需要以下这些步骤:

  1. 步骤1 调用 createAsset 在“导出链”上生成具有伪随机ID的标准资产;
  2. 步骤2 调用 lockAsset 以注销指定“导出链”上目标公钥(可选)的资产;
  3. 步骤2.5 (可选)调用 getAsset 以验证“导出链”上的资产状态;
  4. 步骤3 为资产的报废调用 askForSignature 并收集验证者的签名(应该有4个);
  5. 步骤4 调用 verifySignature 检查“导入链”上生成的证明;
  6. 步骤5 调用 copyAsset 在“导入链”上创建导出资产的副本;

三、测试

测试有两个版本:本地单元测试和测试调用正在运行的区块链环境。要运行本地单元测试,可以在simple-asset-transfer(简单资产转让)文件夹中使用 npm run test 。要运行扩展测试,则可以使用 npm run test:bc 。注意:与场景类似,test:bc同时连接到Fabric和Quorum区块链。如果使用默认端口在本地运行所有内容,则可以继续,否则,你将不得不修改位于tests(测试)文件夹中的配置文件,以匹配每个网络的正确url。 

四、未来的工作

  1. 集成Hyperledger Indy以管理不同区块链的互操作性验证者身份;
  2. 实现更复杂的互操作性用例(例如,原子互换或资产同步);
  3. 测试可扩展性和性能;
  4. 集成更多联盟链平台(例如Hyperledger Sawtooth、Digital Asset等);
  5. 在覆盖网络内实现保密通信,验证者网络应与本地账本的保密设置相匹配;
  6. 用BLS签名方案替换当前签名方案,以优化证明大小(Hyperledger Ursa在这方面是领先者);

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK