如何更快地安装 Hyperledger Fabric java 智能合约(我想避免超时)?

How to make faster Hyperledger Fabric java Smart Contract install (I want to avoid a timeout)?

我正在尝试在 Hyperledger Fabric 上部署 Java 智能合约,但在执行命令 peer lifecycle chaincode install cp.tar.gz.

时遇到超时问题

终端的错误是:

Error: chaincode install failed with status: 500 - error in simulation: failed to execute transaction baeacb6b68dac2872098105d20cb0398e5ce5b744afd37bf75ab65b0ffc7a754: error sending: timeout expired while executing transaction

监控网络,报错是这样的:

lucid_ganguly|Downloading https://services.gradle.org/distributions/gradle-5.6.2-bin.zip peer0.org1.example.com|2020-05-30 03:15:08.175 UTC [endorser] callChaincode -> INFO 04d finished chaincode: _lifecycle duration: 300000ms channel= txID=baeacb6b peer0.org1.example.com|2020-05-30 03:15:08.176 UTC [endorser] SimulateProposal -> ERRO 04e failed to invoke chaincode _lifecycle, error: timeout expired while executing transaction

在我看来,下载 gradle 文件花费了太多时间。我的网速不是那么快,但昨天它好几次都运行良好。如果我重新执行命令,那么合约就正确安装了,我想是因为文件已经下载到对等点了。

修改超时限制可能会避免错误,但仍然会花费大量时间安装智能合约。

我对docker了解不多。每次重新启动网络时,有什么方法不会下载 gradle 文件?还有其他方法可以加快安装速度吗?

编辑:打开 Kazam(不录制)是否可能使我的 PC 运行速度变慢(并可能导致超时)????

这就是超级分类帐的工作原理。 1) 您的 Java 代码将是 gradle 项目。当您在 'cli' 容器中触发 'install' 时,代码将被简单地复制到指定位置。 2)下一步将是实例化。在这一步中,真正开始并开始下载所有依赖项的是'gradle build'。

为了加快速度,首先让 'gradle build' 在您的机器上运行。这将导致所有依赖项都被下载到您的“~/.gradle”文件夹中。现在,'COPY' 这个文件夹到 'hyperledger/fabric-javaenv' docker 图像,即我们正在将所有依赖项从您的本地磁盘复制到图像中。这样,就可以避免从 docker 容器内下载。

编辑: 希望您已经克隆了 'fabric samples' 代码。完成后,前往以下位置。正是这段代码从 'cli' 容器中安装并实例化到对等体中。

C:\sw\hlf146-2\fabric-samples\fabcar\java

现在执行 gradle 构建。假设您可以访问互联网并且没有代理相关的麻烦,那么您的构建应该会成功。

C:\sw\hlf146-2\fabric-samples\fabcar\java>gradle build
To honour the JVM settings for this build a new JVM will be forked. Please consider using the daemon: https://docs.gradle.org/6.3/userguide/gradle_daemon.html.
Daemon will be stopped at the end of the build stopping after processing

> Task :buildEnvironment

------------------------------------------------------------
Root project
------------------------------------------------------------

classpath
No dependencies

A web-based, searchable dependency report is available by adding the --scan option.

Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.3/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 16s
1 actionable task: 1 executed

一旦成功,gradle 构建会将所有依赖项下载到以下文件夹

c:\users\your-user-name\.gradle

希望您也已经将织物图像下载到您的机器上。不要担心我下面输出的织物图像的大小。我在胡闹,所以你看到某些图像 'huge' 像 4.58 GB。也请忽略下面的 'dev-peerX.orgX' 图片。您会在网络启动时创建它们。

C:\sw\hlf146-2\fabric-samples\fabcar\java>docker image ls
REPOSITORY                                                                                               TAG                 IMAGE ID            CREATED             SIZE
dev-peer0.org2.example.com-fabcar-1.0-264b0a1cb5efbecaac5cf8990339c24474dc8435c6e10f10f2be565d555d0e94   latest              32aca2e8365e        4 hours ago         4.58GB
dev-peer0.org1.example.com-fabcar-1.0-5c906e402ed29f20260ae42283216aa75549c571e2e380f3615826365d8269ba   latest              89f8611e67f7        4 hours ago         4.58GB
hyperledger/fabric-javaenv                                                                               1.4                 190c5452a677        22 hours ago        4.56GB
hyperledger/fabric-ccenv                                                                                 1.4                 774f228847d4        36 hours ago        1.79GB
openjdk                                                                                                  latest              0ce6496aae74        6 weeks ago         497MB
hyperledger/fabric-ca                                                                                    1.4                 3b96a893c1e4        3 months ago        150MB
hyperledger/fabric-ca                                                                                    1.4.6               3b96a893c1e4        3 months ago        150MB
hyperledger/fabric-ca                                                                                    latest              3b96a893c1e4        3 months ago        150MB
hyperledger/fabric-tools                                                                                 1.4.6               0f9743ac0662        3 months ago        1.49GB
hyperledger/fabric-tools                                                                                 latest              0f9743ac0662        3 months ago        1.49GB
hyperledger/fabric-orderer                                                                               1.4                 84eaba5388e7        3 months ago        120MB
hyperledger/fabric-orderer                                                                               1.4.6               84eaba5388e7        3 months ago        120MB
hyperledger/fabric-orderer                                                                               latest              84eaba5388e7        3 months ago        120MB
hyperledger/fabric-peer                                                                                  1.4                 5a52faa5d8c2        3 months ago        128MB
hyperledger/fabric-peer                                                                                  1.4.6               5a52faa5d8c2        3 months ago        128MB
hyperledger/fabric-peer                                                                                  latest              5a52faa5d8c2        3 months ago        128MB
hyperledger/fabric-zookeeper                                                                             0.4                 ede9389347db        7 months ago        276MB
hyperledger/fabric-zookeeper                                                                             0.4.18              ede9389347db        7 months ago        276MB
hyperledger/fabric-zookeeper                                                                             latest              ede9389347db        7 months ago        276MB
hyperledger/fabric-kafka                                                                                 0.4                 caaae0474ef2        7 months ago        270MB
hyperledger/fabric-kafka                                                                                 0.4.18              caaae0474ef2        7 months ago        270MB
hyperledger/fabric-kafka                                                                                 latest              caaae0474ef2        7 months ago        270MB
hyperledger/fabric-couchdb                                                                               0.4                 d369d4eaa0fd        7 months ago        261MB
hyperledger/fabric-couchdb                                                                               0.4.18              d369d4eaa0fd        7 months ago        261MB
hyperledger/fabric-couchdb                                                                               latest              d369d4eaa0fd        7 months ago        261MB

现在,在上面的图像列表中,HLF 将使用 'hyperledger/fabric-javaenv' 图像从 'cli' 容器中编译您的链代码。我们希望通过您机器的 'c:\users\your-user-name.gradle' 依赖关系来丰富这张图片。此外,在撰写本文时,'hyperledger/fabric-javaenv' 图像使用的是 gradle 4.5 版本,而我想使用最新的 gradle 版本。因此,我也将 gradle 6.3(尽管 Gradle 6.4 在撰写本文时是最新的)也复制到 'hyperledger/fabric-javaenv' 图像。

因此,为此,在一个新文件夹中放入一个名为 'Dockerfile' 的文件(没有文件扩展名),其中包含以下内容(从这里开始,我假设您对 docker,否则,你应该到此为止。学习一些 Docker 的基础知识,然后从这里继续。

FROM hyperledger/fabric-javaenv:1.4
RUN rm -rf /root/.gradle
RUN rm -rf /opt/gradle

ADD ./gradle.zip /opt/
RUN unzip -o /opt/gradle.zip -d /opt/

ADD ./.gradle.zip /root/.gradle/
RUN unzip -o /root/.gradle/.gradle.zip -d /root/.gradle
ENV PATH="/opt/gradle/gradle-6.3/bin:${PATH}"
ENV GRADLE_HOME="opt/gradle/gradle-6.3"
RUN chmod 777 /opt/gradle/gradle-6.3/bin/*
ENV JAVA_HOME="/opt/java/openjdk"

现在将 c:\users\your-user-name.gradle 文件夹内容(不是文件夹本身)压缩为 '.gradle.zip' 并将其放在上面的文件夹中。接下来还要放置gradle.zip(这将是下载的gradle软件,当你解压这个gradle.zip时,它应该有gradle-6.3在里面,那将有所有Gradle 软件。您可以在 'Dockerfile' 上面编辑,否则有相应的权限。

因为我 运行 在 windows 上安装了所有这些,所以我在我的机器上安装了 'docker desktop' 并且也选择了 'switch to linux containers'。如果您没有此软件,则需要安装此软件。再次假设您不在代理后面,您将不会遇到所有与代理相关的麻烦,并且 Docker 安装应该是无缝的。

接下来我们需要'build'docker图像使用上面'Dockerfile'.

Microsoft Windows [Version 10.0.17763.1217]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\sw\hlf-scripts\javaenv-image-2>dir
 Volume in drive C is Windows
 Volume Serial Number is AE8A-E101

 Directory of C:\sw\hlf-scripts\javaenv-image-2

02-06-2020  00:20    <DIR>          .
02-06-2020  00:20    <DIR>          ..
02-06-2020  00:19        68,813,513 .gradle.zip
01-06-2020  21:21               412 Dockerfile
01-06-2020  17:15       101,876,236 gradle.zip

C:\sw\hlf-scripts\javaenv-image-2>docker build .
Sending build context to Docker daemon  170.7MB
Step 1/11 : FROM hyperledger/fabric-javaenv:1.4
 ---> 190c5452a677
Step 2/11 : RUN rm -rf /root/.gradle
 ---> Running in 1bee6799c989
Removing intermediate container 1bee6799c989
 ---> e80c78e7f151
Step 3/11 : RUN rm -rf /opt/gradle
 ---> Running in 8b92d2062a0e
Removing intermediate container 8b92d2062a0e
 ---> 9a8b7ebfd19a
Step 4/11 : ADD ./gradle.zip /opt/
 ---> 6c32d08ac3d6
Step 5/11 : RUN unzip -o /opt/gradle.zip -d /opt/
 ---> Running in db8bbf7af51c
Archive:  /opt/gradle.zip
   creating: /opt/gradle/
   creating: /opt/gradle/gradle-6.3/
   creating: /opt/gradle/gradle-6.3/bin/
  inflating: /opt/gradle/gradle-6.3/bin/gradle
  inflating: /opt/gradle/gradle-6.3/bin/gradle.bat

    ...

  inflating: /opt/gradle/gradle-6.3/lib/xml-apis-1.4.01.jar
  inflating: /opt/gradle/gradle-6.3/LICENSE
  inflating: /opt/gradle/gradle-6.3/NOTICE
  inflating: /opt/gradle/gradle-6.3/README
Removing intermediate container db8bbf7af51c
 ---> 00b1723e518d
Step 6/11 : ADD ./.gradle.zip /root/.gradle/
 ---> 19cab7daafba
Step 7/11 : RUN unzip -o /root/.gradle/.gradle.zip -d /root/.gradle
 ---> Running in cda0aad70e6f
Archive:  /root/.gradle/.gradle.zip
   creating: /root/.gradle/6.3/
   creating: /root/.gradle/6.3/fileChanges/
 extracting: /root/.gradle/6.3/fileChanges/last-build.bin
   creating: /root/.gradle/6.3/fileHashes/

    ...

 extracting: /root/.gradle/vcs-1/gc.properties
   creating: /root/.gradle/workers/
Removing intermediate container cda0aad70e6f
 ---> bd42d756dcf7
Step 8/11 : ENV PATH="/opt/gradle/gradle-6.3/bin:${PATH}"
 ---> Running in 3d84e00c5b82
Removing intermediate container 3d84e00c5b82
 ---> ef445b162906
Step 9/11 : ENV GRADLE_HOME="opt/gradle/gradle-6.3"
 ---> Running in 41c1a2017e9f
Removing intermediate container 41c1a2017e9f
 ---> c77880c756fd
Step 10/11 : RUN chmod 777 /opt/gradle/gradle-6.3/bin/*
 ---> Running in 77eb321c94ce
Removing intermediate container 77eb321c94ce
 ---> 3e4e65c47c61
Step 11/11 : ENV JAVA_HOME="/opt/java/openjdk"
 ---> Running in 4bc72d56e33d
Removing intermediate container 4bc72d56e33d
 ---> eba22c19da02
Successfully built eba22c19da02
SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.

C:\sw\hlf-scripts\javaenv-image-2>

检查 docker 图片列表,您应该可以在其中找到新创建的图片。在下面的列表中,看到第一个,即现在创建的那个。它有 REPOSITORY 和 TAG 作为 .观察这个新创建的图像的 IMAGEID 是 'eba22c19da02'。这稍后将在下面的命令中使用。

C:\sw\hlf-scripts\javaenv-image-2>docker image ls
REPOSITORY                                                                                               TAG                 IMAGE ID            CREATED             SIZE
<none>                                                                                                   <none>              eba22c19da02        4 minutes ago       4.94GB
dev-peer0.org2.example.com-fabcar-1.0-264b0a1cb5efbecaac5cf8990339c24474dc8435c6e10f10f2be565d555d0e94   latest              32aca2e8365e        5 hours ago         4.58GB
dev-peer0.org1.example.com-fabcar-1.0-5c906e402ed29f20260ae42283216aa75549c571e2e380f3615826365d8269ba   latest              89f8611e67f7        5 hours ago         4.58GB
hyperledger/fabric-javaenv                                                                               1.4                 190c5452a677        22 hours ago        4.56GB
hyperledger/fabric-ccenv                                                                                 1.4                 774f228847d4        37 hours ago        1.79GB
openjdk                                                                                                  latest              0ce6496aae74        6 weeks ago         497MB
hyperledger/fabric-ca                                                                                    1.4                 3b96a893c1e4        3 months ago        150MB
hyperledger/fabric-ca                                                                                    1.4.6               3b96a893c1e4        3 months ago        150MB
hyperledger/fabric-ca                                                                                    latest              3b96a893c1e4        3 months ago        150MB
hyperledger/fabric-tools                                                                                 1.4.6               0f9743ac0662        3 months ago        1.49GB
hyperledger/fabric-tools                                                                                 latest              0f9743ac0662        3 months ago        1.49GB
hyperledger/fabric-orderer                                                                               1.4                 84eaba5388e7        3 months ago        120MB
hyperledger/fabric-orderer                                                                               1.4.6               84eaba5388e7        3 months ago        120MB
hyperledger/fabric-orderer                                                                               latest              84eaba5388e7        3 months ago        120MB
hyperledger/fabric-peer                                                                                  1.4                 5a52faa5d8c2        3 months ago        128MB
hyperledger/fabric-peer                                                                                  1.4.6               5a52faa5d8c2        3 months ago        128MB
hyperledger/fabric-peer                                                                                  latest              5a52faa5d8c2        3 months ago        128MB
hyperledger/fabric-zookeeper                                                                             0.4                 ede9389347db        7 months ago        276MB
hyperledger/fabric-zookeeper                                                                             0.4.18              ede9389347db        7 months ago        276MB
hyperledger/fabric-zookeeper                                                                             latest              ede9389347db        7 months ago        276MB
hyperledger/fabric-kafka                                                                                 0.4                 caaae0474ef2        7 months ago        270MB
hyperledger/fabric-kafka                                                                                 0.4.18              caaae0474ef2        7 months ago        270MB
hyperledger/fabric-kafka                                                                                 latest              caaae0474ef2        7 months ago        270MB
hyperledger/fabric-couchdb                                                                               0.4                 d369d4eaa0fd        7 months ago        261MB
hyperledger/fabric-couchdb                                                                               0.4.18              d369d4eaa0fd        7 months ago        261MB
hyperledger/fabric-couchdb                                                                               latest              d369d4eaa0fd        7 months ago        261MB

现在我们要告诉 docker 使用这个新创建的图像作为 'hyperledger/fabric-javaenv' 图像(稍后将在 HLF 网络创建期间由 HLF 拾取)。对于所有这些,我正在 运行ning HLF 1.4,下面的标签中给出了“:1.4”。命令为 运行 后,您现在可以观察到 'eba22c19da02' 现在填充为 'hyperledger/fabric-javaenv',TAG 为 1.4

C:\sw\hlf-scripts\javaenv-image-2>docker tag eba22c19da02 hyperledger/fabric-javaenv:1.4

C:\sw\hlf-scripts\javaenv-image-2>docker image ls
REPOSITORY                                                                                               TAG                 IMAGE ID            CREATED             SIZE
hyperledger/fabric-javaenv                                                                               1.4                 eba22c19da02        8 minutes ago       4.94GB
dev-peer0.org2.example.com-fabcar-1.0-264b0a1cb5efbecaac5cf8990339c24474dc8435c6e10f10f2be565d555d0e94   latest              32aca2e8365e        5 hours ago         4.58GB
dev-peer0.org1.example.com-fabcar-1.0-5c906e402ed29f20260ae42283216aa75549c571e2e380f3615826365d8269ba   latest              89f8611e67f7        5 hours ago         4.58GB
hyperledger/fabric-ccenv                                                                                 1.4                 774f228847d4        37 hours ago        1.79GB
openjdk                                                                                                  latest              0ce6496aae74        6 weeks ago         497MB
hyperledger/fabric-ca                                                                                    1.4                 3b96a893c1e4        3 months ago        150MB
hyperledger/fabric-ca                                                                                    1.4.6               3b96a893c1e4        3 months ago        150MB
hyperledger/fabric-ca                                                                                    latest              3b96a893c1e4        3 months ago        150MB
hyperledger/fabric-tools                                                                                 1.4.6               0f9743ac0662        3 months ago        1.49GB
hyperledger/fabric-tools                                                                                 latest              0f9743ac0662        3 months ago        1.49GB
hyperledger/fabric-orderer                                                                               1.4                 84eaba5388e7        3 months ago        120MB
hyperledger/fabric-orderer                                                                               1.4.6               84eaba5388e7        3 months ago        120MB
hyperledger/fabric-orderer                                                                               latest              84eaba5388e7        3 months ago        120MB
hyperledger/fabric-peer                                                                                  1.4                 5a52faa5d8c2        3 months ago        128MB
hyperledger/fabric-peer                                                                                  1.4.6               5a52faa5d8c2        3 months ago        128MB
hyperledger/fabric-peer                                                                                  latest              5a52faa5d8c2        3 months ago        128MB
hyperledger/fabric-zookeeper                                                                             0.4                 ede9389347db        7 months ago        276MB
hyperledger/fabric-zookeeper                                                                             0.4.18              ede9389347db        7 months ago        276MB
hyperledger/fabric-zookeeper                                                                             latest              ede9389347db        7 months ago        276MB
hyperledger/fabric-kafka                                                                                 0.4                 caaae0474ef2        7 months ago        270MB
hyperledger/fabric-kafka                                                                                 0.4.18              caaae0474ef2        7 months ago        270MB
hyperledger/fabric-kafka                                                                                 latest              caaae0474ef2        7 months ago        270MB
hyperledger/fabric-couchdb                                                                               0.4                 d369d4eaa0fd        7 months ago        261MB
hyperledger/fabric-couchdb                                                                               0.4.18              d369d4eaa0fd        7 months ago        261MB
hyperledger/fabric-couchdb                                                                               latest              d369d4eaa0fd        7 months ago        261MB

C:\sw\hlf-scripts\javaenv-image-2>

现在继续您的 Java HLF 网络创建,您的链码安装和实例化应该会成功。