尝试运行Hyperledger Fabric(适用于v1.4/v1.3/v1.2.1版本)
技术部分的监修和撰写:@shinsa82
Hyperledger Fabric 是什么?
Hyperledger Fabric是一个开源的区块链基础架构,是Linux Foundation管理和运营的Hyperledger项目之一。在Hyperledger项目中,正在开发适用于各个行业的可用于商业用途的区块链基础架构。除了Hyperledger Fabric外,还有Hyperledger Iroha、Hyperledger Indy等多种区块链基础架构存在。
以下是一些可供参考的链接:
– https://www.hyperledger.org/projects/fabric (Hyperledger Fabric的官方网站)
– https://arxiv.org/abs/1801.10228v1 (关于Hyperledger Fabric的学术论文)
– https://hyperledger-fabric.readthedocs.io/en/release-1.3/whatsnew.html (Hyperledger Fabric 1.3版本的更新内容)
关于v1.2的新功能和变更点。
v1.2是在2018年7月发布的。主要的新功能有以下四个。
Private Data Collections
チャネルメンバーのサブセット間で特定のデータ/トランザクションを機密に保つ機能。
Service Discovery
クライアントアプリケーションを簡素化するため、オーダラー、ピア、チェーンコード、エンドースメントポリシーなどのネットワークサービスを動的に発見する機能。
Access Control
チャネルごとにピア機能と相互作用できるクライアントIDを構成する機能。
Pluggable endorsement and validation
チェーンコードごとにプラグイン可能なエンドースメントと検証ロジックを活用する機能。
特别是,私有数据集合是v1.2版本的一个重要功能。在此之前,如果要进行私有数据共享,需要在一个网络中拥有名为“通道”的功能。由于每个共享范围都需要拥有一个通道,所以在设置复杂的共享范围时,需要拥有多个通道。而通过私有数据集合,可以将私有数据与普通的区块分开管理。因此,在同一通道中,只有部分节点能够接收数据,使得共享范围的设置更加便捷。
参考链接:
– https://hyperledger-fabric.readthedocs.io/en/release-1.2/whatsnew.html
– https://www.altoros.com/blog/hyperledger-fabric-v1-2-whats-new-and-roadmap-for-2018/
此外,2018年10月还发布了修复错误版本v1.2.1。
截至2019年2月,最新版本是v1.4。
2018年10月,v1.3版本发布。除了Go和Node.js,还可以使用Java来实现Chaincode。此外,还添加了可以按照状态的键来指定背书策略的功能。请查阅官方文档以获取详细信息。
参考链接:
– https://hyperledger-fabric.readthedocs.io/en/release-1.3/whatsnew.html
另外,2019年1月还发布了v1.4.0版本。
搭建执行Fabric v1.4(v1.3/v1.2.1)样例所需的环境。
试用Fabric时,最方便的方法是运行样本程序。在本文中,我们将针对Fabric v1.4介绍设置Fabric Samples的步骤。
基本上是将官方文档中的《安装示例、二进制文件和Docker镜像》部分进行翻译并进行补充说明。
前提条件 tí
-
- MacもしくはLinux系マシン上で試すことを前提とする
Windowsの場合はWin10ならばDockerが使える。それ以外のWindows環境ではVagrant+Virtual BoxでLinux環境を作り、その中で試すこととなる
Docker、curl、git、bashなどの前提ソフトウェアは Prerequisites の内容にしたがってインストールされているものとする。 必ずしも各ソフトの最新バージョンで動くわけではないので注意すること。 例えばPythonはバージョン2でないと動かない。
请注意,如果安装的curl版本过旧,则无法识别-L选项并导致bootstrap.sh执行出错。
设置方法:只需下载并运行脚本即可。
从v1.0开始,Fabric的源代码中包含了一个名为bootstrap.sh的脚本,它会一次性下载所需的脚本、Docker镜像和二进制文件以执行示例。尽管还存在一些错误,但它相对稳定且可靠,因此建议使用。下面的命令是用于下载并执行该脚本。
~$ mkdir fabric-140
~$ cd fabric-140
~/fabric-140$ curl -sSL http://bit.ly/2ysbOFE | bash -s 1.4.0 1.4.0 0.4.14
注意:v1.4是最新版本时,只需运行“bash”命令即可。
请注意,作为bash参数指定的“-s”不是bootstrap.sh的选项,而是bash的选项,意为“从标准输入读取脚本”,请不要混淆。请注意,这个脚本的参数传递方式很巧妙,请注意。详情请见下文。
顺便说一下,如果你想建立1.3.0版本的环境,可以这样做:
~$ mkdir fabric-130
~$ cd fabric-130
~/fabric-130$ curl -sSL http://bit.ly/2ysbOFE | bash -s 1.3.0 1.3.0 0.4.13
如果是v1.2.1版本,就这样处理。
~$ mkdir fabric-121
~$ cd fabric-121
~/fabric-121$ curl -sSL http://bit.ly/2ysbOFE | bash -s 1.2.1 1.2.1 0.4.10
请阅读末尾的说明,以了解这个脚本的功能。
确认结果
如果目录结构如此,则可以。
~/fabric-140$ tree -F -L 2 .
.
└── fabric-samples/
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── Jenkinsfile
├── LICENSE
├── MAINTAINERS.md
├── README.md
├── balance-transfer/
├── basic-network/
├── bin/
├── chaincode/
├── chaincode-docker-devmode/
├── commercial-paper/
├── config/
├── fabcar/
├── first-network/
├── high-throughput/
├── interest_rate_swaps/
└── scripts/
如果Docker镜像中包含以下与Fabric相关的镜像,则执行以下命令即可。
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
hyperledger/fabric-javaenv 1.4.0 3d91b3bf7118 4 weeks ago 1.75GB
hyperledger/fabric-javaenv latest 3d91b3bf7118 4 weeks ago 1.75GB
hyperledger/fabric-tools 1.4.0 0a44f4261a55 5 weeks ago 1.56GB
hyperledger/fabric-tools latest 0a44f4261a55 5 weeks ago 1.56GB
hyperledger/fabric-ccenv 1.4.0 5b31d55f5f3a 5 weeks ago 1.43GB
hyperledger/fabric-ccenv latest 5b31d55f5f3a 5 weeks ago 1.43GB
hyperledger/fabric-orderer 1.4.0 54f372205580 5 weeks ago 150MB
hyperledger/fabric-orderer latest 54f372205580 5 weeks ago 150MB
hyperledger/fabric-peer 1.4.0 304fac59b501 5 weeks ago 157MB
hyperledger/fabric-peer latest 304fac59b501 5 weeks ago 157MB
hyperledger/fabric-ca 1.4.0 1a804ab74f58 5 weeks ago 244MB
hyperledger/fabric-ca latest 1a804ab74f58 5 weeks ago 244MB
hyperledger/fabric-zookeeper 0.4.14 d36da0db87a4 4 months ago 1.43GB
hyperledger/fabric-zookeeper latest d36da0db87a4 4 months ago 1.43GB
hyperledger/fabric-kafka 0.4.14 a3b095201c66 4 months ago 1.44GB
hyperledger/fabric-kafka latest a3b095201c66 4 months ago 1.44GB
hyperledger/fabric-couchdb 0.4.14 f14f97292b4c 4 months ago 1.5GB
hyperledger/fabric-couchdb latest f14f97292b4c 4 months ago 1.5GB
你可以通过这个来尝试Fabcar样例。请参考Fabcar样例学习Hyperledger Fabric Node.js SDK(支持v1.2.1版本)。
(文章完)
以下是bootstrap.sh的操作细节。
使用curl命令下载的短网址实际上指向的是https://github.com/hyperledger/fabric/blob/release-1.4/scripts/bootstrap.sh文件。它所做的事情可以总结为以下3个方面:
1. 克隆 Fabric-samples
可以使用git clone命令从GitHub上克隆Fabric的示例代码库fabric-samples(https://github.com/hyperledger/fabric-samples),这些代码是用于设置和演示Fabric的样本代码。
请注意:请注意在这里切换到fabric-samples以检查v1.4的示例。
下载特定平台的二进制文件
下载二进制文件
为了测试样本,必须下载二进制文件(通常称为特定平台的二进制文件),以创建加密密钥和创世区块。
-
- これらはFabricのソースからビルドできるが、そうしない人向けにビルド済バージョンを配布している
- これはホストのアーキテクチャによって異なるバイナリをダウンロードするので注意
在v1.4版本中,我已经下载了以下二进制文件,并将其存放在fabric-samples/bin目录中。要尝试示例,请将路径设置到这里。
~/fabric-140$ ls -1 fabric-samples/bin/
configtxgen
configtxlator
cryptogen
discover
fabric-ca-client
get-docker-images.sh
idemixgen
orderer
peer
[2] 下载配置文件
-
- Fabricネットワークの設定ファイル configtx.yaml
- ノード設定ファイル (core.yaml, orderer.yaml)
这些被存储在fabric-samples/config中。这些在运行fabric-samples示例时被使用。
如果在默认情况下(使用fabric-samples进行克隆),下载将在fabric-samples目录中进行,二进制文件将会被提取到/fabric-samples/bin目录,配置文件将会被提取到/fabric-samples/config目录。如果跳过fabric-samples的检出,则它们将在/bin和/config目录中,但需要注意这与预期位置不同。
3. 获取Docker镜像 (pull)
-
- Fabric
-
- Fabric CA
- 3rd party
正在拉取三种不同的镜像。前两种镜像上附有“Fabric版本”的标签(例如1.4.0),而第三方镜像上附有独立的版本标签(例如0.4.14)。在脚本中,通过使用docker tag命令给拉取的镜像添加了latest标签,因此使用多个版本镜像进行开发的人需要注意。
选项
bootstrap.sh 可以指定选项。但是请注意,如果不熟悉bash选项的指定方法,可能会遇到问题。
-h: ヘルプを表示する。これを指定したい場合には curl … | bash -s — -h とすべし。
-s: fabric-samplesのclone (上記 1.) をスキップする。これを指定したい場合には curl … | bash -s 1.4.0 -s とか curl … | bash -s — -s とすべし。
-b: platform-specific binariesのダウンロード (上記 2.) をスキップする。これを指定したい場合には curl … | bash -s 1.4.0 -b とか curl … | bash -s — -b とすべし。
-d: Dockerイメージのpull (上記 3.) をスキップする。これを指定したい場合には curl … | bash -s 1.4.0 -d とか curl … | bash -s — -d とすべし。
-bash 命令的 -s 选项是为了从标准输入读取脚本而添加的。这不是脚本本身的选项,而是位于参数末尾的选项。另外,如果没有其他参数除了选项的话,无法确定哪些是 bash 的选项,哪些是脚本的选项,所以需要使用 — 告诉 bash。