From 6dc2fa4f8117482e17e8798810e90bcc380d806d Mon Sep 17 00:00:00 2001 From: "Mark S. Lewis" Date: Sun, 25 Feb 2024 00:45:26 +0000 Subject: [PATCH 01/19] Update GitHub action versions Avoid using deprecated action versions based on Node versions prior to Node 18. Signed-off-by: Mark S. Lewis --- .github/actions/fsat-setup/action.yaml | 6 +++--- .github/actions/test-network-setup/action.yaml | 5 ++--- .github/workflows/lint.yaml | 4 ++-- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/.github/actions/fsat-setup/action.yaml b/.github/actions/fsat-setup/action.yaml index 5ff5849f..0215422f 100644 --- a/.github/actions/fsat-setup/action.yaml +++ b/.github/actions/fsat-setup/action.yaml @@ -6,7 +6,7 @@ inputs: default: 18.x just-version: description: Just Version - default: '1.13.0' + default: '1.24.0' k9s-version: description: k9s Version default: v0.25.3 @@ -35,9 +35,9 @@ runs: sudo chmod 755 /usr/local/bin/k9s - name: Install just - uses: extractions/setup-just@v1 + uses: taiki-e/install-action@v2 with: - just-version: ${{ inputs.just-version }} + tool: just@${{ inputs.just-version }} - name: Install weft shell: bash diff --git a/.github/actions/test-network-setup/action.yaml b/.github/actions/test-network-setup/action.yaml index 65931952..6fc99250 100644 --- a/.github/actions/test-network-setup/action.yaml +++ b/.github/actions/test-network-setup/action.yaml @@ -20,10 +20,9 @@ inputs: runs: using: "composite" steps: - - uses: actions/setup-go@v4 + - uses: actions/setup-go@v5 with: go-version: ${{ inputs.go-version }} - cache: true cache-dependency-path: '**/go.sum' - uses: actions/setup-node@v4 @@ -32,7 +31,7 @@ runs: cache: 'npm' cache-dependency-path: '**/package-lock.json' - - uses: actions/setup-java@v3 + - uses: actions/setup-java@v4 with: distribution: temurin java-version: ${{ inputs.java-version }} diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml index 928f8cda..6283ddc9 100644 --- a/.github/workflows/lint.yaml +++ b/.github/workflows/lint.yaml @@ -24,7 +24,7 @@ jobs: go: runs-on: fabric-ubuntu-20.04 steps: - - uses: actions/setup-go@v4 + - uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VER }} - uses: actions/checkout@v4 @@ -53,7 +53,7 @@ jobs: runs-on: fabric-ubuntu-20.04 steps: - uses: actions/checkout@v4 - - uses: actions/setup-java@v3 + - uses: actions/setup-java@v4 with: distribution: temurin java-version: ${{ env.JAVA_VER }} From db86460086c0bf2786377aae936309718252c76d Mon Sep 17 00:00:00 2001 From: "Mark S. Lewis" Date: Thu, 7 Dec 2023 20:37:40 +0000 Subject: [PATCH 02/19] Use latest v2.5 fabric-chaincode-java - Update Gradle wrappers - Update shadow plugin Signed-off-by: Mark S. Lewis --- .../gradle/wrapper/gradle-wrapper.jar | Bin 59536 -> 63721 bytes .../gradle/wrapper/gradle-wrapper.properties | 4 +- .../application-gateway-java/gradlew | 31 +- .../application-gateway-java/gradlew.bat | 15 +- .../gradle/wrapper/gradle-wrapper.jar | Bin 58910 -> 63721 bytes .../gradle/wrapper/gradle-wrapper.properties | 4 +- asset-transfer-basic/application-java/gradlew | 294 ++++++++++------- .../application-java/gradlew.bat | 34 +- .../chaincode-java/Dockerfile | 2 +- .../chaincode-java/build.gradle | 19 +- .../gradle/wrapper/gradle-wrapper.jar | Bin 59536 -> 63721 bytes .../gradle/wrapper/gradle-wrapper.properties | 4 +- asset-transfer-basic/chaincode-java/gradlew | 31 +- .../chaincode-java/gradlew.bat | 15 +- .../gradle/wrapper/gradle-wrapper.jar | Bin 59536 -> 63721 bytes .../gradle/wrapper/gradle-wrapper.properties | 4 +- .../application-gateway-java/gradlew | 31 +- .../application-gateway-java/gradlew.bat | 15 +- .../chaincode-java/build.gradle | 21 +- .../gradle/wrapper/gradle-wrapper.jar | Bin 58695 -> 63721 bytes .../gradle/wrapper/gradle-wrapper.properties | 4 +- asset-transfer-events/chaincode-java/gradlew | 294 ++++++++++------- .../chaincode-java/gradlew.bat | 192 ++++++------ .../gradle/wrapper/gradle-wrapper.jar | Bin 58910 -> 63721 bytes .../gradle/wrapper/gradle-wrapper.properties | 4 +- .../application-java/gradlew | 294 ++++++++++------- .../application-java/gradlew.bat | 34 +- .../chaincode-java/build.gradle | 17 +- .../gradle/wrapper/gradle-wrapper.jar | Bin 55616 -> 63721 bytes .../gradle/wrapper/gradle-wrapper.properties | 4 +- .../chaincode-java/gradlew | 295 +++++++++++------- .../chaincode-java/gradlew.bat | 38 +-- .../chaincode-java/build.gradle | 19 +- .../gradle/wrapper/gradle-wrapper.jar | Bin 55616 -> 63721 bytes .../gradle/wrapper/gradle-wrapper.properties | 4 +- asset-transfer-sbe/chaincode-java/gradlew | 295 +++++++++++------- asset-transfer-sbe/chaincode-java/gradlew.bat | 38 +-- .../gradle/wrapper/gradle-wrapper.jar | Bin 59821 -> 63721 bytes .../gradle/wrapper/gradle-wrapper.properties | 4 +- off_chain_data/application-java/gradlew | 31 +- off_chain_data/application-java/gradlew.bat | 15 +- token-erc-20/chaincode-java/build.gradle | 19 +- .../gradle/wrapper/gradle-wrapper.jar | Bin 55616 -> 63721 bytes .../gradle/wrapper/gradle-wrapper.properties | 4 +- token-erc-20/chaincode-java/gradlew | 295 +++++++++++------- token-erc-20/chaincode-java/gradlew.bat | 38 +-- token-erc-721/chaincode-java/build.gradle | 19 +- .../gradle/wrapper/gradle-wrapper.jar | Bin 59536 -> 63721 bytes .../gradle/wrapper/gradle-wrapper.properties | 4 +- token-erc-721/chaincode-java/gradlew | 31 +- token-erc-721/chaincode-java/gradlew.bat | 192 ++++++------ 51 files changed, 1586 insertions(+), 1122 deletions(-) diff --git a/asset-transfer-basic/application-gateway-java/gradle/wrapper/gradle-wrapper.jar b/asset-transfer-basic/application-gateway-java/gradle/wrapper/gradle-wrapper.jar index 7454180f2ae8848c63b8b4dea2cb829da983f2fa..7f93135c49b765f8051ef9d0a6055ff8e46073d8 100644 GIT binary patch delta 44391 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%0D+ym=_w*d`k$@iM%aZm>(FB zFT}u)TP%ySs`RyJx#=oxe&Idagc(F$Sv(5*pWd?HYll`LXi*p`s9;8=FNKjA$zuDap z1iJ4_{GzB&FY7I^Z=V2WPV}duAN#+$7*g>}M-8M^ZIIB>-^X-D90KS2pYi;cJpI2t z9+!d$Z~~_e2!65t2V*tx>VN>IOBPZ~3v6t}2DR0RaAz+Y0&>nb^fj?~75%>lATlV_DagaSI48TP5e#m z`NUsBkeiDL|BMZ$&97r4JO2|SVnYrr+W2*{e!H;xn_8U}Ah!z{@Mwehm%07(!p~pV geSU+(twG={1R5&vkYyYSN)YnO$AzrH2Y-C~e^Sofwg3PC delta 40281 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 /dev/null && pwd -P ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -133,22 +131,29 @@ location of your Java installation." fi else JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac case $MAX_FD in #( '' | soft) :;; #( *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -193,6 +198,10 @@ if "$cygwin" || "$msys" ; then done fi + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + # Collect all arguments for the java command; # * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of # shell script including quotes and variable substitutions, so put them in @@ -205,6 +214,12 @@ set -- \ org.gradle.wrapper.GradleWrapperMain \ "$@" +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + # Use "xargs" to parse quoted args. # # With -n1 it outputs one arg per line, with the quotes and backslashes removed. diff --git a/asset-transfer-basic/application-gateway-java/gradlew.bat b/asset-transfer-basic/application-gateway-java/gradlew.bat index ac1b06f9..6689b85b 100644 --- a/asset-transfer-basic/application-gateway-java/gradlew.bat +++ b/asset-transfer-basic/application-gateway-java/gradlew.bat @@ -14,7 +14,7 @@ @rem limitations under the License. @rem -@if "%DEBUG%" == "" @echo off +@if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @@ -25,7 +25,8 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @@ -40,7 +41,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute +if %ERRORLEVEL% equ 0 goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -75,13 +76,15 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar :end @rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd +if %ERRORLEVEL% equ 0 goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal diff --git a/asset-transfer-basic/application-java/gradle/wrapper/gradle-wrapper.jar b/asset-transfer-basic/application-java/gradle/wrapper/gradle-wrapper.jar index 62d4c053550b91381bbd28b1afc82d634bf73a8a..7f93135c49b765f8051ef9d0a6055ff8e46073d8 100644 GIT binary patch delta 44733 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

Ca%uA05UTpm-fb`()QYj+OI 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 b7hw`Bw4~VJY{0;{1OBXmt|7YjKmPh31Up)j diff --git a/asset-transfer-ledger-queries/application-java/gradle/wrapper/gradle-wrapper.properties b/asset-transfer-ledger-queries/application-java/gradle/wrapper/gradle-wrapper.properties index 622ab64a..a80b22ce 100644 --- a/asset-transfer-ledger-queries/application-java/gradle/wrapper/gradle-wrapper.properties +++ b/asset-transfer-ledger-queries/application-java/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip +networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/asset-transfer-ledger-queries/application-java/gradlew b/asset-transfer-ledger-queries/application-java/gradlew index fbd7c515..0adc8e1a 100755 --- a/asset-transfer-ledger-queries/application-java/gradlew +++ b/asset-transfer-ledger-queries/application-java/gradlew @@ -1,7 +1,7 @@ -#!/usr/bin/env sh +#!/bin/sh # -# Copyright 2015 the original author or authors. +# Copyright © 2015-2021 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -17,67 +17,99 @@ # ############################################################################## -## -## Gradle start up script for UN*X -## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# ############################################################################## # Attempt to set APP_HOME + # Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" +MAX_FD=maximum warn () { echo "$*" -} +} >&2 die () { echo echo "$*" echo exit 1 -} +} >&2 # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar @@ -87,9 +119,9 @@ CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -98,88 +130,120 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=`expr $i + 1` - done - case $i in - 0) set -- ;; - 1) set -- "$args0" ;; - 2) set -- "$args0" "$args1" ;; - 3) set -- "$args0" "$args1" "$args2" ;; - 4) set -- "$args0" "$args1" "$args2" "$args3" ;; - 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" esac fi -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=`save "$@"` +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' exec "$JAVACMD" "$@" diff --git a/asset-transfer-ledger-queries/application-java/gradlew.bat b/asset-transfer-ledger-queries/application-java/gradlew.bat index 5093609d..93e3f59f 100644 --- a/asset-transfer-ledger-queries/application-java/gradlew.bat +++ b/asset-transfer-ledger-queries/application-java/gradlew.bat @@ -14,7 +14,7 @@ @rem limitations under the License. @rem -@if "%DEBUG%" == "" @echo off +@if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @@ -25,7 +25,8 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @@ -40,7 +41,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init +if %ERRORLEVEL% equ 0 goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -54,7 +55,7 @@ goto fail set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe -if exist "%JAVA_EXE%" goto init +if exist "%JAVA_EXE%" goto execute echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% @@ -64,21 +65,6 @@ echo location of your Java installation. goto fail -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - :execute @rem Setup the command line @@ -86,17 +72,19 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* :end @rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd +if %ERRORLEVEL% equ 0 goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal diff --git a/asset-transfer-private-data/chaincode-java/build.gradle b/asset-transfer-private-data/chaincode-java/build.gradle index e5acd742..644c595a 100644 --- a/asset-transfer-private-data/chaincode-java/build.gradle +++ b/asset-transfer-private-data/chaincode-java/build.gradle @@ -3,7 +3,7 @@ */ plugins { - id 'com.github.johnrengelman.shadow' version '5.1.0' + id 'com.github.johnrengelman.shadow' version '8.1.1' id 'application' id 'checkstyle' id 'jacoco' @@ -17,7 +17,7 @@ dependencies { implementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.5.+' implementation 'org.json:json:+' - testImplementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.+' + testImplementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.5.+' testImplementation 'org.junit.jupiter:junit-jupiter:5.4.2' testImplementation 'org.assertj:assertj-core:3.11.1' testImplementation 'org.mockito:mockito-core:2.+' @@ -30,6 +30,12 @@ repositories { } } +java { + toolchain { + languageVersion = JavaLanguageVersion.of(11) + } +} + application { mainClass = 'org.hyperledger.fabric.contract.ContractRouter' } @@ -61,9 +67,10 @@ test { mainClassName = 'org.hyperledger.fabric.contract.ContractRouter' shadowJar { - baseName = 'chaincode' - version = null - classifier = null + archiveBaseName = 'chaincode' + archiveVersion = '' + archiveClassifier = '' + mergeServiceFiles() manifest { attributes 'Main-Class': 'org.hyperledger.fabric.contract.ContractRouter' diff --git a/asset-transfer-private-data/chaincode-java/gradle/wrapper/gradle-wrapper.jar b/asset-transfer-private-data/chaincode-java/gradle/wrapper/gradle-wrapper.jar index 5c2d1cf016b3885f6930543d57b744ea8c220a1a..7f93135c49b765f8051ef9d0a6055ff8e46073d8 100644 GIT binary patch delta 45054 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 delta 36991 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 diff --git a/asset-transfer-private-data/chaincode-java/gradle/wrapper/gradle-wrapper.properties b/asset-transfer-private-data/chaincode-java/gradle/wrapper/gradle-wrapper.properties index bb8b2fc2..a80b22ce 100644 --- a/asset-transfer-private-data/chaincode-java/gradle/wrapper/gradle-wrapper.properties +++ b/asset-transfer-private-data/chaincode-java/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.5.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip +networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/asset-transfer-private-data/chaincode-java/gradlew b/asset-transfer-private-data/chaincode-java/gradlew index 83f2acfd..0adc8e1a 100755 --- a/asset-transfer-private-data/chaincode-java/gradlew +++ b/asset-transfer-private-data/chaincode-java/gradlew @@ -1,7 +1,7 @@ -#!/usr/bin/env sh +#!/bin/sh # -# Copyright 2015 the original author or authors. +# Copyright © 2015-2021 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -17,78 +17,111 @@ # ############################################################################## -## -## Gradle start up script for UN*X -## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# ############################################################################## # Attempt to set APP_HOME + # Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" +MAX_FD=maximum warn () { echo "$*" -} +} >&2 die () { echo echo "$*" echo exit 1 -} +} >&2 # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -97,92 +130,120 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=$((i+1)) - done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" esac fi -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=$(save "$@") +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done fi + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + exec "$JAVACMD" "$@" diff --git a/asset-transfer-private-data/chaincode-java/gradlew.bat b/asset-transfer-private-data/chaincode-java/gradlew.bat index 9618d8d9..93e3f59f 100644 --- a/asset-transfer-private-data/chaincode-java/gradlew.bat +++ b/asset-transfer-private-data/chaincode-java/gradlew.bat @@ -14,7 +14,7 @@ @rem limitations under the License. @rem -@if "%DEBUG%" == "" @echo off +@if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @@ -25,10 +25,14 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" @@ -37,7 +41,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init +if %ERRORLEVEL% equ 0 goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -51,7 +55,7 @@ goto fail set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe -if exist "%JAVA_EXE%" goto init +if exist "%JAVA_EXE%" goto execute echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% @@ -61,38 +65,26 @@ echo location of your Java installation. goto fail -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - :execute @rem Setup the command line set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* :end @rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd +if %ERRORLEVEL% equ 0 goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal diff --git a/asset-transfer-sbe/chaincode-java/build.gradle b/asset-transfer-sbe/chaincode-java/build.gradle index 899d403f..1f1f5b21 100644 --- a/asset-transfer-sbe/chaincode-java/build.gradle +++ b/asset-transfer-sbe/chaincode-java/build.gradle @@ -3,7 +3,7 @@ */ plugins { - id 'com.github.johnrengelman.shadow' version '5.1.0' + id 'com.github.johnrengelman.shadow' version '8.1.1' id 'application' id 'checkstyle' id 'jacoco' @@ -14,13 +14,13 @@ version '1.0-SNAPSHOT' dependencies { - implementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.4.1' + implementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.5.+' implementation 'org.json:json:+' implementation 'com.google.protobuf:protobuf-java:3.+' implementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-protos:2.4.1' implementation 'com.owlike:genson:1.5' - testImplementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.4.1' + testImplementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.5.+' testImplementation 'org.junit.jupiter:junit-jupiter:5.4.2' testImplementation 'org.assertj:assertj-core:3.11.1' testImplementation 'org.mockito:mockito-core:2.+' @@ -33,6 +33,12 @@ repositories { } } +java { + toolchain { + languageVersion = JavaLanguageVersion.of(11) + } +} + application { mainClass = 'org.hyperledger.fabric.contract.ContractRouter' } @@ -76,9 +82,10 @@ test { mainClassName = 'org.hyperledger.fabric.contract.ContractRouter' shadowJar { - baseName = 'chaincode' - version = null - classifier = null + archiveBaseName = 'chaincode' + archiveVersion = '' + archiveClassifier = '' + mergeServiceFiles() manifest { attributes 'Main-Class': 'org.hyperledger.fabric.contract.ContractRouter' diff --git a/asset-transfer-sbe/chaincode-java/gradle/wrapper/gradle-wrapper.jar b/asset-transfer-sbe/chaincode-java/gradle/wrapper/gradle-wrapper.jar index 5c2d1cf016b3885f6930543d57b744ea8c220a1a..7f93135c49b765f8051ef9d0a6055ff8e46073d8 100644 GIT binary patch delta 45054 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 delta 36991 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 diff --git a/asset-transfer-sbe/chaincode-java/gradle/wrapper/gradle-wrapper.properties b/asset-transfer-sbe/chaincode-java/gradle/wrapper/gradle-wrapper.properties index bb8b2fc2..a80b22ce 100644 --- a/asset-transfer-sbe/chaincode-java/gradle/wrapper/gradle-wrapper.properties +++ b/asset-transfer-sbe/chaincode-java/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.5.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip +networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/asset-transfer-sbe/chaincode-java/gradlew b/asset-transfer-sbe/chaincode-java/gradlew index 83f2acfd..0adc8e1a 100755 --- a/asset-transfer-sbe/chaincode-java/gradlew +++ b/asset-transfer-sbe/chaincode-java/gradlew @@ -1,7 +1,7 @@ -#!/usr/bin/env sh +#!/bin/sh # -# Copyright 2015 the original author or authors. +# Copyright © 2015-2021 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -17,78 +17,111 @@ # ############################################################################## -## -## Gradle start up script for UN*X -## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# ############################################################################## # Attempt to set APP_HOME + # Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" +MAX_FD=maximum warn () { echo "$*" -} +} >&2 die () { echo echo "$*" echo exit 1 -} +} >&2 # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -97,92 +130,120 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=$((i+1)) - done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" esac fi -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=$(save "$@") +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done fi + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + exec "$JAVACMD" "$@" diff --git a/asset-transfer-sbe/chaincode-java/gradlew.bat b/asset-transfer-sbe/chaincode-java/gradlew.bat index 9618d8d9..93e3f59f 100644 --- a/asset-transfer-sbe/chaincode-java/gradlew.bat +++ b/asset-transfer-sbe/chaincode-java/gradlew.bat @@ -14,7 +14,7 @@ @rem limitations under the License. @rem -@if "%DEBUG%" == "" @echo off +@if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @@ -25,10 +25,14 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" @@ -37,7 +41,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init +if %ERRORLEVEL% equ 0 goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -51,7 +55,7 @@ goto fail set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe -if exist "%JAVA_EXE%" goto init +if exist "%JAVA_EXE%" goto execute echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% @@ -61,38 +65,26 @@ echo location of your Java installation. goto fail -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - :execute @rem Setup the command line set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* :end @rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd +if %ERRORLEVEL% equ 0 goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal diff --git a/off_chain_data/application-java/gradle/wrapper/gradle-wrapper.jar b/off_chain_data/application-java/gradle/wrapper/gradle-wrapper.jar index 41d9927a4d4fb3f96a785543079b8df6723c946b..7f93135c49b765f8051ef9d0a6055ff8e46073d8 100644 GIT binary patch delta 44451 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 W0}GkPe@wIjfE;Yd41Mt9+y4Mm#rGos delta 40585 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�Kz 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 diff --git a/off_chain_data/application-java/gradle/wrapper/gradle-wrapper.properties b/off_chain_data/application-java/gradle/wrapper/gradle-wrapper.properties index aa991fce..a80b22ce 100644 --- a/off_chain_data/application-java/gradle/wrapper/gradle-wrapper.properties +++ b/off_chain_data/application-java/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip +networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/off_chain_data/application-java/gradlew b/off_chain_data/application-java/gradlew index 1b6c7873..0adc8e1a 100755 --- a/off_chain_data/application-java/gradlew +++ b/off_chain_data/application-java/gradlew @@ -55,7 +55,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -80,13 +80,11 @@ do esac done -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -APP_NAME="Gradle" +# This is normally unused +# shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -133,22 +131,29 @@ location of your Java installation." fi else JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac case $MAX_FD in #( '' | soft) :;; #( *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -193,6 +198,10 @@ if "$cygwin" || "$msys" ; then done fi + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + # Collect all arguments for the java command; # * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of # shell script including quotes and variable substitutions, so put them in @@ -205,6 +214,12 @@ set -- \ org.gradle.wrapper.GradleWrapperMain \ "$@" +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + # Use "xargs" to parse quoted args. # # With -n1 it outputs one arg per line, with the quotes and backslashes removed. diff --git a/off_chain_data/application-java/gradlew.bat b/off_chain_data/application-java/gradlew.bat index ac1b06f9..6689b85b 100644 --- a/off_chain_data/application-java/gradlew.bat +++ b/off_chain_data/application-java/gradlew.bat @@ -14,7 +14,7 @@ @rem limitations under the License. @rem -@if "%DEBUG%" == "" @echo off +@if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @@ -25,7 +25,8 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @@ -40,7 +41,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute +if %ERRORLEVEL% equ 0 goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -75,13 +76,15 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar :end @rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd +if %ERRORLEVEL% equ 0 goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal diff --git a/token-erc-20/chaincode-java/build.gradle b/token-erc-20/chaincode-java/build.gradle index 518d6f8b..4a652837 100755 --- a/token-erc-20/chaincode-java/build.gradle +++ b/token-erc-20/chaincode-java/build.gradle @@ -3,7 +3,7 @@ */ plugins { - id 'com.github.johnrengelman.shadow' version '5.1.0' + id 'com.github.johnrengelman.shadow' version '8.1.1' id 'application' id 'checkstyle' id 'jacoco' @@ -14,10 +14,10 @@ version '1.0-SNAPSHOT' dependencies { - implementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.4.1' + implementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.5.+' implementation 'org.json:json:+' implementation 'com.owlike:genson:1.5' - testImplementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.4.1' + testImplementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.5.+' testImplementation 'org.junit.jupiter:junit-jupiter:5.4.2' testImplementation 'org.assertj:assertj-core:3.11.1' testImplementation 'org.mockito:mockito-core:2.+' @@ -32,6 +32,12 @@ repositories { } } +java { + toolchain { + languageVersion = JavaLanguageVersion.of(11) + } +} + application { mainClass = 'org.hyperledger.fabric.contract.ContractRouter' } @@ -75,9 +81,10 @@ test { mainClassName = 'org.hyperledger.fabric.contract.ContractRouter' shadowJar { - baseName = 'chaincode' - version = null - classifier = null + archiveBaseName = 'chaincode' + archiveVersion = '' + archiveClassifier = '' + mergeServiceFiles() manifest { attributes 'Main-Class': 'org.hyperledger.fabric.contract.ContractRouter' diff --git a/token-erc-20/chaincode-java/gradle/wrapper/gradle-wrapper.jar b/token-erc-20/chaincode-java/gradle/wrapper/gradle-wrapper.jar index 5c2d1cf016b3885f6930543d57b744ea8c220a1a..7f93135c49b765f8051ef9d0a6055ff8e46073d8 100755 GIT binary patch delta 45054 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 delta 36991 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 diff --git a/token-erc-20/chaincode-java/gradle/wrapper/gradle-wrapper.properties b/token-erc-20/chaincode-java/gradle/wrapper/gradle-wrapper.properties index bb8b2fc2..a80b22ce 100755 --- a/token-erc-20/chaincode-java/gradle/wrapper/gradle-wrapper.properties +++ b/token-erc-20/chaincode-java/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.5.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip +networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/token-erc-20/chaincode-java/gradlew b/token-erc-20/chaincode-java/gradlew index 83f2acfd..0adc8e1a 100755 --- a/token-erc-20/chaincode-java/gradlew +++ b/token-erc-20/chaincode-java/gradlew @@ -1,7 +1,7 @@ -#!/usr/bin/env sh +#!/bin/sh # -# Copyright 2015 the original author or authors. +# Copyright © 2015-2021 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -17,78 +17,111 @@ # ############################################################################## -## -## Gradle start up script for UN*X -## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# ############################################################################## # Attempt to set APP_HOME + # Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" +MAX_FD=maximum warn () { echo "$*" -} +} >&2 die () { echo echo "$*" echo exit 1 -} +} >&2 # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -97,92 +130,120 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=$((i+1)) - done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" esac fi -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=$(save "$@") +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done fi + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + exec "$JAVACMD" "$@" diff --git a/token-erc-20/chaincode-java/gradlew.bat b/token-erc-20/chaincode-java/gradlew.bat index 24467a14..6689b85b 100755 --- a/token-erc-20/chaincode-java/gradlew.bat +++ b/token-erc-20/chaincode-java/gradlew.bat @@ -14,7 +14,7 @@ @rem limitations under the License. @rem -@if "%DEBUG%" == "" @echo off +@if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @@ -25,10 +25,14 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" @@ -37,7 +41,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init +if %ERRORLEVEL% equ 0 goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -51,7 +55,7 @@ goto fail set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe -if exist "%JAVA_EXE%" goto init +if exist "%JAVA_EXE%" goto execute echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% @@ -61,38 +65,26 @@ echo location of your Java installation. goto fail -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - :execute @rem Setup the command line set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* :end @rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd +if %ERRORLEVEL% equ 0 goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal diff --git a/token-erc-721/chaincode-java/build.gradle b/token-erc-721/chaincode-java/build.gradle index dd0f5c41..bb9c736a 100755 --- a/token-erc-721/chaincode-java/build.gradle +++ b/token-erc-721/chaincode-java/build.gradle @@ -3,7 +3,7 @@ */ plugins { - id 'com.github.johnrengelman.shadow' version '5.1.0' + id 'com.github.johnrengelman.shadow' version '8.1.1' id 'application' id 'checkstyle' id 'jacoco' @@ -14,10 +14,10 @@ version '1.0-SNAPSHOT' dependencies { - implementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.4.1' + implementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.5.+' implementation 'org.json:json:+' implementation 'com.owlike:genson:1.5' - testImplementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.4.1' + testImplementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.5.+' testImplementation 'org.junit.jupiter:junit-jupiter:5.4.2' testImplementation 'org.assertj:assertj-core:3.11.1' testImplementation 'org.mockito:mockito-core:2.23.4' @@ -32,6 +32,12 @@ repositories { } } +java { + toolchain { + languageVersion = JavaLanguageVersion.of(11) + } +} + application { mainClass = 'org.hyperledger.fabric.contract.ContractRouter' } @@ -78,9 +84,10 @@ test { mainClassName = 'org.hyperledger.fabric.contract.ContractRouter' shadowJar { - baseName = 'chaincode' - version = null - classifier = null + archiveBaseName = 'chaincode' + archiveVersion = '' + archiveClassifier = '' + mergeServiceFiles() manifest { attributes 'Main-Class': 'org.hyperledger.fabric.contract.ContractRouter' diff --git a/token-erc-721/chaincode-java/gradle/wrapper/gradle-wrapper.jar b/token-erc-721/chaincode-java/gradle/wrapper/gradle-wrapper.jar index 7454180f2ae8848c63b8b4dea2cb829da983f2fa..7f93135c49b765f8051ef9d0a6055ff8e46073d8 100644 GIT binary patch delta 44391 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%0D+ym=_w*d`k$@iM%aZm>(FB zFT}u)TP%ySs`RyJx#=oxe&Idagc(F$Sv(5*pWd?HYll`LXi*p`s9;8=FNKjA$zuDap z1iJ4_{GzB&FY7I^Z=V2WPV}duAN#+$7*g>}M-8M^ZIIB>-^X-D90KS2pYi;cJpI2t z9+!d$Z~~_e2!65t2V*tx>VN>IOBPZ~3v6t}2DR0RaAz+Y0&>nb^fj?~75%>lATlV_DagaSI48TP5e#m z`NUsBkeiDL|BMZ$&97r4JO2|SVnYrr+W2*{e!H;xn_8U}Ah!z{@Mwehm%07(!p~pV geSU+(twG={1R5&vkYyYSN)YnO$AzrH2Y-C~e^Sofwg3PC delta 40281 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 /dev/null && pwd -P ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -133,22 +131,29 @@ location of your Java installation." fi else JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac case $MAX_FD in #( '' | soft) :;; #( *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -193,6 +198,10 @@ if "$cygwin" || "$msys" ; then done fi + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + # Collect all arguments for the java command; # * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of # shell script including quotes and variable substitutions, so put them in @@ -205,6 +214,12 @@ set -- \ org.gradle.wrapper.GradleWrapperMain \ "$@" +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + # Use "xargs" to parse quoted args. # # With -n1 it outputs one arg per line, with the quotes and backslashes removed. diff --git a/token-erc-721/chaincode-java/gradlew.bat b/token-erc-721/chaincode-java/gradlew.bat index 9618d8d9..6689b85b 100755 --- a/token-erc-721/chaincode-java/gradlew.bat +++ b/token-erc-721/chaincode-java/gradlew.bat @@ -1,100 +1,92 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega From a5eea8cd5cceea088eea721902d4a54a76c4b869 Mon Sep 17 00:00:00 2001 From: "Mark S. Lewis" Date: Thu, 29 Feb 2024 18:01:22 +0000 Subject: [PATCH 03/19] Read first client cert from cert directory Allow client applications to work regardless of whether network was creating using a CA or cryptogen since they create different client certificate file names. Signed-off-by: Mark S. Lewis --- .../application-gateway-go/assetTransfer.go | 73 +++++++++++-------- .../src/main/java/App.java | 22 +++--- .../application-gateway-typescript/src/app.ts | 15 ++-- .../application-gateway-go/connect.go | 39 +++++++--- .../src/main/java/Connections.java | 29 ++++---- .../src/connect.ts | 11 ++- .../application-gateway-typescript/src/app.ts | 6 +- .../src/connect.ts | 23 +++--- .../application-gateway-typescript/src/app.ts | 6 +- .../src/connect.ts | 20 +++-- ci/scripts/run-k8s-test-network-basic.sh | 2 +- 11 files changed, 148 insertions(+), 98 deletions(-) diff --git a/asset-transfer-basic/application-gateway-go/assetTransfer.go b/asset-transfer-basic/application-gateway-go/assetTransfer.go index cf489fb6..6f7ed496 100755 --- a/asset-transfer-basic/application-gateway-go/assetTransfer.go +++ b/asset-transfer-basic/application-gateway-go/assetTransfer.go @@ -28,8 +28,8 @@ import ( const ( mspID = "Org1MSP" cryptoPath = "../../test-network/organizations/peerOrganizations/org1.example.com" - certPath = cryptoPath + "/users/User1@org1.example.com/msp/signcerts/cert.pem" - keyPath = cryptoPath + "/users/User1@org1.example.com/msp/keystore/" + certPath = cryptoPath + "/users/User1@org1.example.com/msp/signcerts" + keyPath = cryptoPath + "/users/User1@org1.example.com/msp/keystore" tlsCertPath = cryptoPath + "/peers/peer0.org1.example.com/tls/ca.crt" peerEndpoint = "localhost:7051" gatewayPeer = "peer0.org1.example.com" @@ -86,7 +86,12 @@ func main() { // newGrpcConnection creates a gRPC connection to the Gateway server. func newGrpcConnection() *grpc.ClientConn { - certificate, err := loadCertificate(tlsCertPath) + certificatePEM, err := os.ReadFile(tlsCertPath) + if err != nil { + panic(fmt.Errorf("failed to read TLS certifcate file: %w", err)) + } + + certificate, err := identity.CertificateFromPEM(certificatePEM) if err != nil { panic(err) } @@ -105,7 +110,12 @@ func newGrpcConnection() *grpc.ClientConn { // newIdentity creates a client identity for this Gateway connection using an X.509 certificate. func newIdentity() *identity.X509Identity { - certificate, err := loadCertificate(certPath) + certificatePEM, err := readFirstFile(certPath) + if err != nil { + panic(fmt.Errorf("failed to read certificate file: %w", err)) + } + + certificate, err := identity.CertificateFromPEM(certificatePEM) if err != nil { panic(err) } @@ -118,22 +128,9 @@ func newIdentity() *identity.X509Identity { return id } -func loadCertificate(filename string) (*x509.Certificate, error) { - certificatePEM, err := os.ReadFile(filename) - if err != nil { - return nil, fmt.Errorf("failed to read certificate file: %w", err) - } - return identity.CertificateFromPEM(certificatePEM) -} - // newSign creates a function that generates a digital signature from a message digest using a private key. func newSign() identity.Sign { - files, err := os.ReadDir(keyPath) - if err != nil { - panic(fmt.Errorf("failed to read private key directory: %w", err)) - } - privateKeyPEM, err := os.ReadFile(path.Join(keyPath, files[0].Name())) - + privateKeyPEM, err := readFirstFile(keyPath) if err != nil { panic(fmt.Errorf("failed to read private key file: %w", err)) } @@ -151,6 +148,20 @@ func newSign() identity.Sign { return sign } +func readFirstFile(dirPath string) ([]byte, error) { + dir, err := os.Open(dirPath) + if err != nil { + return nil, err + } + + fileNames, err := dir.Readdirnames(1) + if err != nil { + return nil, err + } + + return os.ReadFile(path.Join(dirPath, fileNames[0])) +} + // This type of transaction would typically only be run once by an application the first time it was started after its // initial deployment. A new version of the chaincode deployed later would likely not need to run an "init" function. func initLedger(contract *client.Contract) { @@ -235,20 +246,24 @@ func exampleErrorHandling(contract *client.Contract) { fmt.Println("*** Successfully caught the error:") - switch err := err.(type) { - case *client.EndorseError: - fmt.Printf("Endorse error for transaction %s with gRPC status %v: %s\n", err.TransactionID, status.Code(err), err) - case *client.SubmitError: - fmt.Printf("Submit error for transaction %s with gRPC status %v: %s\n", err.TransactionID, status.Code(err), err) - case *client.CommitStatusError: + var endorseErr *client.EndorseError + var submitErr *client.SubmitError + var commitStatusErr *client.CommitStatusError + var commitErr *client.CommitError + + if errors.As(err, &endorseErr) { + fmt.Printf("Endorse error for transaction %s with gRPC status %v: %s\n", endorseErr.TransactionID, status.Code(endorseErr), endorseErr) + } else if errors.As(err, &submitErr) { + fmt.Printf("Submit error for transaction %s with gRPC status %v: %s\n", submitErr.TransactionID, status.Code(submitErr), submitErr) + } else if errors.As(err, &commitStatusErr) { if errors.Is(err, context.DeadlineExceeded) { - fmt.Printf("Timeout waiting for transaction %s commit status: %s", err.TransactionID, err) + fmt.Printf("Timeout waiting for transaction %s commit status: %s", commitStatusErr.TransactionID, commitStatusErr) } else { - fmt.Printf("Error obtaining commit status for transaction %s with gRPC status %v: %s\n", err.TransactionID, status.Code(err), err) + fmt.Printf("Error obtaining commit status for transaction %s with gRPC status %v: %s\n", commitStatusErr.TransactionID, status.Code(commitStatusErr), commitStatusErr) } - case *client.CommitError: - fmt.Printf("Transaction %s failed to commit with status %d: %s\n", err.TransactionID, int32(err.Code), err) - default: + } else if errors.As(err, &commitErr) { + fmt.Printf("Transaction %s failed to commit with status %d: %s\n", commitErr.TransactionID, int32(commitErr.Code), err) + } else { panic(fmt.Errorf("unexpected error type %T: %w", err, err)) } diff --git a/asset-transfer-basic/application-gateway-java/src/main/java/App.java b/asset-transfer-basic/application-gateway-java/src/main/java/App.java index 3786a2ba..df4044d4 100644 --- a/asset-transfer-basic/application-gateway-java/src/main/java/App.java +++ b/asset-transfer-basic/application-gateway-java/src/main/java/App.java @@ -41,7 +41,7 @@ public final class App { // Path to crypto materials. private static final Path CRYPTO_PATH = Paths.get("../../test-network/organizations/peerOrganizations/org1.example.com"); // Path to user certificate. - private static final Path CERT_PATH = CRYPTO_PATH.resolve(Paths.get("users/User1@org1.example.com/msp/signcerts/cert.pem")); + private static final Path CERT_DIR_PATH = CRYPTO_PATH.resolve(Paths.get("users/User1@org1.example.com/msp/signcerts")); // Path to user private key directory. private static final Path KEY_DIR_PATH = CRYPTO_PATH.resolve(Paths.get("users/User1@org1.example.com/msp/keystore")); // Path to peer tls certificate. @@ -84,21 +84,21 @@ public final class App { } private static Identity newIdentity() throws IOException, CertificateException { - var certReader = Files.newBufferedReader(CERT_PATH); - var certificate = Identities.readX509Certificate(certReader); - - return new X509Identity(MSP_ID, certificate); + try (var certReader = Files.newBufferedReader(getFirstFilePath(CERT_DIR_PATH))) { + var certificate = Identities.readX509Certificate(certReader); + return new X509Identity(MSP_ID, certificate); + } } private static Signer newSigner() throws IOException, InvalidKeyException { - var keyReader = Files.newBufferedReader(getPrivateKeyPath()); - var privateKey = Identities.readPrivateKey(keyReader); - - return Signers.newPrivateKeySigner(privateKey); + try (var keyReader = Files.newBufferedReader(getFirstFilePath(KEY_DIR_PATH))) { + var privateKey = Identities.readPrivateKey(keyReader); + return Signers.newPrivateKeySigner(privateKey); + } } - private static Path getPrivateKeyPath() throws IOException { - try (var keyFiles = Files.list(KEY_DIR_PATH)) { + private static Path getFirstFilePath(Path dirPath) throws IOException { + try (var keyFiles = Files.list(dirPath)) { return keyFiles.findFirst().orElseThrow(); } } diff --git a/asset-transfer-basic/application-gateway-typescript/src/app.ts b/asset-transfer-basic/application-gateway-typescript/src/app.ts index 3dda3fff..e6c345a3 100644 --- a/asset-transfer-basic/application-gateway-typescript/src/app.ts +++ b/asset-transfer-basic/application-gateway-typescript/src/app.ts @@ -21,8 +21,8 @@ const cryptoPath = envOrDefault('CRYPTO_PATH', path.resolve(__dirname, '..', '.. // Path to user private key directory. const keyDirectoryPath = envOrDefault('KEY_DIRECTORY_PATH', path.resolve(cryptoPath, 'users', 'User1@org1.example.com', 'msp', 'keystore')); -// Path to user certificate. -const certPath = envOrDefault('CERT_PATH', path.resolve(cryptoPath, 'users', 'User1@org1.example.com', 'msp', 'signcerts', 'cert.pem')); +// Path to user certificate directory. +const certDirectoryPath = envOrDefault('CERT_DIRECTORY_PATH', path.resolve(cryptoPath, 'users', 'User1@org1.example.com', 'msp', 'signcerts')); // Path to peer tls certificate. const tlsCertPath = envOrDefault('TLS_CERT_PATH', path.resolve(cryptoPath, 'peers', 'peer0.org1.example.com', 'tls', 'ca.crt')); @@ -106,13 +106,18 @@ async function newGrpcConnection(): Promise { } async function newIdentity(): Promise { + const certPath = await getFirstDirFileName(certDirectoryPath); const credentials = await fs.readFile(certPath); return { mspId, credentials }; } +async function getFirstDirFileName(dirPath: string): Promise { + const files = await fs.readdir(dirPath); + return path.join(dirPath, files[0]); +} + async function newSigner(): Promise { - const files = await fs.readdir(keyDirectoryPath); - const keyPath = path.resolve(keyDirectoryPath, files[0]); + const keyPath = await getFirstDirFileName(keyDirectoryPath); const privateKeyPem = await fs.readFile(keyPath); const privateKey = crypto.createPrivateKey(privateKeyPem); return signers.newPrivateKeySigner(privateKey); @@ -231,7 +236,7 @@ async function displayInputParameters(): Promise { console.log(`mspId: ${mspId}`); console.log(`cryptoPath: ${cryptoPath}`); console.log(`keyDirectoryPath: ${keyDirectoryPath}`); - console.log(`certPath: ${certPath}`); + console.log(`certDirectoryPath: ${certDirectoryPath}`); console.log(`tlsCertPath: ${tlsCertPath}`); console.log(`peerEndpoint: ${peerEndpoint}`); console.log(`peerHostAlias: ${peerHostAlias}`); diff --git a/asset-transfer-events/application-gateway-go/connect.go b/asset-transfer-events/application-gateway-go/connect.go index 97c92ff6..49422320 100755 --- a/asset-transfer-events/application-gateway-go/connect.go +++ b/asset-transfer-events/application-gateway-go/connect.go @@ -20,8 +20,8 @@ import ( const ( mspID = "Org1MSP" cryptoPath = "../../test-network/organizations/peerOrganizations/org1.example.com" - certPath = cryptoPath + "/users/User1@org1.example.com/msp/signcerts/cert.pem" - keyPath = cryptoPath + "/users/User1@org1.example.com/msp/keystore/" + certPath = cryptoPath + "/users/User1@org1.example.com/msp/signcerts" + keyPath = cryptoPath + "/users/User1@org1.example.com/msp/keystore" tlsCertPath = cryptoPath + "/peers/peer0.org1.example.com/tls/ca.crt" peerEndpoint = "localhost:7051" gatewayPeer = "peer0.org1.example.com" @@ -29,7 +29,12 @@ const ( // newGrpcConnection creates a gRPC connection to the Gateway server. func newGrpcConnection() *grpc.ClientConn { - certificate, err := loadCertificate(tlsCertPath) + certificatePEM, err := os.ReadFile(tlsCertPath) + if err != nil { + panic(fmt.Errorf("failed to read TLS certifcate file: %w", err)) + } + + certificate, err := identity.CertificateFromPEM(certificatePEM) if err != nil { panic(err) } @@ -48,7 +53,12 @@ func newGrpcConnection() *grpc.ClientConn { // newIdentity creates a client identity for this Gateway connection using an X.509 certificate. func newIdentity() *identity.X509Identity { - certificate, err := loadCertificate(certPath) + certificatePEM, err := readFirstFile(certPath) + if err != nil { + panic(fmt.Errorf("failed to read certificate file: %w", err)) + } + + certificate, err := identity.CertificateFromPEM(certificatePEM) if err != nil { panic(err) } @@ -71,12 +81,7 @@ func loadCertificate(filename string) (*x509.Certificate, error) { // newSign creates a function that generates a digital signature from a message digest using a private key. func newSign() identity.Sign { - files, err := os.ReadDir(keyPath) - if err != nil { - panic(fmt.Errorf("failed to read private key directory: %w", err)) - } - privateKeyPEM, err := os.ReadFile(path.Join(keyPath, files[0].Name())) - + privateKeyPEM, err := readFirstFile(keyPath) if err != nil { panic(fmt.Errorf("failed to read private key file: %w", err)) } @@ -93,3 +98,17 @@ func newSign() identity.Sign { return sign } + +func readFirstFile(dirPath string) ([]byte, error) { + dir, err := os.Open(dirPath) + if err != nil { + return nil, err + } + + fileNames, err := dir.Readdirnames(1) + if err != nil { + return nil, err + } + + return os.ReadFile(path.Join(dirPath, fileNames[0])) +} diff --git a/asset-transfer-events/application-gateway-java/src/main/java/Connections.java b/asset-transfer-events/application-gateway-java/src/main/java/Connections.java index 5342ca87..6902fc03 100644 --- a/asset-transfer-events/application-gateway-java/src/main/java/Connections.java +++ b/asset-transfer-events/application-gateway-java/src/main/java/Connections.java @@ -24,7 +24,7 @@ public final class Connections { // Path to crypto materials. private static final Path cryptoPath = Paths.get("..", "..", "test-network", "organizations", "peerOrganizations", "org1.example.com"); // Path to user certificate. - private static final Path certPath = cryptoPath.resolve(Paths.get("users", "User1@org1.example.com", "msp", "signcerts", "cert.pem")); + private static final Path certDirPath = cryptoPath.resolve(Paths.get("users", "User1@org1.example.com", "msp", "signcerts")); // Path to user private key directory. private static final Path keyDirPath = cryptoPath.resolve(Paths.get("users", "User1@org1.example.com", "msp", "keystore")); // Path to peer tls certificate. @@ -50,22 +50,21 @@ public final class Connections { } public static Identity newIdentity() throws IOException, CertificateException { - var certReader = Files.newBufferedReader(certPath); - var certificate = Identities.readX509Certificate(certReader); - - return new X509Identity(mspID, certificate); + try (var certReader = Files.newBufferedReader(getFirstFilePath(certDirPath))) { + var certificate = Identities.readX509Certificate(certReader); + return new X509Identity(mspID, certificate); + } } public static Signer newSigner() throws IOException, InvalidKeyException { - var keyReader = Files.newBufferedReader(getPrivateKeyPath()); - var privateKey = Identities.readPrivateKey(keyReader); - - return Signers.newPrivateKeySigner(privateKey); - } - - private static Path getPrivateKeyPath() throws IOException { - try (var keyFiles = Files.list(keyDirPath)) { - return keyFiles.findFirst().orElseThrow(); + try (var keyReader = Files.newBufferedReader(getFirstFilePath(keyDirPath))) { + var privateKey = Identities.readPrivateKey(keyReader); + return Signers.newPrivateKeySigner(privateKey); } } -} + + private static Path getFirstFilePath(Path dirPath) throws IOException { + try (var keyFiles = Files.list(dirPath)) { + return keyFiles.findFirst().orElseThrow(); + } + }} diff --git a/asset-transfer-events/application-gateway-typescript/src/connect.ts b/asset-transfer-events/application-gateway-typescript/src/connect.ts index 9290c7db..05ce5fe4 100644 --- a/asset-transfer-events/application-gateway-typescript/src/connect.ts +++ b/asset-transfer-events/application-gateway-typescript/src/connect.ts @@ -19,7 +19,7 @@ const cryptoPath = path.resolve(__dirname, '..', '..', '..', 'test-network', 'or const keyDirectoryPath = path.resolve(cryptoPath, 'users', 'User1@org1.example.com', 'msp', 'keystore'); // Path to user certificate. -const certPath = path.resolve(cryptoPath, 'users', 'User1@org1.example.com', 'msp', 'signcerts', 'cert.pem'); +const certDirectoryPath = path.resolve(cryptoPath, 'users', 'User1@org1.example.com', 'msp', 'signcerts'); // Path to peer tls certificate. const tlsCertPath = path.resolve(cryptoPath, 'peers', 'peer0.org1.example.com', 'tls', 'ca.crt'); @@ -36,14 +36,19 @@ export async function newGrpcConnection(): Promise { } export async function newIdentity(): Promise { + const certPath = await getFirstDirFileName(certDirectoryPath); const credentials = await fs.readFile(certPath); return { mspId, credentials }; } export async function newSigner(): Promise { - const files = await fs.readdir(keyDirectoryPath); - const keyPath = path.resolve(keyDirectoryPath, files[0]); + const keyPath = await getFirstDirFileName(keyDirectoryPath); const privateKeyPem = await fs.readFile(keyPath); const privateKey = crypto.createPrivateKey(privateKeyPem); return signers.newPrivateKeySigner(privateKey); } + +async function getFirstDirFileName(dirPath: string): Promise { + const files = await fs.readdir(dirPath); + return path.join(dirPath, files[0]); +} diff --git a/asset-transfer-private-data/application-gateway-typescript/src/app.ts b/asset-transfer-private-data/application-gateway-typescript/src/app.ts index ac292330..4a3211b8 100644 --- a/asset-transfer-private-data/application-gateway-typescript/src/app.ts +++ b/asset-transfer-private-data/application-gateway-typescript/src/app.ts @@ -7,7 +7,7 @@ import { connect, Contract } from '@hyperledger/fabric-gateway'; import { TextDecoder } from 'util'; import { - certPathOrg1, certPathOrg2, keyDirectoryPathOrg1, keyDirectoryPathOrg2, newGrpcConnection, newIdentity, + certDirectoryPathOrg1, certDirectoryPathOrg2, keyDirectoryPathOrg1, keyDirectoryPathOrg2, newGrpcConnection, newIdentity, newSigner, peerEndpointOrg1, peerEndpointOrg2, peerNameOrg1, peerNameOrg2, tlsCertPathOrg1, tlsCertPathOrg2 } from './connect'; @@ -39,7 +39,7 @@ async function main(): Promise { const gatewayOrg1 = connect({ client: clientOrg1, - identity: await newIdentity(certPathOrg1, mspIdOrg1), + identity: await newIdentity(certDirectoryPathOrg1, mspIdOrg1), signer: await newSigner(keyDirectoryPathOrg1), }); @@ -51,7 +51,7 @@ async function main(): Promise { const gatewayOrg2 = connect({ client: clientOrg2, - identity: await newIdentity(certPathOrg2, mspIdOrg2), + identity: await newIdentity(certDirectoryPathOrg2, mspIdOrg2), signer: await newSigner(keyDirectoryPathOrg2), }); diff --git a/asset-transfer-private-data/application-gateway-typescript/src/connect.ts b/asset-transfer-private-data/application-gateway-typescript/src/connect.ts index fbf8e250..7f243c48 100644 --- a/asset-transfer-private-data/application-gateway-typescript/src/connect.ts +++ b/asset-transfer-private-data/application-gateway-typescript/src/connect.ts @@ -32,13 +32,12 @@ export const keyDirectoryPathOrg1 = path.resolve( ); // Path to org1 user certificate. -export const certPathOrg1 = path.resolve( +export const certDirectoryPathOrg1 = path.resolve( cryptoPathOrg1, 'users', 'User1@org1.example.com', 'msp', - 'signcerts', - 'cert.pem' + 'signcerts' ); // Path to org1 peer tls certificate. @@ -72,13 +71,12 @@ export const keyDirectoryPathOrg2 = path.resolve( ); // Path to org2 user certificate. -export const certPathOrg2 = path.resolve( +export const certDirectoryPathOrg2 = path.resolve( cryptoPathOrg2, 'users', 'User1@org2.example.com', 'msp', - 'signcerts', - 'cert.pem' + 'signcerts' ); // Path to org2 peer tls certificate. @@ -112,17 +110,22 @@ export async function newGrpcConnection( } export async function newIdentity( - certPath: string, + certDirectoryPath: string, mspId: string ): Promise { + const certPath = await getFirstDirFileName(certDirectoryPath); const credentials = await fs.readFile(certPath); return { mspId, credentials }; } export async function newSigner(keyDirectoryPath: string): Promise { - const files = await fs.readdir(keyDirectoryPath); - const keyPath = path.resolve(keyDirectoryPath, files[0]); + const keyPath = await getFirstDirFileName(keyDirectoryPath); const privateKeyPem = await fs.readFile(keyPath); const privateKey = crypto.createPrivateKey(privateKeyPem); return signers.newPrivateKeySigner(privateKey); -} \ No newline at end of file +} + +async function getFirstDirFileName(dirPath: string): Promise { + const files = await fs.readdir(dirPath); + return path.join(dirPath, files[0]); +} diff --git a/asset-transfer-secured-agreement/application-gateway-typescript/src/app.ts b/asset-transfer-secured-agreement/application-gateway-typescript/src/app.ts index ff68bd96..f3d142bd 100644 --- a/asset-transfer-secured-agreement/application-gateway-typescript/src/app.ts +++ b/asset-transfer-secured-agreement/application-gateway-typescript/src/app.ts @@ -6,7 +6,7 @@ import { connect } from '@hyperledger/fabric-gateway'; -import { newGrpcConnection, newIdentity, newSigner, tlsCertPathOrg1, peerEndpointOrg1, peerNameOrg1, certPathOrg1, mspIdOrg1, keyDirectoryPathOrg1, tlsCertPathOrg2, peerEndpointOrg2, peerNameOrg2, certPathOrg2, mspIdOrg2, keyDirectoryPathOrg2 } from './connect'; +import { newGrpcConnection, newIdentity, newSigner, tlsCertPathOrg1, peerEndpointOrg1, peerNameOrg1, certDirectoryPathOrg1, mspIdOrg1, keyDirectoryPathOrg1, tlsCertPathOrg2, peerEndpointOrg2, peerNameOrg2, certDirectoryPathOrg2, mspIdOrg2, keyDirectoryPathOrg2 } from './connect'; import { ContractWrapper } from './contractWrapper'; import { RED, RESET } from './utils'; @@ -28,7 +28,7 @@ async function main(): Promise { const gatewayOrg1 = connect({ client: clientOrg1, - identity: await newIdentity(certPathOrg1, mspIdOrg1), + identity: await newIdentity(certDirectoryPathOrg1, mspIdOrg1), signer: await newSigner(keyDirectoryPathOrg1), }); @@ -41,7 +41,7 @@ async function main(): Promise { const gatewayOrg2 = connect({ client: clientOrg2, - identity: await newIdentity(certPathOrg2, mspIdOrg2), + identity: await newIdentity(certDirectoryPathOrg2, mspIdOrg2), signer: await newSigner(keyDirectoryPathOrg2), }); diff --git a/asset-transfer-secured-agreement/application-gateway-typescript/src/connect.ts b/asset-transfer-secured-agreement/application-gateway-typescript/src/connect.ts index 4b08b048..345f3aae 100644 --- a/asset-transfer-secured-agreement/application-gateway-typescript/src/connect.ts +++ b/asset-transfer-secured-agreement/application-gateway-typescript/src/connect.ts @@ -21,7 +21,7 @@ export const cryptoPathOrg1 = path.resolve(__dirname, '..', '..', '..', 'test-ne export const keyDirectoryPathOrg1 = path.resolve(cryptoPathOrg1, 'users', 'User1@org1.example.com', 'msp', 'keystore'); // Path to user certificate. -export const certPathOrg1 = path.resolve(cryptoPathOrg1, 'users', 'User1@org1.example.com', 'msp', 'signcerts', 'cert.pem'); +export const certDirectoryPathOrg1 = path.resolve(cryptoPathOrg1, 'users', 'User1@org1.example.com', 'msp', 'signcerts'); // Path to peer tls certificate. export const tlsCertPathOrg1 = path.resolve(cryptoPathOrg1, 'peers', 'peer0.org1.example.com', 'tls', 'ca.crt'); @@ -48,13 +48,12 @@ export const keyDirectoryPathOrg2 = path.resolve( ); // Path to org2 user certificate. -export const certPathOrg2 = path.resolve( +export const certDirectoryPathOrg2 = path.resolve( cryptoPathOrg2, 'users', 'User1@org2.example.com', 'msp', - 'signcerts', - 'cert.pem' + 'signcerts' ); // Path to org2 peer tls certificate. @@ -89,15 +88,20 @@ export async function newGrpcConnection( }); } -export async function newIdentity(certPath: string, mspId: string): Promise { +export async function newIdentity(certDirectoryPath: string, mspId: string): Promise { + const certPath = await getFirstDirFileName(certDirectoryPath); const credentials = await fs.readFile(certPath); return { mspId, credentials }; } export async function newSigner(keyDirectoryPath: string): Promise { - const files = await fs.readdir(keyDirectoryPath); - const keyPath = path.resolve(keyDirectoryPath, files[0]); + const keyPath = await getFirstDirFileName(keyDirectoryPath); const privateKeyPem = await fs.readFile(keyPath); const privateKey = crypto.createPrivateKey(privateKeyPem); return signers.newPrivateKeySigner(privateKey); -} \ No newline at end of file +} + +async function getFirstDirFileName(dirPath: string): Promise { + const files = await fs.readdir(dirPath); + return path.join(dirPath, files[0]); +} diff --git a/ci/scripts/run-k8s-test-network-basic.sh b/ci/scripts/run-k8s-test-network-basic.sh index ec2cdd14..fe4fa448 100755 --- a/ci/scripts/run-k8s-test-network-basic.sh +++ b/ci/scripts/run-k8s-test-network-basic.sh @@ -28,7 +28,7 @@ export CHAINCODE_NAME=${TEST_NETWORK_CHAINCODE_NAME:-asset-transfer-basic} export MSP_ID=${MSP_ID:-Org1MSP} export CRYPTO_PATH=${CRYPTO_PATH:-../../test-network-k8s/build/channel-msp/peerOrganizations/org1} export KEY_DIRECTORY_PATH=${KEY_DIRECTORY_PATH:-../../test-network-k8s/build/enrollments/org1/users/org1admin/msp/keystore} -export CERT_PATH=${CERT_PATH:-../../test-network-k8s/build/enrollments/org1/users/org1admin/msp/signcerts/cert.pem} +export CERT_DIRECTORY_PATH=${CERT_DIRECTORY_PATH:-../../test-network-k8s/build/enrollments/org1/users/org1admin/msp/signcerts} export TLS_CERT_PATH=${TLS_CERT_PATH:-../../test-network-k8s/build/channel-msp/peerOrganizations/org1/msp/tlscacerts/tlsca-signcert.pem} export PEER_ENDPOINT=${PEER_ENDPOINT:-org1-peer1.localho.st:443} export PEER_HOST_ALIAS=${PEER_HOST_ALIAS:-org1-peer1.localho.st} From 66c9992bf3313efbf20ebb8ae387cca8110489cb Mon Sep 17 00:00:00 2001 From: "Mark S. Lewis" Date: Tue, 2 Apr 2024 19:59:41 +0100 Subject: [PATCH 04/19] Add Go chaincode for asset-transfer-events Signed-off-by: Mark S. Lewis --- .github/workflows/test-network-events.yaml | 1 + asset-transfer-events/README.md | 5 +- .../chaincode-go/assetTransferEvents.go | 23 +++ .../chaincode-go/chaincode/smartcontract.go | 134 ++++++++++++++++++ asset-transfer-events/chaincode-go/go.mod | 33 +++++ asset-transfer-events/chaincode-go/go.sum | 127 +++++++++++++++++ 6 files changed, 322 insertions(+), 1 deletion(-) create mode 100644 asset-transfer-events/chaincode-go/assetTransferEvents.go create mode 100644 asset-transfer-events/chaincode-go/chaincode/smartcontract.go create mode 100644 asset-transfer-events/chaincode-go/go.mod create mode 100644 asset-transfer-events/chaincode-go/go.sum diff --git a/.github/workflows/test-network-events.yaml b/.github/workflows/test-network-events.yaml index 2d1d36dc..ee0c9936 100644 --- a/.github/workflows/test-network-events.yaml +++ b/.github/workflows/test-network-events.yaml @@ -21,6 +21,7 @@ jobs: strategy: matrix: chaincode-language: + - go - javascript - java chaincode-name: diff --git a/asset-transfer-events/README.md b/asset-transfer-events/README.md index f591f105..edfd1148 100644 --- a/asset-transfer-events/README.md +++ b/asset-transfer-events/README.md @@ -49,6 +49,9 @@ Like other samples, the Fabric test network is used to deploy and run this sampl 1. Deploy one of the smart contract implementations (from the `test-network` folder). ``` + # To deploy the Go chaincode implementation + ./network.sh deployCC -ccn events -ccp ../asset-transfer-events/chaincode-go/ -ccl go -ccep "OR('Org1MSP.peer','Org2MSP.peer')" + # To deploy the JavaScript chaincode implementation ./network.sh deployCC -ccn events -ccp ../asset-transfer-events/chaincode-javascript/ -ccl javascript -ccep "OR('Org1MSP.peer','Org2MSP.peer')" @@ -62,7 +65,7 @@ Like other samples, the Fabric test network is used to deploy and run this sampl cd application-gateway-go go run . - # To run the Typescript sample application + # To run the TypeScript sample application cd application-gateway-typescript npm install npm start diff --git a/asset-transfer-events/chaincode-go/assetTransferEvents.go b/asset-transfer-events/chaincode-go/assetTransferEvents.go new file mode 100644 index 00000000..2bbd5f2e --- /dev/null +++ b/asset-transfer-events/chaincode-go/assetTransferEvents.go @@ -0,0 +1,23 @@ +/* +SPDX-License-Identifier: Apache-2.0 +*/ + +package main + +import ( + "log" + + "github.com/hyperledger/fabric-contract-api-go/contractapi" + "github.com/hyperledger/fabric-samples/asset-transfer-events/chaincode-go/chaincode" +) + +func main() { + assetChaincode, err := contractapi.NewChaincode(&chaincode.SmartContract{}) + if err != nil { + log.Panicf("Error creating asset-transfer-events chaincode: %v", err) + } + + if err := assetChaincode.Start(); err != nil { + log.Panicf("Error starting asset-transfer-events chaincode: %v", err) + } +} diff --git a/asset-transfer-events/chaincode-go/chaincode/smartcontract.go b/asset-transfer-events/chaincode-go/chaincode/smartcontract.go new file mode 100644 index 00000000..3f91e44a --- /dev/null +++ b/asset-transfer-events/chaincode-go/chaincode/smartcontract.go @@ -0,0 +1,134 @@ +package chaincode + +import ( + "encoding/json" + "fmt" + + "github.com/hyperledger/fabric-contract-api-go/contractapi" +) + +// SmartContract provides functions for managing an Asset +type SmartContract struct { + contractapi.Contract +} + +// Asset describes basic details of what makes up a simple asset +// Insert struct field in alphabetic order => to achieve determinism across languages +// golang keeps the order when marshal to json but doesn't order automatically +type Asset struct { + AppraisedValue int `json:"AppraisedValue"` + Color string `json:"Color"` + ID string `json:"ID"` + Owner string `json:"Owner"` + Size int `json:"Size"` +} + +// CreateAsset issues a new asset to the world state with given details. +func (s *SmartContract) CreateAsset(ctx contractapi.TransactionContextInterface, id string, color string, size int, owner string, appraisedValue int) error { + existing, err := s.readState(ctx, id) + if err == nil && existing != nil { + return fmt.Errorf("the asset %s already exists", id) + } + + asset := Asset{ + ID: id, + Color: color, + Size: size, + Owner: owner, + AppraisedValue: appraisedValue, + } + assetJSON, err := json.Marshal(asset) + if err != nil { + return err + } + + ctx.GetStub().SetEvent("CreateAsset", assetJSON) + return ctx.GetStub().PutState(id, assetJSON) +} + +func (s *SmartContract) readState(ctx contractapi.TransactionContextInterface, id string) ([]byte, error) { + assetJSON, err := ctx.GetStub().GetState(id) + if err != nil { + return nil, fmt.Errorf("failed to read from world state: %w", err) + } + if assetJSON == nil { + return nil, fmt.Errorf("the asset %s does not exist", id) + } + + return assetJSON, nil +} + +// ReadAsset returns the asset stored in the world state with given id. +func (s *SmartContract) ReadAsset(ctx contractapi.TransactionContextInterface, id string) (*Asset, error) { + assetJSON, err := s.readState(ctx, id) + if err != nil { + return nil, err + } + + var asset Asset + err = json.Unmarshal(assetJSON, &asset) + if err != nil { + return nil, err + } + + return &asset, nil +} + +// UpdateAsset updates an existing asset in the world state with provided parameters. +func (s *SmartContract) UpdateAsset(ctx contractapi.TransactionContextInterface, id string, color string, size int, owner string, appraisedValue int) error { + _, err := s.readState(ctx, id) + if err != nil { + return err + } + + // overwriting original asset with new asset + asset := Asset{ + ID: id, + Color: color, + Size: size, + Owner: owner, + AppraisedValue: appraisedValue, + } + assetJSON, err := json.Marshal(asset) + if err != nil { + return err + } + + ctx.GetStub().SetEvent("UpdateAsset", assetJSON) + return ctx.GetStub().PutState(id, assetJSON) +} + +// DeleteAsset deletes an given asset from the world state. +func (s *SmartContract) DeleteAsset(ctx contractapi.TransactionContextInterface, id string) error { + assetJSON, err := s.readState(ctx, id) + if err != nil { + return err + } + + ctx.GetStub().SetEvent("DeleteAsset", assetJSON) + return ctx.GetStub().DelState(id) +} + +// TransferAsset updates the owner field of asset with given id in world state, and returns the old owner. +func (s *SmartContract) TransferAsset(ctx contractapi.TransactionContextInterface, id string, newOwner string) (string, error) { + asset, err := s.ReadAsset(ctx, id) + if err != nil { + return "", err + } + + oldOwner := asset.Owner + asset.Owner = newOwner + + assetJSON, err := json.Marshal(asset) + if err != nil { + return "", err + } + + ctx.GetStub().SetEvent("TransferAsset", assetJSON) + err = ctx.GetStub().PutState(id, assetJSON) + if err != nil { + return "", err + } + + return oldOwner, nil +} diff --git a/asset-transfer-events/chaincode-go/go.mod b/asset-transfer-events/chaincode-go/go.mod new file mode 100644 index 00000000..b501267e --- /dev/null +++ b/asset-transfer-events/chaincode-go/go.mod @@ -0,0 +1,33 @@ +module github.com/hyperledger/fabric-samples/asset-transfer-events/chaincode-go + +go 1.19 + +require github.com/hyperledger/fabric-contract-api-go v1.2.2 + +require ( + github.com/go-openapi/jsonpointer v0.21.0 // indirect + github.com/go-openapi/jsonreference v0.21.0 // indirect + github.com/go-openapi/spec v0.21.0 // indirect + github.com/go-openapi/swag v0.23.0 // indirect + github.com/gobuffalo/envy v1.10.2 // indirect + github.com/gobuffalo/packd v1.0.2 // indirect + github.com/gobuffalo/packr v1.30.1 // indirect + github.com/golang/protobuf v1.5.4 // indirect + github.com/hyperledger/fabric-chaincode-go v0.0.0-20240124143825-7dec3c7e7d45 // indirect + github.com/hyperledger/fabric-protos-go v0.3.3 // indirect + github.com/joho/godotenv v1.5.1 // indirect + github.com/josharian/intern v1.0.0 // indirect + github.com/mailru/easyjson v0.7.7 // indirect + github.com/rogpeppe/go-internal v1.12.0 // indirect + github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect + github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect + github.com/xeipuuv/gojsonschema v1.2.0 // indirect + golang.org/x/mod v0.16.0 // indirect + golang.org/x/net v0.22.0 // indirect + golang.org/x/sys v0.18.0 // indirect + golang.org/x/text v0.14.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda // indirect + google.golang.org/grpc v1.62.1 // indirect + google.golang.org/protobuf v1.33.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) diff --git a/asset-transfer-events/chaincode-go/go.sum b/asset-transfer-events/chaincode-go/go.sum new file mode 100644 index 00000000..f34ad0b4 --- /dev/null +++ b/asset-transfer-events/chaincode-go/go.sum @@ -0,0 +1,127 @@ +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ= +github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY= +github.com/go-openapi/jsonreference v0.21.0 h1:Rs+Y7hSXT83Jacb7kFyjn4ijOuVGSvOdF2+tg1TRrwQ= +github.com/go-openapi/jsonreference v0.21.0/go.mod h1:LmZmgsrTkVg9LG4EaHeY8cBDslNPMo06cago5JNLkm4= +github.com/go-openapi/spec v0.21.0 h1:LTVzPc3p/RzRnkQqLRndbAzjY0d0BCL72A6j3CdL9ZY= +github.com/go-openapi/spec v0.21.0/go.mod h1:78u6VdPw81XU44qEWGhtr982gJ5BWg2c0I5XwVMotYk= +github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE= +github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ= +github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= +github.com/gobuffalo/envy v1.10.2 h1:EIi03p9c3yeuRCFPOKcSfajzkLb3hrRjEpHGI8I2Wo4= +github.com/gobuffalo/envy v1.10.2/go.mod h1:qGAGwdvDsaEtPhfBzb3o0SfDea8ByGn9j8bKmVft9z8= +github.com/gobuffalo/logger v1.0.0/go.mod h1:2zbswyIUa45I+c+FLXuWl9zSWEiVuthsk8ze5s8JvPs= +github.com/gobuffalo/packd v0.3.0/go.mod h1:zC7QkmNkYVGKPw4tHpBQ+ml7W/3tIebgeo1b36chA3Q= +github.com/gobuffalo/packd v1.0.2 h1:Yg523YqnOxGIWCp69W12yYBKsoChwI7mtu6ceM9Bwfw= +github.com/gobuffalo/packd v1.0.2/go.mod h1:sUc61tDqGMXON80zpKGp92lDb86Km28jfvX7IAyxFT8= +github.com/gobuffalo/packr v1.30.1 h1:hu1fuVR3fXEZR7rXNW3h8rqSML8EVAf6KNm0NKO/wKg= +github.com/gobuffalo/packr v1.30.1/go.mod h1:ljMyFO2EcrnzsHsN99cvbq055Y9OhRrIaviy289eRuk= +github.com/gobuffalo/packr/v2 v2.5.1/go.mod h1:8f9c96ITobJlPzI44jj+4tHnEKNt0xXWSVlXRN9X1Iw= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hyperledger/fabric-chaincode-go v0.0.0-20240124143825-7dec3c7e7d45 h1:tZeJCTwbAE3cwi6XId+dYd/gTtfTKzZ3uEb1ksvQf7I= +github.com/hyperledger/fabric-chaincode-go v0.0.0-20240124143825-7dec3c7e7d45/go.mod h1:YZBt6/ZlJCzyPoWecbfFp34G+ZIYKodTQA46c0sxHIk= +github.com/hyperledger/fabric-contract-api-go v1.2.2 h1:zun9/BmaIWFSSOkfQXikdepK0XDb7MkJfc/lb5j3ku8= +github.com/hyperledger/fabric-contract-api-go v1.2.2/go.mod h1:UnFLlRFn8GvXE7mXxWtU+bESM7fb5YzsKo1DA16vvaE= +github.com/hyperledger/fabric-protos-go v0.3.3 h1:0nssqz8QWJNVNBVQz+IIfAd2j1ku7QPKFSM/1anKizI= +github.com/hyperledger/fabric-protos-go v0.3.3/go.mod h1:BPXse9gIOQwyAePQrwQVUcc44bTW4bB5V3tujuvyArk= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= +github.com/joho/godotenv v1.4.0/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= +github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= +github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= +github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +github.com/karrick/godirwalk v1.10.12/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= +github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= +github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo= +github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= +github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= +github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190621222207-cc06ce4a13d4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/mod v0.16.0 h1:QX4fJ0Rr5cPQCF7O9lh9Se4pmwfwskqZfq5moyldzic= +golang.org/x/mod v0.16.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc= +golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190515120540-06a5c4944438/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= +golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/tools v0.0.0-20190624180213-70d37148ca0c/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda h1:LI5DOvAxUPMv/50agcLLoo+AdWc1irS9Rzz4vPuD1V4= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= +google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk= +google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE= +google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= From ebbc41993350f8a98442d16fe39a70fdbd73a07d Mon Sep 17 00:00:00 2001 From: Sam Yuan Date: Sat, 6 Apr 2024 18:07:18 +0800 Subject: [PATCH 05/19] Decouple fabric tools image from fabric sample (#1186) * Decouple fabric tools image from fabric sample * update with review comments Signed-off-by: Sam Yuan --- .../infrastructure/sample-network/network | 3 --- test-network/addOrg3/addOrg3.sh | 7 +++--- .../compose/compose-bft-test-net.yaml | 23 ------------------- test-network/compose/compose-test-net.yaml | 23 ------------------- .../docker/docker-compose-bft-test-net.yaml | 6 ----- .../docker/docker-compose-test-net.yaml | 6 ----- test-network/network.sh | 4 ++-- test-network/scripts/configUpdate.sh | 10 ++++++-- test-network/scripts/createChannel.sh | 4 +--- test-network/scripts/envVar.sh | 22 +++++++++++------- .../scripts/org3-scripts/joinChannel.sh | 13 ++++++++--- .../org3-scripts/updateChannelConfig.sh | 14 +++++++---- test-network/scripts/setAnchorPeer.sh | 11 ++++++--- 13 files changed, 56 insertions(+), 90 deletions(-) diff --git a/full-stack-asset-transfer-guide/infrastructure/sample-network/network b/full-stack-asset-transfer-guide/infrastructure/sample-network/network index 8b0fe203..1cb0b286 100755 --- a/full-stack-asset-transfer-guide/infrastructure/sample-network/network +++ b/full-stack-asset-transfer-guide/infrastructure/sample-network/network @@ -81,8 +81,6 @@ context PEER_IMAGE ghcr.io/hyperledger-labs/fabric-builder-k8s/k8 context PEER_IMAGE_LABEL 0.11.0 # When using k8s-fabric-peer in Fabric v2.5+, 0.11.0+ should be specified context ORDERER_IMAGE ${FABRIC_CONTAINER_REGISTRY}/fabric-orderer context ORDERER_IMAGE_LABEL ${FABRIC_VERSION} -context TOOLS_IMAGE ${FABRIC_CONTAINER_REGISTRY}/fabric-tools -context TOOLS_IMAGE_LABEL ${FABRIC_VERSION} context OPERATOR_IMAGE ghcr.io/hyperledger-labs/fabric-operator context OPERATOR_IMAGE_LABEL 1.0.4 context INIT_IMAGE registry.access.redhat.com/ubi8/ubi-minimal @@ -102,7 +100,6 @@ export FABRIC_DEPLOYER_IMAGE=${DEPLOYER_IMAGE}:${DEPLOYER_IMAGE_LABEL} export FABRIC_CA_IMAGE=${CA_IMAGE}:${CA_IMAGE_LABEL} export FABRIC_PEER_IMAGE=${PEER_IMAGE}:${PEER_IMAGE_LABEL} export FABRIC_ORDERER_IMAGE=${ORDERER_IMAGE}:${ORDERER_IMAGE_LABEL} -export FABRIC_TOOLS_IMAGE=${TOOLS_IMAGE}:${TOOLS_IMAGE_LABEL} export TEMP_DIR=${PWD}/temp diff --git a/test-network/addOrg3/addOrg3.sh b/test-network/addOrg3/addOrg3.sh index f1beba84..446c37c1 100755 --- a/test-network/addOrg3/addOrg3.sh +++ b/test-network/addOrg3/addOrg3.sh @@ -158,16 +158,17 @@ function addOrg3 () { infoln "Bringing up Org3 peer" Org3Up - # Use the CLI container to create the configuration transaction needed to add + # Create the configuration transaction needed to add # Org3 to the network infoln "Generating and submitting config tx to add Org3" - ${CONTAINER_CLI} exec cli ./scripts/org3-scripts/updateChannelConfig.sh $CHANNEL_NAME $CLI_DELAY $CLI_TIMEOUT $VERBOSE + cp ${PWD}/../../config/core.yaml ${PWD} + . ../scripts/org3-scripts/updateChannelConfig.sh $CHANNEL_NAME $CLI_DELAY $CLI_TIMEOUT $VERBOSE if [ $? -ne 0 ]; then fatalln "ERROR !!!! Unable to create config tx" fi infoln "Joining Org3 peers to network" - ${CONTAINER_CLI} exec cli ./scripts/org3-scripts/joinChannel.sh $CHANNEL_NAME $CLI_DELAY $CLI_TIMEOUT $VERBOSE + . ../scripts/org3-scripts/joinChannel.sh $CHANNEL_NAME $CLI_DELAY $CLI_TIMEOUT $VERBOSE if [ $? -ne 0 ]; then fatalln "ERROR !!!! Unable to join Org3 peers to network" fi diff --git a/test-network/compose/compose-bft-test-net.yaml b/test-network/compose/compose-bft-test-net.yaml index cdab05e3..4ab83059 100644 --- a/test-network/compose/compose-bft-test-net.yaml +++ b/test-network/compose/compose-bft-test-net.yaml @@ -262,26 +262,3 @@ services: - 9445:9445 networks: - test - - cli: - container_name: cli - image: hyperledger/fabric-tools:latest - labels: - service: hyperledger-fabric - tty: true - stdin_open: true - environment: - - GOPATH=/opt/gopath - - FABRIC_LOGGING_SPEC=INFO - - FABRIC_CFG_PATH=/etc/hyperledger/peercfg - #- FABRIC_LOGGING_SPEC=DEBUG - working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer - command: /bin/bash - volumes: - - ../organizations:/opt/gopath/src/github.com/hyperledger/fabric/peer/organizations - - ../scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts/ - depends_on: - - peer0.org1.example.com - - peer0.org2.example.com - networks: - - test \ No newline at end of file diff --git a/test-network/compose/compose-test-net.yaml b/test-network/compose/compose-test-net.yaml index ba3a968c..dcac21b0 100644 --- a/test-network/compose/compose-test-net.yaml +++ b/test-network/compose/compose-test-net.yaml @@ -135,26 +135,3 @@ services: - 9445:9445 networks: - test - - cli: - container_name: cli - image: hyperledger/fabric-tools:latest - labels: - service: hyperledger-fabric - tty: true - stdin_open: true - environment: - - GOPATH=/opt/gopath - - FABRIC_LOGGING_SPEC=INFO - - FABRIC_CFG_PATH=/etc/hyperledger/peercfg - #- FABRIC_LOGGING_SPEC=DEBUG - working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer - command: /bin/bash - volumes: - - ../organizations:/opt/gopath/src/github.com/hyperledger/fabric/peer/organizations - - ../scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts/ - depends_on: - - peer0.org1.example.com - - peer0.org2.example.com - networks: - - test \ No newline at end of file diff --git a/test-network/compose/docker/docker-compose-bft-test-net.yaml b/test-network/compose/docker/docker-compose-bft-test-net.yaml index 68f6dc56..421d8e0b 100644 --- a/test-network/compose/docker/docker-compose-bft-test-net.yaml +++ b/test-network/compose/docker/docker-compose-bft-test-net.yaml @@ -30,9 +30,3 @@ services: volumes: - ./docker/peercfg:/etc/hyperledger/peercfg - ${DOCKER_SOCK}:/host/var/run/docker.sock - - cli: - container_name: cli - image: hyperledger/fabric-tools:latest - volumes: - - ./docker/peercfg:/etc/hyperledger/peercfg diff --git a/test-network/compose/docker/docker-compose-test-net.yaml b/test-network/compose/docker/docker-compose-test-net.yaml index 68f6dc56..421d8e0b 100644 --- a/test-network/compose/docker/docker-compose-test-net.yaml +++ b/test-network/compose/docker/docker-compose-test-net.yaml @@ -30,9 +30,3 @@ services: volumes: - ./docker/peercfg:/etc/hyperledger/peercfg - ${DOCKER_SOCK}:/host/var/run/docker.sock - - cli: - container_name: cli - image: hyperledger/fabric-tools:latest - volumes: - - ./docker/peercfg:/etc/hyperledger/peercfg diff --git a/test-network/network.sh b/test-network/network.sh index 9739a68b..569cee65 100755 --- a/test-network/network.sh +++ b/test-network/network.sh @@ -70,10 +70,10 @@ function checkPrereqs() { errorln "https://hyperledger-fabric.readthedocs.io/en/latest/install.html" exit 1 fi - # use the fabric tools container to see if the samples and binaries match your + # use the fabric peer container to see if the samples and binaries match your # docker images LOCAL_VERSION=$(peer version | sed -ne 's/^ Version: //p') - DOCKER_IMAGE_VERSION=$(${CONTAINER_CLI} run --rm hyperledger/fabric-tools:latest peer version | sed -ne 's/^ Version: //p') + DOCKER_IMAGE_VERSION=$(${CONTAINER_CLI} run --rm hyperledger/fabric-peer:latest peer version | sed -ne 's/^ Version: //p') infoln "LOCAL_VERSION=$LOCAL_VERSION" infoln "DOCKER_IMAGE_VERSION=$DOCKER_IMAGE_VERSION" diff --git a/test-network/scripts/configUpdate.sh b/test-network/scripts/configUpdate.sh index 87087ac4..a54d1410 100755 --- a/test-network/scripts/configUpdate.sh +++ b/test-network/scripts/configUpdate.sh @@ -6,7 +6,13 @@ # # import utils -. scripts/envVar.sh +# test network home var targets to test network folder +# the reason we use a var here is considering with org3 specific folder +# when invoking this for org3 as test-network/scripts/org3-scripts +# the value is changed from default as $PWD(test-network) +# to .. as relative path to make the import works +test_network_home=${test_network_home:-${PWD}} +. ${test_network_home}/scripts/envVar.sh # fetchChannelConfig # Writes the current channel config for a given channel to a JSON file @@ -20,7 +26,7 @@ fetchChannelConfig() { infoln "Fetching the most recent configuration block for the channel" set -x - peer channel fetch config config_block.pb -o orderer.example.com:7050 --ordererTLSHostnameOverride orderer.example.com -c $CHANNEL --tls --cafile "$ORDERER_CA" + peer channel fetch config config_block.pb -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com -c $CHANNEL --tls --cafile "$ORDERER_CA" { set +x; } 2>/dev/null infoln "Decoding config block to JSON and isolating config to ${OUTPUT}" diff --git a/test-network/scripts/createChannel.sh b/test-network/scripts/createChannel.sh index 6ff5ae04..8f7980d4 100755 --- a/test-network/scripts/createChannel.sh +++ b/test-network/scripts/createChannel.sh @@ -2,8 +2,6 @@ # imports . scripts/envVar.sh -. scripts/utils.sh - CHANNEL_NAME="$1" DELAY="$2" @@ -94,7 +92,7 @@ joinChannel() { setAnchorPeer() { ORG=$1 - ${CONTAINER_CLI} exec cli ./scripts/setAnchorPeer.sh $ORG $CHANNEL_NAME + . scripts/setAnchorPeer.sh $ORG $CHANNEL_NAME } diff --git a/test-network/scripts/envVar.sh b/test-network/scripts/envVar.sh index c30376c3..c4b19b5a 100755 --- a/test-network/scripts/envVar.sh +++ b/test-network/scripts/envVar.sh @@ -8,13 +8,19 @@ # This is a collection of bash functions used by different scripts # imports -. scripts/utils.sh +# test network home var targets to test network folder +# the reason we use a var here is considering with org3 specific folder +# when invoking this for org3 as test-network/scripts/org3-scripts +# the value is changed from default as $PWD(test-network) +# to .. as relative path to make the import works +test_network_home=${test_network_home:-${PWD}} +. ${test_network_home}/scripts/utils.sh export CORE_PEER_TLS_ENABLED=true -export ORDERER_CA=${PWD}/organizations/ordererOrganizations/example.com/tlsca/tlsca.example.com-cert.pem -export PEER0_ORG1_CA=${PWD}/organizations/peerOrganizations/org1.example.com/tlsca/tlsca.org1.example.com-cert.pem -export PEER0_ORG2_CA=${PWD}/organizations/peerOrganizations/org2.example.com/tlsca/tlsca.org2.example.com-cert.pem -export PEER0_ORG3_CA=${PWD}/organizations/peerOrganizations/org3.example.com/tlsca/tlsca.org3.example.com-cert.pem +export ORDERER_CA=${test_network_home}/organizations/ordererOrganizations/example.com/tlsca/tlsca.example.com-cert.pem +export PEER0_ORG1_CA=${test_network_home}/organizations/peerOrganizations/org1.example.com/tlsca/tlsca.org1.example.com-cert.pem +export PEER0_ORG2_CA=${test_network_home}/organizations/peerOrganizations/org2.example.com/tlsca/tlsca.org2.example.com-cert.pem +export PEER0_ORG3_CA=${test_network_home}/organizations/peerOrganizations/org3.example.com/tlsca/tlsca.org3.example.com-cert.pem # Set environment variables for the peer org setGlobals() { @@ -28,17 +34,17 @@ setGlobals() { if [ $USING_ORG -eq 1 ]; then export CORE_PEER_LOCALMSPID="Org1MSP" export CORE_PEER_TLS_ROOTCERT_FILE=$PEER0_ORG1_CA - export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp + export CORE_PEER_MSPCONFIGPATH=${test_network_home}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp export CORE_PEER_ADDRESS=localhost:7051 elif [ $USING_ORG -eq 2 ]; then export CORE_PEER_LOCALMSPID="Org2MSP" export CORE_PEER_TLS_ROOTCERT_FILE=$PEER0_ORG2_CA - export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp + export CORE_PEER_MSPCONFIGPATH=${test_network_home}/organizations/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp export CORE_PEER_ADDRESS=localhost:9051 elif [ $USING_ORG -eq 3 ]; then export CORE_PEER_LOCALMSPID="Org3MSP" export CORE_PEER_TLS_ROOTCERT_FILE=$PEER0_ORG3_CA - export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org3.example.com/users/Admin@org3.example.com/msp + export CORE_PEER_MSPCONFIGPATH=${test_network_home}/organizations/peerOrganizations/org3.example.com/users/Admin@org3.example.com/msp export CORE_PEER_ADDRESS=localhost:11051 else errorln "ORG Unknown" diff --git a/test-network/scripts/org3-scripts/joinChannel.sh b/test-network/scripts/org3-scripts/joinChannel.sh index 904d7942..b10c13c7 100755 --- a/test-network/scripts/org3-scripts/joinChannel.sh +++ b/test-network/scripts/org3-scripts/joinChannel.sh @@ -23,11 +23,18 @@ COUNTER=1 MAX_RETRY=5 # import environment variables -. scripts/envVar.sh +# test network home var targets to test network folder +# the reason we use a var here is considering with org3 specific folder +# when invoking this for org3 as test-network/scripts/org3-scripts +# the value is changed from default as $PWD(test-network) +# to .. as relative path to make the import works +export test_network_home=.. +. ${test_network_home}/scripts/envVar.sh # joinChannel ORG joinChannel() { ORG=$1 + setGlobals $ORG local rc=1 local COUNTER=1 ## Sometimes Join takes time, hence retry @@ -46,7 +53,7 @@ joinChannel() { setAnchorPeer() { ORG=$1 - scripts/setAnchorPeer.sh $ORG $CHANNEL_NAME + ${test_network_home}/scripts/setAnchorPeer.sh $ORG $CHANNEL_NAME } setGlobalsCLI 3 @@ -54,7 +61,7 @@ BLOCKFILE="${CHANNEL_NAME}.block" echo "Fetching channel config block from orderer..." set -x -peer channel fetch 0 $BLOCKFILE -o orderer.example.com:7050 --ordererTLSHostnameOverride orderer.example.com -c $CHANNEL_NAME --tls --cafile "$ORDERER_CA" >&log.txt +peer channel fetch 0 $BLOCKFILE -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com -c $CHANNEL_NAME --tls --cafile "$ORDERER_CA" >&log.txt res=$? { set +x; } 2>/dev/null cat log.txt diff --git a/test-network/scripts/org3-scripts/updateChannelConfig.sh b/test-network/scripts/org3-scripts/updateChannelConfig.sh index 6a9df1f5..c0d6b911 100755 --- a/test-network/scripts/org3-scripts/updateChannelConfig.sh +++ b/test-network/scripts/org3-scripts/updateChannelConfig.sh @@ -23,9 +23,13 @@ MAX_RETRY=5 # imports -. scripts/envVar.sh -. scripts/configUpdate.sh -. scripts/utils.sh +# test network home var targets to test network folder +# the reason we use a var here is considering with org3 specific folder +# when invoking this for org3 as test-network/scripts/org3-scripts +# the value is changed from default as $PWD(test-network) +# to .. as relative path to make the import works +export test_network_home=.. +. ${test_network_home}/scripts/configUpdate.sh infoln "Creating config transaction to add org3 to network" @@ -34,7 +38,7 @@ fetchChannelConfig 1 ${CHANNEL_NAME} config.json # Modify the configuration to append the new org set -x -jq -s '.[0] * {"channel_group":{"groups":{"Application":{"groups": {"Org3MSP":.[1]}}}}}' config.json ./organizations/peerOrganizations/org3.example.com/org3.json > modified_config.json +jq -s '.[0] * {"channel_group":{"groups":{"Application":{"groups": {"Org3MSP":.[1]}}}}}' config.json ${test_network_home}/organizations/peerOrganizations/org3.example.com/org3.json > modified_config.json { set +x; } 2>/dev/null # Compute a config update, based on the differences between config.json and modified_config.json, write it as a transaction to org3_update_in_envelope.pb @@ -46,7 +50,7 @@ signConfigtxAsPeerOrg 1 org3_update_in_envelope.pb infoln "Submitting transaction from a different peer (peer0.org2) which also signs it" setGlobals 2 set -x -peer channel update -f org3_update_in_envelope.pb -c ${CHANNEL_NAME} -o orderer.example.com:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile "$ORDERER_CA" +peer channel update -f org3_update_in_envelope.pb -c ${CHANNEL_NAME} -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile "$ORDERER_CA" { set +x; } 2>/dev/null successln "Config transaction to add org3 to network submitted" diff --git a/test-network/scripts/setAnchorPeer.sh b/test-network/scripts/setAnchorPeer.sh index 743203eb..39a073f2 100755 --- a/test-network/scripts/setAnchorPeer.sh +++ b/test-network/scripts/setAnchorPeer.sh @@ -6,8 +6,13 @@ # # import utils -. scripts/envVar.sh -. scripts/configUpdate.sh +# test network home var targets to test network folder +# the reason we use a var here is considering with org3 specific folder +# when invoking this for org3 as test-network/scripts/org3-scripts +# the value is changed from default as $PWD(test-network) +# to .. as relative path to make the import works +test_network_home=${test_network_home:-${PWD}} +. ${test_network_home}/scripts/configUpdate.sh # NOTE: this must be run in a CLI container since it requires jq and configtxlator @@ -42,7 +47,7 @@ createAnchorPeerUpdate() { } updateAnchorPeer() { - peer channel update -o orderer.example.com:7050 --ordererTLSHostnameOverride orderer.example.com -c $CHANNEL_NAME -f ${CORE_PEER_LOCALMSPID}anchors.tx --tls --cafile "$ORDERER_CA" >&log.txt + peer channel update -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com -c $CHANNEL_NAME -f ${CORE_PEER_LOCALMSPID}anchors.tx --tls --cafile "$ORDERER_CA" >&log.txt res=$? cat log.txt verifyResult $res "Anchor peer update failed" From 02bcb44ad4613c3b00305777fad71171883ca5a4 Mon Sep 17 00:00:00 2001 From: Tatsuya Sato Date: Thu, 11 Apr 2024 03:58:03 +0000 Subject: [PATCH 06/19] Fix docs and scripts for asset-transfer-basic as an external service Signed-off-by: Tatsuya Sato --- asset-transfer-basic/chaincode-external/README.md | 2 +- asset-transfer-basic/chaincode-external/sampleBuilder/bin/build | 2 +- .../chaincode-external/sampleBuilder/bin/detect | 2 +- .../chaincode-external/sampleBuilder/bin/release | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/asset-transfer-basic/chaincode-external/README.md b/asset-transfer-basic/chaincode-external/README.md index de06f89c..a5188efc 100755 --- a/asset-transfer-basic/chaincode-external/README.md +++ b/asset-transfer-basic/chaincode-external/README.md @@ -22,7 +22,7 @@ To set the path within the peer container, you will need to modify the docker co ``` - ../..:/opt/gopath/src/github.com/hyperledger/fabric-samples - - ../../config/core.yaml:/etc/hyperledger/fabric/core.yaml + - ../../config/core.yaml:/etc/hyperledger/peercfg/core.yaml ``` This update will mount the `core.yaml` that you modified into the peer container and override the configuration file within the peer image. The update also mounts the fabric-sample builder so that it can be found at the location that you specified in `core.yaml`. You also have the option of commenting out the line `- /var/run/docker.sock:/host/var/run/docker.sock`, since we no longer need to access the docker daemon from inside the peer container to launch the chaincode. diff --git a/asset-transfer-basic/chaincode-external/sampleBuilder/bin/build b/asset-transfer-basic/chaincode-external/sampleBuilder/bin/build index bddd18be..57e90f35 100755 --- a/asset-transfer-basic/chaincode-external/sampleBuilder/bin/build +++ b/asset-transfer-basic/chaincode-external/sampleBuilder/bin/build @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash set -euo pipefail diff --git a/asset-transfer-basic/chaincode-external/sampleBuilder/bin/detect b/asset-transfer-basic/chaincode-external/sampleBuilder/bin/detect index d4b70078..d6ed2edc 100755 --- a/asset-transfer-basic/chaincode-external/sampleBuilder/bin/detect +++ b/asset-transfer-basic/chaincode-external/sampleBuilder/bin/detect @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash set -euo pipefail diff --git a/asset-transfer-basic/chaincode-external/sampleBuilder/bin/release b/asset-transfer-basic/chaincode-external/sampleBuilder/bin/release index 7f03a052..cd3cd1b5 100755 --- a/asset-transfer-basic/chaincode-external/sampleBuilder/bin/release +++ b/asset-transfer-basic/chaincode-external/sampleBuilder/bin/release @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash set -euo pipefail From d4ce4cfadcad2a6a6ce8fb23ad819f4b73ed85cd Mon Sep 17 00:00:00 2001 From: "Mark S. Lewis" Date: Fri, 5 Apr 2024 12:07:54 +0100 Subject: [PATCH 07/19] Update asset-transfer-sbe/chaincode-java Signed-off-by: Mark S. Lewis --- .../chaincode-java/build.gradle | 14 +--- .../hyperledger/fabric/samples/sbe/Asset.java | 5 +- .../fabric/samples/sbe/AssetContract.java | 78 +++++++++++-------- 3 files changed, 50 insertions(+), 47 deletions(-) diff --git a/asset-transfer-sbe/chaincode-java/build.gradle b/asset-transfer-sbe/chaincode-java/build.gradle index 1f1f5b21..72510d84 100644 --- a/asset-transfer-sbe/chaincode-java/build.gradle +++ b/asset-transfer-sbe/chaincode-java/build.gradle @@ -13,17 +13,9 @@ group 'org.hyperledger.fabric.samples' version '1.0-SNAPSHOT' dependencies { - implementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.5.+' - implementation 'org.json:json:+' - implementation 'com.google.protobuf:protobuf-java:3.+' - implementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-protos:2.4.1' - implementation 'com.owlike:genson:1.5' - - testImplementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.5.+' - testImplementation 'org.junit.jupiter:junit-jupiter:5.4.2' - testImplementation 'org.assertj:assertj-core:3.11.1' - testImplementation 'org.mockito:mockito-core:2.+' + implementation 'org.hyperledger.fabric:fabric-protos:0.3.3' + implementation 'com.owlike:genson:1.6' } repositories { @@ -79,8 +71,6 @@ test { } } -mainClassName = 'org.hyperledger.fabric.contract.ContractRouter' - shadowJar { archiveBaseName = 'chaincode' archiveVersion = '' diff --git a/asset-transfer-sbe/chaincode-java/src/main/java/org/hyperledger/fabric/samples/sbe/Asset.java b/asset-transfer-sbe/chaincode-java/src/main/java/org/hyperledger/fabric/samples/sbe/Asset.java index b49d6920..ca14959d 100644 --- a/asset-transfer-sbe/chaincode-java/src/main/java/org/hyperledger/fabric/samples/sbe/Asset.java +++ b/asset-transfer-sbe/chaincode-java/src/main/java/org/hyperledger/fabric/samples/sbe/Asset.java @@ -4,12 +4,11 @@ package org.hyperledger.fabric.samples.sbe; -import java.util.Objects; - +import com.owlike.genson.annotation.JsonProperty; import org.hyperledger.fabric.contract.annotation.DataType; import org.hyperledger.fabric.contract.annotation.Property; -import com.owlike.genson.annotation.JsonProperty; +import java.util.Objects; @DataType() public final class Asset { diff --git a/asset-transfer-sbe/chaincode-java/src/main/java/org/hyperledger/fabric/samples/sbe/AssetContract.java b/asset-transfer-sbe/chaincode-java/src/main/java/org/hyperledger/fabric/samples/sbe/AssetContract.java index 9843ee3b..62b286b0 100644 --- a/asset-transfer-sbe/chaincode-java/src/main/java/org/hyperledger/fabric/samples/sbe/AssetContract.java +++ b/asset-transfer-sbe/chaincode-java/src/main/java/org/hyperledger/fabric/samples/sbe/AssetContract.java @@ -4,6 +4,7 @@ package org.hyperledger.fabric.samples.sbe; +import com.owlike.genson.Genson; import org.hyperledger.fabric.contract.Context; import org.hyperledger.fabric.contract.ContractInterface; import org.hyperledger.fabric.contract.annotation.Contract; @@ -11,19 +12,19 @@ import org.hyperledger.fabric.contract.annotation.Default; import org.hyperledger.fabric.contract.annotation.Info; import org.hyperledger.fabric.contract.annotation.License; import org.hyperledger.fabric.contract.annotation.Transaction; -import org.hyperledger.fabric.protos.common.MspPrincipal; -import org.hyperledger.fabric.protos.common.Policies; +import org.hyperledger.fabric.protos.common.MSPPrincipal; +import org.hyperledger.fabric.protos.common.MSPRole; +import org.hyperledger.fabric.protos.common.SignaturePolicy; +import org.hyperledger.fabric.protos.common.SignaturePolicyEnvelope; import org.hyperledger.fabric.shim.ChaincodeException; import org.hyperledger.fabric.shim.ChaincodeStub; import org.hyperledger.fabric.shim.ext.sbe.StateBasedEndorsement; import org.hyperledger.fabric.shim.ext.sbe.impl.StateBasedEndorsementFactory; -import com.owlike.genson.Genson; - -import java.util.ArrayList; -import java.util.Arrays; import java.util.Comparator; import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.IntStream; @Contract( name = "sbe", @@ -36,7 +37,6 @@ import java.util.List; url = "http://www.apache.org/licenses/LICENSE-2.0.html"))) @Default public final class AssetContract implements ContractInterface { - private final Genson genson = new Genson(); private enum AssetTransferErrors { @@ -71,7 +71,7 @@ public final class AssetContract implements ContractInterface { stub.putStringState(assetId, assetJSON); // Set the endorsement policy of the assetId Key, such that current owner Org is required to endorse future updates - setStateBasedEndorsement(ctx, assetId, new String[]{ownerOrg}); + setStateBasedEndorsement(ctx, assetId, List.of(ownerOrg)); // Optionally, set the endorsement policy of the assetId Key, such that any 1 Org (N) out of the specified Orgs can endorse future updates // setStateBasedEndorsementNOutOf(ctx, assetId, 1, new String[]{"Org1MSP", "Org2MSP"}); @@ -165,10 +165,10 @@ public final class AssetContract implements ContractInterface { stub.putStringState(assetId, updatedAssetJSON); // Re-Set the endorsement policy of the assetId Key, such that a new owner Org Peer is required to endorse future updates - setStateBasedEndorsement(ctx, assetId, new String[]{newOwnerOrg}); + setStateBasedEndorsement(ctx, assetId, List.of(newOwnerOrg)); // Optionally, set the endorsement policy of the assetId Key, such that any 1 Org (N) out of the specified Orgs can endorse future updates - // setStateBasedEndorsementNOutOf(ctx, assetId, 1, new String[]{"Org1MSP", "Org2MSP"}); + // setStateBasedEndorsementNOutOf(ctx, assetId, 1, List.of("Org1MSP", "Org2MSP")); return asset; } @@ -205,9 +205,9 @@ public final class AssetContract implements ContractInterface { * @param assetId the id of the asset * @param ownerOrgs the list of Owner Org MSPID's */ - private static void setStateBasedEndorsement(final Context ctx, final String assetId, final String[] ownerOrgs) { + private static void setStateBasedEndorsement(final Context ctx, final String assetId, final List ownerOrgs) { StateBasedEndorsement stateBasedEndorsement = StateBasedEndorsementFactory.getInstance().newStateBasedEndorsement(null); - stateBasedEndorsement.addOrgs(StateBasedEndorsement.RoleType.RoleTypeMember, ownerOrgs); + stateBasedEndorsement.addOrgs(StateBasedEndorsement.RoleType.RoleTypeMember, ownerOrgs.toArray(new String[0])); ctx.getStub().setStateValidationParameter(assetId, stateBasedEndorsement.policy()); } @@ -220,36 +220,50 @@ public final class AssetContract implements ContractInterface { * @param nOrgs the number of N Orgs to endorse out of the list of Orgs provided * @param ownerOrgs the list of Owner Org MSPID's */ - private static void setStateBasedEndorsementNOutOf(final Context ctx, final String assetId, final int nOrgs, final String[] ownerOrgs) { - ctx.getStub().setStateValidationParameter(assetId, policy(nOrgs, Arrays.asList(ownerOrgs))); + private static void setStateBasedEndorsementNOutOf(final Context ctx, final String assetId, final int nOrgs, final List ownerOrgs) { + ctx.getStub().setStateValidationParameter(assetId, policy(nOrgs, ownerOrgs)); } /** * Create a policy that requires a given number (N) of Org principals signatures out of the provided list of Orgs * * @param nOrgs the number of Org principals signatures required to endorse (out of the provided list of Orgs) - * @param mspids the list of Owner Org MSPID's + * @param mspIds the list of Owner Org MSPID's */ - private static byte[] policy(final int nOrgs, final List mspids) { - mspids.sort(Comparator.naturalOrder()); - final List principals = new ArrayList<>(); - final List signPolicy = new ArrayList<>(); - for (int i = 0; i < mspids.size(); i++) { - final String mspid = mspids.get(i); - principals.add(MspPrincipal.MSPPrincipal.newBuilder().setPrincipalClassification(MspPrincipal.MSPPrincipal.Classification.ROLE) - .setPrincipal(MspPrincipal.MSPRole.newBuilder().setMspIdentifier(mspid).setRole(MspPrincipal.MSPRole.MSPRoleType.MEMBER).build().toByteString()).build()); - signPolicy.add(signedBy(i)); - } - // Create the policy such that it requires any N signature's from all of the principals provided - return Policies.SignaturePolicyEnvelope.newBuilder().setVersion(0).setRule(nOutOf(nOrgs, signPolicy)) - .addAllIdentities(principals).build().toByteArray(); + private static byte[] policy(final int nOrgs, final List mspIds) { + mspIds.sort(Comparator.naturalOrder()); + + var principals = mspIds.stream() + .map(mspId -> MSPRole.newBuilder() + .setMspIdentifier(mspId) + .setRole(MSPRole.MSPRoleType.MEMBER) + .build()) + .map(role -> MSPPrincipal.newBuilder() + .setPrincipalClassification(MSPPrincipal.Classification.ROLE) + .setPrincipal(role.toByteString()) + .build()) + .collect(Collectors.toList()); + + var signPolicy = IntStream.range(0, mspIds.size()) + .mapToObj(AssetContract::signedBy) + .collect(Collectors.toList()); + + // Create the policy such that it requires any N signature's from all the principals provided + return SignaturePolicyEnvelope.newBuilder() + .setVersion(0) + .setRule(nOutOf(nOrgs, signPolicy)) + .addAllIdentities(principals) + .build() + .toByteArray(); } - private static Policies.SignaturePolicy signedBy(final int index) { - return Policies.SignaturePolicy.newBuilder().setSignedBy(index).build(); + private static SignaturePolicy signedBy(final int index) { + return SignaturePolicy.newBuilder().setSignedBy(index).build(); } - private static Policies.SignaturePolicy nOutOf(final int n, final List policies) { - return Policies.SignaturePolicy.newBuilder().setNOutOf(Policies.SignaturePolicy.NOutOf.newBuilder().setN(n).addAllRules(policies).build()).build(); + private static SignaturePolicy nOutOf(final int n, final List policies) { + return SignaturePolicy.newBuilder().setNOutOf( + SignaturePolicy.NOutOf.newBuilder().setN(n).addAllRules(policies).build() + ).build(); } } From 820368571d1f20baed4bd42f04c75a33d1e3d9af Mon Sep 17 00:00:00 2001 From: David Enyeart Date: Thu, 11 Apr 2024 22:38:54 -0400 Subject: [PATCH 08/19] test-network envVar.sh script improvement Change shell script to use single equals. In my shell environment single bracket with double equals did not work. It caused failure when running the chaincode-external tutorial README. It looks like for maximum portability, it is best to use single bracket with single equals. Signed-off-by: David Enyeart --- test-network/scripts/envVar.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test-network/scripts/envVar.sh b/test-network/scripts/envVar.sh index c4b19b5a..f429cfaf 100755 --- a/test-network/scripts/envVar.sh +++ b/test-network/scripts/envVar.sh @@ -50,7 +50,7 @@ setGlobals() { errorln "ORG Unknown" fi - if [ "$VERBOSE" == "true" ]; then + if [ "$VERBOSE" = "true" ]; then env | grep CORE fi } From c691cf94a99372e0225927d7927b1bc367018029 Mon Sep 17 00:00:00 2001 From: Tatsuya Sato Date: Sat, 6 Apr 2024 08:07:26 +0000 Subject: [PATCH 09/19] Refactor test-network post-decoupling fabric-tools image This patch aims to refactor the test-network in several aspects, following the decoupling of the fabric-tools image from fabric-samples. - Rename 'test_network_home' env var to 'TEST_NETWORK_HOME' - Dedicate the intermediate artifacts related to configtx to channel-artifacts - Refer to core.yaml in fabric-samples/config, similar to org1 and 2, instead of adding a new core file - Remove unnecessary functions and comments for CLI container - Other minor modifications Signed-off-by: Tatsuya Sato --- test-network/.gitignore | 1 + test-network/addOrg3/addOrg3.sh | 4 +- test-network/scripts/configUpdate.sh | 26 +++++----- test-network/scripts/envVar.sh | 50 ++++++------------- .../scripts/org3-scripts/joinChannel.sh | 25 +++++----- .../org3-scripts/updateChannelConfig.sh | 28 +++++------ test-network/scripts/setAnchorPeer.sh | 16 +++--- 7 files changed, 65 insertions(+), 85 deletions(-) diff --git a/test-network/.gitignore b/test-network/.gitignore index 131b75f0..ed5913d7 100644 --- a/test-network/.gitignore +++ b/test-network/.gitignore @@ -3,6 +3,7 @@ /ledgers /ledgers-backup /channel-artifacts/*.json +/channel-artifacts/*.pb /org3-artifacts/crypto-config/* organizations/fabric-ca/ordererOrg/* organizations/fabric-ca/org1/* diff --git a/test-network/addOrg3/addOrg3.sh b/test-network/addOrg3/addOrg3.sh index 446c37c1..2d14c817 100755 --- a/test-network/addOrg3/addOrg3.sh +++ b/test-network/addOrg3/addOrg3.sh @@ -12,7 +12,7 @@ # prepending $PWD/../bin to PATH to ensure we are picking up the correct binaries # this may be commented out to resolve installed version of tools if desired export PATH=${PWD}/../../bin:${PWD}:$PATH -export FABRIC_CFG_PATH=${PWD} +export FABRIC_CFG_PATH=${PWD}/../../config export VERBOSE=false . ../scripts/utils.sh @@ -161,7 +161,7 @@ function addOrg3 () { # Create the configuration transaction needed to add # Org3 to the network infoln "Generating and submitting config tx to add Org3" - cp ${PWD}/../../config/core.yaml ${PWD} + export FABRIC_CFG_PATH=${PWD}/../../config . ../scripts/org3-scripts/updateChannelConfig.sh $CHANNEL_NAME $CLI_DELAY $CLI_TIMEOUT $VERBOSE if [ $? -ne 0 ]; then fatalln "ERROR !!!! Unable to create config tx" diff --git a/test-network/scripts/configUpdate.sh b/test-network/scripts/configUpdate.sh index a54d1410..36150df1 100755 --- a/test-network/scripts/configUpdate.sh +++ b/test-network/scripts/configUpdate.sh @@ -11,12 +11,12 @@ # when invoking this for org3 as test-network/scripts/org3-scripts # the value is changed from default as $PWD(test-network) # to .. as relative path to make the import works -test_network_home=${test_network_home:-${PWD}} -. ${test_network_home}/scripts/envVar.sh +TEST_NETWORK_HOME=${TEST_NETWORK_HOME:-${PWD}} +. ${TEST_NETWORK_HOME}/scripts/envVar.sh # fetchChannelConfig # Writes the current channel config for a given channel to a JSON file -# NOTE: this must be run in a CLI container since it requires configtxlator +# NOTE: this requires jq and configtxlator for execution. fetchChannelConfig() { ORG=$1 CHANNEL=$2 @@ -26,20 +26,20 @@ fetchChannelConfig() { infoln "Fetching the most recent configuration block for the channel" set -x - peer channel fetch config config_block.pb -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com -c $CHANNEL --tls --cafile "$ORDERER_CA" + peer channel fetch config ${TEST_NETWORK_HOME}/channel-artifacts/config_block.pb -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com -c $CHANNEL --tls --cafile "$ORDERER_CA" { set +x; } 2>/dev/null infoln "Decoding config block to JSON and isolating config to ${OUTPUT}" set -x - configtxlator proto_decode --input config_block.pb --type common.Block --output config_block.json - jq .data.data[0].payload.data.config config_block.json >"${OUTPUT}" + configtxlator proto_decode --input ${TEST_NETWORK_HOME}/channel-artifacts/config_block.pb --type common.Block --output ${TEST_NETWORK_HOME}/channel-artifacts/config_block.json + jq .data.data[0].payload.data.config ${TEST_NETWORK_HOME}/channel-artifacts/config_block.json >"${OUTPUT}" { set +x; } 2>/dev/null } # createConfigUpdate # Takes an original and modified config, and produces the config update tx # which transitions between the two -# NOTE: this must be run in a CLI container since it requires configtxlator +# NOTE: this requires configtxlator for execution. createConfigUpdate() { CHANNEL=$1 ORIGINAL=$2 @@ -47,12 +47,12 @@ createConfigUpdate() { OUTPUT=$4 set -x - configtxlator proto_encode --input "${ORIGINAL}" --type common.Config --output original_config.pb - configtxlator proto_encode --input "${MODIFIED}" --type common.Config --output modified_config.pb - configtxlator compute_update --channel_id "${CHANNEL}" --original original_config.pb --updated modified_config.pb --output config_update.pb - configtxlator proto_decode --input config_update.pb --type common.ConfigUpdate --output config_update.json - echo '{"payload":{"header":{"channel_header":{"channel_id":"'$CHANNEL'", "type":2}},"data":{"config_update":'$(cat config_update.json)'}}}' | jq . >config_update_in_envelope.json - configtxlator proto_encode --input config_update_in_envelope.json --type common.Envelope --output "${OUTPUT}" + configtxlator proto_encode --input "${ORIGINAL}" --type common.Config --output ${TEST_NETWORK_HOME}/channel-artifacts/original_config.pb + configtxlator proto_encode --input "${MODIFIED}" --type common.Config --output ${TEST_NETWORK_HOME}/channel-artifacts/modified_config.pb + configtxlator compute_update --channel_id "${CHANNEL}" --original ${TEST_NETWORK_HOME}/channel-artifacts/original_config.pb --updated ${TEST_NETWORK_HOME}/channel-artifacts/modified_config.pb --output ${TEST_NETWORK_HOME}/channel-artifacts/config_update.pb + configtxlator proto_decode --input ${TEST_NETWORK_HOME}/channel-artifacts/config_update.pb --type common.ConfigUpdate --output ${TEST_NETWORK_HOME}/channel-artifacts/config_update.json + echo '{"payload":{"header":{"channel_header":{"channel_id":"'$CHANNEL'", "type":2}},"data":{"config_update":'$(cat ${TEST_NETWORK_HOME}/channel-artifacts/config_update.json)'}}}' | jq . > ${TEST_NETWORK_HOME}/channel-artifacts/config_update_in_envelope.json + configtxlator proto_encode --input ${TEST_NETWORK_HOME}/channel-artifacts/config_update_in_envelope.json --type common.Envelope --output "${OUTPUT}" { set +x; } 2>/dev/null } diff --git a/test-network/scripts/envVar.sh b/test-network/scripts/envVar.sh index f429cfaf..15b5ba80 100755 --- a/test-network/scripts/envVar.sh +++ b/test-network/scripts/envVar.sh @@ -8,19 +8,20 @@ # This is a collection of bash functions used by different scripts # imports -# test network home var targets to test network folder -# the reason we use a var here is considering with org3 specific folder -# when invoking this for org3 as test-network/scripts/org3-scripts -# the value is changed from default as $PWD(test-network) -# to .. as relative path to make the import works -test_network_home=${test_network_home:-${PWD}} -. ${test_network_home}/scripts/utils.sh +# test network home var targets to test-network folder +# the reason we use a var here is to accommodate scenarios +# where execution occurs from folders outside of default as $PWD, such as the test-network/addOrg3 folder. +# For setting environment variables, simple relative paths like ".." could lead to unintended references +# due to how they interact with FABRIC_CFG_PATH. It's advised to specify paths more explicitly, +# such as using "../${PWD}", to ensure that Fabric's environment variables are pointing to the correct paths. +TEST_NETWORK_HOME=${TEST_NETWORK_HOME:-${PWD}} +. ${TEST_NETWORK_HOME}/scripts/utils.sh export CORE_PEER_TLS_ENABLED=true -export ORDERER_CA=${test_network_home}/organizations/ordererOrganizations/example.com/tlsca/tlsca.example.com-cert.pem -export PEER0_ORG1_CA=${test_network_home}/organizations/peerOrganizations/org1.example.com/tlsca/tlsca.org1.example.com-cert.pem -export PEER0_ORG2_CA=${test_network_home}/organizations/peerOrganizations/org2.example.com/tlsca/tlsca.org2.example.com-cert.pem -export PEER0_ORG3_CA=${test_network_home}/organizations/peerOrganizations/org3.example.com/tlsca/tlsca.org3.example.com-cert.pem +export ORDERER_CA=${TEST_NETWORK_HOME}/organizations/ordererOrganizations/example.com/tlsca/tlsca.example.com-cert.pem +export PEER0_ORG1_CA=${TEST_NETWORK_HOME}/organizations/peerOrganizations/org1.example.com/tlsca/tlsca.org1.example.com-cert.pem +export PEER0_ORG2_CA=${TEST_NETWORK_HOME}/organizations/peerOrganizations/org2.example.com/tlsca/tlsca.org2.example.com-cert.pem +export PEER0_ORG3_CA=${TEST_NETWORK_HOME}/organizations/peerOrganizations/org3.example.com/tlsca/tlsca.org3.example.com-cert.pem # Set environment variables for the peer org setGlobals() { @@ -34,17 +35,17 @@ setGlobals() { if [ $USING_ORG -eq 1 ]; then export CORE_PEER_LOCALMSPID="Org1MSP" export CORE_PEER_TLS_ROOTCERT_FILE=$PEER0_ORG1_CA - export CORE_PEER_MSPCONFIGPATH=${test_network_home}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp + export CORE_PEER_MSPCONFIGPATH=${TEST_NETWORK_HOME}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp export CORE_PEER_ADDRESS=localhost:7051 elif [ $USING_ORG -eq 2 ]; then export CORE_PEER_LOCALMSPID="Org2MSP" export CORE_PEER_TLS_ROOTCERT_FILE=$PEER0_ORG2_CA - export CORE_PEER_MSPCONFIGPATH=${test_network_home}/organizations/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp + export CORE_PEER_MSPCONFIGPATH=${TEST_NETWORK_HOME}/organizations/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp export CORE_PEER_ADDRESS=localhost:9051 elif [ $USING_ORG -eq 3 ]; then export CORE_PEER_LOCALMSPID="Org3MSP" export CORE_PEER_TLS_ROOTCERT_FILE=$PEER0_ORG3_CA - export CORE_PEER_MSPCONFIGPATH=${test_network_home}/organizations/peerOrganizations/org3.example.com/users/Admin@org3.example.com/msp + export CORE_PEER_MSPCONFIGPATH=${TEST_NETWORK_HOME}/organizations/peerOrganizations/org3.example.com/users/Admin@org3.example.com/msp export CORE_PEER_ADDRESS=localhost:11051 else errorln "ORG Unknown" @@ -55,27 +56,6 @@ setGlobals() { fi } -# Set environment variables for use in the CLI container -setGlobalsCLI() { - setGlobals $1 - - local USING_ORG="" - if [ -z "$OVERRIDE_ORG" ]; then - USING_ORG=$1 - else - USING_ORG="${OVERRIDE_ORG}" - fi - if [ $USING_ORG -eq 1 ]; then - export CORE_PEER_ADDRESS=peer0.org1.example.com:7051 - elif [ $USING_ORG -eq 2 ]; then - export CORE_PEER_ADDRESS=peer0.org2.example.com:9051 - elif [ $USING_ORG -eq 3 ]; then - export CORE_PEER_ADDRESS=peer0.org3.example.com:11051 - else - errorln "ORG Unknown" - fi -} - # parsePeerConnectionParameters $@ # Helper function that sets the peer connection parameters for a chaincode # operation diff --git a/test-network/scripts/org3-scripts/joinChannel.sh b/test-network/scripts/org3-scripts/joinChannel.sh index b10c13c7..53f3f0b8 100755 --- a/test-network/scripts/org3-scripts/joinChannel.sh +++ b/test-network/scripts/org3-scripts/joinChannel.sh @@ -5,11 +5,10 @@ # SPDX-License-Identifier: Apache-2.0 # -# This script is designed to be run in the cli container as the -# second step of the EYFN tutorial. It joins the org3 peers to the -# channel previously setup in the BYFN tutorial and install the -# chaincode as version 2.0 on peer0.org3. -# +# This script is designed to be run by addOrg3.sh as the +# second step of the Adding an Org to a Channel tutorial. +# It joins the org3 peers to the channel previously setup in +# the test network tutorial. CHANNEL_NAME="$1" DELAY="$2" @@ -23,13 +22,13 @@ COUNTER=1 MAX_RETRY=5 # import environment variables -# test network home var targets to test network folder +# test network home var targets to test-network folder # the reason we use a var here is considering with org3 specific folder # when invoking this for org3 as test-network/scripts/org3-scripts -# the value is changed from default as $PWD(test-network) -# to .. as relative path to make the import works -export test_network_home=.. -. ${test_network_home}/scripts/envVar.sh +# the value is changed from default as $PWD (test-network) +# to ${PWD}/.. to make the import works +export TEST_NETWORK_HOME="${PWD}/.." +. ${TEST_NETWORK_HOME}/scripts/envVar.sh # joinChannel ORG joinChannel() { @@ -53,11 +52,11 @@ joinChannel() { setAnchorPeer() { ORG=$1 - ${test_network_home}/scripts/setAnchorPeer.sh $ORG $CHANNEL_NAME + ${TEST_NETWORK_HOME}/scripts/setAnchorPeer.sh $ORG $CHANNEL_NAME } -setGlobalsCLI 3 -BLOCKFILE="${CHANNEL_NAME}.block" +setGlobals 3 +BLOCKFILE="${TEST_NETWORK_HOME}/channel-artifacts/${CHANNEL_NAME}.block" echo "Fetching channel config block from orderer..." set -x diff --git a/test-network/scripts/org3-scripts/updateChannelConfig.sh b/test-network/scripts/org3-scripts/updateChannelConfig.sh index c0d6b911..a34b4e92 100755 --- a/test-network/scripts/org3-scripts/updateChannelConfig.sh +++ b/test-network/scripts/org3-scripts/updateChannelConfig.sh @@ -5,10 +5,10 @@ # SPDX-License-Identifier: Apache-2.0 # -# This script is designed to be run in the cli container as the -# first step of the EYFN tutorial. It creates and submits a -# configuration transaction to add org3 to the test network -# +# This script is designed to be run by addOrg3.sh as the +# first step of the Adding an Org to a Channel tutorial. +# It creates and submits a configuration transaction to +# add org3 to the test network CHANNEL_NAME="$1" DELAY="$2" @@ -23,34 +23,34 @@ MAX_RETRY=5 # imports -# test network home var targets to test network folder +# test network home var targets to test-network folder # the reason we use a var here is considering with org3 specific folder # when invoking this for org3 as test-network/scripts/org3-scripts -# the value is changed from default as $PWD(test-network) -# to .. as relative path to make the import works -export test_network_home=.. -. ${test_network_home}/scripts/configUpdate.sh +# the value is changed from default as $PWD (test-network) +# to ${PWD}/.. to make the import works +export TEST_NETWORK_HOME="${PWD}/.." +. ${TEST_NETWORK_HOME}/scripts/configUpdate.sh infoln "Creating config transaction to add org3 to network" # Fetch the config for the channel, writing it to config.json -fetchChannelConfig 1 ${CHANNEL_NAME} config.json +fetchChannelConfig 1 ${CHANNEL_NAME} ${TEST_NETWORK_HOME}/channel-artifacts/config.json # Modify the configuration to append the new org set -x -jq -s '.[0] * {"channel_group":{"groups":{"Application":{"groups": {"Org3MSP":.[1]}}}}}' config.json ${test_network_home}/organizations/peerOrganizations/org3.example.com/org3.json > modified_config.json +jq -s '.[0] * {"channel_group":{"groups":{"Application":{"groups": {"Org3MSP":.[1]}}}}}' ${TEST_NETWORK_HOME}/channel-artifacts/config.json ${TEST_NETWORK_HOME}/organizations/peerOrganizations/org3.example.com/org3.json > ${TEST_NETWORK_HOME}/channel-artifacts/modified_config.json { set +x; } 2>/dev/null # Compute a config update, based on the differences between config.json and modified_config.json, write it as a transaction to org3_update_in_envelope.pb -createConfigUpdate ${CHANNEL_NAME} config.json modified_config.json org3_update_in_envelope.pb +createConfigUpdate ${CHANNEL_NAME} ${TEST_NETWORK_HOME}/channel-artifacts/config.json ${TEST_NETWORK_HOME}/channel-artifacts/modified_config.json ${TEST_NETWORK_HOME}/channel-artifacts/org3_update_in_envelope.pb infoln "Signing config transaction" -signConfigtxAsPeerOrg 1 org3_update_in_envelope.pb +signConfigtxAsPeerOrg 1 ${TEST_NETWORK_HOME}/channel-artifacts/org3_update_in_envelope.pb infoln "Submitting transaction from a different peer (peer0.org2) which also signs it" setGlobals 2 set -x -peer channel update -f org3_update_in_envelope.pb -c ${CHANNEL_NAME} -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile "$ORDERER_CA" +peer channel update -f ${TEST_NETWORK_HOME}/channel-artifacts/org3_update_in_envelope.pb -c ${CHANNEL_NAME} -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile "$ORDERER_CA" { set +x; } 2>/dev/null successln "Config transaction to add org3 to network submitted" diff --git a/test-network/scripts/setAnchorPeer.sh b/test-network/scripts/setAnchorPeer.sh index 39a073f2..573e6622 100755 --- a/test-network/scripts/setAnchorPeer.sh +++ b/test-network/scripts/setAnchorPeer.sh @@ -11,14 +11,14 @@ # when invoking this for org3 as test-network/scripts/org3-scripts # the value is changed from default as $PWD(test-network) # to .. as relative path to make the import works -test_network_home=${test_network_home:-${PWD}} -. ${test_network_home}/scripts/configUpdate.sh +TEST_NETWORK_HOME=${TEST_NETWORK_HOME:-${PWD}} +. ${TEST_NETWORK_HOME}/scripts/configUpdate.sh -# NOTE: this must be run in a CLI container since it requires jq and configtxlator +# NOTE: This requires jq and configtxlator for execution. createAnchorPeerUpdate() { infoln "Fetching channel config for channel $CHANNEL_NAME" - fetchChannelConfig $ORG $CHANNEL_NAME ${CORE_PEER_LOCALMSPID}config.json + fetchChannelConfig $ORG $CHANNEL_NAME ${TEST_NETWORK_HOME}/channel-artifacts/${CORE_PEER_LOCALMSPID}config.json infoln "Generating anchor peer update transaction for Org${ORG} on channel $CHANNEL_NAME" @@ -37,17 +37,17 @@ createAnchorPeerUpdate() { set -x # Modify the configuration to append the anchor peer - jq '.channel_group.groups.Application.groups.'${CORE_PEER_LOCALMSPID}'.values += {"AnchorPeers":{"mod_policy": "Admins","value":{"anchor_peers": [{"host": "'$HOST'","port": '$PORT'}]},"version": "0"}}' ${CORE_PEER_LOCALMSPID}config.json > ${CORE_PEER_LOCALMSPID}modified_config.json + jq '.channel_group.groups.Application.groups.'${CORE_PEER_LOCALMSPID}'.values += {"AnchorPeers":{"mod_policy": "Admins","value":{"anchor_peers": [{"host": "'$HOST'","port": '$PORT'}]},"version": "0"}}' ${TEST_NETWORK_HOME}/channel-artifacts/${CORE_PEER_LOCALMSPID}config.json > ${TEST_NETWORK_HOME}/channel-artifacts/${CORE_PEER_LOCALMSPID}modified_config.json { set +x; } 2>/dev/null # Compute a config update, based on the differences between # {orgmsp}config.json and {orgmsp}modified_config.json, write # it as a transaction to {orgmsp}anchors.tx - createConfigUpdate ${CHANNEL_NAME} ${CORE_PEER_LOCALMSPID}config.json ${CORE_PEER_LOCALMSPID}modified_config.json ${CORE_PEER_LOCALMSPID}anchors.tx + createConfigUpdate ${CHANNEL_NAME} ${TEST_NETWORK_HOME}/channel-artifacts/${CORE_PEER_LOCALMSPID}config.json ${TEST_NETWORK_HOME}/channel-artifacts/${CORE_PEER_LOCALMSPID}modified_config.json ${TEST_NETWORK_HOME}/channel-artifacts/${CORE_PEER_LOCALMSPID}anchors.tx } updateAnchorPeer() { - peer channel update -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com -c $CHANNEL_NAME -f ${CORE_PEER_LOCALMSPID}anchors.tx --tls --cafile "$ORDERER_CA" >&log.txt + peer channel update -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com -c $CHANNEL_NAME -f ${TEST_NETWORK_HOME}/channel-artifacts/${CORE_PEER_LOCALMSPID}anchors.tx --tls --cafile "$ORDERER_CA" >&log.txt res=$? cat log.txt verifyResult $res "Anchor peer update failed" @@ -57,7 +57,7 @@ updateAnchorPeer() { ORG=$1 CHANNEL_NAME=$2 -setGlobalsCLI $ORG +setGlobals $ORG createAnchorPeerUpdate From 42b9b60ebc32ad9412bf13716c0f7ea700acf5d4 Mon Sep 17 00:00:00 2001 From: "Mark S. Lewis" Date: Thu, 4 Apr 2024 19:15:42 +0100 Subject: [PATCH 10/19] Update Go gRPC dependency grpc.Dial() is (soon to be) deprecated in current gRPC versions. Use grpc.NewClient() instead. Signed-off-by: Mark S. Lewis --- .../application-gateway-go/assetTransfer.go | 4 +- .../application-gateway-go/go.mod | 21 ++++--- .../application-gateway-go/go.sum | 55 +++++++++---------- asset-transfer-basic/rest-api-go/go.mod | 21 ++++--- asset-transfer-basic/rest-api-go/go.sum | 55 +++++++++---------- asset-transfer-basic/rest-api-go/main.go | 2 +- .../rest-api-go/web/initialize.go | 10 ++-- .../application-gateway-go/connect.go | 4 +- .../application-gateway-go/go.mod | 21 ++++--- .../application-gateway-go/go.sum | 55 +++++++++---------- .../application-go/go.mod | 21 ++++--- .../application-go/go.sum | 55 +++++++++---------- .../application-go/hsm-sample.go | 4 +- 13 files changed, 160 insertions(+), 168 deletions(-) diff --git a/asset-transfer-basic/application-gateway-go/assetTransfer.go b/asset-transfer-basic/application-gateway-go/assetTransfer.go index 6f7ed496..3e34f0b6 100755 --- a/asset-transfer-basic/application-gateway-go/assetTransfer.go +++ b/asset-transfer-basic/application-gateway-go/assetTransfer.go @@ -31,7 +31,7 @@ const ( certPath = cryptoPath + "/users/User1@org1.example.com/msp/signcerts" keyPath = cryptoPath + "/users/User1@org1.example.com/msp/keystore" tlsCertPath = cryptoPath + "/peers/peer0.org1.example.com/tls/ca.crt" - peerEndpoint = "localhost:7051" + peerEndpoint = "dns:///localhost:7051" gatewayPeer = "peer0.org1.example.com" ) @@ -100,7 +100,7 @@ func newGrpcConnection() *grpc.ClientConn { certPool.AddCert(certificate) transportCredentials := credentials.NewClientTLSFromCert(certPool, gatewayPeer) - connection, err := grpc.Dial(peerEndpoint, grpc.WithTransportCredentials(transportCredentials)) + connection, err := grpc.NewClient(peerEndpoint, grpc.WithTransportCredentials(transportCredentials)) if err != nil { panic(fmt.Errorf("failed to create gRPC connection: %w", err)) } diff --git a/asset-transfer-basic/application-gateway-go/go.mod b/asset-transfer-basic/application-gateway-go/go.mod index a97701d2..e581fce5 100644 --- a/asset-transfer-basic/application-gateway-go/go.mod +++ b/asset-transfer-basic/application-gateway-go/go.mod @@ -1,20 +1,19 @@ module assetTransfer -go 1.20 +go 1.21 require ( - github.com/hyperledger/fabric-gateway v1.4.0 - github.com/hyperledger/fabric-protos-go-apiv2 v0.2.1 - google.golang.org/grpc v1.59.0 + github.com/hyperledger/fabric-gateway v1.5.0 + github.com/hyperledger/fabric-protos-go-apiv2 v0.3.3 + google.golang.org/grpc v1.63.2 ) require ( - github.com/golang/protobuf v1.5.3 // indirect github.com/miekg/pkcs11 v1.1.1 // indirect - golang.org/x/crypto v0.14.0 // indirect - golang.org/x/net v0.17.0 // indirect - golang.org/x/sys v0.13.0 // indirect - golang.org/x/text v0.13.0 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b // indirect - google.golang.org/protobuf v1.31.0 // indirect + golang.org/x/crypto v0.22.0 // indirect + golang.org/x/net v0.24.0 // indirect + golang.org/x/sys v0.19.0 // indirect + golang.org/x/text v0.14.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda // indirect + google.golang.org/protobuf v1.33.0 // indirect ) diff --git a/asset-transfer-basic/application-gateway-go/go.sum b/asset-transfer-basic/application-gateway-go/go.sum index a873e4f6..cb50be2a 100644 --- a/asset-transfer-basic/application-gateway-go/go.sum +++ b/asset-transfer-basic/application-gateway-go/go.sum @@ -1,33 +1,32 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -github.com/hyperledger/fabric-gateway v1.4.0 h1:wwCwujtOWNkRYQ32Uq9PfnJTOwHj5CgSU2mxkAhXzUE= -github.com/hyperledger/fabric-gateway v1.4.0/go.mod h1:VqJ9AL9kEm4UQQ2JhHqG92Btw4tpjKE8N/uhlsQdEA4= -github.com/hyperledger/fabric-protos-go-apiv2 v0.2.1 h1:iuCabkxwT1WZ06uREDjYPrtLsGFX05hwbpERYfmcatM= -github.com/hyperledger/fabric-protos-go-apiv2 v0.2.1/go.mod h1:2pq0ui6ZWA0cC8J+eCErgnMDCS1kPOEYVY+06ZAK0qE= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/hyperledger/fabric-gateway v1.5.0 h1:JChlqtJNm2479Q8YWJ6k8wwzOiu2IRrV3K8ErsQmdTU= +github.com/hyperledger/fabric-gateway v1.5.0/go.mod h1:v13OkXAp7pKi4kh6P6epn27SyivRbljr8Gkfy8JlbtM= +github.com/hyperledger/fabric-protos-go-apiv2 v0.3.3 h1:Xpd6fzG/KjAOHJsq7EQXY2l+qi/y8muxBaY7R6QWABk= +github.com/hyperledger/fabric-protos-go-apiv2 v0.3.3/go.mod h1:2pq0ui6ZWA0cC8J+eCErgnMDCS1kPOEYVY+06ZAK0qE= github.com/miekg/pkcs11 v1.1.1 h1:Ugu9pdy6vAYku5DEpVWVFPYnzV+bxB+iRdbuFSu7TvU= github.com/miekg/pkcs11 v1.1.1/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= -golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= -golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= -golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= -golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= -golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= -golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= -golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b h1:ZlWIi1wSK56/8hn4QcBp/j9M7Gt3U/3hZw3mC7vDICo= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:swOH3j0KzcDDgGUWr+SNpyTen5YrXjS3eyPzFYKc6lc= -google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk= -google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= -google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +go.uber.org/mock v0.3.0 h1:3mUxI1No2/60yUYax92Pt8eNOEecx2D3lcXZh2NEZJo= +go.uber.org/mock v0.3.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= +golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30= +golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= +golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w= +golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= +golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= +golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda h1:LI5DOvAxUPMv/50agcLLoo+AdWc1irS9Rzz4vPuD1V4= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= +google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM= +google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA= +google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/asset-transfer-basic/rest-api-go/go.mod b/asset-transfer-basic/rest-api-go/go.mod index f2db224b..8b5f8a96 100644 --- a/asset-transfer-basic/rest-api-go/go.mod +++ b/asset-transfer-basic/rest-api-go/go.mod @@ -1,20 +1,19 @@ module rest-api-go -go 1.20 +go 1.21 require ( - github.com/hyperledger/fabric-gateway v1.4.0 - google.golang.org/grpc v1.59.0 + github.com/hyperledger/fabric-gateway v1.5.0 + google.golang.org/grpc v1.63.2 ) require ( - github.com/golang/protobuf v1.5.3 // indirect - github.com/hyperledger/fabric-protos-go-apiv2 v0.2.1 // indirect + github.com/hyperledger/fabric-protos-go-apiv2 v0.3.3 // indirect github.com/miekg/pkcs11 v1.1.1 // indirect - golang.org/x/crypto v0.14.0 // indirect - golang.org/x/net v0.17.0 // indirect - golang.org/x/sys v0.13.0 // indirect - golang.org/x/text v0.13.0 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b // indirect - google.golang.org/protobuf v1.31.0 // indirect + golang.org/x/crypto v0.22.0 // indirect + golang.org/x/net v0.24.0 // indirect + golang.org/x/sys v0.19.0 // indirect + golang.org/x/text v0.14.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda // indirect + google.golang.org/protobuf v1.33.0 // indirect ) diff --git a/asset-transfer-basic/rest-api-go/go.sum b/asset-transfer-basic/rest-api-go/go.sum index a873e4f6..cb50be2a 100644 --- a/asset-transfer-basic/rest-api-go/go.sum +++ b/asset-transfer-basic/rest-api-go/go.sum @@ -1,33 +1,32 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -github.com/hyperledger/fabric-gateway v1.4.0 h1:wwCwujtOWNkRYQ32Uq9PfnJTOwHj5CgSU2mxkAhXzUE= -github.com/hyperledger/fabric-gateway v1.4.0/go.mod h1:VqJ9AL9kEm4UQQ2JhHqG92Btw4tpjKE8N/uhlsQdEA4= -github.com/hyperledger/fabric-protos-go-apiv2 v0.2.1 h1:iuCabkxwT1WZ06uREDjYPrtLsGFX05hwbpERYfmcatM= -github.com/hyperledger/fabric-protos-go-apiv2 v0.2.1/go.mod h1:2pq0ui6ZWA0cC8J+eCErgnMDCS1kPOEYVY+06ZAK0qE= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/hyperledger/fabric-gateway v1.5.0 h1:JChlqtJNm2479Q8YWJ6k8wwzOiu2IRrV3K8ErsQmdTU= +github.com/hyperledger/fabric-gateway v1.5.0/go.mod h1:v13OkXAp7pKi4kh6P6epn27SyivRbljr8Gkfy8JlbtM= +github.com/hyperledger/fabric-protos-go-apiv2 v0.3.3 h1:Xpd6fzG/KjAOHJsq7EQXY2l+qi/y8muxBaY7R6QWABk= +github.com/hyperledger/fabric-protos-go-apiv2 v0.3.3/go.mod h1:2pq0ui6ZWA0cC8J+eCErgnMDCS1kPOEYVY+06ZAK0qE= github.com/miekg/pkcs11 v1.1.1 h1:Ugu9pdy6vAYku5DEpVWVFPYnzV+bxB+iRdbuFSu7TvU= github.com/miekg/pkcs11 v1.1.1/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= -golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= -golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= -golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= -golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= -golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= -golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= -golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b h1:ZlWIi1wSK56/8hn4QcBp/j9M7Gt3U/3hZw3mC7vDICo= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:swOH3j0KzcDDgGUWr+SNpyTen5YrXjS3eyPzFYKc6lc= -google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk= -google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= -google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +go.uber.org/mock v0.3.0 h1:3mUxI1No2/60yUYax92Pt8eNOEecx2D3lcXZh2NEZJo= +go.uber.org/mock v0.3.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= +golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30= +golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= +golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w= +golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= +golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= +golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda h1:LI5DOvAxUPMv/50agcLLoo+AdWc1irS9Rzz4vPuD1V4= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= +google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM= +google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA= +google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/asset-transfer-basic/rest-api-go/main.go b/asset-transfer-basic/rest-api-go/main.go index 4e60fa76..ff349991 100644 --- a/asset-transfer-basic/rest-api-go/main.go +++ b/asset-transfer-basic/rest-api-go/main.go @@ -14,7 +14,7 @@ func main() { CertPath: cryptoPath + "/users/User1@org1.example.com/msp/signcerts/cert.pem", KeyPath: cryptoPath + "/users/User1@org1.example.com/msp/keystore/", TLSCertPath: cryptoPath + "/peers/peer0.org1.example.com/tls/ca.crt", - PeerEndpoint: "localhost:7051", + PeerEndpoint: "dns:///localhost:7051", GatewayPeer: "peer0.org1.example.com", } diff --git a/asset-transfer-basic/rest-api-go/web/initialize.go b/asset-transfer-basic/rest-api-go/web/initialize.go index 87dd5f4c..a296893f 100644 --- a/asset-transfer-basic/rest-api-go/web/initialize.go +++ b/asset-transfer-basic/rest-api-go/web/initialize.go @@ -3,8 +3,8 @@ package web import ( "crypto/x509" "fmt" - "io/ioutil" "log" + "os" "path" "time" @@ -49,7 +49,7 @@ func (setup OrgSetup) newGrpcConnection() *grpc.ClientConn { certPool.AddCert(certificate) transportCredentials := credentials.NewClientTLSFromCert(certPool, setup.GatewayPeer) - connection, err := grpc.Dial(setup.PeerEndpoint, grpc.WithTransportCredentials(transportCredentials)) + connection, err := grpc.NewClient(setup.PeerEndpoint, grpc.WithTransportCredentials(transportCredentials)) if err != nil { panic(fmt.Errorf("failed to create gRPC connection: %w", err)) } @@ -74,11 +74,11 @@ func (setup OrgSetup) newIdentity() *identity.X509Identity { // newSign creates a function that generates a digital signature from a message digest using a private key. func (setup OrgSetup) newSign() identity.Sign { - files, err := ioutil.ReadDir(setup.KeyPath) + files, err := os.ReadDir(setup.KeyPath) if err != nil { panic(fmt.Errorf("failed to read private key directory: %w", err)) } - privateKeyPEM, err := ioutil.ReadFile(path.Join(setup.KeyPath, files[0].Name())) + privateKeyPEM, err := os.ReadFile(path.Join(setup.KeyPath, files[0].Name())) if err != nil { panic(fmt.Errorf("failed to read private key file: %w", err)) @@ -98,7 +98,7 @@ func (setup OrgSetup) newSign() identity.Sign { } func loadCertificate(filename string) (*x509.Certificate, error) { - certificatePEM, err := ioutil.ReadFile(filename) + certificatePEM, err := os.ReadFile(filename) if err != nil { return nil, fmt.Errorf("failed to read certificate file: %w", err) } diff --git a/asset-transfer-events/application-gateway-go/connect.go b/asset-transfer-events/application-gateway-go/connect.go index 49422320..7b21d8b1 100755 --- a/asset-transfer-events/application-gateway-go/connect.go +++ b/asset-transfer-events/application-gateway-go/connect.go @@ -23,7 +23,7 @@ const ( certPath = cryptoPath + "/users/User1@org1.example.com/msp/signcerts" keyPath = cryptoPath + "/users/User1@org1.example.com/msp/keystore" tlsCertPath = cryptoPath + "/peers/peer0.org1.example.com/tls/ca.crt" - peerEndpoint = "localhost:7051" + peerEndpoint = "dns:///localhost:7051" gatewayPeer = "peer0.org1.example.com" ) @@ -43,7 +43,7 @@ func newGrpcConnection() *grpc.ClientConn { certPool.AddCert(certificate) transportCredentials := credentials.NewClientTLSFromCert(certPool, gatewayPeer) - connection, err := grpc.Dial(peerEndpoint, grpc.WithTransportCredentials(transportCredentials)) + connection, err := grpc.NewClient(peerEndpoint, grpc.WithTransportCredentials(transportCredentials)) if err != nil { panic(fmt.Errorf("failed to create gRPC connection: %w", err)) } diff --git a/asset-transfer-events/application-gateway-go/go.mod b/asset-transfer-events/application-gateway-go/go.mod index 0fb2f7f2..6d15b9ea 100644 --- a/asset-transfer-events/application-gateway-go/go.mod +++ b/asset-transfer-events/application-gateway-go/go.mod @@ -1,20 +1,19 @@ module assetTransfer -go 1.20 +go 1.21 require ( - github.com/hyperledger/fabric-gateway v1.4.0 - google.golang.org/grpc v1.59.0 + github.com/hyperledger/fabric-gateway v1.5.0 + google.golang.org/grpc v1.63.2 ) require ( - github.com/golang/protobuf v1.5.3 // indirect - github.com/hyperledger/fabric-protos-go-apiv2 v0.2.1 // indirect + github.com/hyperledger/fabric-protos-go-apiv2 v0.3.3 // indirect github.com/miekg/pkcs11 v1.1.1 // indirect - golang.org/x/crypto v0.14.0 // indirect - golang.org/x/net v0.17.0 // indirect - golang.org/x/sys v0.13.0 // indirect - golang.org/x/text v0.13.0 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b // indirect - google.golang.org/protobuf v1.31.0 // indirect + golang.org/x/crypto v0.22.0 // indirect + golang.org/x/net v0.24.0 // indirect + golang.org/x/sys v0.19.0 // indirect + golang.org/x/text v0.14.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda // indirect + google.golang.org/protobuf v1.33.0 // indirect ) diff --git a/asset-transfer-events/application-gateway-go/go.sum b/asset-transfer-events/application-gateway-go/go.sum index a873e4f6..cb50be2a 100644 --- a/asset-transfer-events/application-gateway-go/go.sum +++ b/asset-transfer-events/application-gateway-go/go.sum @@ -1,33 +1,32 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -github.com/hyperledger/fabric-gateway v1.4.0 h1:wwCwujtOWNkRYQ32Uq9PfnJTOwHj5CgSU2mxkAhXzUE= -github.com/hyperledger/fabric-gateway v1.4.0/go.mod h1:VqJ9AL9kEm4UQQ2JhHqG92Btw4tpjKE8N/uhlsQdEA4= -github.com/hyperledger/fabric-protos-go-apiv2 v0.2.1 h1:iuCabkxwT1WZ06uREDjYPrtLsGFX05hwbpERYfmcatM= -github.com/hyperledger/fabric-protos-go-apiv2 v0.2.1/go.mod h1:2pq0ui6ZWA0cC8J+eCErgnMDCS1kPOEYVY+06ZAK0qE= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/hyperledger/fabric-gateway v1.5.0 h1:JChlqtJNm2479Q8YWJ6k8wwzOiu2IRrV3K8ErsQmdTU= +github.com/hyperledger/fabric-gateway v1.5.0/go.mod h1:v13OkXAp7pKi4kh6P6epn27SyivRbljr8Gkfy8JlbtM= +github.com/hyperledger/fabric-protos-go-apiv2 v0.3.3 h1:Xpd6fzG/KjAOHJsq7EQXY2l+qi/y8muxBaY7R6QWABk= +github.com/hyperledger/fabric-protos-go-apiv2 v0.3.3/go.mod h1:2pq0ui6ZWA0cC8J+eCErgnMDCS1kPOEYVY+06ZAK0qE= github.com/miekg/pkcs11 v1.1.1 h1:Ugu9pdy6vAYku5DEpVWVFPYnzV+bxB+iRdbuFSu7TvU= github.com/miekg/pkcs11 v1.1.1/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= -golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= -golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= -golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= -golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= -golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= -golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= -golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b h1:ZlWIi1wSK56/8hn4QcBp/j9M7Gt3U/3hZw3mC7vDICo= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:swOH3j0KzcDDgGUWr+SNpyTen5YrXjS3eyPzFYKc6lc= -google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk= -google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= -google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +go.uber.org/mock v0.3.0 h1:3mUxI1No2/60yUYax92Pt8eNOEecx2D3lcXZh2NEZJo= +go.uber.org/mock v0.3.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= +golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30= +golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= +golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w= +golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= +golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= +golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda h1:LI5DOvAxUPMv/50agcLLoo+AdWc1irS9Rzz4vPuD1V4= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= +google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM= +google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA= +google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/hardware-security-module/application-go/go.mod b/hardware-security-module/application-go/go.mod index 7b14df77..75c5ed74 100644 --- a/hardware-security-module/application-go/go.mod +++ b/hardware-security-module/application-go/go.mod @@ -1,20 +1,19 @@ module github.com/hyperledger/fabric-samples/hardware-security-module/application-go -go 1.20 +go 1.21 require ( - github.com/hyperledger/fabric-gateway v1.4.0 - google.golang.org/grpc v1.59.0 + github.com/hyperledger/fabric-gateway v1.5.0 + google.golang.org/grpc v1.63.2 ) require ( - github.com/golang/protobuf v1.5.3 // indirect - github.com/hyperledger/fabric-protos-go-apiv2 v0.2.1 // indirect + github.com/hyperledger/fabric-protos-go-apiv2 v0.3.3 // indirect github.com/miekg/pkcs11 v1.1.1 // indirect - golang.org/x/crypto v0.14.0 // indirect - golang.org/x/net v0.17.0 // indirect - golang.org/x/sys v0.13.0 // indirect - golang.org/x/text v0.13.0 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b // indirect - google.golang.org/protobuf v1.31.0 // indirect + golang.org/x/crypto v0.22.0 // indirect + golang.org/x/net v0.24.0 // indirect + golang.org/x/sys v0.19.0 // indirect + golang.org/x/text v0.14.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda // indirect + google.golang.org/protobuf v1.33.0 // indirect ) diff --git a/hardware-security-module/application-go/go.sum b/hardware-security-module/application-go/go.sum index a873e4f6..cb50be2a 100644 --- a/hardware-security-module/application-go/go.sum +++ b/hardware-security-module/application-go/go.sum @@ -1,33 +1,32 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -github.com/hyperledger/fabric-gateway v1.4.0 h1:wwCwujtOWNkRYQ32Uq9PfnJTOwHj5CgSU2mxkAhXzUE= -github.com/hyperledger/fabric-gateway v1.4.0/go.mod h1:VqJ9AL9kEm4UQQ2JhHqG92Btw4tpjKE8N/uhlsQdEA4= -github.com/hyperledger/fabric-protos-go-apiv2 v0.2.1 h1:iuCabkxwT1WZ06uREDjYPrtLsGFX05hwbpERYfmcatM= -github.com/hyperledger/fabric-protos-go-apiv2 v0.2.1/go.mod h1:2pq0ui6ZWA0cC8J+eCErgnMDCS1kPOEYVY+06ZAK0qE= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/hyperledger/fabric-gateway v1.5.0 h1:JChlqtJNm2479Q8YWJ6k8wwzOiu2IRrV3K8ErsQmdTU= +github.com/hyperledger/fabric-gateway v1.5.0/go.mod h1:v13OkXAp7pKi4kh6P6epn27SyivRbljr8Gkfy8JlbtM= +github.com/hyperledger/fabric-protos-go-apiv2 v0.3.3 h1:Xpd6fzG/KjAOHJsq7EQXY2l+qi/y8muxBaY7R6QWABk= +github.com/hyperledger/fabric-protos-go-apiv2 v0.3.3/go.mod h1:2pq0ui6ZWA0cC8J+eCErgnMDCS1kPOEYVY+06ZAK0qE= github.com/miekg/pkcs11 v1.1.1 h1:Ugu9pdy6vAYku5DEpVWVFPYnzV+bxB+iRdbuFSu7TvU= github.com/miekg/pkcs11 v1.1.1/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= -golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= -golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= -golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= -golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= -golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= -golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= -golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b h1:ZlWIi1wSK56/8hn4QcBp/j9M7Gt3U/3hZw3mC7vDICo= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:swOH3j0KzcDDgGUWr+SNpyTen5YrXjS3eyPzFYKc6lc= -google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk= -google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= -google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +go.uber.org/mock v0.3.0 h1:3mUxI1No2/60yUYax92Pt8eNOEecx2D3lcXZh2NEZJo= +go.uber.org/mock v0.3.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= +golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30= +golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= +golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w= +golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= +golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= +golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda h1:LI5DOvAxUPMv/50agcLLoo+AdWc1irS9Rzz4vPuD1V4= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= +google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM= +google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA= +google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/hardware-security-module/application-go/hsm-sample.go b/hardware-security-module/application-go/hsm-sample.go index 382b2290..de1f3814 100644 --- a/hardware-security-module/application-go/hsm-sample.go +++ b/hardware-security-module/application-go/hsm-sample.go @@ -33,7 +33,7 @@ const ( mspID = "Org1MSP" certPath = "../crypto-material/hsm/HSMUser/signcerts/cert.pem" tlsCertPath = "../../test-network/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt" - peerEndpoint = "localhost:7051" + peerEndpoint = "dns:///localhost:7051" ) var now = time.Now() @@ -122,7 +122,7 @@ func newGrpcConnection() *grpc.ClientConn { certPool.AddCert(certificate) transportCredentials := credentials.NewClientTLSFromCert(certPool, "peer0.org1.example.com") - connection, err := grpc.Dial(peerEndpoint, grpc.WithTransportCredentials(transportCredentials)) + connection, err := grpc.NewClient(peerEndpoint, grpc.WithTransportCredentials(transportCredentials)) if err != nil { panic(fmt.Errorf("failed to evaluate transaction: %w", err)) } From 0db64487e5e89a81d68e6871af3f0907c67e7d75 Mon Sep 17 00:00:00 2001 From: James Taylor Date: Mon, 29 Apr 2024 11:46:37 +0100 Subject: [PATCH 11/19] Update nano test network Fix regression in network.sh and update peer scripts to allow chaincodeListenAddress and chaincodeAddress to be overridden if required Also updates the nano test network readme to describe the new environment variables for the k8s builder Fixes #1198 Signed-off-by: James Taylor --- test-network-nano-bash/README.md | 12 ++++++++++++ test-network-nano-bash/network.sh | 8 ++++---- test-network-nano-bash/peer1.sh | 4 ++-- test-network-nano-bash/peer2.sh | 4 ++-- test-network-nano-bash/peer3.sh | 4 ++-- test-network-nano-bash/peer4.sh | 4 ++-- 6 files changed, 24 insertions(+), 12 deletions(-) diff --git a/test-network-nano-bash/README.md b/test-network-nano-bash/README.md index c968ccce..7d276ecc 100644 --- a/test-network-nano-bash/README.md +++ b/test-network-nano-bash/README.md @@ -87,6 +87,7 @@ To deploy and invoke the chaincode, utilize the peer1 admin terminal that you ha 1. Using a chaincode container 2. Running the chaincode as a service +3. Using the k8s builder and minikube For your convenience you can run `install&approve&commit_chaincode_peer1.sh` from peer1admin terminal to run basic chaincode as a container and activate it. The output of the script is redirected to the logs folder. @@ -154,6 +155,17 @@ And start the chaincode service: npm run start:server-nontls ``` +## 3. Using the k8s builder and minikube + +It is also possible to launch chaincode in kubernetes pods using the k8s builder. A simple way to do this is using [minikube](https://minikube.sigs.k8s.io/docs/), which requires the chaincodeListenAddress and chaincodeAddress settings used by the Nano test network to be overridden using the following environment variables. + +```shell +export CORE_PEER_CHAINCODEADDRESS_HOST_OVERRIDE=host.minikube.internal +export CORE_PEER_CHAINCODELISTENADDRESS_HOST_OVERRIDE=0.0.0.0 +``` + +See the [fabric-builder-k8s](https://github.com/hyperledger-labs/fabric-builder-k8s) project for more details on how to configure and use the k8s builder. + ## Activate the chaincode Using the peer1 admin, approve and commit the chaincode (only a single approver is required based on the lifecycle endorsement policy of any organization): diff --git a/test-network-nano-bash/network.sh b/test-network-nano-bash/network.sh index fb2fa80f..288a1cf0 100755 --- a/test-network-nano-bash/network.sh +++ b/test-network-nano-bash/network.sh @@ -95,16 +95,16 @@ networkStart() { fi echo "Creating channel (peer1)..." - . peer1admin.sh && ./join_channel.sh + . ./peer1admin.sh && ./join_channel.sh echo "Joining channel (peer2)..." - . peer2admin.sh && ./join_channel.sh + . ./peer2admin.sh && ./join_channel.sh echo "Joining channel (peer3)..." - . peer3admin.sh && ./join_channel.sh + . ./peer3admin.sh && ./join_channel.sh echo "Joining channel (peer4)..." - . peer4admin.sh && ./join_channel.sh + . ./peer4admin.sh && ./join_channel.sh fi echo "Fabric network running. Use Ctrl-C to stop." diff --git a/test-network-nano-bash/peer1.sh b/test-network-nano-bash/peer1.sh index 7f53cfc1..e6b147b5 100755 --- a/test-network-nano-bash/peer1.sh +++ b/test-network-nano-bash/peer1.sh @@ -22,8 +22,8 @@ export CORE_PEER_TLS_ROOTCERT_FILE="${PWD}"/crypto-config/peerOrganizations/org1 export CORE_PEER_ID=peer0.org1.example.com export CORE_PEER_ADDRESS=127.0.0.1:7051 export CORE_PEER_LISTENADDRESS=127.0.0.1:7051 -export CORE_PEER_CHAINCODEADDRESS="${CCADDR}":7052 -export CORE_PEER_CHAINCODELISTENADDRESS=127.0.0.1:7052 +export CORE_PEER_CHAINCODEADDRESS="${CORE_PEER_CHAINCODEADDRESS_HOST_OVERRIDE:-${CCADDR}}":7052 +export CORE_PEER_CHAINCODELISTENADDRESS="${CORE_PEER_CHAINCODELISTENADDRESS_HOST_OVERRIDE:-127.0.0.1}":7052 # bootstrap peer is the other peer in the same org export CORE_PEER_GOSSIP_BOOTSTRAP=127.0.0.1:7053 export CORE_PEER_GOSSIP_EXTERNALENDPOINT=127.0.0.1:7051 diff --git a/test-network-nano-bash/peer2.sh b/test-network-nano-bash/peer2.sh index bbd64864..6d1548df 100755 --- a/test-network-nano-bash/peer2.sh +++ b/test-network-nano-bash/peer2.sh @@ -22,8 +22,8 @@ export CORE_PEER_TLS_ROOTCERT_FILE="${PWD}"/crypto-config/peerOrganizations/org1 export CORE_PEER_ID=peer1.org1.example.com export CORE_PEER_ADDRESS=127.0.0.1:7053 export CORE_PEER_LISTENADDRESS=127.0.0.1:7053 -export CORE_PEER_CHAINCODEADDRESS="${CCADDR}":7054 -export CORE_PEER_CHAINCODELISTENADDRESS=127.0.0.1:7054 +export CORE_PEER_CHAINCODEADDRESS="${CORE_PEER_CHAINCODEADDRESS_HOST_OVERRIDE:-${CCADDR}}":7054 +export CORE_PEER_CHAINCODELISTENADDRESS="${CORE_PEER_CHAINCODELISTENADDRESS_HOST_OVERRIDE:-127.0.0.1}":7054 # bootstrap peer is the other peer in the same org export CORE_PEER_GOSSIP_BOOTSTRAP=127.0.0.1:7051 export CORE_PEER_GOSSIP_EXTERNALENDPOINT=127.0.0.1:7053 diff --git a/test-network-nano-bash/peer3.sh b/test-network-nano-bash/peer3.sh index 50d79b9f..7c4367a7 100755 --- a/test-network-nano-bash/peer3.sh +++ b/test-network-nano-bash/peer3.sh @@ -22,8 +22,8 @@ export CORE_PEER_TLS_ROOTCERT_FILE="${PWD}"/crypto-config/peerOrganizations/org2 export CORE_PEER_ID=peer0.org2.example.com export CORE_PEER_ADDRESS=127.0.0.1:7055 export CORE_PEER_LISTENADDRESS=127.0.0.1:7055 -export CORE_PEER_CHAINCODEADDRESS="${CCADDR}":7056 -export CORE_PEER_CHAINCODELISTENADDRESS=127.0.0.1:7056 +export CORE_PEER_CHAINCODEADDRESS="${CORE_PEER_CHAINCODEADDRESS_HOST_OVERRIDE:-${CCADDR}}":7056 +export CORE_PEER_CHAINCODELISTENADDRESS="${CORE_PEER_CHAINCODELISTENADDRESS_HOST_OVERRIDE:-127.0.0.1}":7056 # bootstrap peer is the other peer in the same org export CORE_PEER_GOSSIP_BOOTSTRAP=127.0.0.1:7057 export CORE_PEER_GOSSIP_EXTERNALENDPOINT=127.0.0.1:7055 diff --git a/test-network-nano-bash/peer4.sh b/test-network-nano-bash/peer4.sh index 3dc80d2c..a78e9d6b 100755 --- a/test-network-nano-bash/peer4.sh +++ b/test-network-nano-bash/peer4.sh @@ -22,8 +22,8 @@ export CORE_PEER_TLS_ROOTCERT_FILE="${PWD}"/crypto-config/peerOrganizations/org2 export CORE_PEER_ID=peer1.org2.example.com export CORE_PEER_ADDRESS=127.0.0.1:7057 export CORE_PEER_LISTENADDRESS=127.0.0.1:7057 -export CORE_PEER_CHAINCODEADDRESS="${CCADDR}":7058 -export CORE_PEER_CHAINCODELISTENADDRESS=127.0.0.1:7058 +export CORE_PEER_CHAINCODEADDRESS="${CORE_PEER_CHAINCODEADDRESS_HOST_OVERRIDE:-${CCADDR}}":7058 +export CORE_PEER_CHAINCODELISTENADDRESS="${CORE_PEER_CHAINCODELISTENADDRESS_HOST_OVERRIDE:-127.0.0.1}":7058 # bootstrap peer is the other peer in the same org export CORE_PEER_GOSSIP_BOOTSTRAP=127.0.0.1:7055 export CORE_PEER_GOSSIP_EXTERNALENDPOINT=127.0.0.1:7057 From 4763bcae8d69bbe4239f3df3271f169407a161c3 Mon Sep 17 00:00:00 2001 From: David Enyeart Date: Mon, 29 Apr 2024 16:13:16 -0400 Subject: [PATCH 12/19] test-network error message if jq not installed With removal of fabric-tools image, test-network now depends on jq being installed locally. This commit logs an error message if jq commands fail due to jq not being installed locally. Signed-off-by: David Enyeart --- test-network/scripts/configUpdate.sh | 4 +++- test-network/scripts/setAnchorPeer.sh | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/test-network/scripts/configUpdate.sh b/test-network/scripts/configUpdate.sh index 36150df1..63586031 100755 --- a/test-network/scripts/configUpdate.sh +++ b/test-network/scripts/configUpdate.sh @@ -33,13 +33,15 @@ fetchChannelConfig() { set -x configtxlator proto_decode --input ${TEST_NETWORK_HOME}/channel-artifacts/config_block.pb --type common.Block --output ${TEST_NETWORK_HOME}/channel-artifacts/config_block.json jq .data.data[0].payload.data.config ${TEST_NETWORK_HOME}/channel-artifacts/config_block.json >"${OUTPUT}" + res=$? { set +x; } 2>/dev/null + verifyResult $res "Failed to parse channel configuration, make sure you have jq installed" } # createConfigUpdate # Takes an original and modified config, and produces the config update tx # which transitions between the two -# NOTE: this requires configtxlator for execution. +# NOTE: this requires jq and configtxlator for execution. createConfigUpdate() { CHANNEL=$1 ORIGINAL=$2 diff --git a/test-network/scripts/setAnchorPeer.sh b/test-network/scripts/setAnchorPeer.sh index 573e6622..15f7ad2e 100755 --- a/test-network/scripts/setAnchorPeer.sh +++ b/test-network/scripts/setAnchorPeer.sh @@ -38,7 +38,10 @@ createAnchorPeerUpdate() { set -x # Modify the configuration to append the anchor peer jq '.channel_group.groups.Application.groups.'${CORE_PEER_LOCALMSPID}'.values += {"AnchorPeers":{"mod_policy": "Admins","value":{"anchor_peers": [{"host": "'$HOST'","port": '$PORT'}]},"version": "0"}}' ${TEST_NETWORK_HOME}/channel-artifacts/${CORE_PEER_LOCALMSPID}config.json > ${TEST_NETWORK_HOME}/channel-artifacts/${CORE_PEER_LOCALMSPID}modified_config.json + res=$? { set +x; } 2>/dev/null + verifyResult $res "Channel configuration update for anchor peer failed, make sure you have jq installed" + # Compute a config update, based on the differences between # {orgmsp}config.json and {orgmsp}modified_config.json, write From 2fa83c957a00c33d991007518fd7e28da25bc70e Mon Sep 17 00:00:00 2001 From: David Enyeart Date: Tue, 30 Apr 2024 11:46:41 -0400 Subject: [PATCH 13/19] GHA: Use ubuntu-20.04 for local forks GHA: Use ubuntu-20.04 for local forks since local forks don't have access to fabric-ubuntu-20.04. Signed-off-by: David Enyeart --- .github/actions/fsat-setup/action.yaml | 4 ++-- .github/actions/test-network-setup/action.yaml | 6 +++--- .github/workflows/lint.yaml | 12 ++++++------ .github/workflows/rest-sample.yaml | 2 +- .github/workflows/test-fsat.yaml | 10 +++++----- .github/workflows/test-network-basic.yaml | 2 +- .github/workflows/test-network-events.yaml | 2 +- .github/workflows/test-network-gateway.yaml | 2 +- .github/workflows/test-network-hsm.yaml | 2 +- .github/workflows/test-network-k8s.yaml | 8 ++++---- .github/workflows/test-network-ledger.yaml | 2 +- .github/workflows/test-network-off-chain.yaml | 2 +- .github/workflows/test-network-private.yaml | 2 +- .github/workflows/test-network-sbe.yaml | 2 +- .github/workflows/test-network-secured.yaml | 2 +- 15 files changed, 30 insertions(+), 30 deletions(-) diff --git a/.github/actions/fsat-setup/action.yaml b/.github/actions/fsat-setup/action.yaml index 0215422f..aca108e0 100644 --- a/.github/actions/fsat-setup/action.yaml +++ b/.github/actions/fsat-setup/action.yaml @@ -12,10 +12,10 @@ inputs: default: v0.25.3 fabric-version: description: Version of Hyperledger Fabric - default: '2.5.4' + default: '2.5.7' ca-version: description: Version of Hyperledger Fabric CA - default: '1.5.7' + default: '1.5.10' runs: using: "composite" diff --git a/.github/actions/test-network-setup/action.yaml b/.github/actions/test-network-setup/action.yaml index 6fc99250..8bef0099 100644 --- a/.github/actions/test-network-setup/action.yaml +++ b/.github/actions/test-network-setup/action.yaml @@ -3,7 +3,7 @@ description: Set up the Test Network Runtime inputs: go-version: description: Version of go - default: '1.20' + default: '1.21' node-version: description: Version of node default: 18.x @@ -12,10 +12,10 @@ inputs: default: 11.x fabric-version: description: Version of Hyperledger Fabric - default: 2.5.4 + default: 2.5.7 ca-version: description: Version of Hyperledger Fabric CA - default: 1.5.7 + default: 1.5.10 runs: using: "composite" diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml index 6283ddc9..d0e93891 100644 --- a/.github/workflows/lint.yaml +++ b/.github/workflows/lint.yaml @@ -16,13 +16,13 @@ concurrency: cancel-in-progress: true env: - GO_VER: '1.20' + GO_VER: '1.21' NODE_VER: 18.x JAVA_VER: 11.x jobs: go: - runs-on: fabric-ubuntu-20.04 + runs-on: ${{ github.repository == 'hyperledger/fabric-samples' && 'fabric-ubuntu-20.04' || 'ubuntu-20.04' }} steps: - uses: actions/setup-go@v5 with: @@ -32,7 +32,7 @@ jobs: - run: ci/scripts/lint-go.sh typescript: - runs-on: fabric-ubuntu-20.04 + runs-on: ${{ github.repository == 'hyperledger/fabric-samples' && 'fabric-ubuntu-20.04' || 'ubuntu-20.04' }} steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 @@ -41,7 +41,7 @@ jobs: - run: ci/scripts/lint-typescript.sh javascript: - runs-on: fabric-ubuntu-20.04 + runs-on: ${{ github.repository == 'hyperledger/fabric-samples' && 'fabric-ubuntu-20.04' || 'ubuntu-20.04' }} steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 @@ -50,7 +50,7 @@ jobs: - run: ci/scripts/lint-javascript.sh java: - runs-on: fabric-ubuntu-20.04 + runs-on: ${{ github.repository == 'hyperledger/fabric-samples' && 'fabric-ubuntu-20.04' || 'ubuntu-20.04' }} steps: - uses: actions/checkout@v4 - uses: actions/setup-java@v4 @@ -60,7 +60,7 @@ jobs: - run: ci/scripts/lint-java.sh shell: - runs-on: fabric-ubuntu-20.04 + runs-on: ${{ github.repository == 'hyperledger/fabric-samples' && 'fabric-ubuntu-20.04' || 'ubuntu-20.04' }} steps: - uses: actions/checkout@v4 - run: ci/scripts/lint-shell.sh diff --git a/.github/workflows/rest-sample.yaml b/.github/workflows/rest-sample.yaml index f6417d22..78c62041 100644 --- a/.github/workflows/rest-sample.yaml +++ b/.github/workflows/rest-sample.yaml @@ -22,7 +22,7 @@ concurrency: jobs: test-sample: - runs-on: fabric-ubuntu-20.04 + runs-on: ${{ github.repository == 'hyperledger/fabric-samples' && 'fabric-ubuntu-20.04' || 'ubuntu-20.04' }} steps: - name: Checkout diff --git a/.github/workflows/test-fsat.yaml b/.github/workflows/test-fsat.yaml index 539ac8f5..13d3f85c 100644 --- a/.github/workflows/test-fsat.yaml +++ b/.github/workflows/test-fsat.yaml @@ -14,7 +14,7 @@ concurrency: jobs: ansible: - runs-on: fabric-ubuntu-20.04 + runs-on: ${{ github.repository == 'hyperledger/fabric-samples' && 'fabric-ubuntu-20.04' || 'ubuntu-20.04' }} steps: - uses: actions/checkout@v4 - name: Set up Full Stack Runtime @@ -23,7 +23,7 @@ jobs: working-directory: full-stack-asset-transfer-guide appdev: - runs-on: fabric-ubuntu-20.04 + runs-on: ${{ github.repository == 'hyperledger/fabric-samples' && 'fabric-ubuntu-20.04' || 'ubuntu-20.04' }} steps: - uses: actions/checkout@v4 - name: Set up Full Stack Runtime @@ -32,7 +32,7 @@ jobs: working-directory: full-stack-asset-transfer-guide chaincode: - runs-on: fabric-ubuntu-20.04 + runs-on: ${{ github.repository == 'hyperledger/fabric-samples' && 'fabric-ubuntu-20.04' || 'ubuntu-20.04' }} steps: - uses: actions/checkout@v4 - name: Set up Full Stack Runtime @@ -41,7 +41,7 @@ jobs: working-directory: full-stack-asset-transfer-guide cloud: - runs-on: fabric-ubuntu-20.04 + runs-on: ${{ github.repository == 'hyperledger/fabric-samples' && 'fabric-ubuntu-20.04' || 'ubuntu-20.04' }} steps: - uses: actions/checkout@v4 - name: Set up Full Stack Runtime @@ -50,7 +50,7 @@ jobs: working-directory: full-stack-asset-transfer-guide console: - runs-on: fabric-ubuntu-20.04 + runs-on: ${{ github.repository == 'hyperledger/fabric-samples' && 'fabric-ubuntu-20.04' || 'ubuntu-20.04' }} steps: - uses: actions/checkout@v4 - name: Set up Full Stack Runtime diff --git a/.github/workflows/test-network-basic.yaml b/.github/workflows/test-network-basic.yaml index 31cc08c1..3c1a153a 100644 --- a/.github/workflows/test-network-basic.yaml +++ b/.github/workflows/test-network-basic.yaml @@ -17,7 +17,7 @@ concurrency: jobs: basic: - runs-on: fabric-ubuntu-20.04 + runs-on: ${{ github.repository == 'hyperledger/fabric-samples' && 'fabric-ubuntu-20.04' || 'ubuntu-20.04' }} strategy: matrix: chaincode-language: diff --git a/.github/workflows/test-network-events.yaml b/.github/workflows/test-network-events.yaml index ee0c9936..49b9be62 100644 --- a/.github/workflows/test-network-events.yaml +++ b/.github/workflows/test-network-events.yaml @@ -17,7 +17,7 @@ concurrency: jobs: events: - runs-on: fabric-ubuntu-20.04 + runs-on: ${{ github.repository == 'hyperledger/fabric-samples' && 'fabric-ubuntu-20.04' || 'ubuntu-20.04' }} strategy: matrix: chaincode-language: diff --git a/.github/workflows/test-network-gateway.yaml b/.github/workflows/test-network-gateway.yaml index 0edd7f5c..47ec8a0a 100644 --- a/.github/workflows/test-network-gateway.yaml +++ b/.github/workflows/test-network-gateway.yaml @@ -17,7 +17,7 @@ concurrency: jobs: gateway: - runs-on: fabric-ubuntu-20.04 + runs-on: ${{ github.repository == 'hyperledger/fabric-samples' && 'fabric-ubuntu-20.04' || 'ubuntu-20.04' }} strategy: matrix: chaincode-language: diff --git a/.github/workflows/test-network-hsm.yaml b/.github/workflows/test-network-hsm.yaml index 9c727a9c..0128368d 100644 --- a/.github/workflows/test-network-hsm.yaml +++ b/.github/workflows/test-network-hsm.yaml @@ -17,7 +17,7 @@ concurrency: jobs: hsm: - runs-on: fabric-ubuntu-20.04 + runs-on: ${{ github.repository == 'hyperledger/fabric-samples' && 'fabric-ubuntu-20.04' || 'ubuntu-20.04' }} strategy: matrix: chaincode-language: diff --git a/.github/workflows/test-network-k8s.yaml b/.github/workflows/test-network-k8s.yaml index c83e22b4..5dc89e10 100644 --- a/.github/workflows/test-network-k8s.yaml +++ b/.github/workflows/test-network-k8s.yaml @@ -17,7 +17,7 @@ concurrency: jobs: ccaas-java: - runs-on: fabric-ubuntu-20.04 + runs-on: ${{ github.repository == 'hyperledger/fabric-samples' && 'fabric-ubuntu-20.04' || 'ubuntu-20.04' }} steps: - name: Checkout uses: actions/checkout@v4 @@ -29,7 +29,7 @@ jobs: CHAINCODE_LANGUAGE: java ccaas-external: - runs-on: fabric-ubuntu-20.04 + runs-on: ${{ github.repository == 'hyperledger/fabric-samples' && 'fabric-ubuntu-20.04' || 'ubuntu-20.04' }} steps: - name: Checkout uses: actions/checkout@v4 @@ -41,7 +41,7 @@ jobs: CHAINCODE_LANGUAGE: external k8s-builder: - runs-on: fabric-ubuntu-20.04 + runs-on: ${{ github.repository == 'hyperledger/fabric-samples' && 'fabric-ubuntu-20.04' || 'ubuntu-20.04' }} steps: - name: Checkout uses: actions/checkout@v4 @@ -54,7 +54,7 @@ jobs: CHAINCODE_BUILDER: k8s multi-namespace: - runs-on: fabric-ubuntu-20.04 + runs-on: ${{ github.repository == 'hyperledger/fabric-samples' && 'fabric-ubuntu-20.04' || 'ubuntu-20.04' }} steps: - name: Checkout uses: actions/checkout@v4 diff --git a/.github/workflows/test-network-ledger.yaml b/.github/workflows/test-network-ledger.yaml index cb726c82..a691e180 100644 --- a/.github/workflows/test-network-ledger.yaml +++ b/.github/workflows/test-network-ledger.yaml @@ -17,7 +17,7 @@ concurrency: jobs: basic: - runs-on: fabric-ubuntu-20.04 + runs-on: ${{ github.repository == 'hyperledger/fabric-samples' && 'fabric-ubuntu-20.04' || 'ubuntu-20.04' }} strategy: matrix: chaincode-language: diff --git a/.github/workflows/test-network-off-chain.yaml b/.github/workflows/test-network-off-chain.yaml index 0281b120..40693a5b 100644 --- a/.github/workflows/test-network-off-chain.yaml +++ b/.github/workflows/test-network-off-chain.yaml @@ -17,7 +17,7 @@ concurrency: jobs: off-chain: - runs-on: fabric-ubuntu-20.04 + runs-on: ${{ github.repository == 'hyperledger/fabric-samples' && 'fabric-ubuntu-20.04' || 'ubuntu-20.04' }} strategy: matrix: chaincode-language: diff --git a/.github/workflows/test-network-private.yaml b/.github/workflows/test-network-private.yaml index 5f9588aa..3b792263 100644 --- a/.github/workflows/test-network-private.yaml +++ b/.github/workflows/test-network-private.yaml @@ -17,7 +17,7 @@ concurrency: jobs: private: - runs-on: fabric-ubuntu-20.04 + runs-on: ${{ github.repository == 'hyperledger/fabric-samples' && 'fabric-ubuntu-20.04' || 'ubuntu-20.04' }} strategy: matrix: chaincode-language: diff --git a/.github/workflows/test-network-sbe.yaml b/.github/workflows/test-network-sbe.yaml index 3b030b11..1aa533bb 100644 --- a/.github/workflows/test-network-sbe.yaml +++ b/.github/workflows/test-network-sbe.yaml @@ -17,7 +17,7 @@ concurrency: jobs: SBE: - runs-on: fabric-ubuntu-20.04 + runs-on: ${{ github.repository == 'hyperledger/fabric-samples' && 'fabric-ubuntu-20.04' || 'ubuntu-20.04' }} strategy: matrix: chaincode-language: diff --git a/.github/workflows/test-network-secured.yaml b/.github/workflows/test-network-secured.yaml index 568f317c..54cfa363 100644 --- a/.github/workflows/test-network-secured.yaml +++ b/.github/workflows/test-network-secured.yaml @@ -17,7 +17,7 @@ concurrency: jobs: secured: - runs-on: fabric-ubuntu-20.04 + runs-on: ${{ github.repository == 'hyperledger/fabric-samples' && 'fabric-ubuntu-20.04' || 'ubuntu-20.04' }} strategy: matrix: chaincode-language: From effe8ff980803ccef4fd61c1ef96411731fe0c1c Mon Sep 17 00:00:00 2001 From: Dave Enyeart Date: Fri, 3 May 2024 05:03:27 -0400 Subject: [PATCH 14/19] Switch microfab to hyperledger-labs version (#1203) full-stack-asset-transfer points to an old image that no longer exists. Point to the hyperledger-labs microfab image instead. Signed-off-by: David Enyeart --- full-stack-asset-transfer-guide/justfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/full-stack-asset-transfer-guide/justfile b/full-stack-asset-transfer-guide/justfile index 782ee58d..a9e1edcb 100644 --- a/full-stack-asset-transfer-guide/justfile +++ b/full-stack-asset-transfer-guide/justfile @@ -175,7 +175,7 @@ microfab: microfab-down echo echo "Stating microfab...." - docker run --name microfab -p 8080:8080 --add-host host.docker.internal:host-gateway --rm -d -e MICROFAB_CONFIG="${MICROFAB_CONFIG}" ibmcom/ibp-microfab:0.0.16 + docker run --name microfab -p 8080:8080 --add-host host.docker.internal:host-gateway --rm -d -e MICROFAB_CONFIG="${MICROFAB_CONFIG}" ghcr.io/hyperledger-labs/microfab:latest sleep 5 curl -s http://console.127-0-0-1.nip.io:8080/ak/api/v1/components | weft microfab -w $CFG/_wallets -p $CFG/_gateways -m $CFG/_msp -f @@ -225,9 +225,9 @@ debugcc: set -x && peer lifecycle chaincode install asset-transfer.tgz && { set +x; } 2>/dev/null echo - set -x && peer lifecycle chaincode approveformyorg --channelID mychannel --name asset-transfer -v 0 --package-id $CHAINCODE_ID --sequence 1 --connTimeout 15s && { set +x; } 2>/dev/null + set -x && peer lifecycle chaincode approveformyorg --channelID mychannel -o orderer-api.127-0-0-1.nip.io:8080 --name asset-transfer -v 0 --package-id $CHAINCODE_ID --sequence 1 --connTimeout 15s && { set +x; } 2>/dev/null echo - set -x && peer lifecycle chaincode commit --channelID mychannel --name asset-transfer -v 0 --sequence 1 --connTimeout 15s && { set +x; } 2>/dev/null + set -x && peer lifecycle chaincode commit --channelID mychannel -o orderer-api.127-0-0-1.nip.io:8080 --name asset-transfer -v 0 --sequence 1 --connTimeout 15s && { set +x; } 2>/dev/null echo set -x && peer lifecycle chaincode querycommitted --channelID=mychannel && { set +x; } 2>/dev/null echo From bf6109423179c56cb3b30f2efed99b0057a60938 Mon Sep 17 00:00:00 2001 From: David Enyeart Date: Mon, 6 May 2024 10:27:18 -0400 Subject: [PATCH 15/19] Remove double quotes for env variables Double quotes have caused issues in some environments, e.g. see https://github.com/hyperledger/fabric/issues/4358 Signed-off-by: David Enyeart --- asset-transfer-abac/README.md | 2 +- asset-transfer-sbe/README.md | 2 +- auction-dutch/README.md | 2 +- test-network-k8s/scripts/set_anchor_peer.sh | 4 ++-- test-network/CHAINCODE_AS_A_SERVICE_TUTORIAL.md | 2 +- test-network/scripts/envVar.sh | 6 +++--- token-erc-1155/README.md | 4 ++-- token-erc-20/README.md | 6 +++--- token-erc-721/README.md | 8 ++++---- token-utxo/README.md | 6 +++--- 10 files changed, 21 insertions(+), 21 deletions(-) diff --git a/asset-transfer-abac/README.md b/asset-transfer-abac/README.md index a4f3ec4d..09cb106c 100644 --- a/asset-transfer-abac/README.md +++ b/asset-transfer-abac/README.md @@ -76,7 +76,7 @@ You can use either identity with the `abac.creator=true` attribute to create an ``` export CORE_PEER_TLS_ENABLED=true -export CORE_PEER_LOCALMSPID="Org1MSP" +export CORE_PEER_LOCALMSPID=Org1MSP export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/creator1@org1.example.com/msp export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt export CORE_PEER_ADDRESS=localhost:7051 diff --git a/asset-transfer-sbe/README.md b/asset-transfer-sbe/README.md index 213216d7..87bb99aa 100644 --- a/asset-transfer-sbe/README.md +++ b/asset-transfer-sbe/README.md @@ -73,7 +73,7 @@ Set the following environment variables to interact with the network as a user f export PATH=${PWD}/../bin:${PWD}:$PATH export FABRIC_CFG_PATH=$PWD/../config/ export CORE_PEER_TLS_ENABLED=true -export CORE_PEER_LOCALMSPID="Org1MSP" +export CORE_PEER_LOCALMSPID=Org1MSP export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt export CORE_PEER_ADDRESS=localhost:7051 diff --git a/auction-dutch/README.md b/auction-dutch/README.md index 1995d507..12d79b1a 100644 --- a/auction-dutch/README.md +++ b/auction-dutch/README.md @@ -49,7 +49,7 @@ Set the following environment to interact with the test network as Org3. export PATH=${PWD}/../bin:$PATH export FABRIC_CFG_PATH=${PWD}/../config/ export CORE_PEER_TLS_ENABLED=true -export CORE_PEER_LOCALMSPID="Org3MSP" +export CORE_PEER_LOCALMSPID=Org3MSP export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org3.example.com/peers/peer0.org3.example.com/tls/ca.crt export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org3.example.com/users/Admin@org3.example.com/msp export CORE_PEER_ADDRESS=localhost:11051 diff --git a/test-network-k8s/scripts/set_anchor_peer.sh b/test-network-k8s/scripts/set_anchor_peer.sh index 80c32825..3942aa16 100755 --- a/test-network-k8s/scripts/set_anchor_peer.sh +++ b/test-network-k8s/scripts/set_anchor_peer.sh @@ -98,12 +98,12 @@ set -x ORG_NUM=$1 CHANNEL_NAME=$2 PEER_NAME=$3 -ORG_NAME="org${ORG_NUM}" +ORG_NAME=org${ORG_NUM} ANCHOR_PEER_HOST=${ORG_NAME}-${PEER_NAME} ANCHOR_PEER_PORT=7051 ORDERER_TLS_CA_FILE=/var/hyperledger/fabric/organizations/ordererOrganizations/org0.example.com/msp/tlscacerts/org0-tls-ca.pem -export CORE_PEER_LOCALMSPID="Org${ORG_NUM}MSP" +export CORE_PEER_LOCALMSPID=Org${ORG_NUM}MSP set_anchor_peer diff --git a/test-network/CHAINCODE_AS_A_SERVICE_TUTORIAL.md b/test-network/CHAINCODE_AS_A_SERVICE_TUTORIAL.md index 33d83ffd..6482a64b 100644 --- a/test-network/CHAINCODE_AS_A_SERVICE_TUTORIAL.md +++ b/test-network/CHAINCODE_AS_A_SERVICE_TUTORIAL.md @@ -58,7 +58,7 @@ To test things are working you can invoke the 'Contract Metadata' function. For # Environment variables for Org1 export CORE_PEER_TLS_ENABLED=true -export CORE_PEER_LOCALMSPID="Org1MSP" +export CORE_PEER_LOCALMSPID=Org1MSP export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/tlsca/tlsca.org1.example.com-cert.pem export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp export CORE_PEER_ADDRESS=localhost:7051 diff --git a/test-network/scripts/envVar.sh b/test-network/scripts/envVar.sh index 15b5ba80..a446c9b3 100755 --- a/test-network/scripts/envVar.sh +++ b/test-network/scripts/envVar.sh @@ -33,17 +33,17 @@ setGlobals() { fi infoln "Using organization ${USING_ORG}" if [ $USING_ORG -eq 1 ]; then - export CORE_PEER_LOCALMSPID="Org1MSP" + export CORE_PEER_LOCALMSPID=Org1MSP export CORE_PEER_TLS_ROOTCERT_FILE=$PEER0_ORG1_CA export CORE_PEER_MSPCONFIGPATH=${TEST_NETWORK_HOME}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp export CORE_PEER_ADDRESS=localhost:7051 elif [ $USING_ORG -eq 2 ]; then - export CORE_PEER_LOCALMSPID="Org2MSP" + export CORE_PEER_LOCALMSPID=Org2MSP export CORE_PEER_TLS_ROOTCERT_FILE=$PEER0_ORG2_CA export CORE_PEER_MSPCONFIGPATH=${TEST_NETWORK_HOME}/organizations/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp export CORE_PEER_ADDRESS=localhost:9051 elif [ $USING_ORG -eq 3 ]; then - export CORE_PEER_LOCALMSPID="Org3MSP" + export CORE_PEER_LOCALMSPID=Org3MSP export CORE_PEER_TLS_ROOTCERT_FILE=$PEER0_ORG3_CA export CORE_PEER_MSPCONFIGPATH=${TEST_NETWORK_HOME}/organizations/peerOrganizations/org3.example.com/users/Admin@org3.example.com/msp export CORE_PEER_ADDRESS=localhost:11051 diff --git a/token-erc-1155/README.md b/token-erc-1155/README.md index d891c938..c6ddfc49 100644 --- a/token-erc-1155/README.md +++ b/token-erc-1155/README.md @@ -140,7 +140,7 @@ Note that we need to call the initialize function before being able to use any f Shift back to the Org1 terminal, we'll set the following environment variables to operate the `peer` CLI as the minter identity from Org1. ```bash export CORE_PEER_TLS_ENABLED=true -export CORE_PEER_LOCALMSPID="Org1MSP" +export CORE_PEER_LOCALMSPID=Org1MSP export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/person1@org1.example.com/msp export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt export CORE_PEER_ADDRESS=localhost:7051 @@ -224,7 +224,7 @@ Switch to the Org2 terminal and set the following environment variables. ```bash export FABRIC_CFG_PATH=$PWD/../config/ export CORE_PEER_TLS_ENABLED=true -export CORE_PEER_LOCALMSPID="Org2MSP" +export CORE_PEER_LOCALMSPID=Org2MSP export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.example.com/users/person2@org2.example.com/msp export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt export CORE_PEER_ADDRESS=localhost:9051 diff --git a/token-erc-20/README.md b/token-erc-20/README.md index c1d5e028..0bc5b0c3 100644 --- a/token-erc-20/README.md +++ b/token-erc-20/README.md @@ -110,7 +110,7 @@ Note that we need to call the initialize function before being able to use any f Shift back to the Org1 terminal, we'll set the following environment variables to operate the `peer` CLI as the minter identity from Org1. ``` export CORE_PEER_TLS_ENABLED=true -export CORE_PEER_LOCALMSPID="Org1MSP" +export CORE_PEER_LOCALMSPID=Org1MSP export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/minter@org1.example.com/msp export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt export CORE_PEER_ADDRESS=localhost:7051 @@ -151,7 +151,7 @@ Let's prepare the Org2 terminal by setting the environment variables for the Org ``` export FABRIC_CFG_PATH=$PWD/../config/ export CORE_PEER_TLS_ENABLED=true -export CORE_PEER_LOCALMSPID="Org2MSP" +export CORE_PEER_LOCALMSPID=Org2MSP export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.example.com/users/recipient@org2.example.com/msp export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt export CORE_PEER_ADDRESS=localhost:9051 @@ -279,7 +279,7 @@ Open a 3rd terminal to represent the spender in Org1 and navigate to fabric-samp export PATH=${PWD}/../bin:${PWD}:$PATH export FABRIC_CFG_PATH=$PWD/../config/ export CORE_PEER_TLS_ENABLED=true -export CORE_PEER_LOCALMSPID="Org1MSP" +export CORE_PEER_LOCALMSPID=Org1MSP export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/spender@org1.example.com/msp export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt export CORE_PEER_ADDRESS=localhost:7051 diff --git a/token-erc-721/README.md b/token-erc-721/README.md index 3c54d76c..2fc60f0e 100644 --- a/token-erc-721/README.md +++ b/token-erc-721/README.md @@ -105,7 +105,7 @@ Note that we need to call the initialize function before being able to use any f Shift back to the Org1 terminal, we'll set the following environment variables to operate the `peer` CLI as the minter identity from Org1. ``` export CORE_PEER_TLS_ENABLED=true -export CORE_PEER_LOCALMSPID="Org1MSP" +export CORE_PEER_LOCALMSPID=Org1MSP export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/minter@org1.example.com/msp export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt export CORE_PEER_ADDRESS=localhost:7051 @@ -123,7 +123,7 @@ Now that we have initialized the contract and created the identity of the minter Shift back to the Org1 terminal, we'll set the following environment variables to operate the `peer` CLI as the minter identity from Org1. ``` export CORE_PEER_TLS_ENABLED=true -export CORE_PEER_LOCALMSPID="Org1MSP" +export CORE_PEER_LOCALMSPID=Org1MSP export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/minter@org1.example.com/msp export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt export CORE_PEER_ADDRESS=localhost:7051 @@ -165,7 +165,7 @@ Let's prepare the Org2 terminal by setting the environment variables for the Org ``` export FABRIC_CFG_PATH=$PWD/../config/ export CORE_PEER_TLS_ENABLED=true -export CORE_PEER_LOCALMSPID="Org2MSP" +export CORE_PEER_LOCALMSPID=Org2MSP export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.example.com/users/recipient@org2.example.com/msp export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt export CORE_PEER_ADDRESS=localhost:9051 @@ -280,7 +280,7 @@ Open a 3rd terminal to represent the operator in Org1 and navigate to fabric-sam export PATH=${PWD}/../bin:${PWD}:$PATH export FABRIC_CFG_PATH=$PWD/../config/ export CORE_PEER_TLS_ENABLED=true -export CORE_PEER_LOCALMSPID="Org1MSP" +export CORE_PEER_LOCALMSPID=Org1MSP export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/operator@org1.example.com/msp export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt export CORE_PEER_ADDRESS=localhost:7051 diff --git a/token-utxo/README.md b/token-utxo/README.md index 0a85f73a..1d9adb04 100644 --- a/token-utxo/README.md +++ b/token-utxo/README.md @@ -99,7 +99,7 @@ Note that we need to call the initialize function before being able to use any f Shift back to the Org1 terminal, we'll set the following environment variables to operate the `peer` CLI as the minter identity from Org1. ``` export CORE_PEER_TLS_ENABLED=true -export CORE_PEER_LOCALMSPID="Org1MSP" +export CORE_PEER_LOCALMSPID=Org1MSP export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/minter@org1.example.com/msp export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt export CORE_PEER_ADDRESS=localhost:7051 @@ -117,7 +117,7 @@ Now that we have initialized the contract and created the identity of the minter Shift back to the Org1 terminal, we'll set the following environment variables to operate the `peer` CLI as the minter identity from Org1. ``` export CORE_PEER_TLS_ENABLED=true -export CORE_PEER_LOCALMSPID="Org1MSP" +export CORE_PEER_LOCALMSPID=Org1MSP export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/minter@org1.example.com/msp export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt export CORE_PEER_ADDRESS=localhost:7051 @@ -161,7 +161,7 @@ Let's prepare the Org2 terminal by setting the environment variables for the Org ``` export FABRIC_CFG_PATH=$PWD/../config/ export CORE_PEER_TLS_ENABLED=true -export CORE_PEER_LOCALMSPID="Org2MSP" +export CORE_PEER_LOCALMSPID=Org2MSP export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.example.com/users/recipient@org2.example.com/msp export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt export CORE_PEER_ADDRESS=localhost:9051 From d3e2a90ad585f5a9903217b0286f55afc83414f4 Mon Sep 17 00:00:00 2001 From: "Mark S. Lewis" Date: Tue, 21 May 2024 15:50:33 +0100 Subject: [PATCH 16/19] Update test dependencies for Java chaincode This resolves mocking errors using the latest Java chaincode shim and very old versions of Mockito. Signed-off-by: Mark S. Lewis --- .../chaincode-java/build.gradle | 7 +- .../assettransfer/AssetTransferTest.java | 8 +- .../chaincode-java/build.gradle | 7 +- .../privatedata/AssetTransferTest.java | 110 +++++++++--------- token-erc-20/chaincode-java/build.gradle | 7 +- token-erc-721/chaincode-java/build.gradle | 7 +- .../erc721/ERC721TokenContractTest.java | 10 +- 7 files changed, 75 insertions(+), 81 deletions(-) diff --git a/asset-transfer-basic/chaincode-java/build.gradle b/asset-transfer-basic/chaincode-java/build.gradle index fdc8bbfb..ae4bc4cf 100644 --- a/asset-transfer-basic/chaincode-java/build.gradle +++ b/asset-transfer-basic/chaincode-java/build.gradle @@ -17,10 +17,9 @@ dependencies { implementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.5.+' implementation 'org.json:json:+' implementation 'com.owlike:genson:1.5' - testImplementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.5.+' - testImplementation 'org.junit.jupiter:junit-jupiter:5.4.2' - testImplementation 'org.assertj:assertj-core:3.11.1' - testImplementation 'org.mockito:mockito-core:2.+' + testImplementation 'org.junit.jupiter:junit-jupiter:5.10.2' + testImplementation 'org.assertj:assertj-core:3.25.3' + testImplementation 'org.mockito:mockito-core:5.12.0' } repositories { diff --git a/asset-transfer-basic/chaincode-java/src/test/java/org/hyperledger/fabric/samples/assettransfer/AssetTransferTest.java b/asset-transfer-basic/chaincode-java/src/test/java/org/hyperledger/fabric/samples/assettransfer/AssetTransferTest.java index 520bcec4..f54f3b1d 100644 --- a/asset-transfer-basic/chaincode-java/src/test/java/org/hyperledger/fabric/samples/assettransfer/AssetTransferTest.java +++ b/asset-transfer-basic/chaincode-java/src/test/java/org/hyperledger/fabric/samples/assettransfer/AssetTransferTest.java @@ -8,7 +8,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.ThrowableAssert.catchThrowable; import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verifyZeroInteractions; +import static org.mockito.Mockito.verifyNoInteractions; import static org.mockito.Mockito.when; import java.util.ArrayList; @@ -26,7 +26,7 @@ import org.mockito.InOrder; public final class AssetTransferTest { - private final class MockKeyValue implements KeyValue { + private static final class MockKeyValue implements KeyValue { private final String key; private final String value; @@ -54,7 +54,7 @@ public final class AssetTransferTest { } - private final class MockAssetResultsIterator implements QueryResultsIterator { + private static final class MockAssetResultsIterator implements QueryResultsIterator { private final List assetList; @@ -102,7 +102,7 @@ public final class AssetTransferTest { .hasMessage("Undefined contract method called"); assertThat(((ChaincodeException) thrown).getPayload()).isEqualTo(null); - verifyZeroInteractions(ctx); + verifyNoInteractions(ctx); } @Nested diff --git a/asset-transfer-private-data/chaincode-java/build.gradle b/asset-transfer-private-data/chaincode-java/build.gradle index 644c595a..9e840068 100644 --- a/asset-transfer-private-data/chaincode-java/build.gradle +++ b/asset-transfer-private-data/chaincode-java/build.gradle @@ -17,10 +17,9 @@ dependencies { implementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.5.+' implementation 'org.json:json:+' - testImplementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.5.+' - testImplementation 'org.junit.jupiter:junit-jupiter:5.4.2' - testImplementation 'org.assertj:assertj-core:3.11.1' - testImplementation 'org.mockito:mockito-core:2.+' + testImplementation 'org.junit.jupiter:junit-jupiter:5.10.2' + testImplementation 'org.assertj:assertj-core:3.25.3' + testImplementation 'org.mockito:mockito-core:5.12.0' } repositories { diff --git a/asset-transfer-private-data/chaincode-java/src/test/java/org/hyperledger/fabric/samples/privatedata/AssetTransferTest.java b/asset-transfer-private-data/chaincode-java/src/test/java/org/hyperledger/fabric/samples/privatedata/AssetTransferTest.java index a11a5f0b..171efe68 100644 --- a/asset-transfer-private-data/chaincode-java/src/test/java/org/hyperledger/fabric/samples/privatedata/AssetTransferTest.java +++ b/asset-transfer-private-data/chaincode-java/src/test/java/org/hyperledger/fabric/samples/privatedata/AssetTransferTest.java @@ -4,21 +4,6 @@ package org.hyperledger.fabric.samples.privatedata; -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.ThrowableAssert.catchThrowable; -import static java.nio.charset.StandardCharsets.UTF_8; -import static org.hyperledger.fabric.samples.privatedata.AssetTransfer.AGREEMENT_KEYPREFIX; -import static org.hyperledger.fabric.samples.privatedata.AssetTransfer.ASSET_COLLECTION_NAME; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.verifyZeroInteractions; -import static org.mockito.Mockito.when; - -import java.io.IOException; -import java.security.cert.CertificateException; -import java.util.HashMap; -import java.util.Map; import org.hyperledger.fabric.contract.ClientIdentity; import org.hyperledger.fabric.contract.Context; import org.hyperledger.fabric.shim.ChaincodeException; @@ -27,6 +12,20 @@ import org.hyperledger.fabric.shim.ledger.CompositeKey; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; +import java.util.HashMap; +import java.util.Map; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.ThrowableAssert.catchThrowable; +import static org.hyperledger.fabric.samples.privatedata.AssetTransfer.AGREEMENT_KEYPREFIX; +import static org.hyperledger.fabric.samples.privatedata.AssetTransfer.ASSET_COLLECTION_NAME; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoInteractions; +import static org.mockito.Mockito.when; + public final class AssetTransferTest { @Nested @@ -38,11 +37,11 @@ public final class AssetTransferTest { Context ctx = mock(Context.class); ChaincodeStub stub = mock(ChaincodeStub.class); when(ctx.getStub()).thenReturn(stub); - Map m = new HashMap(); - m.put("asset_properties", dataAsset1Bytes); + Map m = new HashMap<>(); + m.put("asset_properties", DATA_ASSET_1_BYTES); when(ctx.getStub().getTransient()).thenReturn(m); - when(stub.getPrivateData(ASSET_COLLECTION_NAME, testAsset1ID)) - .thenReturn(dataAsset1Bytes); + when(stub.getPrivateData(ASSET_COLLECTION_NAME, TEST_ASSET_1_ID)) + .thenReturn(DATA_ASSET_1_BYTES); Throwable thrown = catchThrowable(() -> { contract.CreateAsset(ctx); @@ -54,62 +53,62 @@ public final class AssetTransferTest { } @Test - public void createAssetWhenNewAssetIsCreated() throws CertificateException, IOException { + public void createAssetWhenNewAssetIsCreated() { AssetTransfer contract = new AssetTransfer(); Context ctx = mock(Context.class); ChaincodeStub stub = mock(ChaincodeStub.class); when(ctx.getStub()).thenReturn(stub); - when(stub.getMspId()).thenReturn(testOrgOneMSP); + when(stub.getMspId()).thenReturn(TEST_ORG_1_MSP); ClientIdentity ci = mock(ClientIdentity.class); - when(ci.getId()).thenReturn(testOrg1Client); - when(ci.getMSPID()).thenReturn(testOrgOneMSP); + when(ci.getId()).thenReturn(TEST_ORG_1_USER); + when(ci.getMSPID()).thenReturn(TEST_ORG_1_MSP); when(ctx.getClientIdentity()).thenReturn(ci); - Map m = new HashMap(); - m.put("asset_properties", dataAsset1Bytes); + Map m = new HashMap<>(); + m.put("asset_properties", DATA_ASSET_1_BYTES); when(ctx.getStub().getTransient()).thenReturn(m); - when(stub.getPrivateData(ASSET_COLLECTION_NAME, testAsset1ID)) + when(stub.getPrivateData(ASSET_COLLECTION_NAME, TEST_ASSET_1_ID)) .thenReturn(new byte[0]); Asset created = contract.CreateAsset(ctx); - assertThat(created).isEqualTo(testAsset1); + assertThat(created).isEqualTo(TEST_ASSET_1); - verify(stub).putPrivateData(ASSET_COLLECTION_NAME, testAsset1ID, created.serialize()); + verify(stub).putPrivateData(ASSET_COLLECTION_NAME, TEST_ASSET_1_ID, created.serialize()); } @Test - public void transferAssetWhenExistingAssetIsTransferred() throws CertificateException, IOException { + public void transferAssetWhenExistingAssetIsTransferred() { AssetTransfer contract = new AssetTransfer(); Context ctx = mock(Context.class); ChaincodeStub stub = mock(ChaincodeStub.class); when(ctx.getStub()).thenReturn(stub); - when(stub.getMspId()).thenReturn(testOrgOneMSP); + when(stub.getMspId()).thenReturn(TEST_ORG_1_MSP); ClientIdentity ci = mock(ClientIdentity.class); - when(ci.getId()).thenReturn(testOrg1Client); + when(ci.getId()).thenReturn(TEST_ORG_1_USER); when(ctx.getClientIdentity()).thenReturn(ci); - when(ci.getMSPID()).thenReturn(testOrgOneMSP); + when(ci.getMSPID()).thenReturn(TEST_ORG_1_MSP); final String recipientOrgMsp = "TestOrg2"; final String buyerIdentity = "TestOrg2User"; - Map m = new HashMap(); - m.put("asset_owner", ("{ \"buyerMSP\": \"" + recipientOrgMsp + "\", \"assetID\": \"" + testAsset1ID + "\" }").getBytes()); + Map m = new HashMap<>(); + m.put("asset_owner", ("{ \"buyerMSP\": \"" + recipientOrgMsp + "\", \"assetID\": \"" + TEST_ASSET_1_ID + "\" }").getBytes()); when(ctx.getStub().getTransient()).thenReturn(m); when(stub.getPrivateDataHash(anyString(), anyString())).thenReturn("TestHashValue".getBytes()); - when(stub.getPrivateData(ASSET_COLLECTION_NAME, testAsset1ID)) - .thenReturn(dataAsset1Bytes); + when(stub.getPrivateData(ASSET_COLLECTION_NAME, TEST_ASSET_1_ID)) + .thenReturn(DATA_ASSET_1_BYTES); CompositeKey ck = mock(CompositeKey.class); - when(ck.toString()).thenReturn(AGREEMENT_KEYPREFIX + testAsset1ID); - when(stub.createCompositeKey(AGREEMENT_KEYPREFIX, testAsset1ID)).thenReturn(ck); - when(stub.getPrivateData(ASSET_COLLECTION_NAME, AGREEMENT_KEYPREFIX + testAsset1ID)).thenReturn(buyerIdentity.getBytes(UTF_8)); + when(ck.toString()).thenReturn(AGREEMENT_KEYPREFIX + TEST_ASSET_1_ID); + when(stub.createCompositeKey(AGREEMENT_KEYPREFIX, TEST_ASSET_1_ID)).thenReturn(ck); + when(stub.getPrivateData(ASSET_COLLECTION_NAME, AGREEMENT_KEYPREFIX + TEST_ASSET_1_ID)).thenReturn(buyerIdentity.getBytes(UTF_8)); contract.TransferAsset(ctx); Asset exptectedAfterTransfer = Asset.deserialize("{ \"objectType\": \"testasset\", \"assetID\": \"asset1\", \"color\": \"blue\", \"size\": 5, \"owner\": \"" + buyerIdentity + "\", \"appraisedValue\": 300 }"); - verify(stub).putPrivateData(ASSET_COLLECTION_NAME, testAsset1ID, exptectedAfterTransfer.serialize()); - String collectionOwner = testOrgOneMSP + "PrivateCollection"; - verify(stub).delPrivateData(collectionOwner, testAsset1ID); - verify(stub).delPrivateData(ASSET_COLLECTION_NAME, AGREEMENT_KEYPREFIX + testAsset1ID); + verify(stub).putPrivateData(ASSET_COLLECTION_NAME, TEST_ASSET_1_ID, exptectedAfterTransfer.serialize()); + String collectionOwner = TEST_ORG_1_MSP + "PrivateCollection"; + verify(stub).delPrivateData(collectionOwner, TEST_ASSET_1_ID); + verify(stub).delPrivateData(ASSET_COLLECTION_NAME, AGREEMENT_KEYPREFIX + TEST_ASSET_1_ID); } } @@ -122,12 +121,12 @@ public final class AssetTransferTest { Context ctx = mock(Context.class); ChaincodeStub stub = mock(ChaincodeStub.class); when(ctx.getStub()).thenReturn(stub); - when(stub.getPrivateData(ASSET_COLLECTION_NAME, testAsset1ID)) - .thenReturn(dataAsset1Bytes); + when(stub.getPrivateData(ASSET_COLLECTION_NAME, TEST_ASSET_1_ID)) + .thenReturn(DATA_ASSET_1_BYTES); - Asset asset = contract.ReadAsset(ctx, testAsset1ID); + Asset asset = contract.ReadAsset(ctx, TEST_ASSET_1_ID); - assertThat(asset).isEqualTo(testAsset1); + assertThat(asset).isEqualTo(TEST_ASSET_1); } @Test @@ -136,9 +135,9 @@ public final class AssetTransferTest { Context ctx = mock(Context.class); ChaincodeStub stub = mock(ChaincodeStub.class); when(ctx.getStub()).thenReturn(stub); - when(stub.getStringState(testAsset1ID)).thenReturn(null); + when(stub.getStringState(TEST_ASSET_1_ID)).thenReturn(null); - Asset asset = contract.ReadAsset(ctx, testAsset1ID); + Asset asset = contract.ReadAsset(ctx, TEST_ASSET_1_ID); assertThat(asset).isNull(); } @@ -155,16 +154,15 @@ public final class AssetTransferTest { .hasMessage("Undefined contract method called"); assertThat(((ChaincodeException) thrown).getPayload()).isEqualTo(null); - verifyZeroInteractions(ctx); + verifyNoInteractions(ctx); } } - private static String testOrgOneMSP = "TestOrg1"; - private static String testOrg1Client = "testOrg1User"; - - private static String testAsset1ID = "asset1"; - private static Asset testAsset1 = new Asset("testasset", "asset1", "blue", 5, testOrg1Client); - private static byte[] dataAsset1Bytes = "{ \"objectType\": \"testasset\", \"assetID\": \"asset1\", \"color\": \"blue\", \"size\": 5, \"owner\": \"testOrg1User\", \"appraisedValue\": 300 }".getBytes(); + private static final String TEST_ORG_1_MSP = "TestOrg1"; + private static final String TEST_ORG_1_USER = "testOrg1User"; + private static final String TEST_ASSET_1_ID = "asset1"; + private static final Asset TEST_ASSET_1 = new Asset("testasset", "asset1", "blue", 5, TEST_ORG_1_USER); + private static final byte[] DATA_ASSET_1_BYTES = "{ \"objectType\": \"testasset\", \"assetID\": \"asset1\", \"color\": \"blue\", \"size\": 5, \"owner\": \"testOrg1User\", \"appraisedValue\": 300 }".getBytes(); } diff --git a/token-erc-20/chaincode-java/build.gradle b/token-erc-20/chaincode-java/build.gradle index 4a652837..7a0e1995 100755 --- a/token-erc-20/chaincode-java/build.gradle +++ b/token-erc-20/chaincode-java/build.gradle @@ -17,10 +17,9 @@ dependencies { implementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.5.+' implementation 'org.json:json:+' implementation 'com.owlike:genson:1.5' - testImplementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.5.+' - testImplementation 'org.junit.jupiter:junit-jupiter:5.4.2' - testImplementation 'org.assertj:assertj-core:3.11.1' - testImplementation 'org.mockito:mockito-core:2.+' + testImplementation 'org.junit.jupiter:junit-jupiter:5.10.2' + testImplementation 'org.assertj:assertj-core:3.25.3' + testImplementation 'org.mockito:mockito-core:5.12.0' testRuntimeOnly("net.bytebuddy:byte-buddy:1.10.6") } diff --git a/token-erc-721/chaincode-java/build.gradle b/token-erc-721/chaincode-java/build.gradle index bb9c736a..3f94609b 100755 --- a/token-erc-721/chaincode-java/build.gradle +++ b/token-erc-721/chaincode-java/build.gradle @@ -17,10 +17,9 @@ dependencies { implementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.5.+' implementation 'org.json:json:+' implementation 'com.owlike:genson:1.5' - testImplementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.5.+' - testImplementation 'org.junit.jupiter:junit-jupiter:5.4.2' - testImplementation 'org.assertj:assertj-core:3.11.1' - testImplementation 'org.mockito:mockito-core:2.23.4' + testImplementation 'org.junit.jupiter:junit-jupiter:5.10.2' + testImplementation 'org.assertj:assertj-core:3.25.3' + testImplementation 'org.mockito:mockito-core:5.12.0' testRuntimeOnly("net.bytebuddy:byte-buddy:1.10.6") } diff --git a/token-erc-721/chaincode-java/src/test/java/org/hyperledger/fabric/samples/erc721/ERC721TokenContractTest.java b/token-erc-721/chaincode-java/src/test/java/org/hyperledger/fabric/samples/erc721/ERC721TokenContractTest.java index 218970d0..48641cf1 100644 --- a/token-erc-721/chaincode-java/src/test/java/org/hyperledger/fabric/samples/erc721/ERC721TokenContractTest.java +++ b/token-erc-721/chaincode-java/src/test/java/org/hyperledger/fabric/samples/erc721/ERC721TokenContractTest.java @@ -28,7 +28,7 @@ import static org.mockito.Mockito.when; public class ERC721TokenContractTest { - private final class MockKeyValue implements KeyValue { + private static final class MockKeyValue implements KeyValue { private final String key; private final String value; @@ -55,7 +55,7 @@ public class ERC721TokenContractTest { } } - private final class MockAssetResultsIterator implements QueryResultsIterator { + private static final class MockAssetResultsIterator implements QueryResultsIterator { private final List assetList; @@ -166,7 +166,7 @@ public class ERC721TokenContractTest { } @Test - public void whenSenderisApprovedClientOfToken() + public void whenSenderIsApprovedClientOfToken() throws CertificateException, JSONException, IOException { Approval approval = new Approval("Alice", "Charlie", false); CompositeKey ck = mock(CompositeKey.class); @@ -184,7 +184,7 @@ public class ERC721TokenContractTest { } @Test - public void whenSenderisAuthorizedOperatorOfToken() + public void whenSenderIsAuthorizedOperatorOfToken() throws CertificateException, JSONException, IOException { Approval approval = new Approval("Alice", "Dave", true); CompositeKey ck = mock(CompositeKey.class); @@ -254,7 +254,7 @@ public class ERC721TokenContractTest { class ERC721ApproveFunctionalitiesTest { @Test - public void invokeAprrove() throws CertificateException, JSONException, IOException { + public void invokeApprove() throws CertificateException, JSONException, IOException { Context ctx = mock(Context.class); ChaincodeStub stub = mock(ChaincodeStub.class); NFT nft = new NFT("101", "Alice", "http://test.com", ""); From 1058f9ffe16add583d1a11342deb5a9df3e5b72c Mon Sep 17 00:00:00 2001 From: James Taylor Date: Fri, 24 May 2024 16:04:18 +0100 Subject: [PATCH 17/19] Update test-network-k8s Add required permissions for upcoming k8s builder release Also adds ttl to install jobs and configures the k8s builder prefix Signed-off-by: James Taylor --- test-network-k8s/config/org1/core.yaml | 1 + test-network-k8s/config/org2/core.yaml | 1 + test-network-k8s/kube/fabric-builder-role.yaml | 3 ++- test-network-k8s/kube/org1/org1-install-k8s-builder.yaml | 1 + test-network-k8s/kube/org1/org1-peer1.yaml | 1 + test-network-k8s/kube/org1/org1-peer2.yaml | 1 + test-network-k8s/kube/org2/org2-install-k8s-builder.yaml | 1 + test-network-k8s/kube/org2/org2-peer1.yaml | 1 + test-network-k8s/kube/org2/org2-peer2.yaml | 1 + 9 files changed, 10 insertions(+), 1 deletion(-) diff --git a/test-network-k8s/config/org1/core.yaml b/test-network-k8s/config/org1/core.yaml index 02004572..9643adbd 100644 --- a/test-network-k8s/config/org1/core.yaml +++ b/test-network-k8s/config/org1/core.yaml @@ -568,6 +568,7 @@ chaincode: path: /var/hyperledger/fabric/external_builders/k8s_builder propagateEnvironment: - CORE_PEER_ID + - FABRIC_K8S_BUILDER_OBJECT_NAME_PREFIX - KUBERNETES_SERVICE_HOST - KUBERNETES_SERVICE_PORT diff --git a/test-network-k8s/config/org2/core.yaml b/test-network-k8s/config/org2/core.yaml index 8d9c1d97..e4168a12 100644 --- a/test-network-k8s/config/org2/core.yaml +++ b/test-network-k8s/config/org2/core.yaml @@ -568,6 +568,7 @@ chaincode: path: /var/hyperledger/fabric/external_builders/k8s_builder propagateEnvironment: - CORE_PEER_ID + - FABRIC_K8S_BUILDER_OBJECT_NAME_PREFIX - KUBERNETES_SERVICE_HOST - KUBERNETES_SERVICE_PORT diff --git a/test-network-k8s/kube/fabric-builder-role.yaml b/test-network-k8s/kube/fabric-builder-role.yaml index 3f51d931..c1d6d4ff 100644 --- a/test-network-k8s/kube/fabric-builder-role.yaml +++ b/test-network-k8s/kube/fabric-builder-role.yaml @@ -12,9 +12,10 @@ rules: - apiGroups: - "" - apps + - batch resources: - pods - - deployments + - jobs - configmaps - secrets verbs: diff --git a/test-network-k8s/kube/org1/org1-install-k8s-builder.yaml b/test-network-k8s/kube/org1/org1-install-k8s-builder.yaml index 8c8b26f8..d6bea41b 100644 --- a/test-network-k8s/kube/org1/org1-install-k8s-builder.yaml +++ b/test-network-k8s/kube/org1/org1-install-k8s-builder.yaml @@ -9,6 +9,7 @@ kind: Job metadata: name: org1-install-k8s-builder spec: + ttlSecondsAfterFinished: 600 backoffLimit: 0 completions: 1 template: diff --git a/test-network-k8s/kube/org1/org1-peer1.yaml b/test-network-k8s/kube/org1/org1-peer1.yaml index 22a259a6..9d267356 100644 --- a/test-network-k8s/kube/org1/org1-peer1.yaml +++ b/test-network-k8s/kube/org1/org1-peer1.yaml @@ -53,6 +53,7 @@ data: CORE_PEER_FILESYSTEMPATH: /var/hyperledger/fabric/data/org1-peer1.org1.example.com CORE_LEDGER_SNAPSHOTS_ROOTDIR: /var/hyperledger/fabric/data/org1-peer1.org1.example.com/snapshots CHAINCODE_AS_A_SERVICE_BUILDER_CONFIG: "{\"peername\":\"org1peer1\"}" + FABRIC_K8S_BUILDER_OBJECT_NAME_PREFIX: org1-peer1-cc CORE_LEDGER_STATE_STATEDATABASE: CouchDB CORE_LEDGER_STATE_COUCHDBCONFIG_MAXRETRIESONSTARTUP: "20" CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS: localhost:5984 diff --git a/test-network-k8s/kube/org1/org1-peer2.yaml b/test-network-k8s/kube/org1/org1-peer2.yaml index f6282c0f..7eb6fb52 100644 --- a/test-network-k8s/kube/org1/org1-peer2.yaml +++ b/test-network-k8s/kube/org1/org1-peer2.yaml @@ -54,6 +54,7 @@ data: CORE_PEER_FILESYSTEMPATH: /var/hyperledger/fabric/data/org1-peer2.org1.example.com CORE_LEDGER_SNAPSHOTS_ROOTDIR: /var/hyperledger/fabric/data/org1-peer2.org1.example.com/snapshots CHAINCODE_AS_A_SERVICE_BUILDER_CONFIG: "{\"peername\":\"org1peer2\"}" + FABRIC_K8S_BUILDER_OBJECT_NAME_PREFIX: org1-peer2-cc CORE_LEDGER_STATE_STATEDATABASE: CouchDB CORE_LEDGER_STATE_COUCHDBCONFIG_MAXRETRIESONSTARTUP: "20" CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS: localhost:5984 diff --git a/test-network-k8s/kube/org2/org2-install-k8s-builder.yaml b/test-network-k8s/kube/org2/org2-install-k8s-builder.yaml index 2b336f06..a32a44b8 100644 --- a/test-network-k8s/kube/org2/org2-install-k8s-builder.yaml +++ b/test-network-k8s/kube/org2/org2-install-k8s-builder.yaml @@ -9,6 +9,7 @@ kind: Job metadata: name: org2-install-k8s-builder spec: + ttlSecondsAfterFinished: 600 backoffLimit: 0 completions: 1 template: diff --git a/test-network-k8s/kube/org2/org2-peer1.yaml b/test-network-k8s/kube/org2/org2-peer1.yaml index 57f307ab..86111c82 100644 --- a/test-network-k8s/kube/org2/org2-peer1.yaml +++ b/test-network-k8s/kube/org2/org2-peer1.yaml @@ -53,6 +53,7 @@ data: CORE_PEER_FILESYSTEMPATH: /var/hyperledger/fabric/data/org2-peer1.org2.example.com CORE_LEDGER_SNAPSHOTS_ROOTDIR: /var/hyperledger/fabric/data/org2-peer1.org2.example.com/snapshots CHAINCODE_AS_A_SERVICE_BUILDER_CONFIG: "{\"peername\":\"org2peer1\"}" + FABRIC_K8S_BUILDER_OBJECT_NAME_PREFIX: org2-peer1-cc CORE_LEDGER_STATE_STATEDATABASE: CouchDB CORE_LEDGER_STATE_COUCHDBCONFIG_MAXRETRIESONSTARTUP: "20" CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS: localhost:5984 diff --git a/test-network-k8s/kube/org2/org2-peer2.yaml b/test-network-k8s/kube/org2/org2-peer2.yaml index 8ba1958b..8fc18b6c 100644 --- a/test-network-k8s/kube/org2/org2-peer2.yaml +++ b/test-network-k8s/kube/org2/org2-peer2.yaml @@ -52,6 +52,7 @@ data: CORE_PEER_FILESYSTEMPATH: /var/hyperledger/fabric/data/org2-peer2.org2.example.com CORE_LEDGER_SNAPSHOTS_ROOTDIR: /var/hyperledger/fabric/data/org2-peer2.org2.example.com/snapshots CHAINCODE_AS_A_SERVICE_BUILDER_CONFIG: "{\"peername\":\"org2peer2\"}" + FABRIC_K8S_BUILDER_OBJECT_NAME_PREFIX: org2-peer2-cc CORE_LEDGER_STATE_STATEDATABASE: CouchDB CORE_LEDGER_STATE_COUCHDBCONFIG_MAXRETRIESONSTARTUP: "20" CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS: localhost:5984 From 92f028c08dae90bce706171411bde33cefb981f6 Mon Sep 17 00:00:00 2001 From: David Enyeart Date: Tue, 21 May 2024 08:26:33 -0400 Subject: [PATCH 18/19] Bump dependencies Go to 1.22 CouchDB to 3.3.3 Fabric to 2.5.8 Fabric-CA to 1.5.11 Signed-off-by: David Enyeart --- .github/actions/test-network-setup/action.yaml | 6 +++--- .github/workflows/lint.yaml | 2 +- .../infrastructure/sample-network/network | 6 +++--- test-network/addOrg3/compose/compose-couch-org3.yaml | 2 +- .../addOrg3/compose/podman/podman-compose-couch-org3.yaml | 2 +- test-network/compose/compose-couch.yaml | 4 ++-- test-network/scripts/utils.sh | 8 ++++---- 7 files changed, 15 insertions(+), 15 deletions(-) diff --git a/.github/actions/test-network-setup/action.yaml b/.github/actions/test-network-setup/action.yaml index 8bef0099..a5ce6fcc 100644 --- a/.github/actions/test-network-setup/action.yaml +++ b/.github/actions/test-network-setup/action.yaml @@ -3,7 +3,7 @@ description: Set up the Test Network Runtime inputs: go-version: description: Version of go - default: '1.21' + default: '1.22' node-version: description: Version of node default: 18.x @@ -12,10 +12,10 @@ inputs: default: 11.x fabric-version: description: Version of Hyperledger Fabric - default: 2.5.7 + default: 2.5.8 ca-version: description: Version of Hyperledger Fabric CA - default: 1.5.10 + default: 1.5.11 runs: using: "composite" diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml index d0e93891..35be812a 100644 --- a/.github/workflows/lint.yaml +++ b/.github/workflows/lint.yaml @@ -16,7 +16,7 @@ concurrency: cancel-in-progress: true env: - GO_VER: '1.21' + GO_VER: '1.22' NODE_VER: 18.x JAVA_VER: 11.x diff --git a/full-stack-asset-transfer-guide/infrastructure/sample-network/network b/full-stack-asset-transfer-guide/infrastructure/sample-network/network index 1cb0b286..804d09b7 100755 --- a/full-stack-asset-transfer-guide/infrastructure/sample-network/network +++ b/full-stack-asset-transfer-guide/infrastructure/sample-network/network @@ -33,8 +33,8 @@ function context() { export ${name}="${!override_name:-${default_value}}" } -context FABRIC_VERSION 2.5.1 -context FABRIC_CA_VERSION 1.5.6 +context FABRIC_VERSION 2.5.8 +context FABRIC_CA_VERSION 1.5.11 context CLUSTER_RUNTIME kind # or k3s for Rancher context CONTAINER_CLI docker # or nerdctl for containerd @@ -88,7 +88,7 @@ context INIT_IMAGE_LABEL latest context GRPCWEB_IMAGE ghcr.io/hyperledger-labs/grpc-web context GRPCWEB_IMAGE_LABEL latest context COUCHDB_IMAGE couchdb -context COUCHDB_IMAGE_LABEL 3.3.2 +context COUCHDB_IMAGE_LABEL 3.3.3 context CONSOLE_IMAGE ghcr.io/hyperledger-labs/fabric-console context CONSOLE_IMAGE_LABEL latest context DEPLOYER_IMAGE ghcr.io/ibm-blockchain/fabric-deployer diff --git a/test-network/addOrg3/compose/compose-couch-org3.yaml b/test-network/addOrg3/compose/compose-couch-org3.yaml index 595d4675..76971c48 100644 --- a/test-network/addOrg3/compose/compose-couch-org3.yaml +++ b/test-network/addOrg3/compose/compose-couch-org3.yaml @@ -12,7 +12,7 @@ networks: services: couchdb4: container_name: couchdb4 - image: couchdb:3.3.2 + image: couchdb:3.3.3 labels: service: hyperledger-fabric # Populate the COUCHDB_USER and COUCHDB_PASSWORD to set an admin user and password diff --git a/test-network/addOrg3/compose/podman/podman-compose-couch-org3.yaml b/test-network/addOrg3/compose/podman/podman-compose-couch-org3.yaml index 595d4675..76971c48 100644 --- a/test-network/addOrg3/compose/podman/podman-compose-couch-org3.yaml +++ b/test-network/addOrg3/compose/podman/podman-compose-couch-org3.yaml @@ -12,7 +12,7 @@ networks: services: couchdb4: container_name: couchdb4 - image: couchdb:3.3.2 + image: couchdb:3.3.3 labels: service: hyperledger-fabric # Populate the COUCHDB_USER and COUCHDB_PASSWORD to set an admin user and password diff --git a/test-network/compose/compose-couch.yaml b/test-network/compose/compose-couch.yaml index d9819a46..4a88f45a 100644 --- a/test-network/compose/compose-couch.yaml +++ b/test-network/compose/compose-couch.yaml @@ -12,7 +12,7 @@ networks: services: couchdb0: container_name: couchdb0 - image: couchdb:3.3.2 + image: couchdb:3.3.3 labels: service: hyperledger-fabric # Populate the COUCHDB_USER and COUCHDB_PASSWORD to set an admin user and password @@ -41,7 +41,7 @@ services: couchdb1: container_name: couchdb1 - image: couchdb:3.3.2 + image: couchdb:3.3.3 labels: service: hyperledger-fabric # Populate the COUCHDB_USER and COUCHDB_PASSWORD to set an admin user and password diff --git a/test-network/scripts/utils.sh b/test-network/scripts/utils.sh index 73db6efb..707e0c15 100755 --- a/test-network/scripts/utils.sh +++ b/test-network/scripts/utils.sh @@ -17,8 +17,8 @@ function printHelp() { println println " Flags:" println " Used with \033[0;32mnetwork.sh prereq\033[0m:" - println " -i FabricVersion (default: '2.5.4')" - println " -cai Fabric CA Version (default: '1.5.7')" + println " -i FabricVersion (default: '2.5.8')" + println " -cai Fabric CA Version (default: '1.5.11')" println elif [ "$USAGE" == "up" ]; then println "Usage: " @@ -159,8 +159,8 @@ function printHelp() { println println " Flags:" println " Used with \033[0;32mnetwork.sh prereq\033[0m" - println " -i FabricVersion (default: '2.5.4')" - println " -cai Fabric CA Version (default: '1.5.7')" + println " -i FabricVersion (default: '2.5.8')" + println " -cai Fabric CA Version (default: '1.5.11')" println println " Used with \033[0;32mnetwork.sh up\033[0m, \033[0;32mnetwork.sh createChannel\033[0m:" println " -ca - Use Certificate Authorities to generate network crypto material" From 3c63eac4e303e8348c42637d7ed337727645b9ce Mon Sep 17 00:00:00 2001 From: Chris Elder Date: Thu, 23 May 2024 11:08:06 -0400 Subject: [PATCH 19/19] Add CA capability to test-network-nano-bash This change adds: - shell scripts to start CAs for each org - optional flag (-c) to network.sh to start CAs - generate crypto material in the same format as cryptogen using the CAs - describe how to start the CAs using terminals Signed-off-by: Chris Elder --- test-network-nano-bash/.gitignore | 1 + test-network-nano-bash/README.md | 15 + .../ca_config/ca/fabric-ca-server-config.yaml | 511 ++++++++++++++++++ .../tlsca/fabric-ca-server-config.yaml | 494 +++++++++++++++++ test-network-nano-bash/ca/ca_utils.sh | 117 ++++ test-network-nano-bash/ca/config.yaml | 14 + .../ca/createEnrollments.sh | 118 ++++ test-network-nano-bash/ca_terminal_setup.png | Bin 0 -> 61294 bytes test-network-nano-bash/generate_artifacts.sh | 43 +- test-network-nano-bash/network.sh | 30 +- test-network-nano-bash/ordererca.sh | 39 ++ test-network-nano-bash/org1ca.sh | 39 ++ test-network-nano-bash/org2ca.sh | 39 ++ 13 files changed, 1451 insertions(+), 9 deletions(-) create mode 100644 test-network-nano-bash/ca/ca_config/ca/fabric-ca-server-config.yaml create mode 100644 test-network-nano-bash/ca/ca_config/tlsca/fabric-ca-server-config.yaml create mode 100755 test-network-nano-bash/ca/ca_utils.sh create mode 100644 test-network-nano-bash/ca/config.yaml create mode 100755 test-network-nano-bash/ca/createEnrollments.sh create mode 100644 test-network-nano-bash/ca_terminal_setup.png create mode 100755 test-network-nano-bash/ordererca.sh create mode 100755 test-network-nano-bash/org1ca.sh create mode 100755 test-network-nano-bash/org2ca.sh diff --git a/test-network-nano-bash/.gitignore b/test-network-nano-bash/.gitignore index ad2d6f78..2dc34f03 100644 --- a/test-network-nano-bash/.gitignore +++ b/test-network-nano-bash/.gitignore @@ -1,6 +1,7 @@ channel-artifacts/ crypto-config/ data/ +data_ca/ logs/ *.gz chaincode-external/ diff --git a/test-network-nano-bash/README.md b/test-network-nano-bash/README.md index 7d276ecc..8c8540c0 100644 --- a/test-network-nano-bash/README.md +++ b/test-network-nano-bash/README.md @@ -59,6 +59,16 @@ If you have trouble running bash scripts in your environment, you can just as ea Note the syntax of running the scripts. The peer admin scripts set the admin environment variables and must be run with the `source` command in order that the exported environment variables can be utilized by any subsequent user commands. +## Running each component separately with CAs + +These instructions are for running the CAs from terminal sessions. Open terminal windows for 3 CAs as seen in the following terminal setup. These instructions should be followd before opening the ordering and peer windows described above. + +![CA Terminal setup](ca_terminal_setup.png) + +- cd to the `test-network-nano-bash` directory in each terminal window +- Before running the `./generate_artifacts.sh -ca` in the first orderer terminal, run `./ordererca.sh`, `./org1ca.sh`, `./org2ca.sh` in the repsective terminals. +- In the first orderer terminal, run `./generate_artifacts.sh -ca` to generate crypto material using the CAs and application channel genesis block and configuration transactions (calls configtxgen). The artifacts will be created in the `crypto-config` and `channel-artifacts` directories. If you are running BFT consensus then run `./generate_artifacts.sh BFT -ca`. All artifacts generated with the CA will conform to the same directory structure as cryptogen. + ## Starting the network with one command Using the individual scripts above gives you more control of the process of starting a Fabric network and demonstrates how all the required components fit together, however the same network can also be started using a single script for convenience. @@ -73,6 +83,11 @@ For BFT consensus type: ./network.sh start -o BFT ``` +For Raft consensus type using CAs: +```shell +./network.sh start -ca +``` + After the network has started, use separate terminals to run peer commands. You will need to configure the peer environment for each new terminal. For example to run against peer1, use: diff --git a/test-network-nano-bash/ca/ca_config/ca/fabric-ca-server-config.yaml b/test-network-nano-bash/ca/ca_config/ca/fabric-ca-server-config.yaml new file mode 100644 index 00000000..51291b5a --- /dev/null +++ b/test-network-nano-bash/ca/ca_config/ca/fabric-ca-server-config.yaml @@ -0,0 +1,511 @@ +############################################################################# +# This is a configuration file for the fabric-ca-server command. +# +# COMMAND LINE ARGUMENTS AND ENVIRONMENT VARIABLES +# ------------------------------------------------ +# Each configuration element can be overridden via command line +# arguments or environment variables. The precedence for determining +# the value of each element is as follows: +# 1) command line argument +# Examples: +# a) --port 443 +# To set the listening port +# b) --ca.keyfile ../mykey.pem +# To set the "keyfile" element in the "ca" section below; +# note the '.' separator character. +# 2) environment variable +# Examples: +# a) FABRIC_CA_SERVER_PORT=443 +# To set the listening port +# b) FABRIC_CA_SERVER_CA_KEYFILE="../mykey.pem" +# To set the "keyfile" element in the "ca" section below; +# note the '_' separator character. +# 3) configuration file +# 4) default value (if there is one) +# All default values are shown beside each element below. +# +# FILE NAME ELEMENTS +# ------------------ +# The value of all fields whose name ends with "file" or "files" are +# name or names of other files. +# For example, see "tls.certfile" and "tls.clientauth.certfiles". +# The value of each of these fields can be a simple filename, a +# relative path, or an absolute path. If the value is not an +# absolute path, it is interpreted as being relative to the location +# of this configuration file. +# +############################################################################# + +# Version of config file +version: v1.5.9 + +# Server's listening port (default: 7054) +port: 7052 + +# Cross-Origin Resource Sharing (CORS) +cors: + enabled: false + origins: + - "*" + +# Enables debug logging (default: false) +debug: false + +# Size limit of an acceptable CRL in bytes (default: 512000) +crlsizelimit: 512000 + +############################################################################# +# TLS section for the server's listening port +# +# The following types are supported for client authentication: NoClientCert, +# RequestClientCert, RequireAnyClientCert, VerifyClientCertIfGiven, +# and RequireAndVerifyClientCert. +# +# Certfiles is a list of root certificate authorities that the server uses +# when verifying client certificates. +############################################################################# +tls: + # Enable TLS (default: false) + enabled: true + # TLS for the server's listening port + certfile: + keyfile: + clientauth: + type: noclientcert + certfiles: + +############################################################################# +# The CA section contains information related to the Certificate Authority +# including the name of the CA, which should be unique for all members +# of a blockchain network. It also includes the key and certificate files +# used when issuing enrollment certificates (ECerts). +# The chainfile (if it exists) contains the certificate chain which +# should be trusted for this CA, where the 1st in the chain is always the +# root CA certificate. +############################################################################# +ca: + # Name of this CA + name: ca + # Key file (is only used to import a private key into BCCSP) + keyfile: + # Certificate file (default: ca-cert.pem) + certfile: + # Chain file + chainfile: + # Ignore Certificate Expiration in the case of re-enroll + reenrollIgnoreCertExpiry: false + +############################################################################# +# The gencrl REST endpoint is used to generate a CRL that contains revoked +# certificates. This section contains configuration options that are used +# during gencrl request processing. +############################################################################# +crl: + # Specifies expiration for the generated CRL. The number of hours + # specified by this property is added to the UTC time, the resulting time + # is used to set the 'Next Update' date of the CRL. + expiry: 24h + +############################################################################# +# The registry section controls how the fabric-ca-server does two things: +# 1) authenticates enrollment requests which contain a username and password +# (also known as an enrollment ID and secret). +# 2) once authenticated, retrieves the identity's attribute names and values. +# These attributes are useful for making access control decisions in +# chaincode. +# There are two main configuration options: +# 1) The fabric-ca-server is the registry. +# This is true if "ldap.enabled" in the ldap section below is false. +# 2) An LDAP server is the registry, in which case the fabric-ca-server +# calls the LDAP server to perform these tasks. +# This is true if "ldap.enabled" in the ldap section below is true, +# which means this "registry" section is ignored. +############################################################################# +registry: + # Maximum number of times a password/secret can be reused for enrollment + # (default: -1, which means there is no limit) + maxenrollments: -1 + + # Contains identity information which is used when LDAP is disabled + identities: + - name: admin + pass: adminpw + type: client + affiliation: "" + attrs: + hf.Registrar.Roles: "*" + hf.Registrar.DelegateRoles: "*" + hf.Revoker: true + hf.IntermediateCA: true + hf.GenCRL: true + hf.Registrar.Attributes: "*" + hf.AffiliationMgr: true + +############################################################################# +# Database section +# Supported types are: "sqlite3", "postgres", and "mysql". +# The datasource value depends on the type. +# If the type is "sqlite3", the datasource value is a file name to use +# as the database store. Since "sqlite3" is an embedded database, it +# may not be used if you want to run the fabric-ca-server in a cluster. +# To run the fabric-ca-server in a cluster, you must choose "postgres" +# or "mysql". +############################################################################# +db: + type: sqlite3 + datasource: ../db/fabric-ca-server.db + tls: + enabled: false + certfiles: + client: + certfile: + keyfile: + +############################################################################# +# LDAP section +# If LDAP is enabled, the fabric-ca-server calls LDAP to: +# 1) authenticate enrollment ID and secret (i.e. username and password) +# for enrollment requests; +# 2) To retrieve identity attributes +############################################################################# +ldap: + # Enables or disables the LDAP client (default: false) + # If this is set to true, the "registry" section is ignored. + enabled: false + # The URL of the LDAP server + url: ldap://:@:/ + # TLS configuration for the client connection to the LDAP server + tls: + certfiles: + client: + certfile: + keyfile: + # Attribute related configuration for mapping from LDAP entries to Fabric CA attributes + attribute: + # 'names' is an array of strings containing the LDAP attribute names which are + # requested from the LDAP server for an LDAP identity's entry + names: ['uid','member'] + # The 'converters' section is used to convert an LDAP entry to the value of + # a fabric CA attribute. + # For example, the following converts an LDAP 'uid' attribute + # whose value begins with 'revoker' to a fabric CA attribute + # named "hf.Revoker" with a value of "true" (because the boolean expression + # evaluates to true). + # converters: + # - name: hf.Revoker + # value: attr("uid") =~ "revoker*" + converters: + - name: + value: + # The 'maps' section contains named maps which may be referenced by the 'map' + # function in the 'converters' section to map LDAP responses to arbitrary values. + # For example, assume a user has an LDAP attribute named 'member' which has multiple + # values which are each a distinguished name (i.e. a DN). For simplicity, assume the + # values of the 'member' attribute are 'dn1', 'dn2', and 'dn3'. + # Further assume the following configuration. + # converters: + # - name: hf.Registrar.Roles + # value: map(attr("member"),"groups") + # maps: + # groups: + # - name: dn1 + # value: peer + # - name: dn2 + # value: client + # The value of the user's 'hf.Registrar.Roles' attribute is then computed to be + # "peer,client,dn3". This is because the value of 'attr("member")' is + # "dn1,dn2,dn3", and the call to 'map' with a 2nd argument of + # "group" replaces "dn1" with "peer" and "dn2" with "client". + maps: + groups: + - name: + value: + +############################################################################# +# Affiliations section. Fabric CA server can be bootstrapped with the +# affiliations specified in this section. Affiliations are specified as maps. +# For example: +# businessunit1: +# department1: +# - team1 +# businessunit2: +# - department2 +# - department3 +# +# Affiliations are hierarchical in nature. In the above example, +# department1 (used as businessunit1.department1) is the child of businessunit1. +# team1 (used as businessunit1.department1.team1) is the child of department1. +# department2 (used as businessunit2.department2) and department3 (businessunit2.department3) +# are children of businessunit2. +# Note: Affiliations are case sensitive except for the non-leaf affiliations +# (like businessunit1, department1, businessunit2) that are specified in the configuration file, +# which are always stored in lower case. +############################################################################# +affiliations: + org1: + - department1 + - department2 + org2: + - department1 + +############################################################################# +# Signing section +# +# The "default" subsection is used to sign enrollment certificates; +# the default expiration ("expiry" field) is "8760h", which is 1 year in hours. +# +# The "ca" profile subsection is used to sign intermediate CA certificates; +# the default expiration ("expiry" field) is "43800h" which is 5 years in hours. +# Note that "isca" is true, meaning that it issues a CA certificate. +# A maxpathlen of 0 means that the intermediate CA cannot issue other +# intermediate CA certificates, though it can still issue end entity certificates. +# (See RFC 5280, section 4.2.1.9) +# +# The "tls" profile subsection is used to sign TLS certificate requests; +# the default expiration ("expiry" field) is "8760h", which is 1 year in hours. +############################################################################# +signing: + default: + usage: + - digital signature + expiry: 8760h + profiles: + ca: + usage: + - cert sign + - crl sign + expiry: 43800h + caconstraint: + isca: true + maxpathlen: 0 + tls: + usage: + - signing + - key encipherment + - server auth + - client auth + - key agreement + expiry: 8760h + +########################################################################### +# Certificate Signing Request (CSR) section. +# This controls the creation of the root CA certificate. +# The expiration for the root CA certificate is configured with the +# "ca.expiry" field below, whose default value is "131400h" which is +# 15 years in hours. +# The pathlength field is used to limit CA certificate hierarchy as described +# in section 4.2.1.9 of RFC 5280. +# Examples: +# 1) No pathlength value means no limit is requested. +# 2) pathlength == 1 means a limit of 1 is requested which is the default for +# a root CA. This means the root CA can issue intermediate CA certificates, +# but these intermediate CAs may not in turn issue other CA certificates +# though they can still issue end entity certificates. +# 3) pathlength == 0 means a limit of 0 is requested; +# this is the default for an intermediate CA, which means it can not issue +# CA certificates though it can still issue end entity certificates. +# The "hosts" field will be used to specify Subject Alternative Names +# if the server creates a self-signed TLS certificate. +########################################################################### +csr: + cn: fabric-ca-server + keyrequest: + algo: ecdsa + size: 256 + names: + - C: US + ST: "North Carolina" + L: + O: Hyperledger + OU: Fabric + hosts: + - chriss-mbp.raleigh.ibm.com + - localhost + ca: + expiry: 131400h + pathlength: 1 + +########################################################################### +# Each CA can issue both X509 enrollment certificate as well as Idemix +# Credential. This section specifies configuration for the issuer component +# that is responsible for issuing Idemix credentials. +########################################################################### +idemix: + # Specifies pool size for revocation handles. A revocation handle is an unique identifier of an + # Idemix credential. The issuer will create a pool revocation handles of this specified size. When + # a credential is requested, issuer will get handle from the pool and assign it to the credential. + # Issuer will repopulate the pool with new handles when the last handle in the pool is used. + # A revocation handle and credential revocation information (CRI) are used to create non revocation proof + # by the prover to prove to the verifier that her credential is not revoked. + rhpoolsize: 1000 + + # The Idemix credential issuance is a two step process. First step is to get a nonce from the issuer + # and second step is send credential request that is constructed using the nonce to the isuser to + # request a credential. This configuration property specifies expiration for the nonces. By default is + # nonces expire after 15 seconds. The value is expressed in the time.Duration format (see https://golang.org/pkg/time/#ParseDuration). + nonceexpiration: 15s + + # Specifies interval at which expired nonces are removed from datastore. Default value is 15 minutes. + # The value is expressed in the time.Duration format (see https://golang.org/pkg/time/#ParseDuration) + noncesweepinterval: 15m + + # Specifies the Elliptic Curve used by Identity Mixer. + # It can be any of: {"amcl.Fp256bn", "gurvy.Bn254", "amcl.Fp256Miraclbn"}. + # If unspecified, it defaults to 'amcl.Fp256bn'. + curve: amcl.Fp256bn + +############################################################################# +# BCCSP (BlockChain Crypto Service Provider) section is used to select which +# crypto library implementation to use +############################################################################# +bccsp: + default: SW + sw: + hash: SHA2 + security: 256 + filekeystore: + # The directory used for the software file-based keystore + keystore: msp/keystore + +############################################################################# +# Multi CA section +# +# Each Fabric CA server contains one CA by default. This section is used +# to configure multiple CAs in a single server. +# +# 1) --cacount +# Automatically generate non-default CAs. The names of these +# additional CAs are "ca1", "ca2", ... "caN", where "N" is +# This is particularly useful in a development environment to quickly set up +# multiple CAs. Note that, this config option is not applicable to intermediate CA server +# i.e., Fabric CA server that is started with intermediate.parentserver.url config +# option (-u command line option) +# +# 2) --cafiles +# For each CA config file in the list, generate a separate signing CA. Each CA +# config file in this list MAY contain all of the same elements as are found in +# the server config file except port, debug, and tls sections. +# +# Examples: +# fabric-ca-server start -b admin:adminpw --cacount 2 +# +# fabric-ca-server start -b admin:adminpw --cafiles ca/ca1/fabric-ca-server-config.yaml +# --cafiles ca/ca2/fabric-ca-server-config.yaml +# +############################################################################# + +cacount: + +cafiles: +- ../tlsca/fabric-ca-server-config.yaml + +############################################################################# +# Intermediate CA section +# +# The relationship between servers and CAs is as follows: +# 1) A single server process may contain or function as one or more CAs. +# This is configured by the "Multi CA section" above. +# 2) Each CA is either a root CA or an intermediate CA. +# 3) Each intermediate CA has a parent CA which is either a root CA or another intermediate CA. +# +# This section pertains to configuration of #2 and #3. +# If the "intermediate.parentserver.url" property is set, +# then this is an intermediate CA with the specified parent +# CA. +# +# parentserver section +# url - The URL of the parent server +# caname - Name of the CA to enroll within the server +# +# enrollment section used to enroll intermediate CA with parent CA +# profile - Name of the signing profile to use in issuing the certificate +# label - Label to use in HSM operations +# +# tls section for secure socket connection +# certfiles - PEM-encoded list of trusted root certificate files +# client: +# certfile - PEM-encoded certificate file for when client authentication +# is enabled on server +# keyfile - PEM-encoded key file for when client authentication +# is enabled on server +############################################################################# +intermediate: + parentserver: + url: + caname: + + enrollment: + hosts: + profile: + label: + + tls: + certfiles: + client: + certfile: + keyfile: + +############################################################################# +# CA configuration section +# +# Configure the number of incorrect password attempts are allowed for +# identities. By default, the value of 'passwordattempts' is 10, which +# means that 10 incorrect password attempts can be made before an identity get +# locked out. +############################################################################# +cfg: + identities: + passwordattempts: 10 + +############################################################################### +# +# Operations section +# +############################################################################### +operations: + # host and port for the operations server + listenAddress: 127.0.0.1:9443 + + # TLS configuration for the operations endpoint + tls: + # TLS enabled + enabled: false + + # path to PEM encoded server certificate for the operations server + cert: + file: + + # path to PEM encoded server key for the operations server + key: + file: + + # require client certificate authentication to access all resources + clientAuthRequired: false + + # paths to PEM encoded ca certificates to trust for client authentication + clientRootCAs: + files: [] + +############################################################################### +# +# Metrics section +# +############################################################################### +metrics: + # statsd, prometheus, or disabled + provider: disabled + + # statsd configuration + statsd: + # network type: tcp or udp + network: udp + + # statsd server address + address: 127.0.0.1:8125 + + # the interval at which locally cached counters and gauges are pushed + # to statsd; timings are pushed immediately + writeInterval: 10s + + # prefix is prepended to all emitted statsd metrics + prefix: server diff --git a/test-network-nano-bash/ca/ca_config/tlsca/fabric-ca-server-config.yaml b/test-network-nano-bash/ca/ca_config/tlsca/fabric-ca-server-config.yaml new file mode 100644 index 00000000..2c4b0489 --- /dev/null +++ b/test-network-nano-bash/ca/ca_config/tlsca/fabric-ca-server-config.yaml @@ -0,0 +1,494 @@ +############################################################################# +# This is a configuration file for the fabric-ca-server command. +# +# COMMAND LINE ARGUMENTS AND ENVIRONMENT VARIABLES +# ------------------------------------------------ +# Each configuration element can be overridden via command line +# arguments or environment variables. The precedence for determining +# the value of each element is as follows: +# 1) command line argument +# Examples: +# a) --port 443 +# To set the listening port +# b) --ca.keyfile ../mykey.pem +# To set the "keyfile" element in the "ca" section below; +# note the '.' separator character. +# 2) environment variable +# Examples: +# a) FABRIC_CA_SERVER_PORT=443 +# To set the listening port +# b) FABRIC_CA_SERVER_CA_KEYFILE="../mykey.pem" +# To set the "keyfile" element in the "ca" section below; +# note the '_' separator character. +# 3) configuration file +# 4) default value (if there is one) +# All default values are shown beside each element below. +# +# FILE NAME ELEMENTS +# ------------------ +# The value of all fields whose name ends with "file" or "files" are +# name or names of other files. +# For example, see "tls.certfile" and "tls.clientauth.certfiles". +# The value of each of these fields can be a simple filename, a +# relative path, or an absolute path. If the value is not an +# absolute path, it is interpretted as being relative to the location +# of this configuration file. +# +############################################################################# + +# Version of config file +version: 1.4.9 + +# Server's listening port (default: 7054) +port: 7054 + +# Cross-Origin Resource Sharing (CORS) +cors: + enabled: false + origins: + - "*" + +# Enables debug logging (default: false) +debug: false + +# Size limit of an acceptable CRL in bytes (default: 512000) +crlsizelimit: 512000 + +############################################################################# +# TLS section for the server's listening port +# +# The following types are supported for client authentication: NoClientCert, +# RequestClientCert, RequireAnyClientCert, VerifyClientCertIfGiven, +# and RequireAndVerifyClientCert. +# +# Certfiles is a list of root certificate authorities that the server uses +# when verifying client certificates. +############################################################################# +tls: + # Enable TLS (default: false) + enabled: true + # TLS for the server's listening port + certfile: + keyfile: + clientauth: + type: noclientcert + certfiles: + +############################################################################# +# The CA section contains information related to the Certificate Authority +# including the name of the CA, which should be unique for all members +# of a blockchain network. It also includes the key and certificate files +# used when issuing enrollment certificates (ECerts) and transaction +# certificates (TCerts). +# The chainfile (if it exists) contains the certificate chain which +# should be trusted for this CA, where the 1st in the chain is always the +# root CA certificate. +############################################################################# +ca: + # Name of this CA + name: tlsca + # Key file (is only used to import a private key into BCCSP) + keyfile: + # Certificate file (default: ca-cert.pem) + certfile: + # Chain file + chainfile: + +############################################################################# +# The gencrl REST endpoint is used to generate a CRL that contains revoked +# certificates. This section contains configuration options that are used +# during gencrl request processing. +############################################################################# +crl: + # Specifies expiration for the generated CRL. The number of hours + # specified by this property is added to the UTC time, the resulting time + # is used to set the 'Next Update' date of the CRL. + expiry: 24h + +############################################################################# +# The registry section controls how the fabric-ca-server does two things: +# 1) authenticates enrollment requests which contain a username and password +# (also known as an enrollment ID and secret). +# 2) once authenticated, retrieves the identity's attribute names and +# values which the fabric-ca-server optionally puts into TCerts +# which it issues for transacting on the Hyperledger Fabric blockchain. +# These attributes are useful for making access control decisions in +# chaincode. +# There are two main configuration options: +# 1) The fabric-ca-server is the registry. +# This is true if "ldap.enabled" in the ldap section below is false. +# 2) An LDAP server is the registry, in which case the fabric-ca-server +# calls the LDAP server to perform these tasks. +# This is true if "ldap.enabled" in the ldap section below is true, +# which means this "registry" section is ignored. +############################################################################# +registry: + # Maximum number of times a password/secret can be reused for enrollment + # (default: -1, which means there is no limit) + maxenrollments: -1 + + # Contains identity information which is used when LDAP is disabled + identities: + - name: admin + pass: adminpw + type: client + affiliation: "" + attrs: + hf.Registrar.Roles: "*" + hf.Registrar.DelegateRoles: "*" + hf.Revoker: true + hf.IntermediateCA: true + hf.GenCRL: true + hf.Registrar.Attributes: "*" + hf.AffiliationMgr: true + +############################################################################# +# Database section +# Supported types are: "sqlite3", "postgres", and "mysql". +# The datasource value depends on the type. +# If the type is "sqlite3", the datasource value is a file name to use +# as the database store. Since "sqlite3" is an embedded database, it +# may not be used if you want to run the fabric-ca-server in a cluster. +# To run the fabric-ca-server in a cluster, you must choose "postgres" +# or "mysql". +############################################################################# +db: + type: sqlite3 + datasource: ../db/fabric-ca-server.db + tls: + enabled: false + certfiles: + client: + certfile: + keyfile: + +############################################################################# +# LDAP section +# If LDAP is enabled, the fabric-ca-server calls LDAP to: +# 1) authenticate enrollment ID and secret (i.e. username and password) +# for enrollment requests; +# 2) To retrieve identity attributes +############################################################################# +ldap: + # Enables or disables the LDAP client (default: false) + # If this is set to true, the "registry" section is ignored. + enabled: false + # The URL of the LDAP server + url: ldap://:@:/ + # TLS configuration for the client connection to the LDAP server + tls: + certfiles: + client: + certfile: + keyfile: + # Attribute related configuration for mapping from LDAP entries to Fabric CA attributes + attribute: + # 'names' is an array of strings containing the LDAP attribute names which are + # requested from the LDAP server for an LDAP identity's entry + names: ['uid','member'] + # The 'converters' section is used to convert an LDAP entry to the value of + # a fabric CA attribute. + # For example, the following converts an LDAP 'uid' attribute + # whose value begins with 'revoker' to a fabric CA attribute + # named "hf.Revoker" with a value of "true" (because the boolean expression + # evaluates to true). + # converters: + # - name: hf.Revoker + # value: attr("uid") =~ "revoker*" + converters: + - name: + value: + # The 'maps' section contains named maps which may be referenced by the 'map' + # function in the 'converters' section to map LDAP responses to arbitrary values. + # For example, assume a user has an LDAP attribute named 'member' which has multiple + # values which are each a distinguished name (i.e. a DN). For simplicity, assume the + # values of the 'member' attribute are 'dn1', 'dn2', and 'dn3'. + # Further assume the following configuration. + # converters: + # - name: hf.Registrar.Roles + # value: map(attr("member"),"groups") + # maps: + # groups: + # - name: dn1 + # value: peer + # - name: dn2 + # value: client + # The value of the user's 'hf.Registrar.Roles' attribute is then computed to be + # "peer,client,dn3". This is because the value of 'attr("member")' is + # "dn1,dn2,dn3", and the call to 'map' with a 2nd argument of + # "group" replaces "dn1" with "peer" and "dn2" with "client". + maps: + groups: + - name: + value: + +############################################################################# +# Affiliations section. Fabric CA server can be bootstrapped with the +# affiliations specified in this section. Affiliations are specified as maps. +# For example: +# businessunit1: +# department1: +# - team1 +# businessunit2: +# - department2 +# - department3 +# +# Affiliations are hierarchical in nature. In the above example, +# department1 (used as businessunit1.department1) is the child of businessunit1. +# team1 (used as businessunit1.department1.team1) is the child of department1. +# department2 (used as businessunit2.department2) and department3 (businessunit2.department3) +# are children of businessunit2. +# Note: Affiliations are case sensitive except for the non-leaf affiliations +# (like businessunit1, department1, businessunit2) that are specified in the configuration file, +# which are always stored in lower case. +############################################################################# +affiliations: + org1: + - department1 + - department2 + org2: + - department1 + +############################################################################# +# Signing section +# +# The "default" subsection is used to sign enrollment certificates; +# the default expiration ("expiry" field) is "8760h", which is 1 year in hours. +# +# The "ca" profile subsection is used to sign intermediate CA certificates; +# the default expiration ("expiry" field) is "43800h" which is 5 years in hours. +# Note that "isca" is true, meaning that it issues a CA certificate. +# A maxpathlen of 0 means that the intermediate CA cannot issue other +# intermediate CA certificates, though it can still issue end entity certificates. +# (See RFC 5280, section 4.2.1.9) +# +# The "tls" profile subsection is used to sign TLS certificate requests; +# the default expiration ("expiry" field) is "8760h", which is 1 year in hours. +############################################################################# +signing: + default: + authremote: {} + caconstraint: {} + expiry: 131400h0m0s + usage: + - signing + - key encipherment + - server auth + - client auth + - key agreement + profiles: null + +########################################################################### +# Certificate Signing Request (CSR) section. +# This controls the creation of the root CA certificate. +# The expiration for the root CA certificate is configured with the +# "ca.expiry" field below, whose default value is "131400h" which is +# 15 years in hours. +# The pathlength field is used to limit CA certificate hierarchy as described +# in section 4.2.1.9 of RFC 5280. +# Examples: +# 1) No pathlength value means no limit is requested. +# 2) pathlength == 1 means a limit of 1 is requested which is the default for +# a root CA. This means the root CA can issue intermediate CA certificates, +# but these intermediate CAs may not in turn issue other CA certificates +# though they can still issue end entity certificates. +# 3) pathlength == 0 means a limit of 0 is requested; +# this is the default for an intermediate CA, which means it can not issue +# CA certificates though it can still issue end entity certificates. +########################################################################### +csr: + cn: fabric-tlsca-server + keyrequest: + algo: ecdsa + size: 256 + names: + - C: US + ST: "North Carolina" + L: + O: Hyperledger + OU: Fabric + hosts: + - localhost + - 127.0.0.1 + ca: + expiry: 131400h + pathlength: 1 + +########################################################################### +# Each CA can issue both X509 enrollment certificate as well as Idemix +# Credential. This section specifies configuration for the issuer component +# that is responsible for issuing Idemix credentials. +########################################################################### +idemix: + # Specifies pool size for revocation handles. A revocation handle is an unique identifier of an + # Idemix credential. The issuer will create a pool revocation handles of this specified size. When + # a credential is requested, issuer will get handle from the pool and assign it to the credential. + # Issuer will repopulate the pool with new handles when the last handle in the pool is used. + # A revocation handle and credential revocation information (CRI) are used to create non revocation proof + # by the prover to prove to the verifier that her credential is not revoked. + rhpoolsize: 1000 + + # The Idemix credential issuance is a two step process. First step is to get a nonce from the issuer + # and second step is send credential request that is constructed using the nonce to the isuser to + # request a credential. This configuration property specifies expiration for the nonces. By default is + # nonces expire after 15 seconds. The value is expressed in the time.Duration format (see https://golang.org/pkg/time/#ParseDuration). + nonceexpiration: 15s + + # Specifies interval at which expired nonces are removed from datastore. Default value is 15 minutes. + # The value is expressed in the time.Duration format (see https://golang.org/pkg/time/#ParseDuration) + noncesweepinterval: 15m + +############################################################################# +# BCCSP (BlockChain Crypto Service Provider) section is used to select which +# crypto library implementation to use +############################################################################# +bccsp: + default: SW + sw: + hash: SHA2 + security: 256 + filekeystore: + # The directory used for the software file-based keystore + keystore: msp/keystore + +############################################################################# +# Multi CA section +# +# Each Fabric CA server contains one CA by default. This section is used +# to configure multiple CAs in a single server. +# +# 1) --cacount +# Automatically generate non-default CAs. The names of these +# additional CAs are "ca1", "ca2", ... "caN", where "N" is +# This is particularly useful in a development environment to quickly set up +# multiple CAs. Note that, this config option is not applicable to intermediate CA server +# i.e., Fabric CA server that is started with intermediate.parentserver.url config +# option (-u command line option) +# +# 2) --cafiles +# For each CA config file in the list, generate a separate signing CA. Each CA +# config file in this list MAY contain all of the same elements as are found in +# the server config file except port, debug, and tls sections. +# +# Examples: +# fabric-ca-server start -b admin:adminpw --cacount 2 +# +# fabric-ca-server start -b admin:adminpw --cafiles ca/ca1/fabric-ca-server-config.yaml +# --cafiles ca/ca2/fabric-ca-server-config.yaml +# +############################################################################# + +cacount: + +cafiles: + +############################################################################# +# Intermediate CA section +# +# The relationship between servers and CAs is as follows: +# 1) A single server process may contain or function as one or more CAs. +# This is configured by the "Multi CA section" above. +# 2) Each CA is either a root CA or an intermediate CA. +# 3) Each intermediate CA has a parent CA which is either a root CA or another intermediate CA. +# +# This section pertains to configuration of #2 and #3. +# If the "intermediate.parentserver.url" property is set, +# then this is an intermediate CA with the specified parent +# CA. +# +# parentserver section +# url - The URL of the parent server +# caname - Name of the CA to enroll within the server +# +# enrollment section used to enroll intermediate CA with parent CA +# profile - Name of the signing profile to use in issuing the certificate +# label - Label to use in HSM operations +# +# tls section for secure socket connection +# certfiles - PEM-encoded list of trusted root certificate files +# client: +# certfile - PEM-encoded certificate file for when client authentication +# is enabled on server +# keyfile - PEM-encoded key file for when client authentication +# is enabled on server +############################################################################# +intermediate: + parentserver: + url: + caname: + + enrollment: + hosts: + profile: + label: + + tls: + certfiles: + client: + certfile: + keyfile: + +############################################################################# +# CA configuration section +# +# Configure the number of incorrect password attempts are allowed for +# identities. By default, the value of 'passwordattempts' is 10, which +# means that 10 incorrect password attempts can be made before an identity get +# locked out. +############################################################################# +cfg: + identities: + passwordattempts: 10 + +############################################################################### +# +# Operations section +# +############################################################################### +operations: + # host and port for the operations server + listenAddress: 127.0.0.1:9443 + + # TLS configuration for the operations endpoint + tls: + # TLS enabled + enabled: false + + # path to PEM encoded server certificate for the operations server + cert: + file: + + # path to PEM encoded server key for the operations server + key: + file: + + # require client certificate authentication to access all resources + clientAuthRequired: false + + # paths to PEM encoded ca certificates to trust for client authentication + clientRootCAs: + files: [] + +############################################################################### +# +# Metrics section +# +############################################################################### +metrics: + # statsd, prometheus, or disabled + provider: disabled + + # statsd configuration + statsd: + # network type: tcp or udp + network: udp + + # statsd server address + address: 127.0.0.1:8125 + + # the interval at which locally cached counters and gauges are pushsed + # to statsd; timings are pushed immediately + writeInterval: 10s + + # prefix is prepended to all emitted statsd merics + prefix: server diff --git a/test-network-nano-bash/ca/ca_utils.sh b/test-network-nano-bash/ca/ca_utils.sh new file mode 100755 index 00000000..640e0a78 --- /dev/null +++ b/test-network-nano-bash/ca/ca_utils.sh @@ -0,0 +1,117 @@ +#!/usr/bin/env sh +# +# SPDX-License-Identifier: Apache-2.0 +# + +###################################################################################### +# createEnrollment() +# +# This is a convenience method for creating enrollments only +# Primary purpose it to create enrollment certificates for CA admins. +###################################################################################### + +function createEnrollment() { + + local port=$1 # port of the CA used for creating the enrollment + local username=$2 # username of the registered user on the CA + local password=$3 # password of the registered user on the CA + local orgname=$4 # name of the org (e.g. Org1, Org2) can be blank + local component_dir=$5 # path of the component, this will be the directory where the artifacts will be created + local tlscert=$6 # tls cert for connecting to the CA + + # Enroll the identity + fabric-ca-client enroll -d -u https://${username}:${password}@localhost:${port} --caname ca --mspdir "${component_dir}/msp" --tls.certfiles $tlscert + + # Rename private key to mimic cryptogen + find ${component_dir} -type f -name '*_sk' | sed -e 'p;s/\(.*\)\/\(.*\)$/\1\/priv_sk/' | xargs -n2 mv -v + + # Rename the cacert to mimic cryptogen + mv ${component_dir}/msp/cacerts/localhost-${port}-ca.pem ${component_dir}/msp/cacerts/ca.${orgname:+$orgname.}example.com-cert.pem + +} + +###################################################################################### +# createMSP() +# +# This is a convenience method for creating the Membership Service Provider directories +# +###################################################################################### + +function createMSP() { + + local caname=$1 # name of the ca (ordererca, org1ca, org2ca) + local orgname=$2 # name of the org (org1, org2) Ordering Org is blank + local org_dir=$3 # directory of the organizatio + + mkdir -p ${org_dir}/msp/admincerts + mkdir -p ${org_dir}/msp/cacerts + mkdir -p ${org_dir}/msp/tlscacerts + + cp data_ca/${caname}/ca/ca-cert.pem ${org_dir}/msp/cacerts/ca.${orgname:+$orgname.}example.com-cert.pem + cp data_ca/${caname}/tlsca/ca-cert.pem ${org_dir}/msp/tlscacerts/tlsca.${orgname:+$orgname.}example.com-cert.pem + awk -v cacert_name="ca.${orgname:+$orgname.}example.com-cert" '{gsub(/ca.example.com-cert/,cacert_name)}1' ca/config.yaml > ${org_dir}/msp/config.yaml + +} + +###################################################################################### +# registerAndEnroll() +# +# This is a convenience method for creating enrollments and TLS certificates +# Primary purpose it to create enrollment certificates for org admin identities, and +# enrollent and TLS certificates for peers and orderers. +###################################################################################### + +function registerAndEnroll() { + + local port=$1 # port of the CA used for creating the enrollment + local username=$2 # username of the user to register on the CA + local password=$3 # password of the user to register on the CA + local type=$4 # type of registation, must be one of (peer, orderer, admin) + local orgname=$5 # name of the org (e.g. Org1, Org2) can be blank + local component_dir=$6 # directory of the component, this will be the directory where the artifacts will be created + local org_dir=$7 # directory of the organization, this is the directory that contains the credentials for the registration + local tlscert=$8 # tls cert for connecting to the CA + + if [ "$type" = "admin" ]; then + local attrs="hf.Registrar.Roles=client,hf.Registrar.Attributes=*,hf.Revoker=true,hf.GenCRL=true,admin=true:ecert,abac.init=true:ecert" + else + local attrs="" + fi + + # Register the username + fabric-ca-client register -d -u https://localhost:${port} --id.name ${username} --id.secret ${password} --id.type ${type} --id.attrs "${attrs}" --caname ca --tls.certfiles $tlscert --mspdir "${org_dir}/ca/msp" + + # Enroll the identity + fabric-ca-client enroll -d -u https://${username}:${password}@localhost:${port} --caname ca --mspdir "${component_dir}/msp" --tls.certfiles $tlscert + + # Rename private key to mimic cryptogen + find ${component_dir} -type f -name '*_sk' | sed -e 'p;s/\(.*\)\/\(.*\)$/\1\/priv_sk/' | xargs -n2 mv -v + + # Rename the cacert to mimic cryptogen + mv ${component_dir}/msp/cacerts/localhost-${port}-ca.pem ${component_dir}/msp/cacerts/ca.${orgname:+$orgname.}example.com-cert.pem + + # Set the cacert name and copy the config.json for NodeOU + awk -v cacert_name="ca.${orgname:+$orgname.}example.com-cert" '{gsub(/ca.example.com-cert/,cacert_name)}1' ca/config.yaml > ${component_dir}/msp/config.yaml + + # If this is a peer or orderer type then create a TLS cert + if [ "$type" = "peer" ] || [ "$type" = "orderer" ]; then + + # Enroll the TLS cert + fabric-ca-client enroll -d -u https://${username}:${password}@localhost:${port} --caname tlsca --mspdir "${component_dir}/tls" --tls.certfiles $tlscert --csr.hosts 'localhost,127.0.0.1' + + # Rename private key to mimic cryptogen + find ${component_dir} -type f -name '*_sk' | sed -e 'p;s/\(.*\)\/\(.*\)$/\1\/priv_sk/' | xargs -n2 mv -v + + # Copy and rename TLS certs and keys to mimic cryptogen + cp ${component_dir}/tls/cacerts/localhost-${port}-tlsca.pem ${component_dir}/tls/ca.crt + cp ${component_dir}/tls/keystore/priv_sk ${component_dir}/tls/server.key + cp ${component_dir}/tls/signcerts/cert.pem ${component_dir}/tls/server.crt + + # Rename the tls cacert to mimic cryptogen + mv ${component_dir}/tls/cacerts/localhost-${port}-tlsca.pem ${component_dir}/tls/cacerts/tlsca.${orgname:+$orgname.}example.com-cert.pem + + fi + +} + + diff --git a/test-network-nano-bash/ca/config.yaml b/test-network-nano-bash/ca/config.yaml new file mode 100644 index 00000000..8846e9d4 --- /dev/null +++ b/test-network-nano-bash/ca/config.yaml @@ -0,0 +1,14 @@ +NodeOUs: + Enable: true + ClientOUIdentifier: + Certificate: cacerts/ca.example.com-cert.pem + OrganizationalUnitIdentifier: client + PeerOUIdentifier: + Certificate: cacerts/ca.example.com-cert.pem + OrganizationalUnitIdentifier: peer + AdminOUIdentifier: + Certificate: cacerts/ca.example.com-cert.pem + OrganizationalUnitIdentifier: admin + OrdererOUIdentifier: + Certificate: cacerts/ca.example.com-cert.pem + OrganizationalUnitIdentifier: orderer diff --git a/test-network-nano-bash/ca/createEnrollments.sh b/test-network-nano-bash/ca/createEnrollments.sh new file mode 100755 index 00000000..5b109b19 --- /dev/null +++ b/test-network-nano-bash/ca/createEnrollments.sh @@ -0,0 +1,118 @@ +#!/usr/bin/env sh +# +# SPDX-License-Identifier: Apache-2.0 +# +export PATH="${PWD}"/../../fabric/build/bin:"${PWD}"/../bin:"$PATH" + +export crypto_dir=$PWD/crypto-config + +export orderer_org_dir=${crypto_dir}/ordererOrganizations/example.com +export org1_dir=${crypto_dir}/peerOrganizations/org1.example.com +export org2_dir=${crypto_dir}/peerOrganizations/org2.example.com + +export orderer1_dir=${orderer_org_dir}/orderers/orderer.example.com +export orderer2_dir=${orderer_org_dir}/orderers/orderer2.example.com +export orderer3_dir=${orderer_org_dir}/orderers/orderer3.example.com +export orderer4_dir=${orderer_org_dir}/orderers/orderer4.example.com +export orderer5_dir=${orderer_org_dir}/orderers/orderer5.example.com + +export peer0org1_dir=${org1_dir}/peers/peer0.org1.example.com +export peer1org1_dir=${org1_dir}/peers/peer1.org1.example.com + +export peer0org2_dir=${org2_dir}/peers/peer0.org2.example.com +export peer1org2_dir=${org2_dir}/peers/peer1.org2.example.com + +export orderer_org_tls=${PWD}/data_ca/ordererca/ca/ca-cert.pem +export org1_tls=${PWD}/data_ca/org1ca/ca/ca-cert.pem +export org2_tls=${PWD}/data_ca/org2ca/ca/ca-cert.pem + +# import utilies +. ca/ca_utils.sh + +###################################################################################### +# Create admin certificates for the CAs +###################################################################################### + +# Enroll CA Admin for ordererca +createEnrollment "7052" "admin" "adminpw" "" "${orderer_org_dir}/ca" "${orderer_org_tls}" + +# Enroll CA Admin for org1ca +createEnrollment "7053" "admin" "adminpw" "org1" "${org1_dir}/ca" "${org1_tls}" + +# Enroll CA Admin for org2ca +createEnrollment "7054" "admin" "adminpw" "org2" "${org2_dir}/ca" "${org2_tls}" + + +###################################################################################### +# Create admin and user certificates for the Organizations +###################################################################################### + +# Enroll Admin certificate for the ordering service org +registerAndEnroll "7052" "osadmin" "osadminpw" "admin" "" "${orderer_org_dir}/users/Admin@example.com" "${orderer_org_dir}" "${orderer_org_tls}" + +# Enroll Admin certificate for org1 +registerAndEnroll "7053" "org1admin" "org1adminpw" "admin" "org1" "${org1_dir}/users/Admin@org1.example.com" "${org1_dir}" "${org1_tls}" + +# Enroll User certificate for org1 +registerAndEnroll "7053" "org1user1" "org1user1pw" "client" "org1" "${org1_dir}/users/User1@org1.example.com" "${org1_dir}" "${org1_tls}" + +# Enroll Admin certificate for org2 +registerAndEnroll "7054" "org2admin" "org2adminpw" "admin" "org2" "${org2_dir}/users/Admin@org2.example.com" "${org2_dir}" "${org2_tls}" + +# Enroll User certificate for org1 +registerAndEnroll "7054" "org2user1" "org2user1pw" "client" "org2" "${org2_dir}/users/User1@org2.example.com" "${org2_dir}" "${org2_tls}" + +###################################################################################### +# Create the certificates for the Ordering Organization +###################################################################################### + +# Create enrollment and TLS certificates for orderer1 +registerAndEnroll "7052" "orderer1" "orderer1pw" "orderer" "" "${orderer1_dir}" "${orderer_org_dir}" "${orderer_org_tls}" + +# Create enrollment and TLS certificates for orderer2 +registerAndEnroll "7052" "orderer2" "orderer2pw" "orderer" "" "${orderer2_dir}" "${orderer_org_dir}" "${orderer_org_tls}" + +# Create enrollment and TLS certificates for orderer3 +registerAndEnroll "7052" "orderer3" "orderer3pw" "orderer" "" "${orderer3_dir}" "${orderer_org_dir}" "${orderer_org_tls}" + +# Create enrollment and TLS certificates for orderer4 +registerAndEnroll "7052" "orderer4" "orderer4pw" "orderer" "" "${orderer4_dir}" "${orderer_org}" "${orderer_org_tls}" + +# Create enrollment and TLS certificates for orderer5 +registerAndEnroll "7052" "orderer5" "orderer5pw" "orderer" "" "${orderer5_dir}" "${orderer_org_dir}" "${orderer_org_tls}" + + +###################################################################################### +# Create the certificates for Org1 +###################################################################################### + +# Create enrollment and TLS certificates for peer0org1 +registerAndEnroll "7053" "org1peer0" "org1peer0pw" "peer" "org1" "${peer0org1_dir}" "${org1_dir}" "${org1_tls}" + +# Create enrollment and TLS certificates for peer1org1 +registerAndEnroll "7053" "org1peer1" "org1peer1pw" "peer" "org1" "${peer1org1_dir}" "${org1_dir}" "${org1_tls}" + + +###################################################################################### +# Create the certificates for Org2 +###################################################################################### + +# Create enrollment and TLS certificates for peer0org2 +registerAndEnroll "7054" "org2peer0" "org2peer0pw" "peer" "org2" "${peer0org2_dir}" "${org2_dir}" "${org2_tls}" + +# Create enrollment and TLS certificates for peer1org2 +registerAndEnroll "7054" "org2peer1" "org2peer1pw" "peer" "org2" "${peer1org2_dir}" "${org2_dir}" "${org2_tls}" + + +###################################################################################### +# Create the Membership Service Providers (MSPs) +###################################################################################### + +# Create the MSP for the Orderering Org +createMSP "ordererca" "" "${orderer_org_dir}" + +# Create the MSP for Org1 +createMSP "org1ca" "org1" "${org1_dir}" + +# Create the MSP for Org2 +createMSP "org2ca" "org2" "${org2_dir}" diff --git a/test-network-nano-bash/ca_terminal_setup.png b/test-network-nano-bash/ca_terminal_setup.png new file mode 100644 index 0000000000000000000000000000000000000000..1ada8c63c3a8b7d4a9702254014a7699761f6483 GIT binary patch literal 61294 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 #jW?gaL9&-C>`4*7zazjlM6 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 DIQTD8 literal 0 HcmV?d00001 diff --git a/test-network-nano-bash/generate_artifacts.sh b/test-network-nano-bash/generate_artifacts.sh index 9ad83240..daa8ed30 100755 --- a/test-network-nano-bash/generate_artifacts.sh +++ b/test-network-nano-bash/generate_artifacts.sh @@ -4,6 +4,29 @@ # set -eu +ordererType="etcdraft" +INCLUDE_CA=false + +# parse flags +while [ $# -ge 1 ] ; do + key="$1" + case $key in + etcdraft ) + ordererType="etcdraft" + ;; + BFT ) + ordererType="BFT" + ;; + -ca ) + INCLUDE_CA=true + ;; + * ) + ;; + esac + shift +done + + # remove existing artifacts, or proceed on if the directories don't exist rm -r "${PWD}"/channel-artifacts || true rm -r "${PWD}"/crypto-config || true @@ -12,14 +35,26 @@ rm -r "${PWD}"/data || true # look for binaries in local dev environment /build/bin directory and then in local samples /bin directory export PATH="${PWD}"/../../fabric/build/bin:"${PWD}"/../bin:"$PATH" -echo "Generating MSP certificates using cryptogen tool" -cryptogen generate --config="${PWD}"/crypto-config.yaml +# if INCLUDE_CA is false (default), then use cryptogen +if [ "${INCLUDE_CA}" = false ]; then + + echo "Generating MSP certificates using cryptogen tool" + cryptogen generate --config="${PWD}"/crypto-config.yaml + +else + + mkdir -p "${PWD}"/logs + + # execute the script to configure the default set of enrollments + echo "Generating MSP certificates using the Fabric CAs" + ./ca/createEnrollments.sh > ./logs/createEnrollments.log 2>&1 + +fi # set FABRIC_CFG_PATH to configtx.yaml directory that contains the profiles export FABRIC_CFG_PATH="${PWD}" -ordererType="etcdraft" -if [ $# -gt 0 ] && [ "$1" = "BFT" ] +if [ "${ordererType}" = "BFT" ] then profile="ChannelUsingBFT" ordererType="BFT" diff --git a/test-network-nano-bash/network.sh b/test-network-nano-bash/network.sh index 288a1cf0..a478a18c 100755 --- a/test-network-nano-bash/network.sh +++ b/test-network-nano-bash/network.sh @@ -14,7 +14,9 @@ printHelp() { echo " Starts the test network" echo echo " Flags:" - echo " -d - CLI delays for a certain number of seconds (defaults to 3)" + echo " -d - CLI delays for a certain number of seconds (defaults to 3)" + echo " -o - Specify the orderer type. BFT or etcdraft. (defaults to etcdraft)" + echo " -ca - Use CAs instead of cryptogen. (defaults to cryptogen)" echo " -h - Print this message" elif [ "$USAGE" = "clean" ]; then echo "Usage: " @@ -52,18 +54,31 @@ networkStart() { # shellcheck disable=SC2064 trap networkStop 0 1 2 3 15 + echo "Creating logs directory..." + mkdir -p "${PWD}"/logs + + if [ "${INCLUDE_CA}" = true ]; then + echo "Starting CAs..." + ./ordererca.sh > ./logs/ordererca.log 2>&1 & + ./org1ca.sh > ./logs/org1ca.log 2>&1 & + ./org2ca.sh > ./logs/org2ca.log 2>&1 & + echo "Waiting ${CLI_DELAY}s..." + sleep ${CLI_DELAY} + fi + if [ -d "${PWD}"/channel-artifacts ] && [ -d "${PWD}"/crypto-config ]; then echo "Using existing artifacts..." CREATE_CHANNEL=false else echo "Generating artifacts..." - ./generate_artifacts.sh "${ORDERER_TYPE}" + INCLUDE_CA_PARAM="" + if [ "${INCLUDE_CA}" = true ]; then + INCLUDE_CA_PARAM="-ca" + fi + ./generate_artifacts.sh "${ORDERER_TYPE}" "${INCLUDE_CA_PARAM}" CREATE_CHANNEL=true fi - echo "Creating logs directory..." - mkdir -p "${PWD}"/logs - echo "Starting orderers..." ./orderer1.sh "${ORDERER_TYPE}" > ./logs/orderer1.log 2>&1 & ./orderer2.sh "${ORDERER_TYPE}" > ./logs/orderer2.log 2>&1 & @@ -116,6 +131,7 @@ networkClean() { rm -r "${PWD}"/channel-artifacts || true rm -r "${PWD}"/crypto-config || true rm -r "${PWD}"/data || true + rm -r "${PWD}"/data_ca || true rm -r "${PWD}"/logs || true } @@ -131,6 +147,7 @@ else fi ORDERER_TYPE="etcdraft" +INCLUDE_CA=false # parse flags while [ $# -ge 1 ] ; do @@ -144,6 +161,9 @@ while [ $# -ge 1 ] ; do ORDERER_TYPE="$2" shift ;; + -ca ) + INCLUDE_CA=true + ;; -h ) printHelp "$MODE" exit 0 diff --git a/test-network-nano-bash/ordererca.sh b/test-network-nano-bash/ordererca.sh new file mode 100755 index 00000000..679e1298 --- /dev/null +++ b/test-network-nano-bash/ordererca.sh @@ -0,0 +1,39 @@ +#!/usr/bin/env sh +# +# SPDX-License-Identifier: Apache-2.0 +# +export PATH="${PWD}"/../../fabric/build/bin:"${PWD}"/../bin:"${PATH}" +export FABRIC_CFG_PATH="${PWD}"/../config + +#Configure the CA_NAME, CA_PORT, OPERATIONS_PORT and CSR_HOSTS for the CA +export CA_NAME=ordererca +export CA_PORT=7052 +export OPERATIONS_PORT=9843 +export CSR_HOSTS=ordererca,localhost,127.0.0.1 + +export CA_DIRECTORY="${PWD}"/data_ca/"${CA_NAME}" +export CA_HOME="${CA_DIRECTORY}"/ca +export TLSCA_HOME="${CA_DIRECTORY}"/tlsca +export DB_HOME="${CA_DIRECTORY}"/db +export TEMPLATE_DIR="${PWD}"/ca/ca_config + +# Check to see if the CA directory exists +if [ ! -d "${CA_DIRECTORY}" ]; then + + # Create the new CA directory + mkdir -p "${CA_HOME}" + mkdir -p "${TLSCA_HOME}" + mkdir -p "${DB_HOME}" + + # Copy the CA template files + cp "${TEMPLATE_DIR}"/ca/fabric-ca-server-config.yaml "${CA_HOME}"/fabric-ca-server-config.yaml + cp "${TEMPLATE_DIR}"/tlsca/fabric-ca-server-config.yaml "${TLSCA_HOME}"/fabric-ca-server-config.yaml + +fi + +export FABRIC_CA_SERVER_TLS_ENABLED=true +export FABRIC_CA_SERVER_CSR_CN="${CA_NAME}" +export FABRIC_CA_SERVER_CSR_HOSTS="${CSR_HOSTS}" +export FABRIC_CA_SERVER_DEBUG=true +export FABRIC_CA_SERVER_OPERATIONS_LISTENADDRESS=localhost:"${OPERATIONS_PORT}" +fabric-ca-server start -d -b admin:adminpw --port "${CA_PORT}" --home "${CA_HOME}" diff --git a/test-network-nano-bash/org1ca.sh b/test-network-nano-bash/org1ca.sh new file mode 100755 index 00000000..bdfc918d --- /dev/null +++ b/test-network-nano-bash/org1ca.sh @@ -0,0 +1,39 @@ +#!/usr/bin/env sh +# +# SPDX-License-Identifier: Apache-2.0 +# +export PATH="${PWD}"/../../fabric/build/bin:"${PWD}"/../bin:"${PATH}" +export FABRIC_CFG_PATH="${PWD}"/../config + +#Configure the CA_NAME, CA_PORT, OPERATIONS_PORT and CSR_HOSTS for the CA +export CA_NAME=org1ca +export CA_PORT=7053 +export OPERATIONS_PORT=9844 +export CSR_HOSTS=org1ca,localhost,127.0.0.1 + +export CA_DIRECTORY="${PWD}"/data_ca/"${CA_NAME}" +export CA_HOME="${CA_DIRECTORY}"/ca +export TLSCA_HOME="${CA_DIRECTORY}"/tlsca +export DB_HOME="${CA_DIRECTORY}"/db +export TEMPLATE_DIR="${PWD}"/ca/ca_config + +# Check to see if the CA directory exists +if [ ! -d "${CA_DIRECTORY}" ]; then + + # Create the new CA directory + mkdir -p "${CA_HOME}" + mkdir -p "${TLSCA_HOME}" + mkdir -p "${DB_HOME}" + + # Copy the CA template files + cp "${TEMPLATE_DIR}"/ca/fabric-ca-server-config.yaml "${CA_HOME}"/fabric-ca-server-config.yaml + cp "${TEMPLATE_DIR}"/tlsca/fabric-ca-server-config.yaml "${TLSCA_HOME}"/fabric-ca-server-config.yaml + +fi + +export FABRIC_CA_SERVER_TLS_ENABLED=true +export FABRIC_CA_SERVER_CSR_CN="${CA_NAME}" +export FABRIC_CA_SERVER_CSR_HOSTS="${CSR_HOSTS}" +export FABRIC_CA_SERVER_DEBUG=true +export FABRIC_CA_SERVER_OPERATIONS_LISTENADDRESS=localhost:"${OPERATIONS_PORT}" +fabric-ca-server start -d -b admin:adminpw --port "${CA_PORT}" --home "${CA_HOME}" diff --git a/test-network-nano-bash/org2ca.sh b/test-network-nano-bash/org2ca.sh new file mode 100755 index 00000000..a325fd4c --- /dev/null +++ b/test-network-nano-bash/org2ca.sh @@ -0,0 +1,39 @@ +#!/usr/bin/env sh +# +# SPDX-License-Identifier: Apache-2.0 +# +export PATH="${PWD}"/../../fabric/build/bin:"${PWD}"/../bin:"${PATH}" +export FABRIC_CFG_PATH="${PWD}"/../config + +#Configure the CA_NAME, CA_PORT, OPERATIONS_PORT and CSR_HOSTS for the CA +export CA_NAME=org2ca +export CA_PORT=7054 +export OPERATIONS_PORT=9845 +export CSR_HOSTS=org2ca,localhost,127.0.0.1 + +export CA_DIRECTORY="${PWD}"/data_ca/"${CA_NAME}" +export CA_HOME="${CA_DIRECTORY}"/ca +export TLSCA_HOME="${CA_DIRECTORY}"/tlsca +export DB_HOME="${CA_DIRECTORY}"/db +export TEMPLATE_DIR="${PWD}"/ca/ca_config + +# Check to see if the CA directory exists +if [ ! -d "${CA_DIRECTORY}" ]; then + + # Create the new CA directory + mkdir -p "${CA_HOME}" + mkdir -p "${TLSCA_HOME}" + mkdir -p "${DB_HOME}" + + # Copy the CA template files + cp "${TEMPLATE_DIR}"/ca/fabric-ca-server-config.yaml "${CA_HOME}"/fabric-ca-server-config.yaml + cp "${TEMPLATE_DIR}"/tlsca/fabric-ca-server-config.yaml "${TLSCA_HOME}"/fabric-ca-server-config.yaml + +fi + +export FABRIC_CA_SERVER_TLS_ENABLED=true +export FABRIC_CA_SERVER_CSR_CN="${CA_NAME}" +export FABRIC_CA_SERVER_CSR_HOSTS="${CSR_HOSTS}" +export FABRIC_CA_SERVER_DEBUG=true +export FABRIC_CA_SERVER_OPERATIONS_LISTENADDRESS=localhost:"${OPERATIONS_PORT}" +fabric-ca-server start -d -b admin:adminpw --port "${CA_PORT}" --home "${CA_HOME}"

Ca%uA05UTpm-fb`()QYj+OI z3P=Cz$3wzP{iK;C!SDITgeR7zMCo3A;J|@+Q9#1CRNqi||4j%jBmz~Zho@Yaa5Sf} zY+T9u`v519{G-7Az{}zeM(Qq8?wBXpj^Y6zr$HSnOI@H9KjB!KsVU3amMRONtKzeP zJVh|jK}^HmMrrGzqM<)0OiXXR!O!FF;mN7*ZHW=AvH3PBc}B&&z9rNP=!w7@bAw}) zm@Yeg^j7mC%k&RMTnI2Qh5rf-$Nvs$*L$`3)hKSmX|X=JS{_cqXo!|fZ?z{6iNV}p6iA+ z?)T4Pk>3_F-r+{R_^d){)q2;VLG*iJs3|oV#pa8^D(PfW!e7h z6@9ALcn&roA&-!3Q281cb`eI~AV#9w?3ioZi)ZN3<1*9-`cX!7!UrMDmS0uo=pZZH zW~XW_yvdM<$}V>FqYqiAUurd3{tej0nj8(~h`BpQ`$whJfxt4662HQs_?k@nur`Vw zaq!QOO8jPdEqi!+yd1ZgmGww5AXuz8y;LJRx6=#AU|@VCU|^*GKl}ih%j~k%>3XBD z33{M0Rk7k{Aah;e?xR{(pJDLMZR`nu@jGPr_q;sOUvkzr^MPl>^zUJLpd7G#{u3GkPG!Qc4qv(4svRG$Cb3G*+1c;H^y$kVHlp2WYsvdnYhktbxyM`gON zmQ15kpz4|N$m6cW<885zBFDe|vdl9N<}V=iSEkK(H-zs$>9T*%i-~7ra9gIOXO6G;_}aLsV~p4RNXx@K(UdW`sT*K}_!cv()kKZEv0 zBzOfjSTR<~HdwLcN*wYSM%9hR$CgGH2YB{jnKk~onF;rB=}y`{Ws~5dy^uu5nnpmp zqZPV_`^7)rb(5DEM$9tLbWSRrqDAs>+`gUBxtflsYih9@PHOK=>D)CvlE-y} zqYh#pp6OndTjj3Zll+=}`p1TJza<%Zr1!VsyjTDO5`&F=hrV={rCC}xtWwYJTRZ0Y zvcrmk8&28g8Od@UV`?C9DJo(a>p9@H(&nMmV1lIkCRCGE<*SL)?*0z?kRfD|i81q9 zm-0o$^J+&vjveB<76a?*ti}p}N)43X82RkIq0*UJ)ogBayHg*GUbL6YM1|B9brD_F z1uS&h715?~FLo2Q=$05ZF|;;za?(B};rNAv@Z$cAh?su{>*)m}ZkV->J_tN`Zd3RU zuHW{PV`K3-I9bbD8+&kE!m}f6d9vBE5i~!aC^c>KoRZb4Hrc9C#!)bOia?~tWJgzM zo8bMnVWK?Mx(T(Io7Ew+x;49~EEo&v+{u++XPG{_;V5BgF6Yl+@m)eEkKn9K97fy+ zvKNmVm$D>+yIV%Vew@0@AbKTk!)WQAypIOfRit?UmqJJ)(>v^J65ftVbhKf(tGwk|B0v z0^^QQRpF_m6h-!;^4UO+H*yjdjCD24$t7j;wVu(|E0zwd?>~^xd{A z1gUs2Bbb21qRTc{#6!N0CZFEOW=6iejJ-xGitlJ^BffDmk1moz?1jAC9o$A^a#T!7 z2^+sNnCHN>M*az_x-LyUi+cF*wicA+A!0Uw-Ym)tTH+|FQgVFZ3__4Lr-H*bY^Q#~ zrFFjdA()vgvr$9f73{YZ^G2#6$6YvEwKAGm zTiSjCNqXt*ed#Z{8m%}2@u}WO7X%o39-_{A4LMF*=!wFeP6q^n#^aJ9c_0fLOU4FXX2mey`9GYG%?OFfbpGXrhoKD0nQ& z_*x>${p+;kA&@*Qp($drH)(JtswM>rks=ttaFY?K#gGchd1CIM0yAB@AKE__eZq^d zG)h&h^_pM^`(G^L=g;sA|GYs6m){?LGI{IRcR`aKG7_RCa0Z6##t;7j*Cj}3xl=fN zy-QUZ#I83?HCD}oUKeG@ca&BpU8eI_J*;>GygAu8J3V^F7wlWdzPZX{XY?DF2NmW6 z9eDXsop7Tmiy8gg_1ott5ebCuY6S+cDM2l15APvVc+ur}?AIwc?7uDtPrL!l+;EAj8u z@{+^2+cghGor>kWA~CZGwu5T-#0WaH#7OqgpgZ;J1b6ZB8AuPEJJCdf0+_x^1X z>KPcqwcHb&HP)krgBvll%}u2G8F9t_h>*|DwWhO2C*}SlSY&p}r z8mj*h2ea6*J;!4k5WQ)5?v(tDAUozH%q0dc#2LEPpSlw}nTF z)zs$p8u$jAY1K}-i#B z!N4FI5eTcLqj`ZB*USBl&>?gi7V;g)ZfWiJ1?F5)5$mtAz@Nr7%t~7A-%ysQIR4@Oph$UZAb0l;1{a=FD_+LU?9I7&*9l8APv}rj&#Xm9oyjGQRYb_gtw)&%WDi5Q=8>u z_ZXM68s<3HTs?f^l)ZKB4pUdi!b({g@|i}4|HXltz5vjZvOcp9^hY{`fgg1md2@h1 zjARMyu(?8KHa`0p{>bzfx)8XB3$MWL!9HVcO*H3_I6fL}DK1I|=H^gGH^{Kwro>s= z=*yPzpTj=kHOD>yu(OUBPNvHdCi{mc~#MV$O+#zajP1o2E?S;Webx6ur}R z;(y-MXzZ{^<~y4&QP673LW_^YeQ(O57W5ZAGmUR6th9z>EokvL;n$U2FP6{fPWa@m z9y{n!x9d~+ot7yAi>YhfLSwLH$GU_7j0mwnz4m{B1+kp96m>0n_M@*W6;B>-O<$iAlDoQBb@TW z0Sm?-#l;k(-_+vrn_GzSfv*(r`wx~5F}v6LH`;9Oxx2k40S*z4UitK2Hwe%hli15k z*ehI`aW`uhb!%F>O?8vTH`?s2bUkgwSLPN5B`dgkkED8^yn2`VnMKd)8pJOSS)~#9 z9_g|4OlO-wy36XLmg;(2R8A!gfq$rrEXTcfpOku3fKgC&1as2HPd&q958D@&7Gn>_ z`f-&h_@z11$z!{j`MmFk+|s{O?5$1jRL`8&HcRlWzZFs8Ds0@mQ$TMZE1TT4Q_o$b zC${AiZK|p-DSbr%X$;CiL#GRLena`~yxlmDz&bKe`1k14F?%iyaoMxY>%gI?#SXZ$ z2f4CeQey9Nn8Aj`*LaF})DakADawW@#$T3g3j5Ebu!$T`DP`k)K;>(h?# zljt4+=U|elbI;JdH!2HR+ykPRNQYA9zfDCXp`Y@~3&iK(<7xl?^wf;*q^NzP(KKb= zEiR}q7K!LpsyRP=iY-R!WXw!F<9&}Z;v$~%=70J^>okGnx0~{T|6=O}W7c#-4@eOT zzrx^r*wo-fwA6&FQ?aQKE6_S)hwH7Jmxt>G*3Pp+8<}w@S>;@u9-B?HbvfdV(o?<% z`7EuOFHrER*UlTNh70k>L)0^l?0p79&v0=0&=W$hRK_$&A=L{&3Bx}D@{9BKBM`P{ zY&`d0u|97GoVWuCQGW)l~L~m5GKi6;pV9z3}6Oo8ZQ%p zOQ#e-cC}Mpm=J;Cu8U$%UiK zSxpt>i*oQ&Q72F!7$Un#7W4`H{4>th2M>c!NCt@@M9^n9cpZD>NWDPR^QBq}5l@;giyNxr<&+9gIrUa0;)g%!pG+GT zaq(WoK2uhqt5Ke-hi!a_rkU;OEM)658U4=PYvwTvo-5lY!kPI16P^c5K2KbF<*4*m z?1rcAP7JSH{RnyNvuN*h(z7p`w?mreNYs+UghaeOT(Qn7nuao(8Z3-INNJ-$(yIV4 zO3s83A1F#UB1y7O4`P8v41xwQ2!lN%MPrFM#7VWkXaTsW1d)j?t&cpuj`P~{_+V@P zn1adV*pGdEG+!|_$YxLUPc@CI-W|!45l4+~07L$AKqc$-}iZ4AOb-HMvg5u(idDbV@9h=>$SCIt83F|Hm z!_`Z?tle06TOZB_SNm=JX{@~=#Lf7t>gL?3(KAI5-Cr!<{IkFV(~aJlC+gpw zu_%@g5bl4wN~so4n5i0BtN%@Xe?Q^2NMv9C`0q&ajN2k#SPk)iw70X(xwtD}!N3r) zz`*GKX9BDQjtBI{7{mOA$!o1xAuB?^wh=NHp;ir}{Sj+L3M=bOA_76?9CX|&1LM_h z=9HMiBdA0rqql{(#zBPdhxU)jy5(S++DGh4t+lLTGW}x?ewjE+KWr% z^SMtCrWFkhmtSPYo?j(4(sFcX&%0H($4f^?(Frl9c?T4Lo_jrn4(w4uo2~IiHM$y; z|Mad3@zYqA8`U#Nie*;6ckK}ypx2yspJ-6Kx80&Qy-gjmJG#@ud_DAlGrAqa|MV__ z3+ATvZixx^j*Wr#t_f+c(qRC<8H0o)dOEzO8}yEh@j5VkxZHO2P9)g59Fr7gs;V6R zIQsme69NVySC5hiPNPN3jg(gldAkK^}P`Q`& zuZAlawZ;%2;}xbSmHj3VVvc04d?V{CJ(zln32CTaOK5xxoE1>aWx6;Uj}NiXE#5W_8KQvAO@>UyntSIGU{dg z^pPr)j8sOrI~t4k9!b z<1X&Mx-e5885XRON7W$Y$;vtBIZV#KTuRR4%8(IpwbUco1@~q>FPbRgA1L4GS=jw6 zmw^`2U5$Q+|sj#oJl2b6iN7xj*8Krh&NdNmb zeClL1SaT5B*>a-83a&H9Z(rY`RI=GpDWl6c>ge|rof=GXp>?|zKY;0tfl$R+Bd>4{ zPe~V(mkQbwua?v#8{L!bj5iWSa!1b>m4MiG#Oc=@=&dbejz|bHmZ!dwqz4SH#)=t> zfvZvF4ym89J#WYuuCndz1@UQQDg?6| zwPNpV<>B&cpDtEq%Z!<*vO|s=?d`F4A+9IbD1Nh)4qx`OL=RyPXbzd{cz@KZxPXUm zT`4ZrDDOwO&Rd|lT*Ety~i zNaQH4M+G*=i!Z#FV(B6D$vVEGfKl2h5Vnf{bjDLT>sjx*-x!vKyH7mKTXH>v; z_$TQW?r**&gxuP`5%nqOt3w=DECN}FuynqF1pJ7?{m7i3KZUjK&=C_4DyEC?#h0rp ze&9+V3J=X;eu@n--_s+q3P=v2C;@naE9l0I}FH(+qh)(xCv1e6|(-(_= z(?9Lu{BztUvX?E3gK8N~@&BDUL=1HynAP5_Rc5bL`a8?HUKBW70M+^_Pz;p4nZ-Oj zRvP@)9Wdtj!~`zgdEssW_i`eD2Y6FMdDHNA$s(Eq8NmHr*IjeC?~;9&PwgTS(qRnA zG{7MBB&KQ+tmIp^GB=Ot)3UeHl_K@E&fqvBnz4qhSi0U@g1V2Q2CSlqTTQ+~j%Vd= zVKQt43r6~>W7IbsA$Oh1Dv+9V^?lxDN+GP+UUuv$4Yk_%SGBQfQsnlS5{{}qy1HZ= zhIUC5Ag2-&Tyhy;#2|B0l=G-RIsJK<2KZ97_}ROg{svA{LO0lbvVJ?{gpmGr+zD@Mc5FJ*;)%!VbTDN_S%PWScwQb;d7=u=lS zKF5B^Ya%+TV%=_9h!rxup7p4rOg%h`4T-TX*fPRyO9=U+JZhle3AVMm%7~BGj=`b7*G^BwqoB_t;O;S(8|abHTgq{-eb?UOf}_sF%kaUY z#WRfZ;QG0j{Ri0Cyerx zZY*VKtXo)JF^4_x%a)ZR`pnZQl~N)55UjfFYF*eVpu_aK3LOxStKd|RGZ1G*S(&8A z8k2324NM=nLI@G9p9Z|Zd`(HSXe*s?YBS*vd|GiN@B#KN{xg#LADX(#V*$~QtxI-`fv zfoR=Cq%6*UGb;7VI*!Q%zP@n9WjpDTh+r^J33w&-F2JYYr9~D>{+S~Nn;GSfW103y z;!Z&Rhlm1IQrIvs&EQ7@JHd}Up&(J3G!K}Dgh<@6$K?YkCA4dZ=UDOqX9_}I2&&)j zFXK|Ya<#OJY<#X5`+cJ#Lo9gGjcG#DDH$ipql9XTBS8+8;xHNW{(xl#Y&fj+phu5o zR-jxub6;(L+j?uY*=I)QKPD{7KM6fY)vliqVr#rn84SA&()$P*k4}<>w2f?``jJi5 zIQ9Io$>w^=Uu?B{n`ZnxdVc>+fq&Idy2pr^XkqT z(xCWYUCj3_~2>;(01&(;}P%qc%gc=UpZ6357tPtx8j)?-2zN?!I*1_hN4Q-E1HDa34x9ahF>Oh^7R$} zkpD;irTRVNrXrWj{~scc*B;|Q>p#a|1R59^+5d>V#uu1WgqNSdJRKi@3@^-o-_2tT zso;w$V%RphdiHM2`*dMLVq&ZgXe6XzP^EcSNV%jf?3Y&z!M-XEb<(|;>AnRzl4Wc5 zVhf`mB6ht_3tDy3f|tZE>XHFYR^02`4798TbKkRGUppUtuOEuDU#CTp;I)IoC#H}L zjwxF`N%*&>(-S0I*d7Hb zZll?myhmqjqk)oc%O11_vlQ(qZ^Rqe{WgWaT_{F#%{wHA@!seSJ)H!v2aF1DTKRo- z1gbr~1gt%wxeF*ahsR!%-q<^g=1FxjdxBd%+Jhfr-oT$g;-CAWr2aBe=t9%@#HIjh z3V)4JzAfe@SYfLDLo_A1w=j_r)D<059n}?_`Bd)n2&%@y!$x0;_%p4rQ+(*jY^w5# zUtHT*I%&D-FbCl&i_suv3#V@McE`1kagXNU7i*oK|kWsT-%zpBT``V7k1s|8Sw&v1G zb0U;)mgaV~Nbc3=tp9}1Q?bq9zoaC#EnjK#gZ`}3itFiX6z6WMcQ;dMd94g3h@3=1 znlf5h^~pDUdZdL;^IW31kI0b&aP-<{q}JM$i+{)h(Il&i%RxLHF*nI=NPq=X*aCM; z*&W5fiPxT^x5X$W* zk#sx|$*Wp6Q*y9^;#bNYm@dDiuiPLYc*M22$9SQ4`?)Cviud%rH3r&QY4`cz z`eJWkp>k5HuW8)P&N zc~?irEtK>C=FzzR^p+5*y}$Ab3kJaXma^DMPg6dXg=`}mFAh3`jJ(GbJJtNm3?l>D zA}(9I>cf-z{)m)xkVX72)dGJ`1B%lzPV3CcikAnGVxP>M`Ir{xzg#BkRO!j1IcSz% zqiR?u!#J)CPO^I&Ick=_I|4H=t3U+v25wc3(9dbsr((@+mnM^JiwPikj|kv6t1U-$ z*;%okthT2AthUNN>xoKsi*2s1!;rl#JnuUP?~dlQK3_(ePpo-%ivK zH*{01(#iZg2WPVNv+Zh+&uk7nX;Wnwl9*bG^^biY7ur&lpiovO8jNX6%4OwUZM0p@ zUXW6|i{d_H5$Me!jej-A+5>2Fj^m|s-vPf0;cU&EwcbzISIH6+W;#-#s6SQikkbvg z=8d%Pk;%*T)S=U~EQ$4Xe zhbd8<9I>pC>6vDmyX)Tl3!J+VJl>7fq|p7HNt3YGH{~DEq~GF9*dL%T$nuqPEhX_y zp4NvK8eeB%^xp^Wbxbj&M+yU{60DYxVd=?*WFL7CeT6*!KBdM|rV{+P5EMP#8!eQ| zZ_3T3(DCbY#iN%e23J2{?gj4R#6bQ#{{zR01+YmHRiL5a7mkGC5YFTU-q>CZ{Kwc{ z13b(qN+mqZ7)mXE2b;y+g?a zBiF~hxA4@ml2WI%G$Ji5)LmgNr?%MH8KNzK`kOyHonX9>Db#mWT6n{L+%e6^7GHS} zlp&IQ_A~m4!2-CSPTyO_%2R=p5 z80;>2*u!DiEkEowHSBH$>~LsPz z(X>Q*D^c)(z;}dvje54kSRfeu9^)kzco5VPq;IG|9HQ_y)0F!KB}7?G={dzyc%pvH z2oG9zG4Ltb0bI%h>x1*aW#pO!sPNsThs9Uo^#)2(kVM3;>By z{QBZZt_-YfT|{_?c#-`ndlvWu{$y9ilUHnT51JtZB^|}@M_nW(#}_=zcl=LPQF1O} zSU!!W^hKtdGD0#(ybxEO(B}#{tA+zq3uP9{hz-(AqcPKV;)wklN|WMLsq|J5_>M7m z-HXUK@&C4^{%7f64IzcX|39-6?hh~sFvkCtBL*+%!1T2Lu{=fW0@@9`w#66&Ns9gD z_38BCa!^KaWaFqLnOPL?9Cad^8^6XKYre^yI_4#c7l!4TKUGKBTjcfS5IGd*rq}ac zd2iRVw}pYgPY9Jka!8jWOC2Q@n(;f4a(ccPR|C!@5!o@kP}S$RK6)cA+Yr-M|KVM? zDF9H1nLt~h93E!NWix*bt8cERl?=Vs*{9d`x>caUs7%whBWA!~^HqP#qa7(cpmwqA z4rFliF=)LuZKQEJiP&HZO;w9bjzk;P$*n+qLlovvbXbRc>M zv)U|=Nw4^R<-|Cy@%HC9%HsatwXy&0mzSnQExNa#(aAoD8u>hx^?lgNf=A$64$Hgp>sdit5R4t90j+t}R!8-amkivLdg zvL`5fe!hLYg@5dHzizqBJqVxX`<+Jq>%7H5W!(P_17JRtS0|YP;w~yAmpc>WR4rmm zoVJpryUHA%6CD%?;FOZgB{gL)PQyLe3#sQgC!OAHkr3{+lxA1BxFnU|`4<@%y2u8} zhq_~D0t|>s&kayZyF1l@7?3(knZT> zYb?Dzl6I!-N*{j#!5Y#}J4FLw{y=qTNnJ?%^$^n`E+sP}-g`Xi6g`X}sXL0tDf5N^A_D)l04mL`u&b@ z)2%F%%n6X4$;P++CwM?Sv~=s>N)wN2sFl)(J0u>_n%x~v0==_-Wj+m~xA1Clxurh8 zQ36E{r#SiqWHRQB28q*PiP0>D2}-$#5e*l62DEKHQR5pd7V!^cH>0F3yQV>c7wnFD z9;)Qo9H|PxB9G@wI}o>Hx3i)6Bd89sZL^)z-m%MBeg=f70R5jYI}=Y+m3&8c#a=(z z`_#4^)&q7QyWIXV<*Rd6YlLRhuHFzWciur2eD984YHF-uSLlR(rVV#C6{pmJl{($3t==XA zLJSO=gOq!uspJv=_IX=3+1-}HpL9ZF@xLaymUy5}rj*uftxnsgb%!Z-F@2iGMl7hZSmq zAyRbFUS1cqyTKNH9@eHl);&iSzej)&B6RSo8u9)nEk0d=oN8fp1LhVVG{Av$MF^W! z9-myTB}%!~`3;AFQVG9t616y`(r`nNE)k<~5V$=o`ky?kL#PC7 z4|0;t8Vu|1$0Ao0A{)@?X=e?M*tD8b=@Q0Q%@UUOph{+xa8;qxT_z+ZZP_(N;<){~ zXSg=)waJ4kLuD)RJjc}QFN8$lWvGGIM6%Tj>q24iqRbw7Jl zDTMFN9VN-;SWmF%NdcW)n9+Q{8lx9+&0#Hu2~d%8TU5LGE`gjSqzROD8r;CRe0jD3 za5Y0REcSyaVL}O5dO{C8WB6356n=6Sd-M4fb+s;dTgnv02rwsuZd^{vZ9S$J@S+Tb zs%vPq1N!+@Xb%STej)RA{ro$y8@w+(CZ&;Aslxm0dY6n#@B-ZSy1rWUv|!dYINe$! zDT=xQ$aMnJffUnb-U?&3l15<6&*m7{td%i!R`%QtK{*DeZrYDn5O*qF>}dUsNQ!XL zJvI0WNW#llsoYFY=OAZb%hIjzM~e?emVhd&>AXsLUc1c#S-H}mI;IxpZy;4o&yM6G zLx$BvBgT{j+$$nCdH5yWIv?$jO(%<<+uu0X%Swa>OzKmQMf=qKHZ`EPWA~a_(Vl6;L$e|si9d;OE+LcW*o8N9-tMAod@d5BDB}S-HDD?fbLTnclV7W`g88} z9Ip=vzCde*F17y8IbD}t1wEi(l>6+H zcBkR7;$13Un4B2Ky$=}ewEEuS&u%;3F7jb!`of#%w69+zRv!`ddVCRg4@vbPTL7^@f5J*z!uS6^8R3J_ z_mM0f8rNeTcsH<(ewAJ7N70$vf&fOubm{ z>c_LN&&9cA+7Il!c8fV2xyK6HOsBGX3h$1SpK-1Mj1GZNFEhwUw$Pipv9QKg&iiA+ zubGCV%pG-8nK&mNWf#(}pY%-yjOr5vxw)k1E1fuRtXfj~{yN+pPF_K< zeFC!Hvkt2AwlOVXw5w_4ft6k{0c?^gatF2?B~>82a$aPvsWa0O`mnOOVrWi_P3595 zSH#{dJgvL#-0OpPR`cWrXqr}hXli!upyg5A*DurQcRY)@7HunPfB8Y5b1zc2;{9pK z7=-rJ4nl?D?yg1}gzb}1moMn$spe_&bUXs*Pfiw(rMNWT=2EKrMrtFkOkKjU>K@Zu)BLob=>zK6 zzPK5T@I61~apSJTU;6G%uwqU9U1z+qLx;sDHF0+mBVDz}&tN3VqBu4xNscL@Y2?B? z%f1ezXD6W44ag{+ODh>yHpKqz1ABow;X=s-N{dA}{T`f9;;fsH;IPa^yDcd{8jW4Q zwD@#!1+?vS#!SLMja8z`)=w>i8i5rHND_G-4}Rhdthj^Axc3qSZGh!uE8FO)@aUL` zQXReF8IR?=>!ek43HxQjH3SX&6N`u9Ur?M6SROea$6>WzqjxHQGvs|C(c0oK=pDkF&VFt$(v`o0SLkv%seF@G5hsAzoUQ}aHxCV5BO{VIPk;|KblQJV|M*ddG&aC&#>%?cFsGv>CyG6Rcg1BfjcF4F zB*7icg5N^Bf*0j$FA6>P#MF;IBFr0!6H9)u`Wqr483~-GBhGg;i^730;^r!(f5-@n zp-)aGCTVH8gne43OWPcnwhfLgC{YV<{I?rfPV0_kktN+yh2!*it_O@u;}tkZf08A8 zrebUIMX!2T&K*A%z4dSx^p(gd!Jt5#Ydikp0HEhgC|bVGOY|IR`-$%a(pA1p9LCuS z|D_K54CN>*V>m*7r<bk>@h?96a1 zR2C&8t}Fg}0yx7ivH`nLU!F}IaRVY8Bdpj9Pp!}03UlPy&#`*m&$Xss%uXD#LJvDi zkay$zz@%QV75L?f6hk?B%lw0^IDE9cAE}qxAy)dtoc=Ga-myKisN2?!ZQHh;if!Ar zjVHG4RBW?iqhdR$*tSphTKii2yz9ff=J)|)j^0O`cWZsShOLR^;Jhr8wkvd7C+tfb z`OXWb;GjBKq_^^-Yz|0PwAXn=Wzu0jCXsY7LOZ^1^`$>G=uwkY23qG_f z^s9uBOWLKXC1F{?!pouPmU!nt?32yGVvJI6n78iczQ2Id^v|n@@R*b zw2Fys0EXY7sE&56u2{qs($v22{si~m-td{tX|^ln3$$i>A_rKjf9#XBYVn*N&ejyp zmdFFelz!b@VjqBta0e&!m1}CH{7Np1X(08JEg|d($@2{$`o-coyQ1pFNN>m^r~)J1 z^{iqQT~_!?m5N_-$IGl7IO#$gMk9gfbyX7T1r`C56|cPXEYxg?mIz1JqcTp^lcBIb z>ksB_03G{G{I3=QsjgrNiyskV3(iM31gS&)w2EwUy;`I{Wobicl>5h#LY|#yOYqwxKrwYTiz%(PEJ7n-mn|l+zW_@%lwr%4NYQ6?UyXO89Hcl z@wyH*amNFNHe55qhE~0<3QQVjo9A3Z;h$lRwM~%4sDY&(A?-DkJNVf(M7-&}nK>_k zw9dp4(v#A@S>g_<0(0s-3sBaUzOfb>)6W-#`L+T;KH?(nDX(YpgGzdf2tI$Ya&ebb z`%y*Pb!Gjp>LjXfSU4B<4+8!iH{ZOd-Pqt}7$psQE2~Ff?cmWY3d`v zo(-!wussw?s2OfSZ!yWv^yQ;OR9{B*8277{{%<5We@L`X2szLIOwfTUB5nF@PM{F% zV}??IFFFJcRr=iXDKZt%cw>~kEH7U`=H5|PwM%Z^`y44uda?zSlY}p#O&oCL+K^nZ>c(Dg{+Tu( z`1!xbAnzBvT7w-v!DDVOU(h=)XT?EaZ2?IDt`5ZM2ga*C-fub3Mb+4@9_-d_5Zt%- z(_H$c!0-yHVsu+KV{$ahtFoiqv3TP>J2^OgS+h!fJk~_pSKcdn_sfFtA>L z+){uRygr{&CP6psWnF2VQ!7QEhV9n}l{ai(7kJD3g8U)}0ls%Q{;Iw& zMGR2Hih6M&Sh!E&z;2{+ZwA;WZx}E@SiL>bzRAaum1@=8J&xUCg5n9+lz2W+f3}S1 z&u2}>OBvGt1n$kOC+fN@V{Gjm=#-*;UD)bx?Lf!K^j<-F9er?5aEJGI#61w@89U<3 zCF6$${Ny%^sXz#C#^I4GPFJ0b8Uq&g&Z9s%7{8`HRf``$O1f50t76iLkT?cV%&cpn zuOb|$Pz$P0YJ-R(BxtlQXOA6oyM{s%zo1B_!$-4e3_r`%e@tk;pbsrq-3&7(ngc>> zuF$oG0b}BZ%;oyS8JHl`DjO+~E=R$4E7F0fS_0L@J5&M@AgE*a4q4@M4qnUIhDnsY zm?bhHW%cc%^N+!c?FCExHu%CfGDas*=TiO&yQeRUb&P-s zy_D~YMXVqHCwupT9wIi_!^-YN0W1m8H$p|%Uvvno@6vIc?l>-9c{QBjumtrMyqpQB z4tDQgMLImMqdgoON2m0#y<$&>}!nX>m>0v0oj)7pht zPdy@9g;;9SHr6v9)^vzOI-=iYXSIVgBX@B!cCIr{GzUfnl#qabHTzZt=gcy6HL0m4 z4v26X%l<7xaOA?P#DT&1$ZT&4>)1GW^kx$77P)waK?}J+wIu4Qzs6^-s@=l-jAF;V zE}Swi1X{-R1t&6fbLBPt)h7SUxT7QqRHg3B!T5gMbi)!}7c3m0{&TWobqI7LqlYjw z&oSW(*W>0cs}xj9Qvu4!X`}$+Tc%%vh@&Ba)NlVvJ z#wO#9D*$dWu06mBtPVPEGl|((0 zlbM;UF6PgdpNHszz!O@{x_>DK9sl$@coFUY6AUvh)1Z+W zPS{ROlzqZVbNQ6}wEWEJrygPNXHrf}^^aT(tr6iJpFkLl10(Qh1TE(Le&wJ3slL~&*dgH!VTSucBohgY!?2%ClX z*CR7fIm(&ae0$buT9l~!jU2epUQ<~J`_V(LlXXlSEQSc`$X~qMp=nI@VL$-QOe0LN z6b#sx7Ewio;4L$7I;^wOEK!i1o6){$fr#>@kLZFIe`_>_gw|6Gm-8q4hD+Ny>HF*8 zZYY3LX<><=CDkg_Yy(F+gk+}P!8TwL5c%L~PSQPFxH{_TASbB5qWns!iI_jQKv6L% zShq2YJH~WNyY?mD^BrnyG`~t6leALClR-$Tm-*jN$NxBen~z;RIe(%k5)puaDE>>5 zCYZng0C1Pk`AuYSy!iABSD`uF6>|hlrCPIquId$)O6(`<<`Uw%Jd`E*=wx}&jT`!}-rY$IRV zLxMfk2Pki(p!1DGmH046%E%G9Z*B@B7$aVcu?&(N(F_pw zX{$ff2!2Q*1B+8!5`CEcY&w717>Dp%eCVCw=Zv8mrXIo(#Fra-WJXvnCX<6yW$h+_ zt;z&Dck*ZV!-4cr9%fP_v!{o#I-QL5%`tYBNhxNUAVe_Y;fU!xn!;T~x zYH#KiNg(gr>VR5mkv3bgHjR{|BAAmrgA5;6Z|e&G%1%p~(4-FAiX*Y2NgRS0^J0QI zX&Rvr3O2o_8EDJ+*jgwkS!{6S^UOJbtJ^a5v8s#Ic&cja%z*})%6>~PcKr&wF+Yn* z#&C)SjoY9q2Zt&vd)?~!@pu)BRhH?AplzL1>#~aKW%sRSbjyJEX7>07t@a!<`Z7Q7 zTdjJ0FX=zLrVo2GV0t5M95ke9>NK7zN1{RSpvNKk1*S3h1)azb$Qs|%q*h{pA;Z)3 zMK_{=j;X%uC1Um=)mK59SLvtkAQ+kBv$c!(FZtHSujKx1l z!}LJux6byY@%)@L_)^NP%JM6=zr2vt_zQR)#f=Phukoo`7s zY?XjPAaFZj@e?6hYm zE3W$xx0iNYtm&PVN0PrWevNQEPgjMHQVEGwi|RHpBHliC;lWIxoBWDf_vQc4mvyY$~`O6 zEvz#DNIr~}@|{uuNlPKeYR_wPGCr`r6OBuam_uF*zhl;P-jTElIH#%jw*%ba{snWv z0}~di;qEnm-PF1z`7g3cAuJHIDB{e_o%v^hX9eHlgskW;#m`dB!NHLRka}j2t*H!n z$<9v#sr>3AEgtVc0Ubhh_+1k?FV`GERe&c3DXv>AlGhp!7(!VvMzNB8&u~a4Pdv)L z6-B>f2Wz}Fh3{W`(JTy`&FteCQv0IS6&d9yUc%wABG;HhKP@#P5)?t_XMf0pzB(aT zEy7(ZI+q?FDVXIzs6_yS6lQ-=JKKgM5jBDPP`oMtA`}lQOce*OrC(?}V-quvdLS%<0)v(qfs-PhFTTzogpF1Q&QchPG<>&v z&~Pdb8*G9%;CnM6_>@+GQAnCoVd!p$R4MZqC?RP_K{fOCFj_8I88M*A@2hf+Q;3te z>WB@b!^X>zOKRzCV{XPFQXXW-JLT6O=1;xgh^rL`h*N2dUbT-&P@gId*o0j3#U`JS zwfRu*lBV35nC8Cn3lc-k-G3Kp620f56^hZ#t(lN9nhZahcTM}_#dlr^h&w|G%aifi zeL&o38I&aJ`uaseDRn*<6r>}|s-j$qsBLOEUBkLWwde7RM`jb#YPlxvAa;_U=hf(( z50b9{vLtcRZ^5+gF25l49{BblBOIQ+c*Zk=(aKQQ$jXkkT?S40w4@Lq^J+-{76 zAiS{21k8Rq&!1>GXHuPDH;7=(!39&&2!ASj=5g2V44KY}63_tvGIF8`&%^5NX_qJy zUb`y^N*#$4?C#6CWfd8Tl*iIU8!3xB?moLjF-;DCZ#4_q*054hxL7FnS3x`5OgcV z-C`IR5@<;^S#%L_l$`|noI}Y!Nu5;`{xouA6g@YfF9k8I9g=eKXI_IN2UK5?LF+{G&AUB zl?#eoA=OzdBX2EgHPZ=Wst4APelucyUM+X+XRXU-eK%s)9L%%*_5Cu!GoE&|DIJ%q zFT|nthK;sdJYlo#dGx4)yzR_->_>F#`#8YLoll-FBHMnw|E(n1LfY*0!pguNhe7X( zcsYlShDZC$cJt8Y?`!3e@Tqm3wX3VfT?`d3$)mg8OTSZlm>;wHQT1DoU(C$$?o#i%wqBjubL;t1P4`N+LlpqR z)G(tzL%3u24cMUtt9Y8_A@vo))Mzz;FB2q_SQ0m(h+5_QRgGwLnADad?&1@O;-)TX z;9CRl&5}giF9hSQ`i6V=egIQAA4L3Ef;Xs2Z<6(ab1J`Y()OErXwvort(i$a#Ocn5 zicm}^1i0BN!l-yZ0nR*{DNI1{w<7>aHyrl_TfA+E0>ir!K0`q8+x-_E0~qFBpv$ct z7UmxM#Z{5L%NyDQEE@l${O==qt^zE#NNBXV?%5I4RVQ>ZieOn9p{oIYbV*qV>Y|Yg zU|~cNTm>2-Hf&RIXlDcX!f_&(@`?wbahL>Z^0D7=EOlVi6+#eZ31W+Mk3b6J&RI8bKM>2_bNeQCTenL|(uwHDFSIiPXr)K-ndgA=U(^vI&U5fmu+k&A}#?>*uo)?1SHtPfkDw0uV(Bm zi?rBA5Z7?aSiB1^QBrp*MIl`A55~EWdCEjx_^eC%?SFJ@#R%_b|O4$@TrX zL+a|^W>^PdSxUY9^L{QqW9{XJygh#p>Zm36QG)f=nS!;zHEte}^iyW*dwIFJX1AEx zR=0LIS=eS-ldw({T;bsmWT2k$R^+WOvFUlY^P1^Nd3$sQKIB=m+ghsqBqz{Zp<~T} z@ZXd42tu5Vjd%VDAv$?sGkZDijHTIaNF<4Lqom=V%EypFzC(5ZXps3+V7SOFGP$=J z;rSVjDvG@OIan?u_qZ#1e-F9!jU{}+;>i!%9`idb7EfMeFf$m5#9PI-#p`JE6t(3y zHsfvC2wY6&29+6FwHle9DsN?2CFbmV|J`=bWXoDk38|TLzS$sl&s|ml?+`Z(lxLO8 zqQ78n^foYZR&9d-v?wjJZ<>@gPZCeDcwQ4UZq@4EQJ?ODP|(2T<~O%2M(WcaZ&$6E zn8N$ig*>8bzjfLV5<{ctRXvl5t(>Ohx$q;^Q^Gm>PUL2`vss*SPt8B$dP!H$fds>8 zg@uUC!N&zu+qWUYySfP8nfFVl3ab@TiGkm-9F2*}tjvP|=J6U?T!~GrPeUl_g~iiQ zv{oph-4o`v)^z*b<2)u_!eY`*yJW8jSM2J%i*a*P!1aas-o8yEt6>oneh^U!2L=X# zVta;G*^%^Rqb!covO{n7R+%Q-Efgmh%VjPtonzAA6ec`LXt_32Dx>jo#4q~40~+Ws z34`vlIb_*@N=_hxrr5Sw z2=yD@4GxdahQ%vYxV>z$^}3GCCwhV~RbSklf)PDHqu1|*mRPB7O=}cwy<8IVn=veE zRIOf)-d{-^R@v;A5&l_~7Nn_i&{cpG-qfh;Js-MD9QJ(PY6A4S!E-gdJ{vVW(KeV^ zH~yd^n%ez$GO|nRB?S7qsuy5=rNmJwbOBQ-Gd$?2JjGkmqZek>^X{R85OGGOMy85A zN`w)B6}o^K$0IRmdNI{WTu46iG`XyEQVP`K_aHQ zj+)asILRnfqu@Ywd0F1)L-}|idBT^A%P6xf=ecTV<61~lRjV3h`K8CfY%9py+%07k zC$ZV9p`@d>;Mi5U>C-2)t&=D6a>xDblLvoXJEP9m5JO_Zfa|ET$}^1XzC5a^r|=AL z=RcW>lvBic&r>!*>lxi5So}dR1+&Fte1PX9z1`_Vh0reJ#L=+PwqslzifIi^k(o97 z3Z5}@4duscYF7q|A%HEtx+1@2q4^I*{8oL z(YZ2P3zKcxJJVz!{*Ex?4}QtZ|E|`&bG^p7&@<6w5Y5zPqaFUoBs$ZZYwBLg9nm|o zDc(J|ya0Wc3DU|FL2aZ8gIpDl(&PX>LEVj}G+5u^{1&ay*5+{Pu zyu1o0JY)QdXB|E${f~SSw>FNvPB3@)ql%7BouNp3OjD2*i8O{QYxXE{=`1S|txFkI z?!k~pxa9p*I6%JCq)Ah-4;I>U&WtXuMPHl?qc^65%gTj7VMM3SQ0f9j$y`YwxWpJ+ ze`EnJZKlu&B6fNW=D1oar^Xd9t` zH7YM_j7czT-_e_n^z@JKY8V#nJH*i_;7P^_Dm+xC>~w^QNc}=ms+tQRQW+wXUU((| zrYzT=tVF)htDaTl`nQfR_NOIcs%HcA&CgD6ogHb8Sp?wt%=?xK)-M zBw@)7X(#-Eo|C;pjT0SleuUX$;0xeP(yx|-ny<1<8^7Y5V-PGO9rCL#9|zroBLUmJ zDaE$!K_JK2W{ai|KXwE>*K6A64!8cDJR?VcQWpBA)S&t&|M}a zan(6B=c?mkifINblJpW$ogv6V$cxPOQM!H;zX+z-r6+ePOL_OOlY!79-a}tPGNLh(TAQHNvFt#0!Ozd zGD_)bg$(qy3|(0yU{5Bb+p-qGiKZ}>24b2cnTGUEx%A#5tU^|kZCRqEot!5ejk`cA zU$L$FyXm9+1okv%^9N@nyYxZdyWb%H2{td9MZ*&QAkO$d4=GUcza#SGDOgnG0~(qs z+VM%bmP3&LNo1G&zj5paaM(Yq-^bWZNpMaeKg;i*B|c(07%)sz3u-Fx&r1f~;OCW0 zaEhJGsfU=1zzv&ha0=ISh5_+^Ed955X9)jKxg|q4_enm*R|4?Y(<>?>T}Pl7&^Lo4 z*9QovMx((9N!{$U>YWR(k#C6kg69ut^oa&b8-JADX2v*8+Xou!v|^!r=S)oIIP`Gy zvikUcechq=5vh~0khfOPL+ejF~>pT?W1&Mq!8^AkCMhw zL&U#I(}NYlZ2_dV#>AY%a;9h#W%Xmp9%|^dCMeY8w9;aOjEBa(b(d6Kl8jnc);=6y zWpd~nqMvJ++flvMjVzIaN^)zOjro!nypo#9A7gS1lHt`ZqJ`UjPdGZAl~iD{Rw^-R zc+87QLhN*vQj3!?V#2^^#d0~rsSXryb!VDPz-XutKm$aQYiqI^jY?bP)K<7q;A)=M z-NmGn>-8TfI1g5w$rx?^j8$5dYcuFGoVu9nhsoicnUYd6)WXI0+Dh zY_}op+@}^vUsz&_;YRVQwX^;a_lOC3sw#Zjqilj!Nyrdl1H&pspo1yBZ#_HQ@l-KO7#(f%j&59b#Cy_Ooy zmBBKujI#=f?k>%BMQfOFej&72FxN#_{Fi!`Wer*KZdsy@)-MM@rli^)Api6GF2NQp zN{%HK0{r)-|J#SY+nK((oamPZSRk!qKorS{=nXL$x?F;|r%_|G1$XyV=4HVP@&`jt zf++di5aPdZmTCPN=lLX1ldOyB$>}e1a}WFX`;|6AAakdUfH);ks~ERrw%Q^~qDU!F zm3mj%^9-Xg)h_ScXzOugjzPuoWcDfwuO&cBP1L!j!XMk!r4qk<@UTUE39c`_u*3$> z=UWyL=kY2OzA`x4jYm11U;Eh%TJkAfFdh@SJkp4^4j3apm+e4om>D z_Uej*bqs88K4hVj46_rPzfc`iiuNHg_dyxW5reA*z8&vFW zZwnJ$bxkyX4d9QOSOoo=buV2K)Z_F`p@$o(Y@?@r5|MZu7R;VWsbq?VYqW096XS%# z=fpZPIknkqx!I0H(BSl3O^RYJ+cyVbv@y*vc~wK0W^hffu}%{7vY*_?3aEw6wc_$$ z^uRdz!x8eZzX2>WED67CI_#WI?+=&Gg7FRRSUlP;Mf3w$U>1Rv3)^k#q3 z;!DDtC5o-sEM!|Dr|A5JjMG)&yV;&dgn09dqH6{XamNzvexJti$%6zI*T(?-%Vr6M zk1f^pwf9V-Q%P`FqoG7>nAsY05U_%|Fj)u|5TfEXJ;+v~k1WVk!}RhIfM|j1XI<@p zU5FK>j-}=$dje#Ly_u`m6c_h2iYNUl3)ELJ<|iYIt((WhlXEme4G_GZ$0ddpGKcx= zw?MIL#aLupxTxX4M@x%ou@JaeaG>4wOR_;^J1BEUe%FC$$@0j0Ot)=q_4P|gZ9RGo>D1XqJI!&QofNcHrcCIGD-T8xR{#| zInK%GOXUqEadZnkAn|=VDcBikEVEz1yZD}HSWlAn#w+p%Ou4%=e=gRV-Y?7et3L1Z z4g5iw!oykQO>V*9Wmv-M#}bo?jkLru(g)jvs_+P-reH=Z6+0 z^ZFdJgMS7bUFHow-QYF4whGg;*G&_atL<`kQ;=-gtj)H1%F?RHB9G|hYV0dpiJ#;O z$o{dw)tn*H>+~9}0^G`0sW|OesM_RI+Eyy9yK9rz3mL~eHAK*?GR4`=d%JZxc-Dtj3NMT*tsR^~4M4TD0$e2gF8p=lNCu~I$7#Qj z%(pgS`Erp5tFex-_PRGs5~9@ym#Hj7g%LbXWMQw+bA}^=jB<9{M-zTwlbF(I&K{MFf)!uH zYp=ieOO7$tVNropaCRV-*63SCTstre6Db-VI%1GefHbh6TYV&3C#3vc4)@;kk-xZ9 z{59a68uFxdqy^6M69PN?lgyqJoRgOkHxFI?agl)nrKm#0iq6?#Lg3PrzLw`%+FLM{}bXNamO~4C7&^ zF%QhrfY#mG^0cIwUC!0Xx@nj=({Nw;>h-6S|27t$VgJPTVM0gZQgqo!gh9`4r zNV%MB)?$2d$a4Yy*+2L6N&85^@ONJ{W5$c2?-L>R?f&!?M6j66p2+d^CinBEkGzEd z;QI!-kAefXUWwXpl8$?meS#lXhN9cH$lPRjgoe1c#24KTm1SZ{Pq-D?mE5SX#P`*A zb|=|e0&wA#L){h>cjF$aew0JeG)Ie$a)e8gA}5gIUrypiwvnjrUx)mF7>c3v8(Mzh zxy0U+1dbe&&kDTb_^J8Cd;Ze%ubHjEi{8Rx$!x)5DsqZj&{m`Z-^jf4xgZ|&3abB% zT*Bk-Pv9_nzfmy=VDJPRBuCGov9Wf2hZ5;W+uuk$>GG#QP?5iIlaPutiOezxCJMpI@+g)Pzpx)+aFU{8MmA+rsAg{;<; zJr1i=8B6Wm^d2^z?x5RIrW^&&;oiK-l@WmS@;l&~1uwcKRbi~=?i%cMzc+%4;!@fW z@<=%;9Is{(xMMXi6U>pr2H~e5KV#Dky=-X4?BnZ39=EMt(RgGI%Yib+euDjH7v+1Q zJUt8XLoXmF?+Q^Sx1ZwyrZi7IP=DrWbaPA)nL#v zz>Oy$6tlXS&j;aNbw)%G>>t;5W zBnN!lKehpB--gC`Z;}@Qd&sm)h*NW54#f zUQ(hA>p>{!#Bq|8qJ3T$(*FG|A8`aDWiei*F~Pms&we-CjDf_u?S~>T9(#h>3<~%1 z5*;Y={lqd5&<~`n*BeNdeM<@XAstA6Yl_qwWp>xvWk^BKAe&x-LHW67mD+n0vyIN- z2c|Jh$hVT&(I?IWboQu=N(OQ87AHm1jm|i&T8lQKDd!ESk)Ft*=y>2O6hv0hZ}IAZ zA}L9j0}~|w;%T_JLC>JJ)Cn_!f@MXY^8n|o;V&y&wKg`|G;vh76zh>L&6{yCY^6Tq zNU69ia4_rh9eS61=gv=>${2d!HtASpgl$kb{`L>kr@g8G?8Rkf-opEV6d=$FE$0qX z@t^j`cKB7bGK(ctGSJqRys>Tky9UB?hJngF&MppBYbEv!`4L z?l^_f)yco!4$BPVC^UOjJ8VMD5R15_-&$8R+_H@eHSgqqQ%_e#*3=d-$!tpQ@CiOT zprfvFXdh$+#8HJS^Y~Ou%5eYHoxq>HY!RxU64B>k&G$M@#=In=CF>$G3J<{q_kaIB z)^)lt)7MY4)%!caqOa|xH9Y}SJ80!d6#lGj#anCO;AmKN@0i7nkER=$+I4}JkzIA= zzOmfu6nVcS1H&+E22*IMJ{wd5lUAVC@2p$+PrMo#5Rt2$D~nRSjgVq(tjVR2|rq( zdv_lSkVVk$?+S8U_9Aq;Y?u~R0)M|P4QWH`iuFM2ir#`j_{R@^?LxNRu|U1@8)u@? zeGz$Uxoql#=$GORvCcR0ue<}dUR^Zb0fcX~e5n^*L3(vQ7=+#Wz7mU7RB-Jwt*PXQ zBeVeasd9QKw&~(haO<*_%5wPQ%IbwByQvmi0M5%WtoCnvoSLa?yhTSVc$I2M_Osq} z%nY*g&Qc6C_;e6ZWBr1k|6wW}nXZt0TDgn&l)Z3J)#NBD<*de*7^-s-mI@`+i5Drq z6KSxgX=-;CN>d%m`rfRbUslaWXH;aUb8>;MR`J1Qzv1PMH`qWK>HBkUZ3@t;}?An&lbL*|L ze4PbL_j2K!jLKqHdJfH1M3v>VE&RTB2V}Wz%ex?{D!4NAqeCr7?ot)R_F@E zX+Xq`_|zoX9$E@%8aR%zaiss3tEsY^tGR-5J+z+YO}We|`i$SsFndLxG@!{p2Vfra zY50dl^H!BI%bBrcfb)s6yIsfhPBs0;z!CO$@-gSbh9`Y^L`f~kZOHP9cu(_8OG#uq zz!NixOE9Z9UfT)DZcoHDDxMFv((hCY*1H~NCE32}6i;{@9QM=~ln2y~({mkEMlz2r ztVx17pFBRxY|JU)XDS+I(>2=RVHCjY*7&Fgs*a8ho|8f^5HQ>P&y0~S2 zS~5{^opNn81Y17HIfew7v>y>XU*Gaz1F2uW-a$f%Q%G$m@fgFEEE*PYs3op!)8X3) z{*Z?==(TMmaw0eaeryrcSnsGfGJbwyk4M=lb-~A@OLfDK@i>$<;yBk20DRxA(Gis8 z{N2sX?ytHu3WaL9`qvAXZ{Ry#RBy!F<2s6RKtkP7Q3dqz?@7c&g%>%LfrOt6^x`}}n8`JaK z(zF^jN_^x}f9|G&&?6xRrTY10JCb4s-e~CG@5C#OS%0U9?@Gs6`JL{`9+sadbRzgK z&Y}J$;#YzHtbSxeJ%uGd?bgFj1?2nD3IETa#^g^Ho*zwNK@n~A+XHuN86BG@B3@Q> z4YUzHk+>XsIvk5K%aEyG19N#Y>k7kxx9~RB;bGxL7$tNF(;rA6<#w}m5?BUeBIzn; z!^Qu&;WEFs*B>-vI4KUynI~zCQi_JkOZ|6dsBaZUfJ6d>wa51T|9$A7&o~690nqlVAo6@?-=O^lS z9pqO<<#d+811DXq2emSC&Z*I~^`tpc4%SL+h##gneFMTZhlMGg85Erkt35&n;>wUO z4j>lx`jr-8^hWk+mcj1@icR6&7Ho8eH3*H9Tfg}UKL2UuuvQAA@;A>@$F&!|rj(j5 zOqS8Y^yD(N_!);^${L5vDxw^EZk)+VK{9$4Kr{1%G>+*{(jj6UGAVSVbhkMG>%+5<3Sy+DE85|X37s8Asyu}41Vs4R+_QBcwr=&$t>eKTJM|yWriJ8Kpyjjl z8Gb<)c4AS**fR}LOHon_-H4>Oocxy~%f3WOfA-M{3;)N)%g>w?tXj@0O4=mkXJVl)o8qsfLG^njsmE|jr~Stc5f6;CB{YYI`+w+xq29dKaNxDXM~d| zB8xs&fBs|=oFM4F|4ukDn`rIgg+sjWzcGBhg%L4bs!(c_I$gD7uPXH%se-?QOTi1~ zq|w!!e*)wpXEKPqjkj8GKmA3(?9pD^Cm3#V+u#_s4(_a#Y7gzBbLq}J(NmH8YPC)x z@A88iRP1?(>OBgDXgd#Wq@?TYVf)Gq>Shy&Q zZFtOZct=;Bke9(a$|8?-T{*R?C?}3g30ufmm<7bE;Mf~$_IHKpXe!p18$nONxddib zciqS~m_x77wpIFP7}cliRBoAP@DLpPcb5lhmr-+DJ{>8ns)UULDr$l{;Y|8n^0Mt_ zoF<(SJ940Le9v&|mI%6T!Rl_rCq5=j)jBFV7Atl)nPgX{rlw};3HV34Q&2k}4X&=8 zYyeH$CGO6(woD931v4e$g!4!chrXZ{DLI~ZA;<;9I6#BgjnW}d3t97&?)|P$=)``` zn7ayJTC-YFO?0XpL1Ys~5x!PYbJ*H5pqIIeP{_yNaPO1RrZTFk`7c3Z;UYa$!~J*o zd~+gsR1AA4!`KX@`}Y^W>tbon@{uVje*v`DI7N4eyCKa~v{{5RN4H7;guj$JR1$7D z(6XzI_mv`R@^T;I?3bSp<=ypcv-pwE9fLhT_fGnu=|tHjn{f0wIk4z@(A8P2VHs2C>Jj z@bVng40Ri5RLn_ENB+J;|9I}9o2TtrHaI<(JDqcv4!J0}dT;7_ap530gXZkxh_1q5o%hTHN z%Q5PgYuR|>PM?G9I6e0)iH@rGxCtT++YQHwv@0(N;yj^*N!&$5$Z$qU*jZhn?0ZDp-0@a8G=m(TRRo^~x-$cOlI-A#`;iIC!vYJdA zuJx3MTxUV34cIv5I)=wHVr)m9n|DeS6g|-Ba&hr(9@#b{lk5)I)T|CGZtK;LgRAm; zU2cMt{!yWXa}TybYEgO0>W|xg$vCgTdZK@x%EXwl;0Q!s(7&8b;gd>|OvwN$tQL~KWaNRw-p`Jd?_oys zhe!d)o5bUu(S`pIMbk+Bu=qqBaEG*Az*Q)m{0V4Rxp1t3J(hIo^stxZ3UzhPtRa*l z`HCZc0`+=g9qYhjk?#h-MKa2M<~SGq%yH)W9}x$UUlJ6?53fm^-xK)% zXYVK+c^0cm-u)#A_?G{H7r&mo5C8sHq`*X#kfWO=CX|NqiEwOWW1uLgAii~K)15uL zZLScC;`dNr7|B2)DSic97ymdukZhBMlc%pHr+x3ICa*r5D|sh zh^@Y|slxNl+n-(9vsJgHtZAW0E3{;UrRnZxVOG|28shL$dK@7eIMwY&&>`%Az2rF& zixs1mSr0982D{@i5H(sfR-j_T4P~QFf1ozgU^~-7Bh)?pSt)s&6`qKCBtN18e42$S z;8GMeDo_Ww;W_-1!RSiU44^-H3fJf&KDBJ0Nr(zQY6ydbW1La-@bEWV!#!N6MlvHl z!g98VG&$LCy%bfdx#E5iHEd#uNa@ z%$N#CXP9Vo0N54h-6s}U!pptur?4iKwyl+A)T#gE%z*|hDz;}jhfts)k}vHu$up@)zxX{y{FTEStidTK9mLTZkR zqAjHV7exHf7wu=lt8S1yYk>j9Bj$f@c?%(@#+2kuA!)$O|Cy5bW$wNaY6gp5K%*^K zJ*#X=O%#%XB#D|tp(blB`M{APr={yYewFr8*EgP>uHPkC7&%u3NM`O?tEIxIxt;YA zILdzRd3H1J_4WBi?juomeJ~LZXTXH_`q{s#ljDbpVP1damKW=P7Yrrnw(0Ty&|!C> zdJrvpmjE3&5%!Iiywx_#_c#M<=sooNToqxE?tKYs+z56vHQ_y%9JJeW z4L4#ZuW;f^ZuGr-5k&P+ZR+L`VOB+A^}Kvp8k?tPj?c6YpVQcu^I|PPJEZC zBfLK0>ZEiY7BFh?(a7z`^(BodIlcOZW1p~D1-0pM(+b=L=j_ z={g_!UL(5==Vn=rPA{*qfWVYMaylE&$@;Zq6EQILC3rf{dXe{`vmRtrex%0z;y@)+ zEWmv4y}9P+46JL3rUYGB;`yR+#@VOBEV&b18#aOHOql(;X&tNPZ;!HIqX7L17>3Xi z%LI~SI@0WnZXkdJ!YERWROSK9`~faLkiB6DUGm*fxPV9jU%eV%cwtXqX-{aS?c^s; zP5GM2NzoZLN>?s_@)b3T^*iVy<^@P337{a^j;2sFcJ#CfIIoXLfn6$gRxl(BM8=n&`C-rmt8*zu!U z^dJ{c5(j4CpO<=$*SSP+9SzMiR_Jh7%6&;mZhNW2l;(|vU5E_kjTHn!>JQ< zN8}n!Qm!R{2M^>VJv-t{seeZ_T>s~GHI(yLOP&-J1nfA>E24eLQ=`GU1Z*sFqa$-- z;VyM!$55ci$&Q%^tqpE7%+@m;E^oSve^VOx&J96+1ASBN|Dn&`A`;4KK9=ac&%Mss z`1-oP#|!{%wlh^~N)(}wALTgnG&UL)4o>jdm16Xk8e_{E1#7~M(H*d!Nxs^BHT_qK zX#CHm6fh4PHXwlUcj1=JO1w;8lBx@n##K!K1(`DXy4Y211=Hx{Zo-{W(Zr&9Xv`zG z;F^2OkOkSfn3v4$QPnG4F)M-*G@TS3-!G<15M>#+oAp+Tt0%#vjF4I(j&}-GcpH|H z2)kfJ`w%X!9%T$IJCvdz=S9Ocf6|Jj>~hb^9MG;MLYxpD*oE}&z0D_cO`SkJhRfYp zFSBYzcjUD^Ct>I7FJ1nPm}U4J?85H4UQDAG7 zU*9%q%eUTpi3dNuX(Y;}>3!JTZK*;}h!e_3Qm7(r%;+J$*Ca3pLn&?_1zoG3e z=y@7*YyF|hFCc6gjByob7h)m>GF5&h85|H{+% z!1oV}HN!sNxA(bcPOQa_A;1q?(~eFzGJJp0V~!lLoi%3u?{$ zV@G6?DG~Y^-(ZFVl=;wfGpS=!Qs*d0bJ%#6a+i~5YqDt=i-~je97!{Rv^3T}A6k5u zC6^@)D=BL!r63_#Rw;Bl+EauFn4HUH0h~u=N?CH&;yBd!;`4j>Xup`&Md%1Bs0_Z# z`lIX7GYMJe(YzQcw)a_jT@Em`P5e?U-ZM$|G1(Zy{4s90x?>%8`4T>VLSavmXTd9~ z=A^tHJ^rMes)GGK&)0_tNHgcdW(vzPEonG*A2AI|X3Y(&x4;Zq+@spespi5pQL3(y zJFM+3sO!E$qrYbQntP>}y_rv$BqfM%txRY92qjWkqXDq^s?Z0=m72~QiP&~xFKW2L z?hnhTF_MQ=@PuxC#_RM8wvY#${d)TR?90W71(SmYJP9lIQrN~$DoeK0+SNT@turCS+4c%ol0tCPXyY=a9o8|vh@ zBoC`J8^r5a2+rQJ8MTtWH6n`%mawzv?@yR`Y|@MAEbPwgM2J2foSRYC#_xab|f711Wzx#U z7mj8A%9_ghsbv*bXd%A>A#AA{|0GM0`_c11Ib15^dfrVj#_7J4QXl%F8bb6`xJ`9( zr@-hSQc97U6tNP$0B0%;v!Rn0^}mr2#)nd-*oQH{v(9+mL+yMpNWhM3GAnOP>SW5X z?Z9Yzd5t_1a8`ei7;8CM)9>?nRrYdVVwe7XJ!~`%p4HSKX^9qpt#Zke$&EIl_MS^@ z_n+HASPdwkGI5qLf2`WTVq09DffFlgTm1T9=8w}WFOMi?6}<_?w7GeGzV*4;y_HFeg0V1|V`qwb zuX9KLopqd-aBR!oLcETcrrPNNx{P*Mi=BYLenQkA^4|@N4<+Lx1qTu|^oF+rLL@Z_ z;_Vu4xM(5nCbKOREPK^&tzszrS}i{B zimpz-o9Bn5csTZZIi!@Ys==^ey&0k1pn8%yevqTGb`&YEQZSn5Mxs~Zy29|5)>SK} z!0yG%f99(?;Ln8U;?MX{6U-DyeQMeKBiEN}5VupfCY*%}SrKA6=TW1iEJC_L__C#f zH%kHWq1N9i7g?=05IGTU<(yL^%s*u-qvb+L9F@zU@4$N<_6?06jN5iAr)(rL!09S` z&d6D!mQCagdo^^I7RLT<=5j|FLv^34wpQ)itdMYu z+k?*f{e134e(!^{$q7VmMq6zw4p5W zpa{kGAiWJ|W)C4~@JHNwT&>6B!{D)G@Sut3(83|rR{(VdIg{Fv0?QMdI{&cqaboU3>M;wB&O|vvztGJ9+4MKEaf0Y*k4%g!eaRW4#_UOnS&2?CRRi^qNCGzI#D1%8b?C>Q+Fw#?Oh+4Hh*kGhB*!9r0 z%4mE7k&J&OKnX3C3K!v|-Fr-LD`qY}gH2|*;(nW^WXN+bHZ|@eY#;B6Ps_6mtraoG zOvT5%8ybLFr1mv|+vRp(=m3TVuOq^%rKa(YXr`=vNYO}3N5v3(W{+Tc*4`h^T60+H zY5D72_2P-OWnPq~z3+(1)9Dj)bnD3o$NfwdSy5l?q06wL`=YTzemhc*nytr0EzkN$ zO1;Cl*qk|ZuDW1(ROQ9maYlJYlf~3T`%{m3oGxq`-A$2<6u~7PC31LYXxoJ7oUVTT zAlbyA!9#Z@cr4@Pvk79C0K64Gk~?*A=vWb5{bs8$r#otjRZUO(X*z|4)=B)pLoK0x z)c?Z+U~SBPygo5och2N>x>4Tru;*;!m*i)G}lEkURZX^R$5hOEM-SR1Y4JPT}AkY1yrt)r8Ng?$qV;8NpxHAFQ&&$B|H;Fcr-Br`9_Bsk&DS)_&RI_VuiJ>V!?#uU6L`1Q#5pFx`5O=WWC=KEb=)TNfJq3kT`q zE)gv+C`RBX(z(vt9%$~=dJ(Zj7X)sQ*%)Ylm9S_;Z!6*MXv=eOA}|-N8Kr%wHaqEx zKJ}FbeLwu#B_KkU`EEwQ;*nT~+i}#y3{hk4hUL;8gP|QpCuW$%=dSMMGCV;am2i|7 z>)h2=67-&Ng;8}wkyM~xb8DQ=Q`5K8p{4bxQlILQT#7}P%ryGNM6&gOPA>=goJ);& zEd>-AP2b8b03N)h;|L1${sJkno}%BMCo6*~D5rqqB5Y3bFQ>n@!4w@acjWXEyiCqN4I9qW3`~ za@SYKqXw*JT&>Mac@&E$pGrOt$+@Z0av&maL@X~!vQ|RKVJ|klkMrnK)gojs4XXKw z>Aew&i4B~tlN=!uesyPJGQ@C^u|cl)u!JBr6T54eoyn-zt)hp`BKDD!44V*2-a3{g zz?8&A=4Qr7Aa^Z96sY6UUQMo4iUD>(j6l}ul{YQkz zlga^|eaBBC<_|+O*;W}GJU^q4EvIrO`vmFNmb5n(yWfd@s!=%TlI@h~%cri)a$IpayA~I+G3Bk7)MiEHfj&k!baX;dSh>Vm%q`q|S zura4lzr_iHIA@s#`J%0Yv)XqJHzKuNjgV$wKI}eTVgDC=hrR>z^mm01PpkMyM`+*y z97T+eBcBViE+|r5*W|sEQY!g8w#q7Lx&Xb5Va6XVph1_vvo!7&+8~*7CB9ekqjqIe z$YaHnD1Wj3!4{-dW7xM(>U+i!X{95V8N!O4ZskfbAk-vz24`GP{L6f`Qd-p@-{)^G zD=g#cXy%-A}# zuF2+Vy&^43y03AKm`_*M;Koo?nL#*>^#s}RLl3&Q(LSFDl8)`j12@~2d{G%KeO-r_ zPXf*9+XZI=*+)4_d6+)EY`mf~FRSPVamQ>VT0tzcAIFE`IJXt3-r?BvWT)cXWXX%l zOx9RZf2-kjjey^vGw6{eP5(&DBkjV5cR~E*^_5?H$O2c~Q@TDZ>s7vEwpi;BqT(xN zv>f`%_xia-ZIhk9O|*c2!_=Zo1@y(I{<{rx!4L5bdb?FWM|Zj5-g++wg_W1kTg9bH zESm=)Rx1IhgMj0bcjqia=hRcE;a_1ZXv~zZt|Y;JBSBus56VPQnaw0tIVeC|*!-Pj++7iJ4?#^AOyG_1bqyKOY&oeZ^I^K6Q~I>?6@F z0v-qc7aqxev7B}MSyO#9XnXp$`!eD6de37K!Tt$&p0E_}aKA#;Dm?$Jea^ay*Akz(0Ou6Z#p4ocICJ;$y~T75NIZll+#wP)}k99*yY$ z!UV<%cMS;aTGIETbR_+-wnkE>mg3dLpYs(j)FM28b-LiTkB7VQ+#s`*mcS4mpKiMSgj;C)|^P zNNwCb!g7mvRDm=TgbX-9lB*8n){H;h{!7;LQz*g_E!tkLmU8#uM`e2p72EKfZb$Gg zTWyu4c=h$ld$a4&O1|FKHrx%}e~LbRFM&m5L>+n?n}@4se|%&ArZM}|%KZ$l7Z2Ve zq7)npgIqhpzvo(NjO}6uP_c7P$~6nIsAu16H(5pH$vhhJ(BO}@a&JaTilP}h7nnY> z(3dO!B`SJ|Yn7%nj1*sRDAErX=j{_Sk3dK)eSPWfan~8oWY~C?-JmF zmtjStHpV<}m&-lKqHC_2JAx_K%tuiS5te88)`L`1gAdM}Lw>ZgeMGckR%BL8s91aV zaJZnlC8Qwb&Fv zyQ)FLX0U_${&!qTIh{T}4wy#Punk@kYl?RX%r{fAc>g2c%o`0Y7kN^P$^7p>p}tRw zXOMvoRTA*`N1of6Q`MBq#M%--FOz|}Zn)P`|0matj1YDaEU`k3dkIX1!-SAt!UHhz z$pAGJ114S+Hx!6Kv4XaLi26}9KR=zKn0|f|Smroal_LiBKD!oldO<;_7Z2dR%nS_f zlJYV0a+_EiJ39VU|4*E=B_`(^dTb1gAI}3`=kU)f%a`dAU^GGol5c=!ws)Bz;W%f4 z7tgM7{;uUl4sVVy7%4poRsxauM+XK*maiS|PZBQR;Q{*(aXsc67Zh|#%Y$UT3q(A^ ze~4FnDE~u@X4>u_Cc?lFx`BbgaDnK2?I#h3;KCyVMte+Ubva#f>sv^P%F)EBhr4r1kuzu>+tCT@i|}U z-=*&856K{xw9lI9`Un86L%MUOE>v8*U}{bU61NS4HRSsO;&0u{J;a{Bx-?Mxn$TRr0wHxQMU(fRM#Ma0m*}*?sv4Lg=0nX=`MV_^>lzAv5)VhV(*S#0A^ikpRQG;<;}A8_|w|A$kFt2At`yS!X;4|2+io z7bDBJFX0SM1*ZnYHZGr|{0Otk2X~KlFr?+8h2CTUbBhfCHfYYle~*Cq*TPWR8T@pE z{2cs3^uRAH_@3qaDf0|YE_xkE+dAK&vls%fLsj683co;^c@0u{fT2zNa~95=wIJLL zgkS9cWG)DoJO};ZD8mAwHQ+{h`-0{!FlYgsA}_Wm&cT1UPG&*46}TabUw~5=ox!)a zn9srg^`n3Z2p8b$r68OU(A~xdXCx)d4cknRhCWch2jY}0pa2gV z4>C6h2&3=WURl0V b7hw`Bw4~VJY{0;{1OBXmt|7YjKmPh31Up)j diff --git a/asset-transfer-basic/application-java/gradle/wrapper/gradle-wrapper.properties b/asset-transfer-basic/application-java/gradle/wrapper/gradle-wrapper.properties index 622ab64a..a80b22ce 100644 --- a/asset-transfer-basic/application-java/gradle/wrapper/gradle-wrapper.properties +++ b/asset-transfer-basic/application-java/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip +networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/asset-transfer-basic/application-java/gradlew b/asset-transfer-basic/application-java/gradlew index fbd7c515..0adc8e1a 100755 --- a/asset-transfer-basic/application-java/gradlew +++ b/asset-transfer-basic/application-java/gradlew @@ -1,7 +1,7 @@ -#!/usr/bin/env sh +#!/bin/sh # -# Copyright 2015 the original author or authors. +# Copyright © 2015-2021 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -17,67 +17,99 @@ # ############################################################################## -## -## Gradle start up script for UN*X -## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# ############################################################################## # Attempt to set APP_HOME + # Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" +MAX_FD=maximum warn () { echo "$*" -} +} >&2 die () { echo echo "$*" echo exit 1 -} +} >&2 # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar @@ -87,9 +119,9 @@ CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -98,88 +130,120 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=`expr $i + 1` - done - case $i in - 0) set -- ;; - 1) set -- "$args0" ;; - 2) set -- "$args0" "$args1" ;; - 3) set -- "$args0" "$args1" "$args2" ;; - 4) set -- "$args0" "$args1" "$args2" "$args3" ;; - 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" esac fi -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=`save "$@"` +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' exec "$JAVACMD" "$@" diff --git a/asset-transfer-basic/application-java/gradlew.bat b/asset-transfer-basic/application-java/gradlew.bat index 5093609d..93e3f59f 100644 --- a/asset-transfer-basic/application-java/gradlew.bat +++ b/asset-transfer-basic/application-java/gradlew.bat @@ -14,7 +14,7 @@ @rem limitations under the License. @rem -@if "%DEBUG%" == "" @echo off +@if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @@ -25,7 +25,8 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @@ -40,7 +41,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init +if %ERRORLEVEL% equ 0 goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -54,7 +55,7 @@ goto fail set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe -if exist "%JAVA_EXE%" goto init +if exist "%JAVA_EXE%" goto execute echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% @@ -64,21 +65,6 @@ echo location of your Java installation. goto fail -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - :execute @rem Setup the command line @@ -86,17 +72,19 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* :end @rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd +if %ERRORLEVEL% equ 0 goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal diff --git a/asset-transfer-basic/chaincode-java/Dockerfile b/asset-transfer-basic/chaincode-java/Dockerfile index ed71db25..c42f3051 100755 --- a/asset-transfer-basic/chaincode-java/Dockerfile +++ b/asset-transfer-basic/chaincode-java/Dockerfile @@ -1,5 +1,5 @@ # the first stage -FROM gradle:7-jdk11-alpine AS GRADLE_BUILD +FROM gradle:8.6-jdk11 AS GRADLE_BUILD # copy the build.gradle and src code to the container COPY src/ src/ diff --git a/asset-transfer-basic/chaincode-java/build.gradle b/asset-transfer-basic/chaincode-java/build.gradle index ba6d051b..fdc8bbfb 100644 --- a/asset-transfer-basic/chaincode-java/build.gradle +++ b/asset-transfer-basic/chaincode-java/build.gradle @@ -3,7 +3,7 @@ */ plugins { - id 'com.github.johnrengelman.shadow' version '5.1.0' + id 'com.github.johnrengelman.shadow' version '8.1.1' id 'application' id 'checkstyle' id 'jacoco' @@ -14,10 +14,10 @@ version '1.0-SNAPSHOT' dependencies { - implementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.4.1' + implementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.5.+' implementation 'org.json:json:+' implementation 'com.owlike:genson:1.5' - testImplementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.4.1' + testImplementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.5.+' testImplementation 'org.junit.jupiter:junit-jupiter:5.4.2' testImplementation 'org.assertj:assertj-core:3.11.1' testImplementation 'org.mockito:mockito-core:2.+' @@ -30,6 +30,12 @@ repositories { } } +java { + toolchain { + languageVersion = JavaLanguageVersion.of(11) + } +} + application { mainClass = 'org.hyperledger.fabric.contract.ContractRouter' } @@ -73,9 +79,10 @@ test { mainClassName = 'org.hyperledger.fabric.contract.ContractRouter' shadowJar { - baseName = 'chaincode' - version = null - classifier = null + archiveBaseName = 'chaincode' + archiveVersion = '' + archiveClassifier = '' + mergeServiceFiles() manifest { attributes 'Main-Class': 'org.hyperledger.fabric.contract.ContractRouter' diff --git a/asset-transfer-basic/chaincode-java/gradle/wrapper/gradle-wrapper.jar b/asset-transfer-basic/chaincode-java/gradle/wrapper/gradle-wrapper.jar index 7454180f2ae8848c63b8b4dea2cb829da983f2fa..7f93135c49b765f8051ef9d0a6055ff8e46073d8 100644 GIT binary patch delta 44391 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%0D+ym=_w*d`k$@iM%aZm>(FB zFT}u)TP%ySs`RyJx#=oxe&Idagc(F$Sv(5*pWd?HYll`LXi*p`s9;8=FNKjA$zuDap z1iJ4_{GzB&FY7I^Z=V2WPV}duAN#+$7*g>}M-8M^ZIIB>-^X-D90KS2pYi;cJpI2t z9+!d$Z~~_e2!65t2V*tx>VN>IOBPZ~3v6t}2DR0RaAz+Y0&>nb^fj?~75%>lATlV_DagaSI48TP5e#m z`NUsBkeiDL|BMZ$&97r4JO2|SVnYrr+W2*{e!H;xn_8U}Ah!z{@Mwehm%07(!p~pV geSU+(twG={1R5&vkYyYSN)YnO$AzrH2Y-C~e^Sofwg3PC delta 40281 zcmY(qV|1Qh5bhm2jnmk+ZQHhOtGQ#_dScsdjK*r5#%zqnc>f3Myytw|d+qr)v)1*S znQNcjLMAOhLaWF_LLsDrBVi@uVSpnfGr5BQ&l?I97#Ntdn>8~e*#94~j`hDDQ=z~K zzaxNw!NL6(Bnp;Jxm4Z-4hDt`2?oZTs+xtJI(vtiD&vj~JV^Sci5Sb;+7EI?L2D+9 zFfpik2CpexkY-QfN*}<#W8!m>H0?q@(~LA>z{44Ou(}hw&n|a8&CVI`0AM~bKf&%h zTcUcvulD*96^T&-IH0lfZA<>R2kX`RVA>@-sY36>wJ+I@ixjk+vtTwaM>~n0o-JFp z6j1bYDntwhZqivNiL9GxFo(xoo!(S;COOm>sOhE2Ela-pULlO{YS=A#F7jD+6nM~x zP(|bM2G?l?kP1)AoGi$Ls%9xBOV6YYt=rDLH?C>em$gjJjA_zwcxyF2rP1NKU)HFq zB@i48s17SFn$9s&Eqp~+s@y^a{@t>SkUNCmG|@ByLbhitsphFjX@UY9fO7f2CPFjV z9*9eNZYGtlk_X3YG0MDwjUB~wBJ_Lawr)4wg`7&noN zO<>+#8{H1bHbV!%{@rueu@4Wi)at2ZYlv6i7yd}*U*6rHDwHTLAa5S_!cS`RXD!*9MUNz*UV#2c7?C zqW@1;ZNV98h@rv2C{js1xqwY|3~ih*LihDXhA39L=#VBcSuhOdHmydjc$#@=MsUa0 z4W$;x;Pr)6Z@Q;*hY;8-KUgbdQ!2^GftgKn@!1Q{{&c7!^?k}N_ z57wZPXIUvQ3^t=-X!!5qS!pbk=6KhWH=^k*ut6O#^Zb*fPy0;ShGx`KQ(r29JF4CsvpTm~)MY4{QHpx&L)8$F~F|3)DQUCZ; z?+nl8WDUliET#>;L16c+r@g&-=<qg)b?ByNPFhx{H=Rp4il_G(XE&PT z$og%q5Y%SBmsq+|jk477b;PM|G`EFg6wwP?=<92*w zpqSFLZbBuF(G|h=?VmOD!{~jt;yj~&yn$6+4Co|8Hrh^mDvhPk1S}Lm>40!@NQ=iE zYiU9L9auxc0B~!}F!#%kMvx~XhYx1i5{*6RF&oTdl?y;X!3bb29bn`)ZSfbp(8wDF$(-%`It_6W`6;y#4F zK@&oQIy{b84J7bGedwLN;E?Ovpz;f>NQd315aJv1;dy#GmIt8*!1k_P2l?p279^!d zA)jHmXw$4rl@D4TyZ!f9%X#5AdV5()yEZt;oN-z)c}Jqz)uv)B_nc2NRihwTBm6dF z@;5&@pmwO_Rd;ctcJC)cp-=5$FPJoGIde=knp^AK++A^E6U~En$JOuP9*@42-mo^L z@*%i*xKe^}V|itarW??aGn1_+%OG$I zl54+^CMZPl0o$L0rOF@zH7x1pC+!`%avcu5B1^+uYh=( zXwYL%q55g5JG1DY$Zrot1%W(quO23OR^0@L#cxCy^ zAFx2<4bUab&q%k=E}#^fA1YE#;`1m0y}5@6ig|@$KQ-mk$N6P@S&JnaFX3M)NAmY0 z!ji(GB)pWmvT(P{3nU&ctCshzi(gKC12CGlTzsx!9;?VTAL`75h(69w@z+N_w_x@) z39@iM@C{26Kl(-R{t^E8Mbuq}WgCTtqrwBysG?c6OA@Joe`JNA6H7?lBI$NzfU%|( za65rPNFgo#ysS{n?Ph0MN*F7f} zf2aZA18#u+`IiKQGe@h=D+L zFW7{qZFP**dD&CIsPC^oma#?+bPpb!b~usI<7mv~a`mQvm@&H3z`$J?u;O*OD=>WY z8yqShvDrC;RN!wq5N+>1=rx+Yu^4h={Tw1r&j{Tx0@A(OyaRr)5-@CNMqIJFhOXwB z^iLycZI`+J-dnCN404CP<@+RFKeb6Y>TbZfDbyk~Jam#w!_`v{&kYE-HbAqeS3GIK zz)(vaoU+UgB7JPlCDpq#ki)|a(}%}Cv!KSAt~+EiPeYXhI;dXU3|-aSJUiqD>5ET~ zc;J7l=ju3?Gd99NrwJ-#q*LvFJ zyF3sVZlA>ouuuzLFE(9?=I%x5d7hrKFL81=W{$M0lg;A$%niMDI_*IkaNm%MKLQ#c ziR)cO#w|=rKG5fhjWY}*CH?QF>m@OiWh+lyrB!^{B31tv$y-;&PRiuV&7;mruc@(L zLXr(Q&+Ym}WBPkaiVA-UCoArHAi23!RLmMIMp!w4Zf2!7Cp-4ozK&`FH9d!M)(J~> z8~OM4i=qId$E0=(^>scJ9`=WM$1Jeh@CfX6R*#RiU*$!t6mJn@EH6DSX&0=o9U|v= z@zD=_I^6(r(Zc{kxO=t z>>(;JQ^kGmQ$Q|eY*JcrdsV@c_KCjX&9WruxaWClalI{`hAqyR++Z>-`_vINRaB6N zvVasQt_MQ9=7rmNX{<>|+M;D8#gORyHf|WD1n1iw!d}E#xQVZj(7{9pQK1XBXRH9d+ z_TTnd-vQ-(z{%E)`D|owzwh!AJBRPun(Z%)%{<1z9i}q zv}fNw*}b%2lURbt4C~0-TAvbaZEcA5Mw7_RjVkN=h5oYXY>0$mi{dC zbP{dC0ycxwY2$GuX-K~|e_zfxwmcrN8I$QAPGBxgn_<+$!J58?ZPy2RoHwD!SXMHD zcKS5y=o!hK;9h6G=~q+OIiHgY!vU4JvHx+VU4~%_(Kv$ES>uJ%UxEVqVSR!Q*GSTB zr(Z5Sn`87e1(4N)q>bgpoV-e86Gudel})_2Q} zXn*gUI>*3XNO=vwG^bflG2ysMv<0>oWAnp#5X|Xa=q^_c30B1j?M}+4Dw; zbw&$1L;Fqkoi%QhlN2H#j3k-2scKM*oc9P*aMt6sS7bO9zoZKVBdbcR-=2tl z2uAi)LW5=5;As2U#PvwrMX}t1Es31Pd{I=7#(pW4xSTN) z72UkD{Al|6U#<54>8}!9l&5LY!N4l1z`#iV2ND2G<_@Or?xVW!KKje)LgRYdEe`~n za{Cgpa1hNrMzV15YbH^Iu=KYnI$j|dVm?jzj+D(5r4-Z-KQ$;@&e#vHy0_oFh0w*7PwYQ(nNL zQT!p#h;Nb!=?wChS%(egLM1|`pUpS_kpaZP+A0I8PU|XzdYAA>Y`3z=9|D`=4Yvdf z(^w9g#n~rC-|`z8jrX95^o9@xJ;0go=JkPqge)V59CyucKBve+%6s>tPY??XXftXH z4EOW7y<5Y}yfwCq>H!*JQU1A%y@Wx8JE}pUP1>kR$PybBz_vZAK3Q%$`V1E)60zU!5bgbaJ|DRo@0398DjMJ)BhR zxY0NZeGTQZILxK4^LSE0LeACkr*WXzRj`*Amskm}O2eAM63@iqF4$vtx4V_sY-IXZ zq0^Ws!}ay{?>{Yd{;MmG+bWF}_zocdhaZ0C8i~l<5z`hFTwBu`E7*x;3W8Qn%O$op z*w%OLkIrlJ+dcG{TidfEqOhu*tTP*1o9>#<{xq#Mb&$=3L+11Kbrn55KkEP#{)@ke zUTsegPnUlYyu4tsd9WTzA|XGtxQQXw3hIyHou6H{Pu)+eT82 z_>s7)hf^o=^@{5RyrG3#QNeCaWvP)hD!!RyxNlyw3hlu$_b>-dKN`hsa%3~KPe6Wd z#lE8)>Rn*NhoS+Sb=O;B36v>FLds;y0h+F7EO@=p&xi>j=7b6si7SACLSUb|pVu`j z%*^o_=3ZKJQWeV8C?BojUf9qoJra&5=uhz6#vAwC>BA0mvvtb>W&_-Sz};8nfUcfw zWfvSOK@1Z4V)-#A?oEQ-U}=QopQI26;ZdZPrhaalsrV6mZi(WEw93=H#(84d+9a$A zCWq2#nduC{8W%>AjX=O;UM5PGq5jtuZd|q$Te)--35YG_JOY^?fT-(P5*H_fPrtAk z9cy~9X&_B|$Z=Iq^ulX0b*E5HL7PqSAs6G#o!Z#9ZGtYwZVxiLzhAzRm`niwse*vV z#wF2tQ(*}pMs{d3T=9qr7T0i z{g^n#eDf^cEyv`-Qljrw-uplx{>3Vtg{|y59aA+XToHuIhr|945}L0fJd4h!K~q^0 zrh?2=QgvLJJ0&Q{nuQz2Cu}vOi4>FHu_K>trPe7CdD5c0wp*s2QHz^C0(nU9rJGoZ_HYLWSP z!5pl&tz+D`GYC7yx1@cV2Z{HNct8jW`wWv>0mml=@yfIML;hF+_RqN+YtC1KA4VnQ z9x^4HX89=n6l8RGX6Uz|}3}pD^|JoalPXS`lS+w83DR8~= zY?sco6`STR5q64hK>?X##=AY7eX!CMNQ6tLkq-%DPj}ywS6aHtG_7RF^9q8K_V3u8 zKhu)FC>ORWZa?0Gr23VC!Ug72!Dl5J1LoWETOjn^(ty-@-tZvunI2D=A*bPPmE)5S z5I>N9&P5QezEurWI2eCvukDaPznBQeb86IO4gT<>Lq$8|%~r~i>J&YF3>#9mduI%k zJE(ZsRPf0mTzbY06g#+v+bnoPgU7q&_R527Coun7B)Qy$>K?ELw_p_W(kgxAoyNx=`*P^qLO5`Xvq^d7{%-g_3h#fU zIJ-^a372&%BBop(7qpfdC?z~jsj@GB@cjjIY0vT8uP5}6HuS6dJ`3TGAGwfhZLkRL z{v-+fHX@0Gv$W=@+`$7Duh_X3Q`TUy5P-IZ<9Pie%=YhspF(l;-~Nz5bQEc>z{djv4PZX0>%?dr zlnZtNIdf}4v&KCX9cCHnA8-2^6_-Em?1P3H?B4PEzrFo?a;)r^IN*Msf#|zfTn8i( zAk{@wP&f#1;<+voMuw2jJ=M8g&7E4Dp3t@6;aC`#^;{v*x&MJ)ROroCHB5jJg6u)( zWDOE*ZpbPRGPH57Jun;CWD`jI4zIy0A$kt{i}}_&MNLxI7DFwlzMaKqN3_#sC60@h znh2}J3p*7jWNB(zIe}#pELs#lXu!g7B|cnUJzict_-|R2)e9hLq~L`@vYLo!5SeD<>ZBH6x+RWZqJ`fFgcusH~^6gY-ZmnGs% zVOP-v_g`_@*WxR#=#Gah4?uSqH{_*)4S!15N}ohFm>~9c#UTv>)IuvX!VLt!a*df3*x34?V(x>*{SoAef zG_8ktiF)2BTelGBv7~@SF*=<|`!M$evp7691z09?@|V|5WU^hp2!0J8o5aaD7zZ%F zd)uO!Uu5C(cR?{At@zES_5Wh<61$x$lw5XX-%~0yyW_kf0%EA8J>6rpB)@$XMLCt< zS0*5tbq5O^R_LFizILFi!vDy_o_BnR-g;&kE11Ry5Dt`2;)O$Rtr5qBZZ#x#sEumw z{Chq|L)8Osy&j6vF${zgfcHk za>QyaeVi`q02dEnf;3-x8cZG5>lg@Wzw%WEgWG(nLPO%$f}3=@eDe$-%@40?Cz9M! zG|KC{Q#B@0`(OxBmgEmF>+6JN@ecO%B4!!N*?q@xIV8{gFQq>PIiieVW~0s9Bf0L{OJ&NBA`WRz)Z20Kuh zoZcwMM56}yynv!mcmmzS8dM!gg;=6Kd3dh|Sx+)N16`hr4#xAB{Isr+kC@-C>=X-6 zJfaXubq#JwOwPuEhORo07r+^K;+kW4;7v$fk6XbD+2(1^@x-GU?3nM8C{FYmAVX;v z3}0UesCA<|=}Eg+V$s-^9JS`#RT<(Hj&6{jw0Gxi{-scov$&4($UTLJ<+D^S9H*Qq zS%3E)q+xnv*cqBre`t-Tg0zR4i^;K${&BCI(hpT%lU4%l=8-cwZo4OfoIe<=G|!s~ zn@!1mRVdk-TwSG3=jhlur1h$Lc9tS(q|&blj62-_OBJtYXqcMcM*{WKN#W43z?;as zpj@=#elYU#V1_*7z9t~=UoW=k_!>BkwZeWVc(IQY>8QRpIbwOcr`9||fijEkbGHsW z1_yW;aRiF(uOW1YR$_DE6wN*;P+)x5p=LC9nE!mQk>_ z;h$FegtM;ZI)NU)p5L5!sp+Kqb3Uw1a4D|+)NWX{-h6d0^_d#?qc)+tJo|4Ck9|=E z&DR`ukL(@K9F2Z@@yykN^88n%Hi9xBflAVWM@gH^Vf96i{WsNY$M$N1Q3Tg>I&1e| z4Rv2v(iqfzX5oKG3_`Kn+*9;h*4jpHcw=JmOSIQeBp=3BTnDvr{<;6 zWG2l}1@S{qb#WN>5YOHoAl*a&*!I=#&U_ky5xg?_d1EGn1Ir>XqU} ztC)UO~zE5C|CjXbTu%UkU~cT}+iZL3eVhLTPF6c}*rM7qnWZF^yu*$|Ufb znC6XN!O$~M-(F1p46P5dyacA6%mnR5LmGjE^9uZdX7Ik4~G+BRQ!vzc8gw13Q_wN02##fOwj(}q+_Fc z*Cbo|ht1Rfy~q!-FC*U01XoO^rtvc%4FsbRBA=Y!G4SmtTrL{aEF;g~I+=|jqtyY3 z`@!4s2kNBxpn*5_hrGgRY4m4z9~UUDcAJjk?RV%8O23~n96)&fz^~-Ixpl4CYY*OmLO}9!hpJrGWHAM+Q4xou@@nYdotqp;01} zV60{Ms(ZF!hvU$oNA5lazQ?zcW1A55cWzLV*nWH!Y5zAxj{sFQoTdy5dvLzhX=qvd%KG9y;TVjA{wLKfD)*W0SYOjPy#0 zc>n#dO`fvVq5lZ&#q?Z&DZLSA8B)>{{|d|R5i0}AfhNMusD>yR-(uPDt&~oVYqNu5 zARRw*zJKCzM-?;@KPyX&@fkeNTN%I&eusGb6PLhTPhW|?(7#{+yY$FV+PL9G?b z#csvXWCfD^(PRp&Izy#fSw}~i~_B|?6q+$pwzEis*DCMO# zLX0SR`&}=e{Y>5Gd9i--=x!$Y@gl_0aeq8R|K)$bjg%;KJ8ubQKS~BYr_lsGr&hGT z?&gy~kYBUwOD9Ls1qIA$yJUuZf4&tHHll!M*1ARS{hjC@*sCx&rKur1M%OFG)TcID z<6<;eqdDz5(V%*(*Q*rsQ~%r3uf2bCSEKlty$gxlFSk}$5YDPMT3DVwxiNaZhJ*YX z4CxS8qx@J~C*wUDVK+`#*MlE-=Re(i3JA8Z$6?<)3yU#Pe!T#&ngMVq)z2(ybW*J4 z`(#9FEcLtObX9C&**)%yYzHk`!x{m-WT?^h#kadmrgt0r6u;-Z^`w7f*`{lXo$UoSK6Pf z)#H(PJ&yF~#C8C7*1FvoMmtf*)A>RvDJsL-_R99sBCeD3)UPU~mW#_vhwBNI@5d^L zTcf#Ak9ydsWRdoo*Vpg2PITA~k~-$_zAAATPFPLhWLiVy3<$zcP{ zjkd^~-*jI^e%lB*o{^JBEO!oP6S-LTJjmoJy_mgYWnln(8mG-Ah8+_G#dZVvu~xx1CqrhxxXcuG6SjG zhx|se%>h7R_&1>sY}3I28#6xyfg z4{1QGMOGx-hEVTNvS0dVR^^o|TeIVGAD}cSs?UhUMl2xFnq6_As!lxLi1G(7A3|Ro zA|s;2L<*{cj|i_X*ctuneQClXM+w@5=9k`CbDf;pZnf!gV}$eGCPH7yUe7a;uMz@g zfdU|fq;K-)%k`5ZfLM6`M*Ll7Fp={eDv>poDz!yi8Hqg#FEFNn_PHyP^~Ol6H=S!16219yw?Ek}zb9*|9f z7Ur?ZZZZ+}Ut$$Bh00`BWH1J$MjDPM;D5AJaj>da(`!qFQ_)GLlR@NE!l+k0zQP({ zw76)ZwQ#aZPg_dG_{LN&j0DIUklcro+12~fl+A|M#;5W%7cMjhr$Te!aVkHJDUbN# z^ibiArl@>)bgM^aV|OpKL>fs;0NUlh6-S3LaaS-HS5(-nMlP!qrhcWzyR)#RwPxkX zBib1hu{Xbe=dbha-u8K%t#wp#H7O!uySVUTbuKo<^irq%a{=A1SVCtlYYJ^!KbMO* zeWymwOd{JOsTC(eV+_SwncI!L1WObJ`2w0}ggQsmJ8gaSs~`3iEN8*l2EMoBi>Y%y z53gz-Xc|%brJdL*v3g?CL>yoQ^Bks2fZp74n`dwiMHr zIeoOWDW^e4Ri$*~X;`tu1;ldINavmjA^oL_Q)VgE8WGyenp+Z3{naqBH$+~*dc_#c zTnJH>T9d|ot!G~wnua-Rz`(w$)R7jM>n`t~bu`TdLN6GnWiGmJ9{h{jKD~5@eO5?5 zy!uDjfv3awz(Oq%y>NZ~-O1a&URVYOJ0xp%;Lm>WCuyRfQF88O6QHfP|JcC8uH0^W z(zuXTOgel9(Z!_blQpBT5G+O)-#+tDGCiRoJ9#Yzy`0h6h^Xj6p&Sc8ZpHkXmM*Z= zlA)NGdX0#e9~kX#xaoB$FgaB2OU64irF3fY5x52SQa~Mq!U<>o9m>m{3(_*r+j53; z_Q_&~o@XbQvmvZt2k7l^zaTA3?hol7MJ~y@4H{mYY8oMhX(}i=X4?hJpWab>*dyuc z)Xl38xui!(^L%=N(DO!MSEnhU z(3Wv4qaenS#`1>AiLsA4+Ww1YERN8UBR9sn}&=N-O;&hUt5{$+lRGyRH(_kl>P4Hx>tu$k1DEswc zfG14BdqnlEln~Ife5Y@Mt7#;vSqSEYdZ03EO1K6gv$(L&nqXW>U|bDZ<(X&An$r_W z)r4+G#iD-O1H7mMGGC1N6eQ$b(WIX_L-B}8ONVKS^WTaNaJnA%DPCDcekZy)nIxgH zcDln2t5nvcdru4_9r12>5Kz-x3OL4+jYW+R3PMozzu?Hi@`>q6z8flNi2b04{8wUw zGmH>&imGLSMm0#|-F_j0^`~CE;y`5{>mUo_gnplg0_acR`&M;Fnx)l43Np4tI+T0b z3GZbH!u1{!#R4cnzu39_uy@OhQYb%aNNNs7Kh&+h> zc@slLT_M!ZWJN>78#C17C0d&NtN%uE68{uj;)f#JM0OKCwh&kZ@2b zTu$=^Takb3!~#-f6O~5Z^zBd9kq!ejzuIY%l}KWd`jAc1Pta?8giS?ygabf2z5$rtSYMyb;|!_biz;H@ZF2P-+?n_2!iL4f zSRK(xNW-8?K^Nb0Nn6;@FBpRTR2=K1f1aoN73fHotvQG-jJ=82|8!o^s*@HxCw^3y z{NZfHz5a)RmbGB+bJqJ~`>pTkO>y?)q$m=+c1ZZx6q3OyWve#{KQ|YXI{}EpE~O+$ zMjMI>D`B%J^>vGr?ufi0yE2}pXWlz5+afqQ{)P+Rt02W~G&=*jclmBKSkhzJi{4z+LgVE62MewxGsPL?n-&aSV+WV7$wKp_(0rl$O$a~V~ z`!=I_Qk~4M;8w5p(3_YK00$7m?S+yC$Vg!bP2&@r+EP;lXpHe~F)zUjQ|%p~E6F{F ziHxEx>zL}OF5}Fna-T&|H5MK;`bor}YK5KPLr-Q?l~?3({lV5r%Uypp*;rs~S>-Cv zQkaQ;@an)=vQ)rsn-=#IaI8_FR@pRNzm?h2GLOKR<65Ew8xA{ZA*J;J|_BD!gx7B-?skA&*h7v?he)~3Mw7lY*Z}@Oe3!Ub*L~$FD zBWKI;(=H>m)}~ziO%_0xtST;V=jn{ON^bjRyI=}m;9;rUU_fERyZ%y2q2Pr+K}+yr zhV)&uWK>;l)7wcHZ#iWhX9|9qXvHBhps&idNh6oj3@-zZd<=X@PfoD34a;27wbmli zOM)FP(c>9GneP%m`CBpNpk{bIf5voILwA&ydJ%s+>h(L3bUg6QyIMB$KWL!HOSu8l z<+t>c8?p_aa-a1e?{>dw#J2o%@AuGI#b=xQ+Yuz2WDRC1&EdG2b0(oT5nWp!Cg_%! z-d>V(QflCklNBe@@+S^YE2i*w6|cCK!cYa4Kol$VrfX`5;##cIJVLu!ZirSZ z?OHI>#H4na2?5Xpm4PYlp|8hnmQ!Z}VT~ye)`Gc8Wv?@6?b8QYpn1bWg%yyHJ9oeF z{YDbncqkJq0NObHh7;O&oELg$fSXdFcvs&?W3Ypjc8?#SFZLQ9Dkr7-lIB?`P(@W5ymf9n5mz8wteLac2MGHrSz^LWM=KQdr^+33dTcLwBOQ8WK)GHzG+dm$-M`Gk z2lhz9Xr5?yo^&3X8RVt{qU!y@N3i!2KK2ffvBtFa2`tm~K>kN*4z2RQQ6hnHZ zFmNitYY7>a9{-i>Bk!fJkjLMn)L6+($T@bQ7c&EJoE zfx9>{kpCuN->G5&Y?4G3Ff{zYkuV&_nf!}4zFUL%Hon_{2s?&ai3mH6T8kg~0D!4x z>{;1`j-b?zF#gtBz>^h$?FRE6$vG7rREF3f7wpqVGZD1B(+zt)Cz8;Gxt|rgB9`vr zR%gpH?h495!cJJ~$<+FRYrqxr?;oy4LUA@W6tf?GER~C|^)M86BAJBYa@CTK*asGF zSahIm0d?!0kjy8>%^TO!mT<78AuuJ)Do_JIRiR*W8~LHDY6hWgB}?Bx7BYrZPgRUm z{d2}%CtwYLnY$&ucq%pA%xv+2px4{_bAr$cH5AO=sbqqg>+A8e@Wir`Qm3>uA}uV` zLt!qbw%El5qU{IuCx3Q2!LLH5P`?#v;SGmhPHDb&_{zKO86wH2aM2G87QkLQ{m&|9 zen%#itnv03MzZjl3b>)*JVK#6X+h{Pl#>XHDtpHG8mh*K{igOgP##~b=Z8SI83DI~ zSX3w(Y03lZwKuCLcfIRZq-yAL*fnQZMcZi+%G(bPe2U(2_#N`FyMwT6e)vDs@H-Xo ze-hFAh{>k~Wh(>mF3sSbuz_>e*tLjnO@xN~Bwn#lk16F&rX|u_iGuqCexu}T)UzeV z0>R+7n2)i*eo$wSzM%qfh{9{8Dfc64h_af}zZ5UwiTZIPJZRa)z=vc`PmfOI%0Ol7BGL=Qqb!{4 zX&?;Z@s5lauh`HoG(!ezI;uZRT_h#P2O{ieJe;a1IhQazpGH&qBGXkFA(<0ih#ODn zzY004hJ7>(Wfsba4bn`banlash`lRHlj2mV^wxIpZDa1bN0CqB|JTPDYHgDq0P)}d zAs8?SFvkCbBL?GKMH-#Exx;VYdU~3JNA>j0P?A`dtycYFzS&joJgm64Z71 zW)TAe6?z0;5>?UkJjMU%! zFe<}3GYOxv*R*fg<87m>TO8IzI{q4pRIOz) z^tyYyq`s$1O1Y_6!ndLHQ%sU7MoF>PDL*azDI?SHsM^WBV?bH&;DqjySq zxE!gTZ=xOx0g1k=XfFlpMduW3h0??xO5|(7CYX!D#@|Ba8XnKNt?bp#da|@h+u5%@ z$&w$|K~qd&YalHevp$O@nZwj%Ys7JDp=qL#r<5E6;C7Xdh(t;ybatMU9&%z)_#!Uh zstQB;sS59ROC}=^%ONk%&p|~)?Oli=w@$^81O8td{iOSe|1c-#nQmsVZK~cW<<71X zeja1`iwYL)&H>D{JQB4t`WKA&kdUP+9(CorPT&iHUf>bI0<)t+j$F`;n7O-5Ba)hf z5h;5xfV7ka{##)vJ7>a*{Go)JIKx+|q&IUK2!F)yeuUS1h+~rI>9y+Vr4qkk_%M%( z6E;sZ&nl?~pF{9vZ6@SDKj-~38f|LiCKK=-@%xBH`ByM9wzaEs5D#D8bD;k?|NeE9 z0hJQnt(kvI&*%l4YvUX*Rwhf8SAmc&R8jmZ0qp-OYg+Z8W|~4E;;%yxwTA@CRsRiq+s+67`=a#zOqtQ_cQpZ^OE{lne8hp zi!p`{b?NQJSm{uTl6A{^9V<>=%NswIoQ%Kg>%9s;%_vY!h!5g8Adcp5a9XwCYFNNQO^sX` z@yIrLEH)JL_)OGjNIvxUz|^5<7YBW*E^k7@Z8g}cU9VpGD%2U_I~A@0{_Z_c3b-eo zcM1(4v$ZIdI%5v~6Q$d`hwK%7rHbcfB1awwX;qhcgtFyUMsd-2&ElXBB{-1?N)_!(s}oadVx%jB z49I@?Nv2XT_96Ngt>*D&+x3AvFp}f?_p_mB%&nE}He*<(eL(owHGB$XYv!H5j+y0nx76su-O6e>m&fv7)^jtnhY{Py=24BheId!TT~M zh!s7&bFr7=j>DD>mmG0Hsx9TKY$>u!)wWuxI=H6_4`U_pC8@UU_@+zU)4dld92fa~ zQ8@OA2q(Nwi0y|$-noFm(QL`vOQy!e6a_aG3UNI}%J z%4VqZ$mjR7kE#N@Cjd6JgLJ``P4T~Z@l1wC?Vr|m+$>BK3ck40Z^JRa{H^BgpCop> zvg`Tz`yw6&zfEyCxEoSfve&sSn^Y_f7a1mBwOXzvO9Xg!9X!YY#ZnGr^{2lItm%Xu zwdN}^HuaMqTYH^5iWM*j9$lB}*ZbPwDMnu?>IBF3EvNLCSj#6=Reu<6myWHPcKSZB zEG??*`CesduIZ+NRwZlmREGJ^?d}beOM8bi2BNdmENSB#BK29;lM{w|eIe#(@h8f* z82ysqqjH1l9zC>y%z)_a3g%R9k%hY$=7}x}U_`+zz2ts27CrS>^G`)kd;p2~KVC34*zCr9;_c z|E2x|?@!S!Y*x9Em0oiFX8@v;B1KRwqLi(mmaTTLg$p0REzB(%mJ+~H%dSqSMRE4L zwu#$Rcu5f{d|bjggJu~~IP51*1~aTkh|BUZ;V>U2&1k@`cF|VD*=MRVqwq}Eq_)3h zX=#qdU$!6RzkIxQ!RRZYp^^22TyOc)=qXKmHa+Hy`CVEZ#~VZCAR4HgAd)4 z$2H}wwh4;OJOM6prmNBrblIiw9}1*-9zOc4Wl<5UDI%{Oc2(=7Z?*AVN3=)i}3tnL#ZO z)Fag&7Q1x&6U`=|-9GQgf53Xou}1g=%F=|PP88cd4OiCwMubUPrqLqXVHQ7gnx>X4 zq&5W*u!_I+n4T{4N<^R9w4Hn@zMLtaOlj(|cKd7Qtz}QAOw}-Q7>@_QJzvRCyxlM2 zFNK)8A65u@hZ6)0tq_HaC~I60aij?!GZ}OyRc-zYm?kR!D!{ETbS~nEE!7oZ7*$Ii z`be9V+v}FE@0?`Qqxx_C&s*}oPd{brjoBt%vMaZ}!uhpBXEfo)wnd zMR!v647DbhYUXg@Us!pVhV2%H*tNdbgx3Alae<)KZ)Zkj1LYT4d%hxnXjMd>p@9PB zn9m=01dEn5J=&D6%jiAv3PnNnCn)9z>~x-%3yOS(@~da9iS-N5#S>hAr(|6fVD1^CH(Kj;FM_Q2ck+OJr0CF;g9`|p}61~M2_5ge~$xjC()KEx| zqq)0FJ|N+G{)Gh4Ihnivp47Ny|2@9H@*Wf*bJFwd1nM7ol5y8L@qe)bU6*{%W)d=< zz@Kek9=exTzaIv{vtuPtU$9IXYywdu!&1G(7TB|gVTS|Idt=k!gzXr6Or>9q>ya%2 z8^lIwCFjOLixxVaGnbhrIwx;0QL~T&mG`QBxo4NuSY$2U2>KL5P25z$vnV&AcqnJ@ zmVr^W2UVQdtGF2~GiO9zy3n)Z&!!+D@s6{1IN|DhZ4$7od2`(YA9c z$en+VHa>G~6U<3FCu@QDij|3d__7=qWmAfQHeI}v+w6&fCcZ`)fgZcv9|=DmH~;!| zkVQDJ6XDY8hq|Kdobl@D?OI@=eAgTYdrCnaPfLkETFI*rnFIK(Df0M4W8l5J|( zP>T%aZB2`hGT()+6S`Q32k58!R#I7moLMe+upWk&@t-*;Z!eFTpKa8#?haus>|7(9 z$4cyE{Miaqa`<^8Ct))=E1TYk; z{=#(Q?FI3I`X}ZPOPpozFVW?2k7w_Kq`4oj=>=oVr|&;L zgJ*@)wshIJ#w`?77LsJ7`85v#0I{ChNQ`T-Y9u^SWzMF#pvV;ZnDrncV zXuM%?=38aXK;4r9;C9aQ6S`z<$q!Vlc4B^Ue36sBQ_kw_P>j%s+QB|{MQ}w9S12*WP%b@j z*7$+2UKSLj?FPs8zzkky=?b1j2Uo+vn`H$DjYOJ|kC&XY7BAEm6Z!gVZ-H4#D@^I! zPMZquc30a2V4nD7k;o!!BT1axjxTx_;xdL(rYV4HY;#@ZOM8Y-{L+P;Bii{x?{!!C zn6CONsC-Pl`pm4YfnKh}8YD1DJ5;cGrHy)vyM95E*Yt1hn1a5)=K97h?}*XPZiT?1qt&h$a1D6nkZ|g)yv3liIc#%B)303&gfPg(0;` zO}Zq8g;#wBd4?(B9{0W2Mw^c@Ys32%T1zG}hg?b%>CPgx>0hVUQc(paG4G%fM9 z#TeSX#G|zN@Qjw?I4C7hj2^MI^~kq2)cJ$-flYn%)b?#S^9?-NkZ zH#6;Sj;Ucp-)nj2g6A;m$_)AL>Clzt41ZbdNPMRdwk?~AvWVtRllS~5ev|88y97O< za&K&n!e_HH-dm%f7hgBR<@>EGIH&vkY&B-lKm-wV3tDuhj68gTZ_tREGComt!5QQ$ zO-1Zn(4b`~LSD9z{tcjY`SEW$yY1-#-9>2=URw%YKnth{U5ne;hrL@Gx z2<}u=R1p+!fn2J;JQ8RzB8itO??$u zh*LFLgq5_az%N9h&pKWoNIo12R@bg++0#r{!M{S7A3569KPypuDWlzaMC2b-1ycAb z@Ch~|B%|jmw;mRebr~_qf(=xA_nqiK~n53IBO0mwLuBZ@^Rk-T-gz z5JCcWruUD0o?AyPenkx=+E+K5$Cffk7K=XN_>-Yomg=fV(5xgt20RDw_520&O5az5 zK;9#q-UUNW2O`5S-8#rgbn}6`1*}AV>x~$)Vva#qIBTS;-70XL@%aFbiER)Z&#;g! z_2lCmb`>y1=ghwaN3VO)lhPyl?3e53LS;eGw^BQ=8!g4!p;q{=UicoaTeyDC#*O^K zAUo3e+kjv0p4HMldL$NLe+UF;n&$z+>q86x=RL71_w_qs!ONo(GuaL;>zYvWPN^9`shTcH;n;ia8%t8V(vk@i{3|6G|M!ITf zX`B!YPHJs$gVDaRY3jVetyI zP%TsP^q{7eKuG``WpR)Dd=jz30t97hb80uFr=>(@p%9)j#S$I~_H=*b^;8Ue)X5aS zI53Z_UO4&UoxJ@ccB4g_pcT|;EG!;@H3MyBVVZOm>1KFaHlaogcWj(v!1fF&Aa|Vo z9xCFVfU4;TDPDA|urD`x`o9rjeKAnGGfRN`B7t^Q5UT?&4~um-IQs*_oYr4UQ29TS5;T9$ zhNLLxxCN_u;t7U_HZvitng1SGK_0MP4l@5e(fWPh&P3b&({{)2`$Sju7589;YP%Y;c)&d(eUTFS z=5;;K*U0O@^`g(Oez5uDRlfuNp!0_B?ZjuUmv?PsEx`K@@+s*5S&s{WuVfG%fR6c= z58?%2`tw+byM{xB$m#C`szI<{D^%zi?OQef8xATsX3;td3bE@|lvH#>sKLn_(;6Vm zU>XsI-z6y{%fK9?_};z5B$z#&EOrFsg0?Bge@!%-|Fh{q<)G(xvJ>h70BZY|z%r^B zBq|J%LpdQsYb18`i_0ku2Lr!*moi-~WDEivbfP6wPod|XZy#vzR6>vLa-l)TsWhU4 z#s?lG7e1ojdBE!&3PJXOEffzDPb=JhBGY~=S${Aao}1ka&&Hbq{0py4G-Y}x#q_Dl zd_%Yxz_Kc1s1R1BKo1#`L1-L()rEQ$eG$P&5|0H~g$niVt5*Ap1brDMk|0Ct+eHBj z(IQJE!$L*i;-6$7$G^;Dvlx*)BAD$loC3&w{iH-YsXZhGdx52h(Q^n2q>&_4H^SP5 zq~H>w9VL@7PvZb_^oeO_d=mTFCueXL2n4(iD6W@@QY3^3`9KZzsq{nbc0%lt*2@?J zB=2+AphM4x3F@oIKCt#g%{J)`JpCh{#481cI;wMg{8{uBLVL%v>yk~ zda2t>l@b}X>y1+!`8{XGILe=BnWA=Hs%sgB=~K;!zlZe2R#X>n5!{Q}*b|@k0NBzvhxZ@Ej^w*=(YO%k9_D{CLtiyTPS8WMx~j|$ z+Ml&JbZY`3hz7Ow?h2iWlPA(XOY?xKB8h|Rn|hJE#dSSA@MZ&d%#sKBcaTH}Tq3iM z3?xdLc&w#;d|PuxYrk{!xb-^D>jpx@3#{(U1kriVAI?+;WDdb6KeFnlza7XB*!>{4 zWTQ0p>gIQx*Ff{}Ke&9O;YcOOk3baZ8LN?Ed;<9YryI!IZQ%j?u`r>52LdAhZ~PN~ z5*+}*Sw`bCq9d8y2OpNKt4A4zs;3=CmxM~d2e4_K<%I zUUduyZ#Xj13FhHG+lF)3r>Ifq@Cz;a69#cf&*+U$pw&`x!xdNQsgSSGim~9We`XY> z2%bS=EzDJdsr^i#D6;j6Fo4E%9a4P{j3~wKZH{g#_uvV^AuW&rR1VqDBiymRD-gCG zG=W?uo2*3}lG+<$w6~T9>|H$M-?uG6wR`+f6b`vzxl$7Qcu*L(VL_oxbOy)>^R2yX zT|v3KI#A4xOW>}Gk{g!gd6>w)GyJ`M43gtKxxlafVq+B|LX*wVIHsKQ6K z#ivML4!H?oUTZzKl~szSYD?Dz&f=vaQN^jMb8-cHg(ccXM28E@K)pa-(|B8WMG&^F z__vLuIYuh08W= zBju=T?`gP=2Hv;-I#qZm#1;J{2QQl8a!K2*$|C>T`6!7BA!Gp>B&2uF>{cD<+yO(aR;2ll@$BD}mC3O%_mKBqNOS(g5NK{Ez0UcJQ58!{a<0OJ$ah|pJmFs)( z6cKeVJ%y5Q)LGhVB?9B1X780Dz&@lyXRZd_AhruqA88@St$s5XP#@LVz>#9%$$M)$ z-CfVzYk9KT2E(n{GEe3=hLO~qjt0LT#B;b~`L}&qwSytWB4#prhX(x6L5n_}XRjTN zm)qF@BTEdo0N^#x)DitUAK2*t0&o)0)iDc_+EZ(*{uT=B=$=P5UpBp#m?);;%CGZ^-mpkN!S(J z2!E;+5|PoKB&TdZPlOOheg!cr27$s7QT~ksQFBkN8o(CBG1sCTDBAc$%}t!m`tV{= zR!|wTAqT_r^ZgdqAQ1%aU`=r6}UW(-jm{I)2buRh-{}n4nhCy{mt?6r`?$E%gR_7?#cJZ`m$V8j z8({8PVI&V1G$~gU%T+-RX(Hc2v)cut+Z{C)={Jy9{RL{GC;^7kEtj??(FX<+QfeB! z4i7K)tP&>rl`^q#P=Xy1>NgPGdH9&U&ym)#()|P#v#`m*lCtH!Q`>nWUJwKF8VT4J zCEmP|vwkY>z`J%9_pZ{|Dnb~ibJOB`0IE_JbkANA#U}*S^uGD${}j>0$>;ytxj<=j zS=a~r|5eZmzH)@RAFf;Ar;7d$)!p;*D=}&n6_9B2!*nB#n&m(I-ItQi1@i_$vq0D_ zf`%rBl2DOB69GrwiKELplxR=rtR(lPmL(+n^vH*(qBY!`4dm+6$gix1L!&UQHBRS$xI%PLOpNyI zGN#q8*ZJg1Tm^$yx|AsoauqX*20!?y>aE8oYW8?{x%aQ8POZvw%lUG3_iCnHB>=)$ zKdnDaxMTMX*sd9~XomSA`4z(0V9k#=9VDGd0w=DJO6mJmg>ZD3#F{V zTMhTkocOm-5c*ry4cG4d0ETcb$nRruo`6c7DV7J0>D<04>u;)|DeDi^CPuj+hdVDy z0x_*1;3khSgQESoADERfL_jdl9)PGFigSYXyLE^h-LnENO+fJ5m7kU#3}esV>DC4l zV-M}(s?gTy4fO#Am2XNe??{d_AJZiq3U$7FZUkk`0gaSAP=;FQYJd+-LI#4WaO475 z7(oO_o?3_%%lJ2xqaIwrIH6Nn`2)~6bQ~4gSRO2MEf`g~5QIsb*b?m{ko-7QTmv#G zQ6R5cK$>M-5Ntz4Ml(L42QYIrnB)YZ3fUMan}j07y5MvsJ|Q?TGm53@H}HS5 z2xvd+L%2T-Ipu$MhdnQ7fMm620Ln4ecMjd_!M-{(gf%SEh+mvFEEptB(OTNxib%6{ z7*REswAs7h3RNk}Kh%u*1?M6fn~b-FMd*dJuKs-wC&2QQ{)*GD2wE)cZEj0i30R0~@ag00*pV$lYw_?c#s1 z+tqpK@|01!Y zVsAba$N^Dm1PHq*ynuvI`QRJe+1#UD7G{2&fn#-ln5i!haJPM!syz&kM>1U>uAthw zw^^1!80HcW-<)xIz*t+EK2OiYK`oWUK60S0Dr2AqxZ2GlqHfY$T`vz8=iC+(>)O^1 z2Q%v&O9JMJyfYjuyfox9?y8*SB^Djec1{x=2~UsKz=s@5W@~emkHjRZGgPz*5Z-%& z4t|iMq2bOyAp{2xEG7^8ov{>~4eV4NbUP zRst7O*#V{c7A*#*r;1x?7V%m8o)g=4>Z}Gw3du z8a(w39F?bM#gYn zwLy<)ns1%9gG5lsI+f3)VymY~IZk|tbri6U-jmtsZLDUeT+<8BI37|}^B{q+8X-Yq z^KdbKRkp1NaL!JGcc%SP$-*iHlw#m_%tvFQ(yI#~fCbzJW@jQJ%hMnVI^o|b$QrBU zk*;y`TkG2Wt}$+tFCkH>#$7U31gkc+o<%s>N#MG|yl>ye;Z-mQaX;chaXWf?fg)S_ z7MYRM6@v`+)6zpvwif9|>n&slX!8|L4XtC6z$8Xo2`JfC6iS2fGK4R>i2=1A1Ypp0 zE{il1a2)@>ssG2ODssDO6GFg8rPZ+XjrI5XuG6(#{K8wB>e%LqHqSNWX&8g@*a89V zpZwBt$`}dA9AgPAHL6<5dfCYF-Y0F=)GbsW8Il(^_~~)B{o|wPZd5|?clizZl9G3u4pTCvq@qGH)F>%tHlhYu*H0!x?XyaN)U0I_FdF7?Y&SWdV)6^wt6g$4j zqrSMKCjZ!3vGLO@xV4iz{BpbELikGCkeg9ZFqp|Ahq4;KndR_?Z95Y(Yj+;6pUdBMV_89_X?gi zdkyKsV{B6jiY|a9wPXJ%_EeOZN!1}}0Q(Iwll3CTxfEiUTGq?CqVixsFTy~yND=?!-ri@mBDh0YVTywN``5o4vfEz$9?*H~foDwiFl8GXJjgpG4UyrUV!<>IZP#2_(q zc2FC^2h_aG9ZHPoh~p#l9zCxgM}lsZEaXC^dCK?|$2`4YDanveRoOV`9xO4~?oA1n zbq_ol`ZjAMUFfkr;JHrSHhZ{bV(N?x?d^{^bP}^wb7erLh6{c=G~lF-IhUMRtHBX| zBXk_}`C&xMtS-=(he7akzg-rrDaCjhew6uwOJHPCb-cQ{7& z?r!QRAHFU1*}}mY@h)A!_wF~yf3{LfCXp}%Kj!*)KOYHD;=d!Z#Az55qyuW|X`1mV z+2%u#|7*)H@dMTU*!L&u!D9XVBs^NWX&3I+__*o=}4{PReo>HR#3 z_@`Kj96AVz@LVv7dZ)0BXXp_BwGe)bdj|jiO#MmGOuZ6M@e}}jb##CJAYO-|<cox7(A?-bQo2~-Zxk4RjZMd7!uZ3lOYE_#EW}dx>0rH^q>}}sJOuLPF1(CidbPwldzP;vZ zO%;LC&J1(%@vcrywT0^#us%UFn9$dSSA3T`=B4!-Cu_84>$qLk_;{q}gm~-w$TdJK z5pMwaam<=T4xC54Zo*Agc`$*#N2seCv!%`(xSZmzYjYkTJ%soYqOqs>Ha8%PPoV9` zKWQyJUm{|QIby1F<|z8sNY&O*m$bn^TJ>dMHWcE@pN>sq9l#MOPfst*^Op0R$0EMyurFYz=n{2*p4)aJtsszi1LB0NRLyRD|JrP9kw`&ndF1O5)27fOHK&B;IAO4q+xEM>c zFfp1)2=G5c|F;)iwk(T2~?1O*C6WJ=sJ(dB@)e-0F^6l1Z%f&vq;2}$R;+$VPA@TL@ z&$rAXj^mZcyrr--8;`PD{QH^o8gfZp&~B63KjsqAl7LAIM&s-52bj#CuV%dUd*K4h#$OZq^-4Ck zw*~Re+D7X919+oGW&!+jt|iNYIvn0fbg&~8t#mX`BI1w3f|;{P6^xOv4VG;=VjQq| zKisd;snuTd&2~7v8i)H@LIhLkz9|5`m2sBQqYA<}jdNz5WeUHS?c_dMKqX|p1&8mV z2in0GmVle>4Pc&TPVi;bVdHRmf4F=Wh^KeQ?ACfIqU*;D{h(cP3Rf&H_=qa0Gxu{c zpg6QiyvTypOs3`6G_9|YVX87*H|rCz5KnGlWc8pv&RD!n-f0Z49Eg8WT@=8#bdEsy z*j!atbI&L;nHXm+5>mv9iM1gM9y5>=gBgDjJ|bq*jdV5g$c$7uL?;&>hz7WB&e;ao ziRh2yvE+h8kDoM=CsWn>pQSyuqA8z>eAPAdg{kl&%cim4iCJpFdhj04BD?= zTcB7qV$3qloK&#jqa{T&nDCs;*if#z#hD;79TeFk{CC_U_v=M(&nyn{M*$!Qix0od z4M9f!*I|&TNLiGRM1N8#fa8WT;#W-dL0iKDcZnnp;XjB{N$+qctIRbE=>*+y9E?qf zEXPE&<+A$X7}~`ikk~%0q#vO%^W0b9E}lCo=97f2;i}vLWA^TB`^9?W`(-I#<>!5_ zo-Zh4XehIs(JdI9G;>JZSbQRpfyQt2)WNoZN?d}7Y3R|4Kb_1>s%O4FBJ24`+6oi!U= z3%cwwgY5(MP78XUE^umHTLr0^e~sf-s%)}%lMt<0Elsw1N>eIH!;k1>t8FVAHDO+WgT30J9yK55v7BGyttBIgmsPp`}6qYlig#}H~ za8}-+;&p|cJa`E*nA7s=IhiBU(n@?4KWnutsmMr{nXiXyOgK-Hc@?>?lf?|E&_P;q zSu3XuW|q*D~KQ^>pd7bFT}o5MCTrSU)(09Dr~v@Ma?oR$(4t?sab(#YL(Pu27nZ3d6gd$iQ5oWetY~7-a3XjmGh#m+sy9fM>oW z?X!TBSu+iNyeQuQ<+9MedUn`drLCYeN}J~JT}bqEML{X+F_9v;)fuW`vu!!o2rNIC z;%8Z9M6o%M0(8i_(^CEF!*Ab)SVay9HDC_KJC5wVs|Ce0+?O!vUqhOFB?Jez5Q225 z(J{WY98SRFjvWufEzd9g;Ca$`zN|{ck8*3o$zw`~>b8}{&K?!UD@sluJ%9Qv{8ev+ zYmbThW&0@0kO+TDSR0TZB4o>ea|e2HGD*!%OY9dUAO$SoRu|FQ0Wo)%-L?08WCDkh zuNu5lO^&3NB;Qf4Ttg{5rI?@= zIZTYC&}D%pD!Amx*d^Pk)r7E6MVcT$6em&QiuB?C1l;wbq<0uOnjb|+G{v}~9}hW= zdSH?QwCvWDr6fe{f@axie!}4TuvU7-NsXg!i0%B|69>yF6nJED2Vy{)kRn;QPJ0}p z=n;2DaHNvlun%}hHuJ)y6qA?g-BYGYqvsbl#t3A1LZmAeFH+OA<8uN<{h~C~<~}p+QQUiaFT-X(n5)(H zlfP|2&lb93VLkdO12BYg_idza2eb)G@UxIg@ra_iT@dr&W)8m!a%c98sQehrzZ4U` zasQX2brW@^rtA;4ef@Lj;&-9}8eXEG6htB@6+OW1z5Y+D;$&z9ahQs^5V|{4Nl=-r zOvX}dQP6Wf-q}Cb)G6C=!0>lpBtzPZzV{OW*6sex6-1zz)t<=l%qG|Krk9+V0O0!u zsgIl;rcQxMe~OlClWmd@N1D9by3o{Uc!Zj$x7Zua28DTYSx2}9$(hWcpxFD>du}Ju zQyg&Nkww)S5Od=ita_A1-Z)Q#hJ1uWoFprdRXHSfDnwXkOw8V_*`u3 zP7F(i!D|8Das1SD;<<3?K4D_5_oB1-SUi`%l#G<*60j96&pWc`YiOwXyF-EagY9p`pLF?>!z;}ncXY4u#ATQ9XO*+tY{vGJ z6x%LE->+o42p{Ur1>Lrsy%J+%-f96dOcAMOKM&Vd>i*f3P&WnoUyYScNMvGJwwgxZ zqS}x5V{899w}&d;DaVyDoPcjB5zCZZ8&jA+eF#b~<^mXf z`ZJjrj6Yyy)iK3pZPz}69nb(y8tNky{9N9ST*#x^mwZ)jUG;ws*z6J>z*9Z0Nr7bY zrsAW5E$U63Q;a-J9>LNt+grz`@iKj$(i+p#%B>L}&^)-s{CoQI37D+t%4IaBZLwJ# zN||f!X7;dfwFg~}(q+lH5BC;~t_%Pqm*0NZ%(#)w$?{{>ch_LA`@Lb5AwO@-r6g(94E;)IOee_;Ksn6}4OXuq-G;^e5PVPD$PuiZgQ% zKT-sw#9bkZ#I|!>z_j|Q8;T0*cQ^ZV(IT*PJhhmE=t+XJe*llFl~`4iST#BgJ?wZK zd=ZO_=|TX`RcBa)go3?@0|u{R)j!Wogzu2!7Y=vMvu>8eA{!8k*MrpO?M=7mM>4?2 z{bMVT=5274=O$Spu$y$7_-`uqBoxto6A}goUF5Els18YC0CNB^R7jNA8f_tn)=N@^ zejNxo?QiS^g-Ea0#gu;&Wh3@rB+Q0u)J8a0`XFJVXZy zy+1Ma1a$o=>U0JYW!{p4O38Rh^3+9Y4AQ%6Y|N>5&9%Y|pkNu1=iI=#DtIf37A*}8R*mdc%|$vS%L^u)^jpc#*pf<4 zi|kCgyoa8}-`NXO#?tz3IE`8sX(1cr_IbV`x-?hifW4UX^jkO|kbHO=p_S}mO1{(n z=nkLC7ACQ{3VNEF;y2cff7d{mj=x|XRUWYyv6+0T$vwXB_MlP8$!5n>)@>;k13ONk zwY74uw?ooH*b7WvRSp|b(!|1U>9+p<(ciL;2{!HIds9tSMpD-lFiLMs?C=UaI-sSh zwrd+?0mM*-Dsp?3Pf2r4XiwtJT{a7qQ;O(vvgCT4CSqI?(vWr$8iWR6fcw6GA8R{Y znCR-JSnEtoGV5x3Xv|DP*9=oV375*?KDheM+UTOjzv6sneLEl>em=R~;tQOmtJjD?*aI4)Lh9IZ9zI!UTFB;y1rtwH572oQjO`vup?AI zw&^lDNYt&4g0u7C`eZ8;}IWqD`%el*BMsr^JkH6&w-&ljq~Zg%RJ z0#Z-d;!klT?tljK3&?@_5t6t9S#iYh84CSZgIIB#Y8WD5LxzbVeC3E$CiyOZ?0N)@ zuupa3?V;tM#)0D~D|@KNRZT3W*BVu`BDtt~gU_9%fR}*b3PjQ9E!C_9lLAgO~INbk&N=xLhhBS&Z z<&woFIx$9QjQ-i0)#X2)GX{{EHoopTDMyO@8OF%bA2vgU)V=Owx}4o~vtquz}bwS7#@#z#*iv6Mu~EOd1ITIMn#9Xw~7}0RE7J zJ?OD*AaWu&0)A{3&`@XpXJq{R#1@yLQ}TkBTbuHR5B+f{W5j;G9{~8iTc^b@&6?QF z&g`$eGzf-lzWUb-Sg7YcUQ%tq-QzrputP-IQBnr<@$HF6h2_>se?%$V!gMG24m#ZO z_#y-TsW}YXt0j3iMBcSz?rBHtAGG67D9_BI_#;nFZ%22HniW^1C-iwG6!OKIf(d2;G@T;;P8gHVbMo0DJnHyKZ zMEoAP)SbU6Cvc04Laus#*$yY4g)w^seruy=UQjtCo}gCrm*-2b@bZ}XKMuwi#jY;Msyvt0WO}X z3~DA6lOjW(v0n{iWh&ze-HxZ=HrnoC@kJOpcnHH6NFeEUvt{Z_qhHt zx3||9G;KH`2F#H=VT?kOn$ks69GYW!Jt`r>A!$F&WG;(t)=?C<6*ENdiUeQJ6|L_aRFWteWODoKnvo4tsW14Oix-?*4+Jr#t5Twr0}RnA4;S-8^L6WCN0F z^BhlPO^&iu$GCuPT9G6}o47(lvzs>{6T^lcdssz2VMEb2n`pvBqb>mS8b z=D`C8ZOjLiQZkO|(UiXl^Cavn6<81=WWRhA(l4h-J`}(2>I3<^YfvLbha9e&c)} zu9;*20~KxI4p&t0+%RIrAxtMA%*X1UwF9ALtAGA4F5Iz0|M6T(P?i~LE_0v$*RO(3 zOiGz+;dfui=kZY!kU@4^#vv+63M%0{lc>;tUIqb@;3c^Gq4~KyjxsIzBSlTP($XNWSC5k;4}tcXYVQlXbTjmgxN3u3ldWXljcvnVpAk6a@cDlO=8!c zASrrj_eOTkrOSOTwQn+lk(gO+c%pZ(rbX3kbw;yzLdcL$q<8^}Set-kOC z$VN)17kL|RG2?ogfXC?3T;InZZg$yVAGQqatdVRB?xS_;PCwC6lKpD2Od#v>fgSwQ z^AOQ{6b#XN9^61d+u6hVl|?iqrbE7oR+Pf|6kUYY?w3&67azyCJ zg2MJb!>(P%@45x6z4<-)F=?#QQQomszPrgNvpPLJJx7PnH`1Mi()p-&b?smUXxuJ# zb*!;wq)*77E&ffgfCzEu4O*U*<$f20luv{WG>Fw86$H7Mu|VP4@BD;D_uVYwbtDx2^`3YLMFcy_s7joTofrL}MQqF?(#Dg8VAT5Rl>GgY_Ni2-BnuXM{ zP$zQje?eVoWdEi*e^PA4Pm1OEKPlGC(ZJX`(FP6azo%OQE=+*(eD0LYJeUyN2#!iguEf>@Q)TV+TI z$%=Rd%adIOu<^iwl>lxMD@4ij3u3Uk;%BwJ`lx5OXa1S)4pue0!}jvDX8dxD>g8G{ zmZ;O~ATvhCHAB3k@;zpfP|bS7elq3C1A-`}B4*f9e%!Y*do*e@}RPJADMSNVCFBY$CCczAAuDW=~f)eX*b!< z{9r4vag4v{ZqEqO9kni=NfD5AK%*-~MYlPm+YF2{J7CjuS}Zs%SFP^z72khlCpqXI z<%>D?VCp586sIlPUG|H|c?AB(`{pQ3ju{G$K;(qyrE7K@tPTpd%+8uWgU{rm+-i@Y zw^-cN0Gk+|6I0g`}|`qc4Dse z=9@2FK2@N0t~WX9D3p$%7X*glcQl4eC{8dY1t_tYNqCcz`4f3Q+f%%U7%Utj`XOx+ zjk`w{{6i2;A#P{(ia6j3YQ2Chmp^IuYg4+guZB66aO!lkmEjC_c1*7(kR<+!A$kJ! zcw!mrz-1QKXm`bU4#=+h$8W*Q9QrFQZ;cnvI)Rm_Q?}C!^U^k1H4Gy?eI4cj?Gyn0 zs(Fw>Vme@~@pV9)z?KkR#$V;-^IN3vP);drghW$*&%tlD5K#iWRZ>o2nwe5@iSzVf zvSeIohdzi>&f$Q!XZf$OjH3WvPpbWVJMdn+e#)1lAIFaTdOA3(Y@R13cfIQ z59Nh{6eOIS-|xD}!Bq>htaXlfsXS_f$+kCVQwUhBZQ%u9&fK zADb4gk((7Ym=cC5b--qqr*^j{#0wS*e+9E)as%)|(#m_aTGh+OB$)}U;T+i5}=H$xangkiM>M+DIWg?U*S{a~3Gl3{7} z;|&e~o25K8YA(W{v317(xJNKCx%B$eLI9(%#ZI@TV;_ThTbr&IFG;6kRs~)Nr!~i7 z?~jy62Dsf$`*b1s@QHL?r8KiRaHF-zTXOI=C92a)3%9nSjB>LKvhr&Au8Is6sc3X1 zY*aRZd680oAuOOYe@%&yPM!LcnK}?y%ZI>^GotA~c%}vDrU+(~W0JqSv%r$H!2-sz zB?b@VNEOZH7tM>qi{NQ9cJfRUf1SJr)Dz6H!^b0AGOT0K{hI4Fd^pLwUh1bGrXVfF z_a9~*A2i=gnO`r9P^c&F0SslIdsXVrVu#A}ltI$2s zv>5wL(_b1_GpH5LBas!!r0?{7hfl=e07P7OUkT2qJ8{8vWj@qsHTfY2-pk|>9*truOd zfz5_vlZ;xYhsT(of092Lt(E&!-Fl*t7?|oZ94$wk$otS)4-yI=V#9uszk)F)V4?Tk zRQ+=n#<^HsoHiu>e918F>{EV@%z?HQ3tx0L#P+XoEsJ`dTWO$ypKduceQ>dP9C0Eo zNoHC%5I`J$6tP+|{Q!F500$4qRzHX~@op$oKqQ~HPK7tLpvS+YC%D3T>Jz)VY+dQ3 z@C*yNE1NIziVE5C9drrf0wkOmke_HnT_74gdfEt_(?=*zJjo_=&wtP!gG|teEH4(6 z!Xs-WywDlEfizCHNfe9HP8PLGzdS`8>UB_l;4eoJE&GH9abD%=899O#JE}p}CCtvI z^#NuR<9mE!^(~gD94f3ilIRf6*1(INq{Cod0@`+v+vg)Q-xKf)i9a-yDn5Hew!tXr zS{!)rKvu%NBesMpFRcFhKf_gD)>kEQN>mWAW4G`J^-GQl6~@VLV~Gn5i31a7xf?5r z99dRo%rszqaGQRvj{b0E)Ajc^g`W5P(64WxZ_534y38#?p^T#U8hulsup zKhP!{V}-_e5xUq>_A_@wgHhqYIImqv22aT`){IfGMw}?^0n6FMtKC=Qe-#LZ|C~wy z3os%7Us+cj7gg4VVFU#vq#06Dx`s{x3F(k-k&=*Z7;(F^xjYjE=0;LhH*HA*{0Gr{Id0lh zq~_~~{T^KE7S=@_J)Rlad&2W(y!b9Tq73fGPrSp`QzN);CD9X8`NuRqB$%XVf*d>+ zYL2(aqhV2t6CEU!UbxG3ADrD~fW(d~Bj_PY3uDSoKht%~8nETf+gWn9g4XKG(8h-c zHQxK_vmmCl#}d!dLm`YPQ<}DAU-h0Gk$3P5P|W`WFV*Zc#FgLetIzqkpcS`+xC%bW zA=<|SR{Px=LlOho?QDDVtg@N`d$BJqJCry>bLNkP^a6H5zbq}5@F~RwTPH`@conuR zY|`DX=xfozJx7?W69+nl&_lyH$_IBZ0}o=UZV5=biacf{n&x6css0$)tEe6q$!bsd z3Rf4LTCd&f7yjdze9%C-BHU2XG|2@KzWmRQA(zNska}7_XqAZ$A*=7}4-iIP` zSoYNJW>xU#S_~2;Y5E|Nd=OrN;m-Q}U6O4o)oDHZX%0on0=o9g0<&ZsI9$ko8xA=Q z>fyle%ZFmVrZBxL=s35|RZ%RT1tR+An|<%S_#F};?yo%yoX40LFapAda$Y4K&Cs_s zGwMvZR7_0~^a0{f&LG6i>=$osz2T`YLuyH&fRzN^lqcW~==r>oqaKb(!LJsQu5H7Q zyBB9h2nsR_M+>fdb~k87rM8WrXP01l5Me$OA|8lCYmd_19q?-*ZDe2_9C@McsphHe zuI)ZCHKA5Y<$H23P#=2ugj(dF{Q0FWf6G)kNtVr72riez$N|e`zUw&z=a0NawI63V z5>wgBcd5M3G~3Oo=nvNXC|gJTw!3*ID5pY+bfeE0<-5sxCpz9+G8Hi8*$mFY9D(eyR2ZPlWp!gehDeo#BoX2S^WbvQ zDKrab$Ydf0ld{UBYqzUfS+x}R7t3>yl!gp5_1fggbK|0UgLfS64ww+D;Vyn#l9(#1 zA*{}&$lP6raXWeLQAJdx!D^d^O$ds1RYTh*cq-=Sw40cc-|8g%2-eUrocSRB82o-T zpCZ^er`HavNj+o(vRI@r^bh*Xb z7qW@MB4oJoo&upBDaCOOXnp5AlYU*^&Xxmw#8f=ct*JwGv04uM(a2`>Yz5|Wg?K~F zKG!4m=;~BO=Z-L+-Xl5D4I2LjhO6mN&6bsI|?q3>g0+06_QmFe-K1N|1BnnAV+pl@w9#zXJ`52Ar@Bn|YEyC*I+O$p4L=2;ASEhEKd*^__ z7RDw{%BI8%52orEjqHX-$?D>yI5pn) z(1QwPuq+j=0ACR+W))wc%KjWyN=Rro0kWXvu!h_HFb00ervz`L>PQ6YEWW~^> ziB^zVevVm}%mwZ@8=r=JF5}p`1Dj*50UuH^vi_XA-HD*B>G#yvtNWA_6-&xHWT@2_S5v67sCy$sC{S^J z0HGRsLJseprZ`fKyd;x7SbExN*3-_~*;Qwe!Q@N)OF{?DmhoPBkvN$Z=1fzF=hMPQ zOIwRH6EO=PKRIV+6H4sv0W+wbnlszpmxvjI50z)-F5l^47mq$j?;y+=2vmsf7#c>u zw{4UE2L&gH`eI07Gq2fB`_ziF%n6iDmg$YXiQkXa zlK#!MMBmQb@qCx9HwaCc%=iZzz+Wy5|)Nm8(l7y;pt4v#kTS zir2p<$XnqAm=2)W@VG+#TWgyH#NR7AN0p4Wc2*9vzV8*z&N+JIuJ;X1`)%P?cY|bF z9m1c?vhOoqMK(=Zo?!zq?qsl~Dl_uCGkBG8SXw+uB=|tiRk!WDq}8XNusk4!gT4k+>QI1ko=5eOPtX1&FDPX?t+^|^RcTPT5;S1!v0 ztDDx?WtSB=^^pny)(MfgY|0yf7dAOO)YK*1&Z5_+kNT%x=Q@~<7 zwdAyJ9%OM5RpABJ$ zQ!bDNg1d~80qzA4E{#ax;TvdQJu14TR}yYT<47T~OQQs#_46yqi0#>Jq=G9-zI78$ z79+SFg;1* zX#2OK9V3?a@N*U^Qg=Lm*x|bfFS*R1di9+zI!K^=h4gs0Ej5M|4^b!I!dqQZjl)i( z_FQy4(LJd1$74w>3fm@jFwy@ZWz)33r-pf;ugt~{MP0V1lMf`{>7p+A+Fu_2>-0yr zpcwJ{&vSw{PbE6N&J(8Q@S5tjZC8$HO`TA>P-AS?yL(mKGSiraR`-+>;8B%>B-+>Knw)P;CE}>!qd#@ziDtox6NaCV~EhmqX^Z=;e|GdoJgzl9GyMys_|6CH#%aghBf` zPkSp%F4fZM7qSsic@H#NPsEhX2$W?BH_LF@oF!(DF`nM4UIrb#1?xVgA2TDgaDY&E zkwC>_?;cD|N0~0uH7fO;mf>W*NADhCr8n#Is_bR4NqXw0z#@WFwohUTwIuXVc<^pC zjI$0z+OHDPYtn(#xD2>0iWENT>92jV&>^@YW5fde#D54bflDs?2*W5`U6S9hp3rpK zY$Dt7oFr!(xWRz=GNpKo#$>wOAhz%8dg!zpxo2ANor8OBkrq4wkK)9hR}C5*yM7h3 zeiEh2vO(+Ox4wUFJCirvFHEz!qQAY|^AW+4;!nBL^)khoaD`qhIEz~_ukYs>3;$rJ zMXy^;en8jAa=LzCum$r}eBR=7oS!ev;$S?T71lA5!31$}?=p*F#`5_i=IkN^HWyHW zyj4or%l1n4nxIY0xU3E>T*|@47-_8Hf$!KZ{U_GhpNpSdR`U^!QbI!6O6Z=&M~E^n zsgmOB@(5&>%SI#t!AfU~_E%A?_!9+ns0$BPCcUB?Wi#)j^vN#hS2agHQ_V~Wkr)_i zh1oU5{QRnYWFGgneDpSLOsN}pz8o!7OO|VB&hsJ!5u}&drUm-7_+V9KsbKJ#X?v~E z%eBU!wdMrt+@lPY!3Wu&g$KW%O(|g?F^g;I)r0SFupdJR&-d9mR5P>1$A-b~Fs()5 zA@w8M_3{05*xC%%`~i9{l}5!+JPW!M+(q(K%1xqENMeONg>#|bVd!-07fC+}CCEW&8T(y4b(F<Q9M*UvbjUok+rV+E;>*?^^r2Pj6p@S<`d~&xNs$ zvz2qve|^<-$6!%W)eGc}+Jv_TU1bH5u3@;h7ikKx?f9{hv+pn!B)reiS<(Ka<9`o_ z-=r)2sV(Ke=J<<|kB#&3~Nuub}UG}jZmy)e1Ql)#J?Wi)olSyHRkq0o&gIM_wd zbtRx{p0;b|1=#eDn6-V>%?v{@j9p=5`so9XVOd7L*$Bo0~!vE4YBRGk@ zou}ggjPI@5dm7#wxKJS3-aP8@vxoAN> z5%2ti?_O~IwJL-hGOf6`R4es@gJ*DIaZkv)e_gHj%-2WDatepco3cvPqv?Zr$!oI~ zbAuqSM$q{;bR7Q4Gl%GP3=#qvyya(fs~XCc`)8KP6rMI_6_I`+$LB^C`RNoA~cs!F zgh7KYpp5DhrA_m%yniVAeT{~??u&O+Xk`jLSx|Sj(Qu5->v8Q1nby}>NzvY_dN{w8 zs1_7p@4(sE^H}`Fm=qeG8AUWNIu}Rp@#OaL19R3FRmboAU&@R@6I5J_!#z7=f92ci zOdO(ylC!c;E47F)Y3Dxdu-HHrC_EkZ)!|RH^KOC3itp2QEzvJ9(Nw7aAufK3Y4=ub z1SYxUQeqq{$`-BzHC(f%k9JL`?zMHnA%}Ok zP4~AN&N%vft3Xu=XiS0WCto629X<#{9?99k-WlGSRf$z8u4Qsb5A^)Z8Yi@ktOB87iTajjkOo=Ph}Ef?KQ}+S?;(cn zx^GwzD1TVX$l0w&mwxe??gxg(T|0SvHS+?!ZfhgbEGN>6m$Kzq!xBRht<7mmoaQa? zUz{i6)ESK#wJ|N-6)ow%h__p$dg*6OdoRkEG7rYUw_)A zR8SjZV*qYsje9_fQA?~_fWMiV&Dd{$vw(eYh1l~NRCH7j(XBt7)wGbbs8|V{V0avo z89@B@UmHMD{&jbWr2p$qaFy*^?2OlpW4U#}(G(asn&N_cuQI@g4vF{}c>dhJQdhcC zkAi{$B(_44La{|<|44(5g2Di7eF5S6|NqMgqQ3<<8zlzF_kn8m4(UO$7*~RqKKI!F zt;M_2@Dm?k&pZvp>yY}t4iuD}AScYfNSJV6U&j9sGlPp~vw?;N07SkU#9O%kC*BDp z`w#J@liC0aus@g2gn~kQgLs1f7ZC&JMwj7cNAw^QhQABpFOo?B+loI2y9FpxWxOi- zal{1l_x>?GNSpmiVDgsyKegXT0eho%FxM4H6_xb=%6$P{*uwC)$E-~M>@VKPEp|i0 zi7-N}h?+AY;<&HTsG90f)E2J~^#mHyf-x@+)%o96w^ z$O&@Gyn>TMDBu#?x35utn?Dr-rY0SLsmaY6T(jY*yDV_{Hsv+=zb#Y#slhAf3Vyjw zat(gtRR3=*aLoyd$h(4*h~vZG?p|-u)!9DKplV /dev/null && pwd -P ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -133,22 +131,29 @@ location of your Java installation." fi else JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac case $MAX_FD in #( '' | soft) :;; #( *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -193,6 +198,10 @@ if "$cygwin" || "$msys" ; then done fi + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + # Collect all arguments for the java command; # * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of # shell script including quotes and variable substitutions, so put them in @@ -205,6 +214,12 @@ set -- \ org.gradle.wrapper.GradleWrapperMain \ "$@" +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + # Use "xargs" to parse quoted args. # # With -n1 it outputs one arg per line, with the quotes and backslashes removed. diff --git a/asset-transfer-basic/chaincode-java/gradlew.bat b/asset-transfer-basic/chaincode-java/gradlew.bat index 107acd32..93e3f59f 100644 --- a/asset-transfer-basic/chaincode-java/gradlew.bat +++ b/asset-transfer-basic/chaincode-java/gradlew.bat @@ -14,7 +14,7 @@ @rem limitations under the License. @rem -@if "%DEBUG%" == "" @echo off +@if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @@ -25,7 +25,8 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @@ -40,7 +41,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute +if %ERRORLEVEL% equ 0 goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -75,13 +76,15 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar :end @rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd +if %ERRORLEVEL% equ 0 goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal diff --git a/asset-transfer-events/application-gateway-java/gradle/wrapper/gradle-wrapper.jar b/asset-transfer-events/application-gateway-java/gradle/wrapper/gradle-wrapper.jar index 7454180f2ae8848c63b8b4dea2cb829da983f2fa..7f93135c49b765f8051ef9d0a6055ff8e46073d8 100644 GIT binary patch delta 44391 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%0D+ym=_w*d`k$@iM%aZm>(FB zFT}u)TP%ySs`RyJx#=oxe&Idagc(F$Sv(5*pWd?HYll`LXi*p`s9;8=FNKjA$zuDap z1iJ4_{GzB&FY7I^Z=V2WPV}duAN#+$7*g>}M-8M^ZIIB>-^X-D90KS2pYi;cJpI2t z9+!d$Z~~_e2!65t2V*tx>VN>IOBPZ~3v6t}2DR0RaAz+Y0&>nb^fj?~75%>lATlV_DagaSI48TP5e#m z`NUsBkeiDL|BMZ$&97r4JO2|SVnYrr+W2*{e!H;xn_8U}Ah!z{@Mwehm%07(!p~pV geSU+(twG={1R5&vkYyYSN)YnO$AzrH2Y-C~e^Sofwg3PC delta 40281 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 /dev/null && pwd -P ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -133,22 +131,29 @@ location of your Java installation." fi else JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac case $MAX_FD in #( '' | soft) :;; #( *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -193,6 +198,10 @@ if "$cygwin" || "$msys" ; then done fi + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + # Collect all arguments for the java command; # * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of # shell script including quotes and variable substitutions, so put them in @@ -205,6 +214,12 @@ set -- \ org.gradle.wrapper.GradleWrapperMain \ "$@" +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + # Use "xargs" to parse quoted args. # # With -n1 it outputs one arg per line, with the quotes and backslashes removed. diff --git a/asset-transfer-events/application-gateway-java/gradlew.bat b/asset-transfer-events/application-gateway-java/gradlew.bat index ac1b06f9..6689b85b 100644 --- a/asset-transfer-events/application-gateway-java/gradlew.bat +++ b/asset-transfer-events/application-gateway-java/gradlew.bat @@ -14,7 +14,7 @@ @rem limitations under the License. @rem -@if "%DEBUG%" == "" @echo off +@if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @@ -25,7 +25,8 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @@ -40,7 +41,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute +if %ERRORLEVEL% equ 0 goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -75,13 +76,15 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar :end @rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd +if %ERRORLEVEL% equ 0 goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal diff --git a/asset-transfer-events/chaincode-java/build.gradle b/asset-transfer-events/chaincode-java/build.gradle index 839dd2ea..202333bd 100644 --- a/asset-transfer-events/chaincode-java/build.gradle +++ b/asset-transfer-events/chaincode-java/build.gradle @@ -3,7 +3,7 @@ */ plugins { - id 'com.github.johnrengelman.shadow' version '5.1.0' + id 'com.github.johnrengelman.shadow' version '8.1.1' id 'application' id 'checkstyle' id 'jacoco' @@ -13,9 +13,9 @@ group 'org.hyperledger.fabric.samples' version '1.0-SNAPSHOT' dependencies { - implementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.+' + implementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.5.+' implementation 'org.json:json:+' - testImplementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.+' + testImplementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.5.+' } repositories { @@ -25,6 +25,12 @@ repositories { } } +java { + toolchain { + languageVersion = JavaLanguageVersion.of(11) + } +} + application { mainClassName = 'org.hyperledger.fabric.contract.ContractRouter' } @@ -50,13 +56,14 @@ jacocoTestReport { mainClassName = 'org.hyperledger.fabric.contract.ContractRouter' shadowJar { - baseName = 'chaincode' - version = null - classifier = null + archiveBaseName = 'chaincode' + archiveVersion = '' + archiveClassifier = '' + mergeServiceFiles() manifest { attributes 'Main-Class': 'org.hyperledger.fabric.contract.ContractRouter' } } -installDist.dependsOn check \ No newline at end of file +installDist.dependsOn check diff --git a/asset-transfer-events/chaincode-java/gradle/wrapper/gradle-wrapper.jar b/asset-transfer-events/chaincode-java/gradle/wrapper/gradle-wrapper.jar index f3d88b1c2faf2fc91d853cd5d4242b5547257070..7f93135c49b765f8051ef9d0a6055ff8e46073d8 100644 GIT binary patch delta 44820 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�p8_=hH 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 diff --git a/asset-transfer-events/chaincode-java/gradle/wrapper/gradle-wrapper.properties b/asset-transfer-events/chaincode-java/gradle/wrapper/gradle-wrapper.properties index 1b16c34a..a80b22ce 100644 --- a/asset-transfer-events/chaincode-java/gradle/wrapper/gradle-wrapper.properties +++ b/asset-transfer-events/chaincode-java/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip +networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/asset-transfer-events/chaincode-java/gradlew b/asset-transfer-events/chaincode-java/gradlew index 2fe81a7d..0adc8e1a 100755 --- a/asset-transfer-events/chaincode-java/gradlew +++ b/asset-transfer-events/chaincode-java/gradlew @@ -1,7 +1,7 @@ -#!/usr/bin/env sh +#!/bin/sh # -# Copyright 2015 the original author or authors. +# Copyright © 2015-2021 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -17,78 +17,111 @@ # ############################################################################## -## -## Gradle start up script for UN*X -## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# ############################################################################## # Attempt to set APP_HOME + # Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" +MAX_FD=maximum warn () { echo "$*" -} +} >&2 die () { echo echo "$*" echo exit 1 -} +} >&2 # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -97,87 +130,120 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=`expr $i + 1` - done - case $i in - 0) set -- ;; - 1) set -- "$args0" ;; - 2) set -- "$args0" "$args1" ;; - 3) set -- "$args0" "$args1" "$args2" ;; - 4) set -- "$args0" "$args1" "$args2" "$args3" ;; - 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" esac fi -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=`save "$@"` +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' exec "$JAVACMD" "$@" diff --git a/asset-transfer-events/chaincode-java/gradlew.bat b/asset-transfer-events/chaincode-java/gradlew.bat index 9618d8d9..6689b85b 100644 --- a/asset-transfer-events/chaincode-java/gradlew.bat +++ b/asset-transfer-events/chaincode-java/gradlew.bat @@ -1,100 +1,92 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/asset-transfer-ledger-queries/application-java/gradle/wrapper/gradle-wrapper.jar b/asset-transfer-ledger-queries/application-java/gradle/wrapper/gradle-wrapper.jar index 62d4c053550b91381bbd28b1afc82d634bf73a8a..7f93135c49b765f8051ef9d0a6055ff8e46073d8 100644 GIT binary patch delta 44733 zcmZ6yQ