From be07a11b9d665c1a4d5e4f9ca4062b4002d31349 Mon Sep 17 00:00:00 2001 From: "Mark S. Lewis" Date: Tue, 21 Feb 2023 14:15:48 +0000 Subject: [PATCH 01/18] Refactor of GitHub Actions workflows for consistency with main Allows the scheduled build defined in main branch to run the tests in this branch using the test.yml workflow. Signed-off-by: Mark S. Lewis --- .github/workflows/pr.yml | 50 ------------------- .github/workflows/pull_request.yml | 25 ++++++++++ .github/workflows/push.yml | 14 ++++++ .../workflows/{publish.yml => release.yml} | 47 ++++++++--------- .../{integrationtest.yml => test.yml} | 40 +++++++++++++-- 5 files changed, 94 insertions(+), 82 deletions(-) delete mode 100644 .github/workflows/pr.yml create mode 100644 .github/workflows/pull_request.yml create mode 100644 .github/workflows/push.yml rename .github/workflows/{publish.yml => release.yml} (75%) rename .github/workflows/{integrationtest.yml => test.yml} (71%) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml deleted file mode 100644 index 748730c3a..000000000 --- a/.github/workflows/pr.yml +++ /dev/null @@ -1,50 +0,0 @@ -# Copyright the Hyperledger Fabric contributors. All rights reserved. -# -# SPDX-License-Identifier: Apache-2.0 - -name: Pull Request Workflow -on: - # push: - # branches: - # - main - # - release-2.5 - pull_request: - branches: - - main - - release-2.5 - workflow_dispatch: - -# If a updated change comes into a PR, then cancel any inflight runs for the PR -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} - cancel-in-progress: true - -jobs: - - pr_build: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-java@v3 - with: - distribution: 'temurin' - java-version: '11' - cache: 'gradle' - - name: Validate Gradle wrapper - uses: gradle/wrapper-validation-action@v1.0.5 - - name: Dependency Check - uses: gradle/gradle-build-action@v2.3.3 - with: - arguments: | - :fabric-chaincode-shim:dependencyCheckAnalyze - - name: Build and Unit test - uses: gradle/gradle-build-action@v2.3.3 - with: - arguments: | - :fabric-chaincode-shim:build - -xdependencyCheckAnalyze - - # Run the integration tests on the repo - pr_call_intergationtest: - needs: [pr_build] - uses: ./.github/workflows/integrationtest.yml diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml new file mode 100644 index 000000000..83a1756cc --- /dev/null +++ b/.github/workflows/pull_request.yml @@ -0,0 +1,25 @@ +# Copyright the Hyperledger Fabric contributors. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +name: Pull request + +on: + pull_request: + branches: + - release-2.5 + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + test: + uses: ./.github/workflows/test.yml + + pull-request: + needs: test + name: Pull request success + runs-on: ubuntu-latest + steps: + - run: true diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml new file mode 100644 index 000000000..937b92f82 --- /dev/null +++ b/.github/workflows/push.yml @@ -0,0 +1,14 @@ +# Copyright the Hyperledger Fabric contributors. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +name: Push + +on: + push: + branches: + - release-2.5 + workflow_dispatch: + +jobs: + test: + uses: ./.github/workflows/test.yml diff --git a/.github/workflows/publish.yml b/.github/workflows/release.yml similarity index 75% rename from .github/workflows/publish.yml rename to .github/workflows/release.yml index 62ae935d9..cee7cbce3 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/release.yml @@ -2,32 +2,28 @@ # # SPDX-License-Identifier: Apache-2.0 +name: Release -# Workflow will only run on tag creation. It will run the integration tests first to confirm that the build is sound and then -# and only then do the publishing -name: Publish Workflow on: create: tags: - - "*" + - '*' workflow_dispatch: - + jobs: - - # Run the integration tests on the repo, before moving to the publishing. - # Run the integration tests on the repo - publish_call_intergationtest: - uses: ./.github/workflows/integrationtest.yml + test: + uses: ./.github/workflows/test.yaml - # Publishing steps to both the Github Packages and the Sonatype publishjars: strategy: fail-fast: false matrix: - publish_target: ["publishAllPublicationsToGithubPackagesRepository","publishAllPublicationsToReleaseRepository"] + publish_target: + - publishAllPublicationsToGithubPackagesRepository + - publishAllPublicationsToReleaseRepository runs-on: ubuntu-latest - needs: [publish_call_intergationtest] + needs: test steps: - uses: actions/checkout@v3 - uses: actions/setup-java@v3 @@ -36,12 +32,12 @@ jobs: java-version: '11' cache: 'gradle' - name: Validate Gradle wrapper - uses: gradle/wrapper-validation-action@v1.0.5 + uses: gradle/wrapper-validation-action@v1 - name: Push to registry ${{ matrix.publish_target }} run: | set -xev ./gradlew -Psigning.key="${SIGNING_KEY}" -Psigning.password="${SIGNING_PASSWORD}" -PossrhUsername="${OSSRH_USER}" -PossrhPassword="${OSSRH_PASSWORD}" ${TARGET} - env: + env: SIGNING_PASSWORD: ${{ secrets.OSSRH_GPG_SECRET_KEY_PASSWORD }} SIGNING_KEY: ${{ secrets.OSSRH_GPG_SECRET_KEY }} OSSRH_USER: ${{ secrets.OSSRH_USERNAME }} @@ -54,9 +50,11 @@ jobs: strategy: fail-fast: false matrix: - DOCKER_REGISTRY: ["docker.io","ghcr.io"] + DOCKER_REGISTRY: + - 'docker.io' + - 'ghcr.io' runs-on: ubuntu-latest - needs: [publish_call_intergationtest] + needs: test permissions: contents: read packages: write @@ -68,16 +66,14 @@ jobs: java-version: '11' cache: 'gradle' - name: Validate Gradle wrapper - uses: gradle/wrapper-validation-action@v1.0.5 - - name: Build the depencies needed for the image - uses: gradle/gradle-build-action@v2.3.3 + uses: gradle/wrapper-validation-action@v1 + - name: Build the dependencies needed for the image + uses: gradle/gradle-build-action@v2 with: - arguments: | - :fabric-chaincode-docker:copyAllDeps -x dependencyCheckAnalyze - + arguments: | + :fabric-chaincode-docker:copyAllDeps -x dependencyCheckAnalyze - name: Set up QEMU uses: docker/setup-qemu-action@v2 - - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 with: @@ -85,14 +81,12 @@ jobs: config-inline: | [worker.oci] max-parallelism = 1 - - name: Login to the ${{ matrix.DOCKER_REGISTRY }} Container Registry uses: docker/login-action@v2 with: registry: ${{ matrix.DOCKER_REGISTRY }} username: ${{ matrix.DOCKER_REGISTRY == 'docker.io' && secrets.DOCKERHUB_USERNAME || github.actor }} password: ${{ matrix.DOCKER_REGISTRY == 'docker.io' && secrets.DOCKERHUB_TOKEN || secrets.GITHUB_TOKEN }} - - name: Docker meta id: meta uses: docker/metadata-action@v4 @@ -112,4 +106,3 @@ jobs: tags: ${{ steps.meta.outputs.tags }} push: ${{ github.event_name != 'pull_request' }} labels: ${{ steps.meta.outputs.labels }} - diff --git a/.github/workflows/integrationtest.yml b/.github/workflows/test.yml similarity index 71% rename from .github/workflows/integrationtest.yml rename to .github/workflows/test.yml index 66c882f93..59d402086 100644 --- a/.github/workflows/integrationtest.yml +++ b/.github/workflows/test.yml @@ -2,22 +2,53 @@ # # SPDX-License-Identifier: Apache-2.0 -name: Reusable Integration Test workflow +name: Test on: workflow_call: + inputs: + checkout-ref: + default: '' + required: false + type: string jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + ref: ${{ inputs.checkout-ref }} + - uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: '11' + cache: 'gradle' + - name: Validate Gradle wrapper + uses: gradle/wrapper-validation-action@v1 + - name: Dependency Check + uses: gradle/gradle-build-action@v2 + with: + arguments: | + :fabric-chaincode-shim:dependencyCheckAnalyze + - name: Build and Unit test + uses: gradle/gradle-build-action@v2 + with: + arguments: | + :fabric-chaincode-shim:build + -xdependencyCheckAnalyze + intergationtest: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 + with: + ref: ${{ inputs.checkout-ref }} - uses: actions/setup-java@v3 with: distribution: 'temurin' java-version: '11' cache: 'gradle' - - name: Populate chaincode with latest java-version run: | ./gradlew -I $GITHUB_WORKSPACE/fabric-chaincode-integration-test/chaincodebootstrap.gradle -PchaincodeRepoDir=$GITHUB_WORKSPACE/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/repository publishShimPublicationToFabricRepository @@ -25,7 +56,6 @@ jobs: ./gradlew -I $GITHUB_WORKSPACE/fabric-chaincode-integration-test/chaincodebootstrap.gradle -PchaincodeRepoDir=$GITHUB_WORKSPACE/fabric-chaincode-integration-test/src/contracts/bare-gradle/repository publishShimPublicationToFabricRepository ./gradlew -I $GITHUB_WORKSPACE/fabric-chaincode-integration-test/chaincodebootstrap.gradle -PchaincodeRepoDir=$GITHUB_WORKSPACE/fabric-chaincode-integration-test/src/contracts/bare-maven/repository publishShimPublicationToFabricRepository ./gradlew -I $GITHUB_WORKSPACE/fabric-chaincode-integration-test/chaincodebootstrap.gradle -PchaincodeRepoDir=$GITHUB_WORKSPACE/fabric-chaincode-integration-test/src/contracts/wrapper-maven/repository publishShimPublicationToFabricRepository - - name: Ensure that the Peer/weft tools are available run: | curl -sSL https://raw.githubusercontent.com/hyperledger/fabric/main/scripts/install-fabric.sh | bash -s -- binary @@ -39,8 +69,8 @@ jobs: peer version weft --version - name: Integration Tests - uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1 + uses: gradle/gradle-build-action@v2 with: arguments: | :fabric-chaincode-integration-test:build - -xdependencyCheckAnalyze \ No newline at end of file + -xdependencyCheckAnalyze From ab073c3f36107ce8e018d3a4f5af364a5dfa6b5e Mon Sep 17 00:00:00 2001 From: Matthew B White Date: Fri, 10 Feb 2023 14:31:24 +0000 Subject: [PATCH 02/18] Add Mark Lewis, remove James Taylor Signed-off-by: Matthew B White (cherry picked from commit 192fac8172a4a9f1eabf5e45f16383b79d493de9) --- MAINTAINERS.md | 12 ++++++------ .../src/test/resources/scripts/mfsetup.sh | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/MAINTAINERS.md b/MAINTAINERS.md index fe6905654..b0c0797fc 100644 --- a/MAINTAINERS.md +++ b/MAINTAINERS.md @@ -2,18 +2,18 @@ Maintainers =========== -| Name | GitHub | Chat | email | -|---------------------------|------------------|---------------|---------------------------| -| Artem Barger | c0rwin | c0rwin | bartem@il.ibm.com | -| James Taylor | jt-nti | jtonline | jamest@uk.ibm.com | -| Matthew B White | mbwhite | mbwhite | whitemat@uk.ibm.com | - +| Name | GitHub | Chat | email | +|---------------------------|------------------|-----------------|---------------------------| +| Artem Barger | c0rwin | c0rwin | bartem@il.ibm.com | +| Matthew B White | mbwhite | mbwhite | whitemat@uk.ibm.com | +| Mark Lewis | bestbeforetoday | bestbeforetoday | mark_lewis@uk.ibm.com | Retired Maintainers =================== | Name | GitHub | Chat | email | |---------------------------|------------------|---------------|---------------------------| +| James Taylor | jt-nti | jtonline | jamest@uk.ibm.com | | Gari Singh | mastersingh24 | mastersingh24 | gari.r.singh@gmail.com | | Gennady Laventman | gennadylaventman | gennadyl | gennady@il.ibm.com | | Jim Zhang | jimthematrix | jimthematrix | jim\_the\_matrix@hotmail.com | diff --git a/fabric-chaincode-integration-test/src/test/resources/scripts/mfsetup.sh b/fabric-chaincode-integration-test/src/test/resources/scripts/mfsetup.sh index 6df1a20d4..f2cb4d8f1 100755 --- a/fabric-chaincode-integration-test/src/test/resources/scripts/mfsetup.sh +++ b/fabric-chaincode-integration-test/src/test/resources/scripts/mfsetup.sh @@ -26,7 +26,7 @@ docker run --name microfab \ sleep 10 curl -sSL http://console.localho.st:8080/ak/api/v1/components > $CFG/cfg.json -weft microfab -w $CFG/_wallets -p $CFG/_gateways -m $CFG/_msp -f --config $CFG/cfg.json +npx @hyperledger-labs/weft microfab -w $CFG/_wallets -p $CFG/_gateways -m $CFG/_msp -f --config $CFG/cfg.json # bring in the helper bash scripts . $DIR/scripts/ccutils.sh From 082c6b2ca3ec3f86bbcd606ad658a1132c52e87c Mon Sep 17 00:00:00 2001 From: Matthew B White Date: Mon, 6 Mar 2023 16:39:19 +0000 Subject: [PATCH 03/18] Update JDK in use Signed-off-by: Matthew B White --- .github/workflows/pull_request.yml | 4 ++-- .github/workflows/push.yml | 2 +- build.gradle | 2 +- fabric-chaincode-docker/Dockerfile | 6 +++--- .../src/contracts/bare-gradle/build.gradle | 2 +- .../src/contracts/bare-maven/pom.xml | 2 +- .../src/contracts/fabric-ledger-api/build.gradle | 2 +- .../src/contracts/fabric-shim-api/build.gradle | 2 +- .../src/contracts/wrapper-maven/pom.xml | 2 +- 9 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 83a1756cc..22777bbd7 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -6,7 +6,7 @@ name: Pull request on: pull_request: branches: - - release-2.5 + - main workflow_dispatch: concurrency: @@ -22,4 +22,4 @@ jobs: name: Pull request success runs-on: ubuntu-latest steps: - - run: true + - run: "true" diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index 937b92f82..3d2988fc5 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -6,7 +6,7 @@ name: Push on: push: branches: - - release-2.5 + - main workflow_dispatch: jobs: diff --git a/build.gradle b/build.gradle index 158dcb0d6..6fd0c9137 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ apply plugin: 'idea' apply plugin: 'eclipse-wtp' -version = '2.5.0' +version = '2.5.1' // If the nightly property is set, then this is the scheduled main diff --git a/fabric-chaincode-docker/Dockerfile b/fabric-chaincode-docker/Dockerfile index 9f8b62103..5e7f40393 100644 --- a/fabric-chaincode-docker/Dockerfile +++ b/fabric-chaincode-docker/Dockerfile @@ -1,4 +1,4 @@ -FROM eclipse-temurin:11.0.16.1_1-jdk as builder +FROM eclipse-temurin:11.0.18_10-jdk as builder ENV DEBIAN_FRONTEND=noninteractive # Build tools @@ -13,7 +13,7 @@ SHELL ["/bin/bash", "-c"] RUN source /root/.sdkman/bin/sdkman-init.sh; sdk install gradle 7.0 RUN source /root/.sdkman/bin/sdkman-init.sh; sdk install maven 3.8.1 -FROM eclipse-temurin:11.0.16.1_1-jdk as dependencies +FROM eclipse-temurin:11.0.18_10-jdk as dependencies COPY --from=builder /root/.sdkman/candidates/gradle/current /usr/bin/gradle COPY --from=builder /root/.sdkman/candidates/maven/current /usr/bin/maven @@ -54,7 +54,7 @@ RUN mvn -N io.takari:maven:wrapper # Creating final javaenv image which will include all required # dependencies to build and compile java chaincode -FROM eclipse-temurin:11.0.16.1_1-jdk +FROM eclipse-temurin:11.0.18_10-jdk RUN apt-get update \ && apt-get -y install zip unzip \ diff --git a/fabric-chaincode-integration-test/src/contracts/bare-gradle/build.gradle b/fabric-chaincode-integration-test/src/contracts/bare-gradle/build.gradle index 097c68b35..513762998 100644 --- a/fabric-chaincode-integration-test/src/contracts/bare-gradle/build.gradle +++ b/fabric-chaincode-integration-test/src/contracts/bare-gradle/build.gradle @@ -18,7 +18,7 @@ repositories { } dependencies { - implementation group: 'org.hyperledger.fabric-chaincode-java', name: 'fabric-chaincode-shim', version: '2.5.0' + implementation group: 'org.hyperledger.fabric-chaincode-java', name: 'fabric-chaincode-shim', version: '2.5.1' implementation group: 'org.hyperledger.fabric', name:'fabric-protos', version:'0.1.3' testImplementation group: 'junit', name: 'junit', version: '4.12' implementation group: 'commons-logging', name: 'commons-logging', version: '1.2' diff --git a/fabric-chaincode-integration-test/src/contracts/bare-maven/pom.xml b/fabric-chaincode-integration-test/src/contracts/bare-maven/pom.xml index 5cd5d4475..5b2158369 100644 --- a/fabric-chaincode-integration-test/src/contracts/bare-maven/pom.xml +++ b/fabric-chaincode-integration-test/src/contracts/bare-maven/pom.xml @@ -12,7 +12,7 @@ UTF-8 - 2.5.0 + 2.5.1 1.2.0 diff --git a/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/build.gradle b/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/build.gradle index 14ebfcc85..681668a34 100644 --- a/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/build.gradle +++ b/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/build.gradle @@ -18,7 +18,7 @@ repositories { } dependencies { - implementation group: 'org.hyperledger.fabric-chaincode-java', name: 'fabric-chaincode-shim', version: '2.5.0' + implementation group: 'org.hyperledger.fabric-chaincode-java', name: 'fabric-chaincode-shim', version: '2.5.1' testImplementation group: 'junit', name: 'junit', version: '4.12' } diff --git a/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/build.gradle b/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/build.gradle index 097c68b35..513762998 100644 --- a/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/build.gradle +++ b/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/build.gradle @@ -18,7 +18,7 @@ repositories { } dependencies { - implementation group: 'org.hyperledger.fabric-chaincode-java', name: 'fabric-chaincode-shim', version: '2.5.0' + implementation group: 'org.hyperledger.fabric-chaincode-java', name: 'fabric-chaincode-shim', version: '2.5.1' implementation group: 'org.hyperledger.fabric', name:'fabric-protos', version:'0.1.3' testImplementation group: 'junit', name: 'junit', version: '4.12' implementation group: 'commons-logging', name: 'commons-logging', version: '1.2' diff --git a/fabric-chaincode-integration-test/src/contracts/wrapper-maven/pom.xml b/fabric-chaincode-integration-test/src/contracts/wrapper-maven/pom.xml index b3f68f869..c3df85b9b 100644 --- a/fabric-chaincode-integration-test/src/contracts/wrapper-maven/pom.xml +++ b/fabric-chaincode-integration-test/src/contracts/wrapper-maven/pom.xml @@ -12,7 +12,7 @@ UTF-8 - 2.5.0 + 2.5.1 1.2.0 From 54a32d30ec2633017bfa0b759c11c9c796bb5235 Mon Sep 17 00:00:00 2001 From: David Enyeart Date: Mon, 15 May 2023 17:34:57 -0400 Subject: [PATCH 04/18] Update setEvent documentation Update setEvent documentation to indicate that only one chaincode event can be included in a transaction. Signed-off-by: David Enyeart --- .../org/hyperledger/fabric/shim/ChaincodeStub.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ChaincodeStub.java b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ChaincodeStub.java index f049dbb58..7c77f5daa 100644 --- a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ChaincodeStub.java +++ b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ChaincodeStub.java @@ -572,8 +572,15 @@ public interface ChaincodeStub { QueryResultsIterator getPrivateDataQueryResult(String collection, String query); /** - * Defines the CHAINCODE type event that will be posted to interested clients - * when the chaincode's result is committed to the ledger. + * Allows the chaincode to propose an event on the transaction proposal response. + * When the transaction is included in a block and the block is successfully committed to the ledger, + * the block event (including transaction level chaincode events) + * will be delivered to the current client application event listeners that have been registered with the peer's event producer. + * Consult each SDK's documentation for details. + * Only a single chaincode event can be included in a transaction. + * If setEvent() is called multiple times only the last event will be included in the transaction. + * The event must originate from the outer-most invoked chaincode in chaincode-to-chaincode scenarios. + * The marshaled ChaincodeEvent will be available in the transaction's ChaincodeAction.events field. * * @param name Name of event. Cannot be null or empty string. * @param payload Optional event payload. From 7c1708ae422896923693a03467ca861d4106644e Mon Sep 17 00:00:00 2001 From: "Mark S. Lewis" Date: Wed, 26 Jul 2023 18:19:46 +0100 Subject: [PATCH 05/18] Remove redundant fabric-sdk-java integration test dependency (#309) Tidy-up integration test code, including removing redundant code. Signed-off-by: Mark S. Lewis --- .../build.gradle | 1 - .../contractinstall/ContractInstallTest.java | 6 +- .../ledgertests/LedgerIntegrationTest.java | 2 +- .../shimtests/SACCIntegrationTest.java | 8 +- .../shimtests/SBECCIntegrationTest.java | 85 +++++++++---------- .../fabric/shim/integration/util/Bash.java | 2 +- .../fabric/shim/integration/util/Command.java | 23 +++-- .../integration/util/CommandSingleton.java | 57 ------------- .../fabric/shim/integration/util/Docker.java | 4 +- .../shim/integration/util/DockerCompose.java | 4 +- .../shim/integration/util/FabricState.java | 10 +-- .../fabric/shim/integration/util/Peer.java | 6 +- 12 files changed, 68 insertions(+), 140 deletions(-) delete mode 100644 fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/CommandSingleton.java diff --git a/fabric-chaincode-integration-test/build.gradle b/fabric-chaincode-integration-test/build.gradle index 9e6ba9111..9d47ffb1f 100644 --- a/fabric-chaincode-integration-test/build.gradle +++ b/fabric-chaincode-integration-test/build.gradle @@ -1,6 +1,5 @@ dependencies { implementation project(':fabric-chaincode-docker') - testImplementation 'org.hyperledger.fabric-sdk-java:fabric-sdk-java:1.4.4' implementation project(':fabric-chaincode-shim') implementation group: 'org.json', name: 'json', version: '20180813' } diff --git a/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/contractinstall/ContractInstallTest.java b/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/contractinstall/ContractInstallTest.java index 3c9cd58b1..d8a0c3100 100644 --- a/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/contractinstall/ContractInstallTest.java +++ b/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/contractinstall/ContractInstallTest.java @@ -28,15 +28,15 @@ public static void setUp() throws Exception { public void TestInstall(){ InvokeHelper helper = InvokeHelper.newHelper("baregradlecc","sachannel"); - String text = helper.invoke("org1",new String[]{"whoami"}); + String text = helper.invoke("org1", "whoami"); assertThat(text, containsString("BareGradle")); helper = InvokeHelper.newHelper("baremaven","sachannel"); - text = helper.invoke("org1",new String[]{"whoami"}); + text = helper.invoke("org1", "whoami"); assertThat(text, containsString("BareMaven")); helper = InvokeHelper.newHelper("wrappermaven","sachannel"); - text = helper.invoke("org1",new String[]{"whoami"}); + text = helper.invoke("org1", "whoami"); assertThat(text, containsString("WrapperMaven")); } diff --git a/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/ledgertests/LedgerIntegrationTest.java b/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/ledgertests/LedgerIntegrationTest.java index c20bd27a4..6b9ed0020 100644 --- a/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/ledgertests/LedgerIntegrationTest.java +++ b/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/ledgertests/LedgerIntegrationTest.java @@ -29,7 +29,7 @@ public static void setUp() throws Exception { public void TestLedgers(){ InvokeHelper helper = InvokeHelper.newHelper("ledgercc","sachannel"); - String text = helper.invoke("org1",new String[]{"accessLedgers"}); + String text = helper.invoke("org1", "accessLedgers"); assertThat(text, containsString("success")); } diff --git a/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/shimtests/SACCIntegrationTest.java b/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/shimtests/SACCIntegrationTest.java index a7e2ca31b..f9cae0c30 100644 --- a/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/shimtests/SACCIntegrationTest.java +++ b/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/shimtests/SACCIntegrationTest.java @@ -28,17 +28,17 @@ public static void setUp() throws Exception { public void TestLedger(){ InvokeHelper helper = InvokeHelper.newHelper("shimcc", "sachannel"); - String text = helper.invoke("org1",new String[]{"putBulkStates"}); + String text = helper.invoke("org1", "putBulkStates"); assertThat(text, containsString("success")); - text = helper.invoke("org1",new String[]{"getByRange","key120","key170"}); + text = helper.invoke("org1", "getByRange","key120","key170"); assertThat(text, containsString("50")); - text = helper.invoke("org1",new String[]{"getByRangePaged","key120","key170","10",""}); + text = helper.invoke("org1", "getByRangePaged","key120","key170","10",""); System.out.println(text); assertThat(text, containsString("key130")); - text = helper.invoke("org1",new String[]{"getMetricsProviderName"}); + text = helper.invoke("org1", "getMetricsProviderName"); System.out.println(text); assertThat(text, containsString("org.hyperledger.fabric.metrics.impl.DefaultProvider")); } diff --git a/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/shimtests/SBECCIntegrationTest.java b/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/shimtests/SBECCIntegrationTest.java index f125d7db2..d93c3fafa 100644 --- a/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/shimtests/SBECCIntegrationTest.java +++ b/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/shimtests/SBECCIntegrationTest.java @@ -9,15 +9,8 @@ import static org.hamcrest.Matchers.not; import static org.junit.Assert.assertThat; -import java.io.IOException; -import java.security.NoSuchAlgorithmException; -import java.security.NoSuchProviderException; -import java.security.spec.InvalidKeySpecException; - import org.hyperleder.fabric.shim.integration.util.FabricState; import org.hyperleder.fabric.shim.integration.util.InvokeHelper; -import org.hyperledger.fabric.sdk.exception.InvalidArgumentException; -import org.hyperledger.fabric.sdk.exception.ProposalException; import org.junit.BeforeClass; import org.junit.Test; @@ -31,134 +24,132 @@ public static void setUp() throws Exception { } @Test - public void RunSBE_pub_setget() throws NoSuchAlgorithmException, InvalidKeySpecException, NoSuchProviderException, - IOException, ProposalException, InvalidArgumentException { + public void RunSBE_pub_setget() { final String mode = "pub"; final InvokeHelper helper = InvokeHelper.newHelper("shimcc", "sachannel"); String text; - text = helper.invoke("org1",new String[] {"EndorsementCC:setval", mode, "foo"}); + text = helper.invoke("org1", "EndorsementCC:setval", mode, "foo"); assertThat(text, containsString("success")); - text = helper.invoke("org1",new String[] {"EndorsementCC:getval", mode}); + text = helper.invoke("org1", "EndorsementCC:getval", mode); assertThat(text, containsString("foo")); - text = helper.invoke("org1",new String[] {"EndorsementCC:addorgs", mode, "org1MSP"}); + text = helper.invoke("org1", "EndorsementCC:addorgs", mode, "org1MSP"); assertThat(text, containsString("success")); - text = helper.invoke("org1",new String[] {"EndorsementCC:listorgs", mode}); + text = helper.invoke("org1", "EndorsementCC:listorgs", mode); assertThat(text, containsString("org1MSP")); - text = helper.invoke("org1",new String[] {"EndorsementCC:setval", mode, "val1"}); + text = helper.invoke("org1", "EndorsementCC:setval", mode, "val1"); assertThat(text, containsString("success")); - text = helper.invoke("org1",new String[] {"EndorsementCC:getval", mode}); + text = helper.invoke("org1", "EndorsementCC:getval", mode); assertThat(text, containsString("val1")); - text = helper.invoke("org1",new String[] {"EndorsementCC:setval", mode, "val2"}); + text = helper.invoke("org1", "EndorsementCC:setval", mode, "val2"); - text = helper.invoke("org1",new String[] {"EndorsementCC:getval", mode}); + text = helper.invoke("org1", "EndorsementCC:getval", mode); assertThat(text, containsString("val2")); - text = helper.invoke("org1",new String[] {"EndorsementCC:addorgs", mode, "org2MSP"}); + text = helper.invoke("org1", "EndorsementCC:addorgs", mode, "org2MSP"); assertThat(text, containsString("success")); - text = helper.invoke("org1",new String[] {"EndorsementCC:listorgs", mode}); + text = helper.invoke("org1", "EndorsementCC:listorgs", mode); assertThat(text, containsString("org2MSP")); assertThat(text, containsString("org1MSP")); - text = helper.invoke("org1",new String[] {"EndorsementCC:setval", mode, "val3"}); + text = helper.invoke("org1", "EndorsementCC:setval", mode, "val3"); assertThat(text, containsString("success")); - text = helper.invoke("org1",new String[] {"EndorsementCC:getval", mode}); + text = helper.invoke("org1", "EndorsementCC:getval", mode); assertThat(text, containsString("val3")); - text = helper.invoke("org1",new String[] {"EndorsementCC:setval", mode, "val4"}); + text = helper.invoke("org1", "EndorsementCC:setval", mode, "val4"); assertThat(text, containsString("success")); - text = helper.invoke("org1",new String[] {"EndorsementCC:getval", mode}); + text = helper.invoke("org1", "EndorsementCC:getval", mode); assertThat(text, containsString("val4")); - text = helper.invoke("org1",new String[] {"EndorsementCC:delorgs", mode, "org1MSP"}); + text = helper.invoke("org1", "EndorsementCC:delorgs", mode, "org1MSP"); assertThat(text, containsString("success")); - text = helper.invoke("org1",new String[] {"EndorsementCC:listorgs", mode}); + text = helper.invoke("org1", "EndorsementCC:listorgs", mode); assertThat(text, containsString("org2MSP")); assertThat(text, not(containsString("org1MSP"))); - text = helper.invoke("org1",new String[] {"EndorsementCC:deleteval", mode}); + text = helper.invoke("org1", "EndorsementCC:deleteval", mode); assertThat(text, containsString("success")); - text = helper.invoke("org1",new String[] {"EndorsementCC:recordExists", mode}); + text = helper.invoke("org1", "EndorsementCC:recordExists", mode); assertThat(text, containsString("false")); } @Test - public void RunSBE_priv() throws NoSuchAlgorithmException, InvalidKeySpecException, NoSuchProviderException, - IOException, ProposalException, InvalidArgumentException { + public void RunSBE_priv() { final String mode = "priv"; final InvokeHelper helper = InvokeHelper.newHelper("shimcc", "sachannel"); String text; - text = helper.invoke("org1",new String[] {"EndorsementCC:setval", mode, "foo"}); + text = helper.invoke("org1", "EndorsementCC:setval", mode, "foo"); assertThat(text, containsString("success")); - text = helper.invoke("org1",new String[] {"EndorsementCC:getval", mode}); + text = helper.invoke("org1", "EndorsementCC:getval", mode); assertThat(text, containsString("foo")); - text = helper.invoke("org1",new String[] {"EndorsementCC:addorgs", mode, "org1MSP"}); + text = helper.invoke("org1", "EndorsementCC:addorgs", mode, "org1MSP"); assertThat(text, containsString("success")); - text = helper.invoke("org1",new String[] {"EndorsementCC:listorgs", mode}); + text = helper.invoke("org1", "EndorsementCC:listorgs", mode); assertThat(text, containsString("org1MSP")); - text = helper.invoke("org1",new String[] {"EndorsementCC:setval", mode, "val1"}); + text = helper.invoke("org1", "EndorsementCC:setval", mode, "val1"); assertThat(text, containsString("success")); - text = helper.invoke("org1",new String[] {"EndorsementCC:getval", mode}); + text = helper.invoke("org1", "EndorsementCC:getval", mode); assertThat(text, containsString("val1")); - text = helper.invoke("org1",new String[] {"EndorsementCC:setval", mode, "val2"}); + text = helper.invoke("org1", "EndorsementCC:setval", mode, "val2"); assertThat(text, containsString("success")); - text = helper.invoke("org1",new String[] {"EndorsementCC:getval", mode}); + text = helper.invoke("org1", "EndorsementCC:getval", mode); assertThat(text, containsString("val2")); - text = helper.invoke("org1",new String[] {"EndorsementCC:addorgs", mode, "org2MSP"}); + text = helper.invoke("org1", "EndorsementCC:addorgs", mode, "org2MSP"); assertThat(text, containsString("success")); - text = helper.invoke("org1",new String[] {"EndorsementCC:listorgs", mode}); + text = helper.invoke("org1", "EndorsementCC:listorgs", mode); assertThat(text, containsString("org2MSP")); assertThat(text, containsString("org1MSP")); - text = helper.invoke("org1",new String[] {"EndorsementCC:setval", mode, "val3"}); + text = helper.invoke("org1", "EndorsementCC:setval", mode, "val3"); assertThat(text, containsString("success")); - text = helper.invoke("org1",new String[] {"EndorsementCC:getval", mode}); + text = helper.invoke("org1", "EndorsementCC:getval", mode); assertThat(text, containsString("val3")); - text = helper.invoke("org1",new String[] {"EndorsementCC:setval", mode, "val4"}); + text = helper.invoke("org1", "EndorsementCC:setval", mode, "val4"); assertThat(text, containsString("success")); - text = helper.invoke("org1",new String[] {"EndorsementCC:getval", mode}); + text = helper.invoke("org1", "EndorsementCC:getval", mode); assertThat(text, containsString("val4")); - text = helper.invoke("org1",new String[] {"EndorsementCC:delorgs", mode, "org1MSP"}); + text = helper.invoke("org1", "EndorsementCC:delorgs", mode, "org1MSP"); assertThat(text, containsString("success")); - text = helper.invoke("org1",new String[] {"EndorsementCC:listorgs", mode}); + text = helper.invoke("org1", "EndorsementCC:listorgs", mode); assertThat(text, containsString("org2MSP")); assertThat(text, not(containsString("org1MSP"))); - text = helper.invoke("org1",new String[] {"EndorsementCC:deleteval", mode}); + text = helper.invoke("org1", "EndorsementCC:deleteval", mode); assertThat(text, containsString("success")); - text = helper.invoke("org1",new String[] {"EndorsementCC:recordExists", mode}); + text = helper.invoke("org1", "EndorsementCC:recordExists", mode); assertThat(text, containsString("false")); } diff --git a/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/Bash.java b/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/Bash.java index 1ebc87347..b135a48b5 100644 --- a/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/Bash.java +++ b/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/Bash.java @@ -14,7 +14,7 @@ * * */ -public class Bash extends Command { +public final class Bash extends Command { public static BashBuilder newBuilder(){ return new BashBuilder(); diff --git a/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/Command.java b/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/Command.java index d6a7d1f5d..a18a282ec 100644 --- a/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/Command.java +++ b/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/Command.java @@ -7,13 +7,13 @@ package org.hyperleder.fabric.shim.integration.util; import java.io.BufferedReader; -import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintStream; import java.lang.ProcessBuilder.Redirect; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -22,25 +22,21 @@ public class Command { - protected List cmd; - protected Map env; + protected final List cmd; + protected final Map env = new HashMap<>(); Command(List cmd, Map additionalEnv){ this.cmd = cmd; - // this.env = new HashMap(System.getenv()); - this.env = new HashMap(); this.env.putAll(additionalEnv); } Command(List cmd) { - this.cmd = cmd; - this.env = new HashMap(); - // this.env = new HashMap(System.getenv()); + this(cmd, Collections.emptyMap()); } - public class Result { - public ArrayList stdout; - public ArrayList stderr; + public static final class Result { + public List stdout; + public List stderr; public int exitcode; } @@ -62,7 +58,7 @@ public Result run(boolean quiet) { processBuilder.environment().putAll(env); final Result result = new Result(); - System.out.println("Running:" + this.toString()); + System.out.println("Running:" + this); try { processBuilder.redirectInput(Redirect.INHERIT); @@ -103,7 +99,7 @@ public Result run(boolean quiet) { CompletableFuture> readOutStream(InputStream is, PrintStream stream) { return CompletableFuture.supplyAsync(() -> { try (InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr);) { - ArrayList res = new ArrayList(); + ArrayList res = new ArrayList<>(); String inputLine; while ((inputLine = br.readLine()) != null) { if (stream!=null) stream.println(inputLine); @@ -121,6 +117,7 @@ public String toString() { } static public class Builder implements Cloneable { + @SuppressWarnings("unchecked") public Builder duplicate() { try { return (Builder) this.clone(); diff --git a/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/CommandSingleton.java b/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/CommandSingleton.java deleted file mode 100644 index 5adfb2a06..000000000 --- a/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/CommandSingleton.java +++ /dev/null @@ -1,57 +0,0 @@ -/* -Copyright 2020 IBM Corp. All Rights Reserved. - -SPDX-License-Identifier: Apache-2.0 -*/ -package org.hyperleder.fabric.shim.integration.util; - -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.concurrent.Semaphore; - -import org.hyperleder.fabric.shim.integration.util.Docker.DockerBuilder; -import org.hyperleder.fabric.shim.integration.util.DockerCompose.DockerComposeBuilder; - -/** Utility class to run the setup script once */ -public class CommandSingleton { - - private static boolean done = false; - - private static Semaphore flag = new Semaphore(1); - - public static void setup() { - - try { - // things have not been setup up yet - flag.acquire(); - if (done) { - flag.release(); - return; - } - // get current working directory for debug and reference purposes only - Path currentRelativePath = Paths.get(""); - String s = currentRelativePath.toAbsolutePath().toString(); - - // create the docker-compose command - DockerComposeBuilder composebuilder = DockerCompose.newBuilder() - .file("src/test/resources/first-network/docker-compose-cli.yaml"); - - // close down anything running... - composebuilder.duplicate().down().build().run(); - - // ...and bring up - DockerCompose compose = composebuilder.up().detach().build(); - compose.run(); - - // the cli container contains a script that does the channel create, joing - // and chaincode install/instantiate - DockerBuilder dockerBuilder = new Docker.DockerBuilder(); - Docker docker = dockerBuilder.exec().container("cli").script("./scripts/script.sh").build(); - docker.run(); - done = true; - flag.release(); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - } -} \ No newline at end of file diff --git a/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/Docker.java b/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/Docker.java index 769eedcbb..f500d3330 100644 --- a/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/Docker.java +++ b/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/Docker.java @@ -12,13 +12,13 @@ * * */ -public class Docker extends Command { +public final class Docker extends Command { public static DockerBuilder newBuilder(){ return new DockerBuilder(); } - static public class DockerBuilder implements Cloneable { + public static final class DockerBuilder implements Cloneable { boolean exec; String container; String script; diff --git a/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/DockerCompose.java b/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/DockerCompose.java index d841e0150..3beaac556 100644 --- a/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/DockerCompose.java +++ b/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/DockerCompose.java @@ -12,13 +12,13 @@ * * */ -public class DockerCompose extends Command { +public final class DockerCompose extends Command { public static DockerComposeBuilder newBuilder(){ return new DockerComposeBuilder(); } - static public class DockerComposeBuilder extends Command.Builder{ + public static final class DockerComposeBuilder extends Command.Builder{ String composeFile; boolean up = true; diff --git a/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/FabricState.java b/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/FabricState.java index 0954ca470..59909a2a1 100644 --- a/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/FabricState.java +++ b/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/FabricState.java @@ -11,18 +11,16 @@ import java.util.Map; import java.util.concurrent.Semaphore; -import org.hyperleder.fabric.shim.integration.util.Docker.DockerBuilder; -import org.hyperleder.fabric.shim.integration.util.DockerCompose.DockerComposeBuilder; import org.hyperleder.fabric.shim.integration.util.Bash.BashBuilder; -public class FabricState { +public final class FabricState { private static FabricState state; - private static Map channelStarted = new HashMap<>(); + private static final Map channelStarted = new HashMap<>(); // sempaphore to protect access - private static Semaphore flag = new Semaphore(1); + private static final Semaphore flag = new Semaphore(1); public static FabricState getState() { if (state == null) { @@ -49,7 +47,7 @@ public Map orgEnv(String org) { Path currentRelativePath = Paths.get(""); String s = currentRelativePath.toAbsolutePath().toString(); - Map env = new HashMap(); + Map env = new HashMap<>(); env.put("CORE_PEER_MSPCONFIGPATH", Paths.get(s, "src/test/resources/_cfg/_msp/" + org, org + "admin/msp").toString()); diff --git a/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/Peer.java b/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/Peer.java index 59290fbb0..99c19111c 100644 --- a/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/Peer.java +++ b/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/Peer.java @@ -17,13 +17,13 @@ * * */ -public class Peer extends Command { +public final class Peer extends Command { public static PeerBuilder newBuilder(){ return new PeerBuilder(); } - static public class PeerBuilder extends Command.Builder { + public static final class PeerBuilder extends Command.Builder { String tlsArgs; String orderer; String channel; @@ -78,7 +78,7 @@ public PeerBuilder argsTx(List args){ return this; } - public PeerBuilder argsTx(String argsArray[]){ + public PeerBuilder argsTx(String[] argsArray){ this.args = Arrays.asList(argsArray); return this; } From 3b5b2cb27ee7834f0f6d30580c7576ae18e48e4d Mon Sep 17 00:00:00 2001 From: "Mark S. Lewis" Date: Thu, 27 Jul 2023 17:12:23 +0100 Subject: [PATCH 06/18] Update dependencies to address security vulnerabilities (#310) - CVE-2020-15522 - CVE-2023-32732 - CVE-2022-3171 - CVE-2022-3509 - CVE-2022-3510 - CVE-2022-45688 Signed-off-by: Mark S. Lewis --- fabric-chaincode-shim/build.gradle | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/fabric-chaincode-shim/build.gradle b/fabric-chaincode-shim/build.gradle index 097353485..02daa4e56 100644 --- a/fabric-chaincode-shim/build.gradle +++ b/fabric-chaincode-shim/build.gradle @@ -8,7 +8,7 @@ mavenCentral() } dependencies { - classpath 'org.owasp:dependency-check-gradle:7.4.3' + classpath 'org.owasp:dependency-check-gradle:8.2.1' } } @@ -42,18 +42,18 @@ tasks.withType(org.gradle.api.tasks.testing.Test) { dependencies { implementation group: 'org.hyperledger.fabric', name:'fabric-protos', version:'0.2.0' - implementation 'org.bouncycastle:bcpkix-jdk15on:1.62' - implementation 'org.bouncycastle:bcprov-jdk15on:1.62' - implementation group: 'io.github.classgraph', name: 'classgraph', version: '4.8.146' - implementation group: 'com.github.everit-org.json-schema', name: 'org.everit.json.schema', version: '1.14.1' - implementation 'org.json:json:20220320' - implementation group: 'com.google.protobuf', name: 'protobuf-java-util', version: '3.20.1' + implementation 'org.bouncycastle:bcpkix-jdk18on:1.75' + implementation 'org.bouncycastle:bcprov-jdk18on:1.75' + implementation 'io.github.classgraph:classgraph:4.8.161' + implementation group: 'com.github.everit-org.json-schema', name: 'org.everit.json.schema', version: '1.14.2' + implementation 'org.json:json:20230618' + implementation group: 'com.google.protobuf', name: 'protobuf-java-util', version: '3.19.6' // Required if using Java 11+ as no longer bundled in the core libraries testImplementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.3.1' - implementation 'io.grpc:grpc-netty-shaded:1.46.0' - implementation 'io.grpc:grpc-protobuf:1.46.0' - implementation 'io.grpc:grpc-stub:1.46.0' + implementation 'io.grpc:grpc-netty-shaded:1.45.4' + implementation 'io.grpc:grpc-protobuf:1.45.4' + implementation 'io.grpc:grpc-stub:1.45.4' implementation platform("io.opentelemetry:opentelemetry-bom:1.6.0") From 1148b9d7bff8fe8b47947a8a67336c778298e509 Mon Sep 17 00:00:00 2001 From: "Mark S. Lewis" Date: Thu, 7 Sep 2023 14:09:06 +0100 Subject: [PATCH 07/18] Update dependencies to address security vulnerabilities (#314) - CVE-2022-25647 - CVE-2023-2976 - CVE-2020-8908 Also: - Update Gradle wrapper version to resolve Gradle bug in handling certain dependency JAR files. - Update Gradle shadowJar plugin to v7.1.2 (except for bare-gradle contract, since builder uses Gradle v5 if no wrapper is provided). - Add mergeServiceFiles() to test chaincode shadowJar Gradle tasks to resolve an issue with incorrect class versions being loaded from dependencies. - Add ServicesResourceTransformer to test chaincode maven-shade-plugin Maven plugin configuration to resolve an issue with incorrect class versions being loaded from dependencies. - Tidy-up integration test contract dependencies. Signed-off-by: Mark S. Lewis --- dependency-suppression.xml | 38 +++ .../build.gradle | 5 +- .../build.gradle.kts | 5 +- .../gradle/wrapper/gradle-wrapper.jar | Bin 55616 -> 61624 bytes .../gradle/wrapper/gradle-wrapper.properties | 3 +- .../gradlew | 274 +++++++++++------- .../gradlew.bat | 38 +-- .../build.gradle | 5 +- examples/ledger-api/build.gradle | 5 +- .../build.gradle | 2 +- .../src/contracts/bare-gradle/build.gradle | 11 +- .../fabric/example/BareGradle.java | 14 +- .../src/contracts/bare-maven/pom.xml | 76 +---- .../hyperledger/fabric/example/BareMaven.java | 14 +- .../contracts/fabric-ledger-api/build.gradle | 7 +- .../gradle/wrapper/gradle-wrapper.jar | Bin 55616 -> 59203 bytes .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../src/contracts/fabric-ledger-api/gradlew | 35 +-- .../contracts/fabric-ledger-api/gradlew.bat | 25 +- .../fabric/example/AllLedgerAPI.java | 16 +- .../contracts/fabric-shim-api/build.gradle | 13 +- .../gradle/wrapper/gradle-wrapper.jar | Bin 55616 -> 59203 bytes .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../src/contracts/fabric-shim-api/gradlew | 35 +-- .../src/contracts/fabric-shim-api/gradlew.bat | 25 +- .../hyperledger/fabric/example/AllAPI.java | 8 +- .../src/contracts/wrapper-maven/pom.xml | 76 +---- .../fabric/example/WrapperMaven.java | 14 +- .../shim/integration/util/InvokeHelper.java | 9 +- fabric-chaincode-shim/build.gradle | 51 ++-- .../contract/annotation/Serializer.java | 11 +- .../contract/annotation/Transaction.java | 30 +- .../fabric/contract/routing/TxFunction.java | 23 +- .../fabric/ledger/impl/package-info.java | 6 + .../hyperledger/fabric/shim/Chaincode.java | 60 +++- .../shim/ChaincodeServerProperties.java | 140 ++++++++- .../shim/ext/sbe/impl/package-info.java | 6 + .../impl/OpenTelemetryTracesProvider.java | 28 +- .../fabric/traces/impl/package-info.java | 6 + .../impl/OpenTelemetryTracesProviderTest.java | 2 +- gradle/wrapper/gradle-wrapper.jar | Bin 59203 -> 59536 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 2 +- 43 files changed, 650 insertions(+), 474 deletions(-) create mode 100644 dependency-suppression.xml create mode 100644 fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/ledger/impl/package-info.java create mode 100644 fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ext/sbe/impl/package-info.java create mode 100644 fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/traces/impl/package-info.java diff --git a/dependency-suppression.xml b/dependency-suppression.xml new file mode 100644 index 000000000..ead358878 --- /dev/null +++ b/dependency-suppression.xml @@ -0,0 +1,38 @@ + + + + + ^pkg:maven/org\.hyperledger\.fabric/fabric\-protos@.*$ + CVE-2022-31121 + + + + ^pkg:maven/org\.hyperledger\.fabric/fabric\-protos@.*$ + CVE-2022-36023 + + + + ^pkg:maven/io\.opentelemetry\.instrumentation/opentelemetry\-grpc\-1\.6@.*$ + CVE-2023-33953 + + + + ^pkg:maven/io\.opentelemetry\.instrumentation/opentelemetry\-grpc\-1\.6@.*$ + CVE-2023-32732 + + + + ^pkg:maven/org\.json/json@.*$ + CVE-2022-45688 + + diff --git a/examples/fabric-contract-example-as-service/build.gradle b/examples/fabric-contract-example-as-service/build.gradle index 52c3e9336..f6c47455b 100644 --- a/examples/fabric-contract-example-as-service/build.gradle +++ b/examples/fabric-contract-example-as-service/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'com.github.johnrengelman.shadow' version '2.0.3' + id 'com.github.johnrengelman.shadow' version '7.1.2' id 'java' } @@ -21,7 +21,7 @@ repositories { dependencies { compile group: 'org.hyperledger.fabric-chaincode-java', name: 'fabric-chaincode-shim', version: '2.3.+' - compile group: 'org.json', name: 'json', version: '20180813' + compile 'org.json:json:20230618' testImplementation 'org.junit.jupiter:junit-jupiter:5.4.2' testImplementation 'org.assertj:assertj-core:3.11.1' testImplementation 'org.mockito:mockito-core:2.+' @@ -31,6 +31,7 @@ shadowJar { baseName = 'chaincode' version = null classifier = null + mergeServiceFiles() manifest { attributes 'Main-Class': 'org.example.Application' diff --git a/examples/fabric-contract-example-gradle-kotlin/build.gradle.kts b/examples/fabric-contract-example-gradle-kotlin/build.gradle.kts index 667951090..8d9aeab6a 100644 --- a/examples/fabric-contract-example-gradle-kotlin/build.gradle.kts +++ b/examples/fabric-contract-example-gradle-kotlin/build.gradle.kts @@ -5,7 +5,7 @@ import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar plugins { - id("com.github.johnrengelman.shadow") version "5.2.0" + id("com.github.johnrengelman.shadow") version "7.1.2" id("org.jetbrains.kotlin.jvm") version "1.3.41" } @@ -20,7 +20,7 @@ java { dependencies { implementation("org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.5.0") - implementation("org.json:json:20180813") + implementation("org.json:json:20230618") implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8") testImplementation("org.junit.jupiter:junit-jupiter:5.4.2") @@ -44,6 +44,7 @@ tasks { baseName = "chaincode" version = null classifier = null + mergeServiceFiles() manifest { attributes(mapOf("Main-Class" to "org.hyperledger.fabric.contract.ContractRouter")) } diff --git a/examples/fabric-contract-example-gradle-kotlin/gradle/wrapper/gradle-wrapper.jar b/examples/fabric-contract-example-gradle-kotlin/gradle/wrapper/gradle-wrapper.jar index 5c2d1cf016b3885f6930543d57b744ea8c220a1a..afba109285af78dbd2a1d187e33ac4f87c76e392 100644 GIT binary patch delta 41372 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 Jxi9{1{U5iG%Wwby delta 35557 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 XqoF3^qhDD&ThzozkTDYh)YSe09)fh~ diff --git a/examples/fabric-contract-example-gradle-kotlin/gradle/wrapper/gradle-wrapper.properties b/examples/fabric-contract-example-gradle-kotlin/gradle/wrapper/gradle-wrapper.properties index 7c4388a92..4e86b9270 100644 --- a/examples/fabric-contract-example-gradle-kotlin/gradle/wrapper/gradle-wrapper.properties +++ b/examples/fabric-contract-example-gradle-kotlin/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.2-bin.zip +networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/examples/fabric-contract-example-gradle-kotlin/gradlew b/examples/fabric-contract-example-gradle-kotlin/gradlew index 8e25e6c19..65dcd68d6 100755 --- a/examples/fabric-contract-example-gradle-kotlin/gradlew +++ b/examples/fabric-contract-example-gradle-kotlin/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,113 @@ # ############################################################################## -## -## 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"` +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit # 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"' # 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,7 +132,7 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" + 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. Please set the JAVA_HOME variable in your environment to match the @@ -105,84 +140,105 @@ location of your Java installation." 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 +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 -# 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 +# 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. + +# 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" ) -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; 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\"" + 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 - i=$((i+1)) + # 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 - 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" ;; - 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; +# * $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 -# 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" +# 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. +# -# 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")" -fi +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/examples/fabric-contract-example-gradle-kotlin/gradlew.bat b/examples/fabric-contract-example-gradle-kotlin/gradlew.bat index 24467a141..6689b85be 100644 --- a/examples/fabric-contract-example-gradle-kotlin/gradlew.bat +++ b/examples/fabric-contract-example-gradle-kotlin/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/examples/fabric-contract-example-gradle/build.gradle b/examples/fabric-contract-example-gradle/build.gradle index 4b2f2553d..d24a55815 100644 --- a/examples/fabric-contract-example-gradle/build.gradle +++ b/examples/fabric-contract-example-gradle/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'com.github.johnrengelman.shadow' version '2.0.3' + id 'com.github.johnrengelman.shadow' version '7.1.2' id 'java' } @@ -21,7 +21,7 @@ repositories { dependencies { compile group: 'org.hyperledger.fabric-chaincode-java', name: 'fabric-chaincode-shim', version: '2.5.0' - compile group: 'org.json', name: 'json', version: '20180813' + compile 'org.json:json:20230618' testImplementation 'org.junit.jupiter:junit-jupiter:5.4.2' testImplementation 'org.assertj:assertj-core:3.11.1' testImplementation 'org.mockito:mockito-core:2.+' @@ -31,6 +31,7 @@ shadowJar { baseName = 'chaincode' version = null classifier = null + mergeServiceFiles() manifest { attributes 'Main-Class': 'org.hyperledger.fabric.contract.ContractRouter' diff --git a/examples/ledger-api/build.gradle b/examples/ledger-api/build.gradle index d609f2a4e..41aa7cc83 100644 --- a/examples/ledger-api/build.gradle +++ b/examples/ledger-api/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'com.github.johnrengelman.shadow' version '2.0.3' + id 'com.github.johnrengelman.shadow' version '7.1.2' id 'java' } @@ -21,7 +21,7 @@ repositories { dependencies { compile group: 'org.hyperledger.fabric-chaincode-java', name: 'fabric-chaincode-shim', version: '1.4.5' - compile group: 'org.json', name: 'json', version: '20180813' + compile 'org.json:json:20230618' testImplementation 'org.junit.jupiter:junit-jupiter:5.4.2' testImplementation 'org.assertj:assertj-core:3.11.1' testImplementation 'org.mockito:mockito-core:2.+' @@ -31,6 +31,7 @@ shadowJar { baseName = 'chaincode' version = null classifier = null + mergeServiceFiles() manifest { attributes 'Main-Class': 'org.hyperledger.fabric.contract.ContractRouter' diff --git a/fabric-chaincode-integration-test/build.gradle b/fabric-chaincode-integration-test/build.gradle index 9d47ffb1f..41c58429a 100644 --- a/fabric-chaincode-integration-test/build.gradle +++ b/fabric-chaincode-integration-test/build.gradle @@ -1,7 +1,7 @@ dependencies { implementation project(':fabric-chaincode-docker') implementation project(':fabric-chaincode-shim') - implementation group: 'org.json', name: 'json', version: '20180813' + implementation 'org.json:json:20230618' } diff --git a/fabric-chaincode-integration-test/src/contracts/bare-gradle/build.gradle b/fabric-chaincode-integration-test/src/contracts/bare-gradle/build.gradle index 513762998..d1a04496a 100644 --- a/fabric-chaincode-integration-test/src/contracts/bare-gradle/build.gradle +++ b/fabric-chaincode-integration-test/src/contracts/bare-gradle/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'com.github.johnrengelman.shadow' version '5.1.0' + id 'com.github.johnrengelman.shadow' version '5.2.0' id 'java' } @@ -18,18 +18,15 @@ repositories { } dependencies { - implementation group: 'org.hyperledger.fabric-chaincode-java', name: 'fabric-chaincode-shim', version: '2.5.1' - implementation group: 'org.hyperledger.fabric', name:'fabric-protos', version:'0.1.3' - testImplementation group: 'junit', name: 'junit', version: '4.12' - implementation group: 'commons-logging', name: 'commons-logging', version: '1.2' - implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.6' - implementation group: 'com.google.protobuf', name: 'protobuf-java', version: '3.4.0' + implementation'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.5.1' + implementation 'org.hyperledger.fabric:fabric-protos:0.2.+' } shadowJar { baseName = 'chaincode' version = null classifier = null + mergeServiceFiles() manifest { attributes 'Main-Class': 'org.hyperledger.fabric.contract.ContractRouter' diff --git a/fabric-chaincode-integration-test/src/contracts/bare-gradle/src/main/java/org/hyperledger/fabric/example/BareGradle.java b/fabric-chaincode-integration-test/src/contracts/bare-gradle/src/main/java/org/hyperledger/fabric/example/BareGradle.java index 20e80ae73..538e0c2ba 100644 --- a/fabric-chaincode-integration-test/src/contracts/bare-gradle/src/main/java/org/hyperledger/fabric/example/BareGradle.java +++ b/fabric-chaincode-integration-test/src/contracts/bare-gradle/src/main/java/org/hyperledger/fabric/example/BareGradle.java @@ -5,14 +5,12 @@ import org.hyperledger.fabric.contract.Context; import org.hyperledger.fabric.contract.ContractInterface; -import org.hyperledger.fabric.contract.annotation.*; -import org.hyperledger.fabric.metrics.Metrics; -import org.hyperledger.fabric.metrics.MetricsProvider; -import org.hyperledger.fabric.shim.ledger.*; -import org.hyperledger.fabric.shim.*; - -import java.util.*; -import static java.nio.charset.StandardCharsets.UTF_8; +import org.hyperledger.fabric.contract.annotation.Contact; +import org.hyperledger.fabric.contract.annotation.Contract; +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; @Contract(name = "BareGradle", info = @Info(title = "BareGradle contract", diff --git a/fabric-chaincode-integration-test/src/contracts/bare-maven/pom.xml b/fabric-chaincode-integration-test/src/contracts/bare-maven/pom.xml index 5b2158369..51e9df373 100644 --- a/fabric-chaincode-integration-test/src/contracts/bare-maven/pom.xml +++ b/fabric-chaincode-integration-test/src/contracts/bare-maven/pom.xml @@ -14,14 +14,6 @@ 2.5.1 - - 1.2.0 - 1.7.5 - - - 5.3.0-RC1 - 1.3.0-RC1 - @@ -49,75 +41,13 @@ compile - - org.hyperledger.fabric - fabric-protos - 0.1.3 - compile - - - - - - - - org.slf4j - slf4j-api - ${slf4j.version} - compile - - - ch.qos.logback - logback-classic - ${logback.version} - runtime - - - - - org.junit.jupiter - junit-jupiter-api - ${junit.jupiter.version} - compile - - - org.junit.jupiter - junit-jupiter-params - ${junit.jupiter.version} - test - - - org.junit.jupiter - junit-jupiter-engine - ${junit.jupiter.version} - test - - - - org.mockito - mockito-core - 2.10.0 - - - - - org.json - json - 20180813 - - src - - - maven-surefire-plugin - 2.22.0 - maven-compiler-plugin - 3.1 + 3.11.0 ${java.version} ${java.version} @@ -126,7 +56,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.1.0 + 3.5.0 package @@ -136,6 +66,7 @@ chaincode + org.hyperledger.fabric.contract.ContractRouter @@ -158,5 +89,4 @@ - diff --git a/fabric-chaincode-integration-test/src/contracts/bare-maven/src/main/java/org/hyperledger/fabric/example/BareMaven.java b/fabric-chaincode-integration-test/src/contracts/bare-maven/src/main/java/org/hyperledger/fabric/example/BareMaven.java index 6ed910edd..8539bd6a2 100644 --- a/fabric-chaincode-integration-test/src/contracts/bare-maven/src/main/java/org/hyperledger/fabric/example/BareMaven.java +++ b/fabric-chaincode-integration-test/src/contracts/bare-maven/src/main/java/org/hyperledger/fabric/example/BareMaven.java @@ -5,14 +5,12 @@ import org.hyperledger.fabric.contract.Context; import org.hyperledger.fabric.contract.ContractInterface; -import org.hyperledger.fabric.contract.annotation.*; -import org.hyperledger.fabric.metrics.Metrics; -import org.hyperledger.fabric.metrics.MetricsProvider; -import org.hyperledger.fabric.shim.ledger.*; -import org.hyperledger.fabric.shim.*; - -import java.util.*; -import static java.nio.charset.StandardCharsets.UTF_8; +import org.hyperledger.fabric.contract.annotation.Contact; +import org.hyperledger.fabric.contract.annotation.Contract; +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; @Contract(name = "BareMaven", info = @Info(title = "BareGradle contract", diff --git a/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/build.gradle b/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/build.gradle index 681668a34..8762d6bd2 100644 --- a/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/build.gradle +++ b/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'com.github.johnrengelman.shadow' version '5.1.0' + id 'com.github.johnrengelman.shadow' version '7.1.2' id 'java' } @@ -18,14 +18,15 @@ repositories { } dependencies { - implementation group: 'org.hyperledger.fabric-chaincode-java', name: 'fabric-chaincode-shim', version: '2.5.1' - testImplementation group: 'junit', name: 'junit', version: '4.12' + implementation'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.5.1' + implementation 'org.hyperledger.fabric:fabric-protos:0.2.+' } shadowJar { baseName = 'chaincode' version = null classifier = null + mergeServiceFiles() manifest { attributes 'Main-Class': 'org.hyperledger.fabric.contract.ContractRouter' diff --git a/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradle/wrapper/gradle-wrapper.jar b/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradle/wrapper/gradle-wrapper.jar index 5c2d1cf016b3885f6930543d57b744ea8c220a1a..e708b1c023ec8b20f512888fe07c5bd3ff77bb8f 100644 GIT binary patch delta 23334 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 WDWbsF$p{Gi@ZUasP|4|kdH)CXgbPdn delta 19998 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 diff --git a/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradle/wrapper/gradle-wrapper.properties b/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradle/wrapper/gradle-wrapper.properties index f371643ee..98debb84d 100644 --- a/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradle/wrapper/gradle-wrapper.properties +++ b/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.0-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.2-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradlew b/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradlew index 8e25e6c19..4f906e0c8 100755 --- a/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradlew +++ b/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradlew @@ -82,6 +82,7 @@ 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 @@ -125,10 +126,11 @@ if $darwin; then GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" fi -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then +# 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 @@ -154,19 +156,19 @@ if $cygwin ; then else eval `echo args$i`="\"$arg\"" fi - i=$((i+1)) + 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" ;; + 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" ;; esac fi @@ -175,14 +177,9 @@ save () { for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done echo " " } -APP_ARGS=$(save "$@") +APP_ARGS=`save "$@"` # 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" -# 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")" -fi - exec "$JAVACMD" "$@" diff --git a/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradlew.bat b/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradlew.bat index 24467a141..ac1b06f93 100644 --- a/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradlew.bat +++ b/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradlew.bat @@ -29,6 +29,9 @@ if "%DIRNAME%" == "" set DIRNAME=. 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 +40,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%" == "0" goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -51,7 +54,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,28 +64,14 @@ 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 diff --git a/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/src/main/java/org/hyperledger/fabric/example/AllLedgerAPI.java b/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/src/main/java/org/hyperledger/fabric/example/AllLedgerAPI.java index 309bb09ac..c0ea6944a 100644 --- a/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/src/main/java/org/hyperledger/fabric/example/AllLedgerAPI.java +++ b/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/src/main/java/org/hyperledger/fabric/example/AllLedgerAPI.java @@ -3,17 +3,15 @@ */ package org.hyperledger.fabric.example; - - import org.hyperledger.fabric.contract.Context; import org.hyperledger.fabric.contract.ContractInterface; -import org.hyperledger.fabric.contract.annotation.*; - - -import org.hyperledger.fabric.ledger.*; - -import java.util.*; -import static java.nio.charset.StandardCharsets.UTF_8; +import org.hyperledger.fabric.contract.annotation.Contact; +import org.hyperledger.fabric.contract.annotation.Contract; +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.ledger.Ledger; @Contract(name = "AllLedgerAPI", info = @Info(title = "AllLedgerAPI contract", diff --git a/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/build.gradle b/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/build.gradle index 513762998..fa796caf9 100644 --- a/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/build.gradle +++ b/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'com.github.johnrengelman.shadow' version '5.1.0' + id 'com.github.johnrengelman.shadow' version '7.1.2' id 'java' } @@ -18,18 +18,17 @@ repositories { } dependencies { - implementation group: 'org.hyperledger.fabric-chaincode-java', name: 'fabric-chaincode-shim', version: '2.5.1' - implementation group: 'org.hyperledger.fabric', name:'fabric-protos', version:'0.1.3' - testImplementation group: 'junit', name: 'junit', version: '4.12' - implementation group: 'commons-logging', name: 'commons-logging', version: '1.2' - implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.6' - implementation group: 'com.google.protobuf', name: 'protobuf-java', version: '3.4.0' + implementation'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.5.1' + implementation 'org.hyperledger.fabric:fabric-protos:0.2.+' + implementation 'commons-logging:commons-logging:1.2' + implementation 'com.google.code.gson:gson:2.10.1' } shadowJar { baseName = 'chaincode' version = null classifier = null + mergeServiceFiles() manifest { attributes 'Main-Class': 'org.hyperledger.fabric.contract.ContractRouter' diff --git a/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradle/wrapper/gradle-wrapper.jar b/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradle/wrapper/gradle-wrapper.jar index 5c2d1cf016b3885f6930543d57b744ea8c220a1a..e708b1c023ec8b20f512888fe07c5bd3ff77bb8f 100644 GIT binary patch delta 23334 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 WDWbsF$p{Gi@ZUasP|4|kdH)CXgbPdn delta 19998 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 diff --git a/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradle/wrapper/gradle-wrapper.properties b/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradle/wrapper/gradle-wrapper.properties index f371643ee..98debb84d 100644 --- a/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradle/wrapper/gradle-wrapper.properties +++ b/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.0-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.2-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradlew b/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradlew index 8e25e6c19..4f906e0c8 100755 --- a/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradlew +++ b/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradlew @@ -82,6 +82,7 @@ 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 @@ -125,10 +126,11 @@ if $darwin; then GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" fi -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then +# 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 @@ -154,19 +156,19 @@ if $cygwin ; then else eval `echo args$i`="\"$arg\"" fi - i=$((i+1)) + 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" ;; + 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" ;; esac fi @@ -175,14 +177,9 @@ save () { for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done echo " " } -APP_ARGS=$(save "$@") +APP_ARGS=`save "$@"` # 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" -# 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")" -fi - exec "$JAVACMD" "$@" diff --git a/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradlew.bat b/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradlew.bat index 24467a141..ac1b06f93 100644 --- a/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradlew.bat +++ b/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradlew.bat @@ -29,6 +29,9 @@ if "%DIRNAME%" == "" set DIRNAME=. 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 +40,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%" == "0" goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -51,7 +54,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,28 +64,14 @@ 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 diff --git a/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/src/main/java/org/hyperledger/fabric/example/AllAPI.java b/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/src/main/java/org/hyperledger/fabric/example/AllAPI.java index 630c584f3..5c58ba140 100644 --- a/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/src/main/java/org/hyperledger/fabric/example/AllAPI.java +++ b/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/src/main/java/org/hyperledger/fabric/example/AllAPI.java @@ -5,12 +5,16 @@ import org.hyperledger.fabric.contract.Context; import org.hyperledger.fabric.contract.ContractInterface; -import org.hyperledger.fabric.contract.annotation.*; +import org.hyperledger.fabric.contract.annotation.Contact; +import org.hyperledger.fabric.contract.annotation.Contract; +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.metrics.Metrics; import org.hyperledger.fabric.metrics.MetricsProvider; import org.hyperledger.fabric.shim.ledger.*; import org.hyperledger.fabric.shim.*; -import java.util.*; import static java.nio.charset.StandardCharsets.UTF_8; @Contract(name = "AllAPI", diff --git a/fabric-chaincode-integration-test/src/contracts/wrapper-maven/pom.xml b/fabric-chaincode-integration-test/src/contracts/wrapper-maven/pom.xml index c3df85b9b..069665ac4 100644 --- a/fabric-chaincode-integration-test/src/contracts/wrapper-maven/pom.xml +++ b/fabric-chaincode-integration-test/src/contracts/wrapper-maven/pom.xml @@ -14,14 +14,6 @@ 2.5.1 - - 1.2.0 - 1.7.5 - - - 5.3.0-RC1 - 1.3.0-RC1 - @@ -49,75 +41,13 @@ compile - - org.hyperledger.fabric - fabric-protos - 0.1.3 - compile - - - - - - - - org.slf4j - slf4j-api - ${slf4j.version} - compile - - - ch.qos.logback - logback-classic - ${logback.version} - runtime - - - - - org.junit.jupiter - junit-jupiter-api - ${junit.jupiter.version} - compile - - - org.junit.jupiter - junit-jupiter-params - ${junit.jupiter.version} - test - - - org.junit.jupiter - junit-jupiter-engine - ${junit.jupiter.version} - test - - - - org.mockito - mockito-core - 2.10.0 - - - - - org.json - json - 20180813 - - src - - - maven-surefire-plugin - 2.22.0 - maven-compiler-plugin - 3.1 + 3.11.0 ${java.version} ${java.version} @@ -126,7 +56,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.1.0 + 3.5.0 package @@ -136,6 +66,7 @@ chaincode + org.hyperledger.fabric.contract.ContractRouter @@ -158,5 +89,4 @@ - diff --git a/fabric-chaincode-integration-test/src/contracts/wrapper-maven/src/main/java/org/hyperledger/fabric/example/WrapperMaven.java b/fabric-chaincode-integration-test/src/contracts/wrapper-maven/src/main/java/org/hyperledger/fabric/example/WrapperMaven.java index b92be287e..436751ba3 100644 --- a/fabric-chaincode-integration-test/src/contracts/wrapper-maven/src/main/java/org/hyperledger/fabric/example/WrapperMaven.java +++ b/fabric-chaincode-integration-test/src/contracts/wrapper-maven/src/main/java/org/hyperledger/fabric/example/WrapperMaven.java @@ -5,14 +5,12 @@ import org.hyperledger.fabric.contract.Context; import org.hyperledger.fabric.contract.ContractInterface; -import org.hyperledger.fabric.contract.annotation.*; -import org.hyperledger.fabric.metrics.Metrics; -import org.hyperledger.fabric.metrics.MetricsProvider; -import org.hyperledger.fabric.shim.ledger.*; -import org.hyperledger.fabric.shim.*; - -import java.util.*; -import static java.nio.charset.StandardCharsets.UTF_8; +import org.hyperledger.fabric.contract.annotation.Contact; +import org.hyperledger.fabric.contract.annotation.Contract; +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; @Contract(name = "WrapperMaven", info = @Info(title = "BareGradle contract", diff --git a/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/InvokeHelper.java b/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/InvokeHelper.java index b8ee128eb..971cb2529 100644 --- a/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/InvokeHelper.java +++ b/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/InvokeHelper.java @@ -1,11 +1,12 @@ package org.hyperleder.fabric.shim.integration.util; -import java.util.Map; -import java.util.stream.Collectors; - import org.hyperleder.fabric.shim.integration.util.Command.Result; import org.hyperleder.fabric.shim.integration.util.Peer.PeerBuilder; +import java.util.Arrays; +import java.util.Map; +import java.util.stream.Collectors; + public class InvokeHelper { private String ccname; @@ -33,6 +34,8 @@ public String invoke(String org, String... args){ .trim(); if (!text.contains("result: status:200")){ + Command logsCommand = new Command(Arrays.asList("docker", "logs", "microfab"), orgEnv); + logsCommand.run(); throw new RuntimeException(text); } diff --git a/fabric-chaincode-shim/build.gradle b/fabric-chaincode-shim/build.gradle index 02daa4e56..86ee2bcd9 100644 --- a/fabric-chaincode-shim/build.gradle +++ b/fabric-chaincode-shim/build.gradle @@ -8,7 +8,7 @@ mavenCentral() } dependencies { - classpath 'org.owasp:dependency-check-gradle:8.2.1' + classpath 'org.owasp:dependency-check-gradle:8.4.0' } } @@ -22,7 +22,7 @@ plugins { apply plugin: 'org.owasp.dependencycheck' checkstyle { - toolVersion '8.29' + toolVersion '10.12.2' configFile file("../ci/checkstyle/checkstyle.xml") configProperties = [root_dir: file("..") ] } @@ -34,6 +34,11 @@ checkstyleTest { source ='src/test/java' } +dependencyCheck { + suppressionFile='dependency-suppression.xml' + scanConfigurations = ['runtimeClasspath'] +} + check.dependsOn dependencyCheckAnalyze tasks.withType(org.gradle.api.tasks.testing.Test) { @@ -41,30 +46,32 @@ tasks.withType(org.gradle.api.tasks.testing.Test) { } dependencies { - implementation group: 'org.hyperledger.fabric', name:'fabric-protos', version:'0.2.0' - implementation 'org.bouncycastle:bcpkix-jdk18on:1.75' - implementation 'org.bouncycastle:bcprov-jdk18on:1.75' - implementation 'io.github.classgraph:classgraph:4.8.161' - implementation group: 'com.github.everit-org.json-schema', name: 'org.everit.json.schema', version: '1.14.2' + implementation 'org.hyperledger.fabric:fabric-protos:0.2.1' + implementation 'org.bouncycastle:bcpkix-jdk18on:1.76' + implementation 'org.bouncycastle:bcprov-jdk18on:1.76' + implementation 'io.github.classgraph:classgraph:4.8.162' + implementation 'com.github.everit-org.json-schema:org.everit.json.schema:1.14.2' implementation 'org.json:json:20230618' - implementation group: 'com.google.protobuf', name: 'protobuf-java-util', version: '3.19.6' + implementation 'com.google.protobuf:protobuf-java-util:3.22.5' // Required if using Java 11+ as no longer bundled in the core libraries - testImplementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.3.1' - implementation 'io.grpc:grpc-netty-shaded:1.45.4' - implementation 'io.grpc:grpc-protobuf:1.45.4' - implementation 'io.grpc:grpc-stub:1.45.4' - - implementation platform("io.opentelemetry:opentelemetry-bom:1.6.0") - - implementation "io.opentelemetry:opentelemetry-api" - implementation "io.opentelemetry:opentelemetry-proto:1.6.0-alpha" - implementation "io.opentelemetry:opentelemetry-sdk" - implementation "io.opentelemetry:opentelemetry-sdk-extension-autoconfigure:1.6.0-alpha" - implementation "io.opentelemetry:opentelemetry-sdk-trace" + testImplementation 'javax.xml.bind:jaxb-api:2.3.1' + + implementation platform('io.grpc:grpc-bom:1.57.2') + implementation 'io.grpc:grpc-netty-shaded' + implementation 'io.grpc:grpc-protobuf' + implementation 'io.grpc:grpc-stub' + + implementation platform("io.opentelemetry:opentelemetry-bom:1.29.0") + + implementation 'io.opentelemetry:opentelemetry-api' + implementation 'io.opentelemetry.proto:opentelemetry-proto:1.0.0-alpha' + implementation 'io.opentelemetry:opentelemetry-sdk' + implementation 'io.opentelemetry:opentelemetry-sdk-extension-autoconfigure' + implementation 'io.opentelemetry:opentelemetry-sdk-trace' implementation 'io.opentelemetry:opentelemetry-exporter-otlp' - implementation 'io.opentelemetry:opentelemetry-extension-trace-propagators:1.6.0' - implementation "io.opentelemetry.instrumentation:opentelemetry-grpc-1.6:1.5.3-alpha" + implementation 'io.opentelemetry:opentelemetry-extension-trace-propagators' + implementation 'io.opentelemetry.instrumentation:opentelemetry-grpc-1.6:1.29.0-alpha' } dependencyCheck { diff --git a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/annotation/Serializer.java b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/annotation/Serializer.java index ba0ebb230..10ff45d65 100644 --- a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/annotation/Serializer.java +++ b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/annotation/Serializer.java @@ -15,7 +15,7 @@ * Class level annotation that defines the serializer that should be used to * convert objects to and from the wire format. * - * This should annotate a class that implements the Serializer interface + *

This should annotate a class that implements the Serializer interface

*/ @Retention(RUNTIME) @Target({ElementType.TYPE, ElementType.TYPE_USE}) @@ -25,7 +25,14 @@ * */ enum TARGET { - TRANSACTION, ALL + /** + * Target transaction functions. + */ + TRANSACTION, + /** + * Target all elements. + */ + ALL } /** diff --git a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/annotation/Transaction.java b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/annotation/Transaction.java index 5bdf8c95a..c9180ca46 100644 --- a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/annotation/Transaction.java +++ b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/annotation/Transaction.java @@ -29,20 +29,27 @@ public @interface Transaction { /** - * SUBMIT or EVALUATE semantics. + * The intended invocation style for a transaction function. */ enum TYPE { - SUBMIT, EVALUATE + /** + * Transaction is used to submit updates to the ledger. + */ + SUBMIT, + /** + * Transaction is evaluated to query information from the ledger. + */ + EVALUATE } /** * Submit semantics. * - * TRUE indicates that this function is intended to be called with the 'submit' - * semantics + *

TRUE indicates that this function is intended to be called with the 'submit' + * semantics

* - * FALSE indicates that this is intended to be called with the evaluate - * semantics + *

FALSE indicates that this is intended to be called with the evaluate + * semantics

* * @return boolean, default is true * @deprecated Please use intent @@ -52,11 +59,12 @@ enum TYPE { /** * What are submit semantics for this transaction. - * - * SUBMIT - indicates that this function is intended to be called with the - * 'submit' semantics EVALUATE - indicates that this is intended to be called - * with the 'evaluate' semantics - * + *
+ *
SUBMIT
indicates that this function is intended to be called with the + * 'submit' semantics
+ *
EVALUATE
indicates that this is intended to be called + * with the 'evaluate' semantics
+ *
* @return submit semantics */ TYPE intent() default Transaction.TYPE.SUBMIT; diff --git a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/TxFunction.java b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/TxFunction.java index b2df42030..860e22783 100644 --- a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/TxFunction.java +++ b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/TxFunction.java @@ -15,13 +15,32 @@ public interface TxFunction { interface Routing { - + /** + * Method to route calls to the transaction function. + * @return a method. + */ Method getMethod(); + /** + * The associated contract class. + * @return a contract class. + */ Class getContractClass(); + /** + * The associated contract instance. + * @return a contract. + * @throws IllegalAccessException + * @throws InstantiationException + * @throws InvocationTargetException + * @throws NoSuchMethodException + */ ContractInterface getContractInstance() throws IllegalAccessException, InstantiationException, InvocationTargetException, NoSuchMethodException; + /** + * Name of the serializer used for the transaction function. + * @return a serializer name. + */ String getSerializerName(); } @@ -31,7 +50,7 @@ interface Routing { boolean isUnknownTx(); /** - * @param unknown + * @param unknown true if the transaction is to be called when the request fn is unknown; otherwise false. */ void setUnknownTx(boolean unknown); diff --git a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/ledger/impl/package-info.java b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/ledger/impl/package-info.java new file mode 100644 index 000000000..96b288ea9 --- /dev/null +++ b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/ledger/impl/package-info.java @@ -0,0 +1,6 @@ +/* + * Copyright 2023 IBM All Rights Reserved. + * + * SPDX-License-Identifier: Apache-2.0 + */ +package org.hyperledger.fabric.ledger.impl; diff --git a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/Chaincode.java b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/Chaincode.java index 8209c6660..046595df3 100644 --- a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/Chaincode.java +++ b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/Chaincode.java @@ -39,23 +39,38 @@ public interface Chaincode { * and{@link #invoke(ChaincodeStub)} */ class Response { - private final int statusCode; private final String message; private final byte[] payload; + /** + * Constructor. + * @param status a status object. + * @param message a response message. + * @param payload a response payload. + */ public Response(final Status status, final String message, final byte[] payload) { this.statusCode = status.getCode(); this.message = message; this.payload = payload; } + /** + * Constructor. + * @param statusCode a status code. + * @param message a response message. + * @param payload a response payload. + */ public Response(final int statusCode, final String message, final byte[] payload) { this.statusCode = statusCode; this.message = message; this.payload = payload; } + /** + * Get the response status. + * @return status. + */ public Status getStatus() { if (Status.hasStatusForCode(statusCode)) { return Status.forCode(statusCode); @@ -64,18 +79,34 @@ public Status getStatus() { } } + /** + * Get the response status code. + * @return status code. + */ public int getStatusCode() { return statusCode; } + /** + * Get the response message. + * @return a message. + */ public String getMessage() { return message; } + /** + * Get the response payload. + * @return payload bytes. + */ public byte[] getPayload() { return payload; } + /** + * Get the response payload as a UTF-8 string. + * @return a string. + */ public String getStringPayload() { return (payload == null) ? null : new String(payload, UTF_8); } @@ -84,7 +115,18 @@ public String getStringPayload() { * {@link Response} status enum. */ public enum Status { - SUCCESS(200), ERROR_THRESHOLD(400), INTERNAL_SERVER_ERROR(500); + /** + * Successful response status. + */ + SUCCESS(200), + /** + * Minimum threshold for as error status code. + */ + ERROR_THRESHOLD(400), + /** + * Server-side error status. + */ + INTERNAL_SERVER_ERROR(500); private static final Map CODETOSTATUS = new HashMap<>(); private final int code; @@ -93,10 +135,19 @@ public enum Status { this.code = code; } + /** + * Get the status code associated with this status object. + * @return a status code. + */ public int getCode() { return code; } + /** + * Get a status object for a given status code. + * @param code a status code. + * @return a status object. + */ public static Status forCode(final int code) { final Status result = CODETOSTATUS.get(code); if (result == null) { @@ -105,6 +156,11 @@ public static Status forCode(final int code) { return result; } + /** + * Whether a status exists for a given status code. + * @param code a status code. + * @return True if a status for the code exists; otherwise false. + */ public static boolean hasStatusForCode(final int code) { return CODETOSTATUS.containsKey(code); } diff --git a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ChaincodeServerProperties.java b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ChaincodeServerProperties.java index 6e9f01922..27c842572 100644 --- a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ChaincodeServerProperties.java +++ b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ChaincodeServerProperties.java @@ -8,14 +8,13 @@ import java.net.SocketAddress; public final class ChaincodeServerProperties { - private SocketAddress serverAddress; - private int maxInboundMetadataSize = 100 * 1024 * 1024; - private int maxInboundMessageSize = 100 * 1024 * 1024; - private int maxConnectionAgeSeconds = 5; - private int keepAliveTimeoutSeconds = 20; - private int permitKeepAliveTimeMinutes = 1; - private int keepAliveTimeMinutes = 1; + private int maxInboundMetadataSize = 100 * 1024 * 1024; // checkstyle:ignore-line:MagicNumber + private int maxInboundMessageSize = 100 * 1024 * 1024; // checkstyle:ignore-line:MagicNumber + private int maxConnectionAgeSeconds = 5; // checkstyle:ignore-line:MagicNumber + private int keepAliveTimeoutSeconds = 20; // checkstyle:ignore-line:MagicNumber + private int permitKeepAliveTimeMinutes = 1; // checkstyle:ignore-line:MagicNumber + private int keepAliveTimeMinutes = 1; // checkstyle:ignore-line:MagicNumber private boolean permitKeepAliveWithoutCalls = true; private String keyPassword; private String keyCertChainFile; @@ -23,9 +22,24 @@ public final class ChaincodeServerProperties { private String trustCertCollectionFile; private boolean tlsEnabled = false; + /** + * Constructor using default configuration. + */ public ChaincodeServerProperties() { } + /** + * Constructor. + * @param portChaincodeServer ignored. + * @param maxInboundMetadataSize the maximum metadata size allowed to be received by the server. + * @param maxInboundMessageSize the maximum message size allowed to be received by the server. + * @param maxConnectionAgeSeconds the maximum connection age in seconds. + * @param keepAliveTimeoutSeconds timeout for a keep-alive ping request in seconds. + * @param permitKeepAliveTimeMinutes the most aggressive keep-alive time clients are permitted to configure in minutes. + * @param keepAliveTimeMinutes delay before server sends a keep-alive in minutes. + * @param permitKeepAliveWithoutCalls whether clients are allowed to send keep-alive HTTP/2 PINGs even if there are no outstanding RPCs on the connection. + */ + // checkstyle:ignore-next-line:ParameterNumber public ChaincodeServerProperties( final int portChaincodeServer, final int maxInboundMetadataSize, final int maxInboundMessageSize, final int maxConnectionAgeSeconds, final int keepAliveTimeoutSeconds, final int permitKeepAliveTimeMinutes, @@ -41,114 +55,226 @@ public ChaincodeServerProperties( this.permitKeepAliveWithoutCalls = permitKeepAliveWithoutCalls; } + /** + * The maximum size of metadata allowed to be received. + * @return The maximum metadata size allowed. + */ public int getMaxInboundMetadataSize() { return maxInboundMetadataSize; } + /** + * Sets the maximum metadata size allowed to be received by the server. + * @param maxInboundMetadataSize The new maximum size allowed for incoming metadata. + */ public void setMaxInboundMetadataSize(final int maxInboundMetadataSize) { this.maxInboundMetadataSize = maxInboundMetadataSize; } + /** + * The maximum message size allowed to be received by the server. + * @return the maximum message size allowed. + */ public int getMaxInboundMessageSize() { return maxInboundMessageSize; } + /** + * Sets the maximum message size allowed to be received by the server. + * @param maxInboundMessageSize The new maximum size allowed for incoming messages. + */ public void setMaxInboundMessageSize(final int maxInboundMessageSize) { this.maxInboundMessageSize = maxInboundMessageSize; } + /** + * The maximum connection age. + * @return The maximum connection age in seconds. + */ public int getMaxConnectionAgeSeconds() { return maxConnectionAgeSeconds; } + /** + * Specify a maximum connection age. + * @param maxConnectionAgeSeconds The maximum connection age in seconds. + */ public void setMaxConnectionAgeSeconds(final int maxConnectionAgeSeconds) { this.maxConnectionAgeSeconds = maxConnectionAgeSeconds; } + /** + * The timeout for a keep-alive ping requests. + * @return timeout in seconds. + */ public int getKeepAliveTimeoutSeconds() { return keepAliveTimeoutSeconds; } + /** + * Set the timeout for keep-alive ping requests. + * @param keepAliveTimeoutSeconds timeout in seconds. + */ public void setKeepAliveTimeoutSeconds(final int keepAliveTimeoutSeconds) { this.keepAliveTimeoutSeconds = keepAliveTimeoutSeconds; } + /** + * The most aggressive keep-alive time clients are permitted to configure. + * @return time in minutes. + */ public int getPermitKeepAliveTimeMinutes() { return permitKeepAliveTimeMinutes; } + /** + * Specify the most aggressive keep-alive time clients are permitted to configure. + * @param permitKeepAliveTimeMinutes time in minutes. + */ public void setPermitKeepAliveTimeMinutes(final int permitKeepAliveTimeMinutes) { this.permitKeepAliveTimeMinutes = permitKeepAliveTimeMinutes; } + /** + * The delay before the server sends a keep-alive. + * @return delay in minutes. + */ public int getKeepAliveTimeMinutes() { return keepAliveTimeMinutes; } + /** + * Set the delay before the server sends a keep-alive. + * @param keepAliveTimeMinutes delay in minutes. + */ public void setKeepAliveTimeMinutes(final int keepAliveTimeMinutes) { this.keepAliveTimeMinutes = keepAliveTimeMinutes; } + /** + * Whether clients are allowed to send keep-alive HTTP/2 PINGs even if there are no outstanding RPCs on the connection. + * @return true if clients are allowed to send keep-alive requests without calls; otherwise false. + */ public boolean getPermitKeepAliveWithoutCalls() { return permitKeepAliveWithoutCalls; } + /** + * Get the server socket address. + * @return a socket address. + */ public SocketAddress getServerAddress() { return serverAddress; } + /** + * Set the server socket address. + * @param address a socket address. + */ public void setServerAddress(final SocketAddress address) { this.serverAddress = address; } + /** + * Whether clients are allowed to send keep-alive HTTP/2 PINGs even if there are no outstanding RPCs on the connection. + * @return true if clients are allowed to send keep-alive requests without calls; otherwise false. + */ public boolean isPermitKeepAliveWithoutCalls() { return permitKeepAliveWithoutCalls; } + /** + * Specify whether clients are allowed to send keep-alive HTTP/2 PINGs even if there are no outstanding RPCs on the connection. + * @param permitKeepAliveWithoutCalls Whether to allow clients to send keep-alive requests without calls. + */ public void setPermitKeepAliveWithoutCalls(final boolean permitKeepAliveWithoutCalls) { this.permitKeepAliveWithoutCalls = permitKeepAliveWithoutCalls; } + /** + * Password used to access the server key. + * @return a password. + */ public String getKeyPassword() { return keyPassword; } + /** + * Set the password used to access the server key. + * @param keyPassword a password. + */ public void setKeyPassword(final String keyPassword) { this.keyPassword = keyPassword; } + /** + * Server keychain file name. + * @return a file name. + */ public String getKeyCertChainFile() { return keyCertChainFile; } + /** + * Set the server keychain file name. + * @param keyCertChainFile a file name. + */ public void setKeyCertChainFile(final String keyCertChainFile) { this.keyCertChainFile = keyCertChainFile; } + /** + * Server key file name. + * @return a file name. + */ public String getKeyFile() { return keyFile; } + /** + * Set the server key file name. + * @param keyFile a file name. + */ public void setKeyFile(final String keyFile) { this.keyFile = keyFile; } + /** + * Server trust certificate collection file name. + * @return a file name. + */ public String getTrustCertCollectionFile() { return trustCertCollectionFile; } + /** + * Set the server trust certificate collection file name. + * @param trustCertCollectionFile a file name. + */ public void setTrustCertCollectionFile(final String trustCertCollectionFile) { this.trustCertCollectionFile = trustCertCollectionFile; } + /** + * Whether TLS is enabled for the server. + * @return true if TLS is enabled; otherwise false. + */ public boolean isTlsEnabled() { return tlsEnabled; } + /** + * Set whether TLS is enabled for the server. + * @param tlsEnabled true to enable TLS; otherwise false. + */ public void setTlsEnabled(final boolean tlsEnabled) { this.tlsEnabled = tlsEnabled; } + /** + * Check that all the server property values are valid. + * @throws IllegalArgumentException if any properties are not valid. + */ public void validate() { if (this.getServerAddress() == null) { throw new IllegalArgumentException("chaincodeServerProperties.getServerAddress() must be set"); diff --git a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ext/sbe/impl/package-info.java b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ext/sbe/impl/package-info.java new file mode 100644 index 000000000..f4f3bb511 --- /dev/null +++ b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ext/sbe/impl/package-info.java @@ -0,0 +1,6 @@ +/* + * Copyright 2023 IBM All Rights Reserved. + * + * SPDX-License-Identifier: Apache-2.0 + */ +package org.hyperledger.fabric.shim.ext.sbe.impl; diff --git a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/traces/impl/OpenTelemetryTracesProvider.java b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/traces/impl/OpenTelemetryTracesProvider.java index 5610985b1..dd15f05e4 100644 --- a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/traces/impl/OpenTelemetryTracesProvider.java +++ b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/traces/impl/OpenTelemetryTracesProvider.java @@ -11,12 +11,14 @@ import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.api.trace.Tracer; import io.opentelemetry.context.Context; -import io.opentelemetry.instrumentation.grpc.v1_6.GrpcTracing; -import io.opentelemetry.sdk.autoconfigure.OpenTelemetrySdkAutoConfiguration; +import io.opentelemetry.instrumentation.grpc.v1_6.GrpcTelemetry; +import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk; import io.opentelemetry.semconv.resource.attributes.ResourceAttributes; import org.hyperledger.fabric.shim.ChaincodeStub; import org.hyperledger.fabric.traces.TracesProvider; +import java.util.HashMap; +import java.util.Map; import java.util.Properties; public final class OpenTelemetryTracesProvider implements TracesProvider { @@ -26,17 +28,31 @@ public final class OpenTelemetryTracesProvider implements TracesProvider { private static final String CORE_CHAINCODE_ID_NAME = "CORE_CHAINCODE_ID_NAME"; private Tracer tracer; - private GrpcTracing grpcTracer; + private GrpcTelemetry grpcTracer; @Override public void initialize(final Properties props) { String serviceName = props.getProperty(CORE_CHAINCODE_ID_NAME, "unknown"); props.setProperty(ResourceAttributes.SERVICE_NAME.getKey(), serviceName); - OpenTelemetry openTelemetry = OpenTelemetrySdkAutoConfiguration.initialize(false, - new OpenTelemetryProperties(System.getenv(), System.getProperties(), props)); + OpenTelemetry openTelemetry = AutoConfiguredOpenTelemetrySdk.builder() + .addPropertiesSupplier(() -> getOpenTelemetryProperties(props)) + .build() + .getOpenTelemetrySdk(); + tracer = openTelemetry.getTracerProvider().get("org.hyperledger.traces"); - grpcTracer = GrpcTracing.newBuilder(openTelemetry).build(); + grpcTracer = GrpcTelemetry.create(openTelemetry); + } + + private Map getOpenTelemetryProperties(final Properties props) { + Map results = new HashMap<>(System.getenv()); + + Properties systemProps = System.getProperties(); + systemProps.stringPropertyNames().forEach(key -> results.put(key, systemProps.getProperty(key))); + + props.stringPropertyNames().forEach(key -> results.put(key, props.getProperty(key))); + + return results; } @Override diff --git a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/traces/impl/package-info.java b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/traces/impl/package-info.java new file mode 100644 index 000000000..b8aef10b1 --- /dev/null +++ b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/traces/impl/package-info.java @@ -0,0 +1,6 @@ +/* + * Copyright 2023 IBM All Rights Reserved. + * + * SPDX-License-Identifier: Apache-2.0 + */ +package org.hyperledger.fabric.traces.impl; diff --git a/fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/traces/impl/OpenTelemetryTracesProviderTest.java b/fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/traces/impl/OpenTelemetryTracesProviderTest.java index 3b900b360..7b03a3f2d 100644 --- a/fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/traces/impl/OpenTelemetryTracesProviderTest.java +++ b/fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/traces/impl/OpenTelemetryTracesProviderTest.java @@ -40,7 +40,7 @@ public final class OpenTelemetryTracesProviderTest { - private class ContextGetterChaincode extends ChaincodeBase { + private final class ContextGetterChaincode extends ChaincodeBase { @Override public Response init(final ChaincodeStub stub) { diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index e708b1c023ec8b20f512888fe07c5bd3ff77bb8f..7454180f2ae8848c63b8b4dea2cb829da983f2fa 100644 GIT binary patch delta 18435 zcmY&<19zBR)MXm8v2EM7ZQHi-#I|kQZfv7Tn#Q)%81v4zX3d)U4d4 zYYc!v@NU%|U;_sM`2z(4BAilWijmR>4U^KdN)D8%@2KLcqkTDW%^3U(Wg>{qkAF z&RcYr;D1I5aD(N-PnqoEeBN~JyXiT(+@b`4Pv`;KmkBXYN48@0;iXuq6!ytn`vGp$ z6X4DQHMx^WlOek^bde&~cvEO@K$oJ}i`T`N;M|lX0mhmEH zuRpo!rS~#&rg}ajBdma$$}+vEhz?JAFUW|iZEcL%amAg_pzqul-B7Itq6Y_BGmOCC zX*Bw3rFz3R)DXpCVBkI!SoOHtYstv*e-May|+?b80ZRh$MZ$FerlC`)ZKt} zTd0Arf9N2dimjs>mg5&@sfTPsRXKXI;0L~&t+GH zkB<>wxI9D+k5VHHcB7Rku{Z>i3$&hgd9Mt_hS_GaGg0#2EHzyV=j=u5xSyV~F0*qs zW{k9}lFZ?H%@4hII_!bzao!S(J^^ZZVmG_;^qXkpJb7OyR*sPL>))Jx{K4xtO2xTr@St!@CJ=y3q2wY5F`77Tqwz8!&Q{f7Dp zifvzVV1!Dj*dxG%BsQyRP6${X+Tc$+XOG zzvq5xcC#&-iXlp$)L=9t{oD~bT~v^ZxQG;FRz|HcZj|^L#_(VNG)k{=_6|6Bs-tRNCn-XuaZ^*^hpZ@qwi`m|BxcF6IWc?_bhtK_cDZRTw#*bZ2`1@1HcB
`mLUmo_>@2R&nj7&CiH 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 B8dv}T delta 17845 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 X49Luk)baa85H9$5YCsTPT`SVRWMtMW diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 05679dc3c..98debb84d 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.1.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.2-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 4f906e0c8..744e882ed 100755 --- a/gradlew +++ b/gradlew @@ -72,7 +72,7 @@ case "`uname`" in Darwin* ) darwin=true ;; - MINGW* ) + MSYS* | MINGW* ) msys=true ;; NONSTOP* ) From 92ffcb7f6b325f2f1b9a14a26113c4c20a87055c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 23 Sep 2023 03:04:00 +0100 Subject: [PATCH 08/18] Bump json in /examples/fabric-contract-example-maven (#301) Bumps [json](https://github.com/douglascrockford/JSON-java) from 20180813 to 20230227. - [Release notes](https://github.com/douglascrockford/JSON-java/releases) - [Changelog](https://github.com/stleary/JSON-java/blob/master/docs/RELEASES.md) - [Commits](https://github.com/douglascrockford/JSON-java/commits) --- updated-dependencies: - dependency-name: org.json:json dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- examples/fabric-contract-example-maven/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/fabric-contract-example-maven/pom.xml b/examples/fabric-contract-example-maven/pom.xml index e7016bc2b..dc7742cfa 100644 --- a/examples/fabric-contract-example-maven/pom.xml +++ b/examples/fabric-contract-example-maven/pom.xml @@ -99,7 +99,7 @@ org.json json - 20180813 + 20230227 From 341561adeb65db62d154ae9a0bf26d1d4db79f43 Mon Sep 17 00:00:00 2001 From: Ben Smith Date: Fri, 22 Sep 2023 22:09:33 -0400 Subject: [PATCH 09/18] Update logback and json dependencies in examples (#315) Signed-off-by: Ben Smith --- examples/fabric-contract-example-maven/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/fabric-contract-example-maven/pom.xml b/examples/fabric-contract-example-maven/pom.xml index dc7742cfa..82087eefb 100644 --- a/examples/fabric-contract-example-maven/pom.xml +++ b/examples/fabric-contract-example-maven/pom.xml @@ -15,7 +15,7 @@ 2.5.0 - 1.2.0 + 1.3.11 1.7.5 @@ -99,7 +99,7 @@ org.json json - 20230227 + 20230618 From 26acd64878f15c3797575d90000746651887b14a Mon Sep 17 00:00:00 2001 From: Ben Smith Date: Wed, 18 Oct 2023 02:31:32 -0400 Subject: [PATCH 10/18] Move to org.json:json 20231013. (#316) As per https://github.com/hyperledger/fabric-chaincode-java/issues/312, and also per https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-5072, the newest version of org.json:json should be used. Signed-off-by: Ben Smith --- examples/fabric-contract-example-as-service/build.gradle | 2 +- examples/fabric-contract-example-gradle-kotlin/build.gradle.kts | 2 +- examples/fabric-contract-example-gradle/build.gradle | 2 +- examples/fabric-contract-example-maven/pom.xml | 2 +- examples/ledger-api/build.gradle | 2 +- fabric-chaincode-integration-test/build.gradle | 2 +- fabric-chaincode-shim/build.gradle | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/examples/fabric-contract-example-as-service/build.gradle b/examples/fabric-contract-example-as-service/build.gradle index f6c47455b..7c7091532 100644 --- a/examples/fabric-contract-example-as-service/build.gradle +++ b/examples/fabric-contract-example-as-service/build.gradle @@ -21,7 +21,7 @@ repositories { dependencies { compile group: 'org.hyperledger.fabric-chaincode-java', name: 'fabric-chaincode-shim', version: '2.3.+' - compile 'org.json:json:20230618' + compile 'org.json:json:20231013' testImplementation 'org.junit.jupiter:junit-jupiter:5.4.2' testImplementation 'org.assertj:assertj-core:3.11.1' testImplementation 'org.mockito:mockito-core:2.+' diff --git a/examples/fabric-contract-example-gradle-kotlin/build.gradle.kts b/examples/fabric-contract-example-gradle-kotlin/build.gradle.kts index 8d9aeab6a..e1b70a366 100644 --- a/examples/fabric-contract-example-gradle-kotlin/build.gradle.kts +++ b/examples/fabric-contract-example-gradle-kotlin/build.gradle.kts @@ -20,7 +20,7 @@ java { dependencies { implementation("org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.5.0") - implementation("org.json:json:20230618") + implementation("org.json:json:20231013") implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8") testImplementation("org.junit.jupiter:junit-jupiter:5.4.2") diff --git a/examples/fabric-contract-example-gradle/build.gradle b/examples/fabric-contract-example-gradle/build.gradle index d24a55815..64d1f0b28 100644 --- a/examples/fabric-contract-example-gradle/build.gradle +++ b/examples/fabric-contract-example-gradle/build.gradle @@ -21,7 +21,7 @@ repositories { dependencies { compile group: 'org.hyperledger.fabric-chaincode-java', name: 'fabric-chaincode-shim', version: '2.5.0' - compile 'org.json:json:20230618' + compile 'org.json:json:20231013' testImplementation 'org.junit.jupiter:junit-jupiter:5.4.2' testImplementation 'org.assertj:assertj-core:3.11.1' testImplementation 'org.mockito:mockito-core:2.+' diff --git a/examples/fabric-contract-example-maven/pom.xml b/examples/fabric-contract-example-maven/pom.xml index 82087eefb..e32eb70ad 100644 --- a/examples/fabric-contract-example-maven/pom.xml +++ b/examples/fabric-contract-example-maven/pom.xml @@ -99,7 +99,7 @@ org.json json - 20230618 + 20231013 diff --git a/examples/ledger-api/build.gradle b/examples/ledger-api/build.gradle index 41aa7cc83..278cb2b5b 100644 --- a/examples/ledger-api/build.gradle +++ b/examples/ledger-api/build.gradle @@ -21,7 +21,7 @@ repositories { dependencies { compile group: 'org.hyperledger.fabric-chaincode-java', name: 'fabric-chaincode-shim', version: '1.4.5' - compile 'org.json:json:20230618' + compile 'org.json:json:20231013' testImplementation 'org.junit.jupiter:junit-jupiter:5.4.2' testImplementation 'org.assertj:assertj-core:3.11.1' testImplementation 'org.mockito:mockito-core:2.+' diff --git a/fabric-chaincode-integration-test/build.gradle b/fabric-chaincode-integration-test/build.gradle index 41c58429a..9dec7aa0a 100644 --- a/fabric-chaincode-integration-test/build.gradle +++ b/fabric-chaincode-integration-test/build.gradle @@ -1,7 +1,7 @@ dependencies { implementation project(':fabric-chaincode-docker') implementation project(':fabric-chaincode-shim') - implementation 'org.json:json:20230618' + implementation 'org.json:json:20231013' } diff --git a/fabric-chaincode-shim/build.gradle b/fabric-chaincode-shim/build.gradle index 86ee2bcd9..90c22b6eb 100644 --- a/fabric-chaincode-shim/build.gradle +++ b/fabric-chaincode-shim/build.gradle @@ -51,7 +51,7 @@ dependencies { implementation 'org.bouncycastle:bcprov-jdk18on:1.76' implementation 'io.github.classgraph:classgraph:4.8.162' implementation 'com.github.everit-org.json-schema:org.everit.json.schema:1.14.2' - implementation 'org.json:json:20230618' + implementation 'org.json:json:20231013' implementation 'com.google.protobuf:protobuf-java-util:3.22.5' // Required if using Java 11+ as no longer bundled in the core libraries From 412447cd24e3346c0881e50c051999cff8247189 Mon Sep 17 00:00:00 2001 From: Ben Smith Date: Fri, 20 Oct 2023 19:54:01 -0400 Subject: [PATCH 11/18] Upgrade Gradle Wrapper to v7.6.3 (#317) Signed-off-by: Ben Smith --- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../gradle/wrapper/gradle-wrapper.jar | Bin 59203 -> 61624 bytes .../gradle/wrapper/gradle-wrapper.properties | 3 +- .../src/contracts/fabric-ledger-api/gradlew | 269 +++++++++++------- .../contracts/fabric-ledger-api/gradlew.bat | 15 +- .../gradle/wrapper/gradle-wrapper.jar | Bin 59203 -> 61624 bytes .../gradle/wrapper/gradle-wrapper.properties | 3 +- .../src/contracts/fabric-shim-api/gradlew | 269 +++++++++++------- .../src/contracts/fabric-shim-api/gradlew.bat | 15 +- gradle/wrapper/gradle-wrapper.jar | Bin 59536 -> 61624 bytes gradle/wrapper/gradle-wrapper.properties | 3 +- gradlew | 269 +++++++++++------- gradlew.bat | 15 +- 13 files changed, 526 insertions(+), 337 deletions(-) diff --git a/examples/fabric-contract-example-gradle-kotlin/gradle/wrapper/gradle-wrapper.properties b/examples/fabric-contract-example-gradle-kotlin/gradle/wrapper/gradle-wrapper.properties index 4e86b9270..b1624c473 100644 --- a/examples/fabric-contract-example-gradle-kotlin/gradle/wrapper/gradle-wrapper.properties +++ b/examples/fabric-contract-example-gradle-kotlin/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-bin.zip networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradle/wrapper/gradle-wrapper.jar b/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradle/wrapper/gradle-wrapper.jar index e708b1c023ec8b20f512888fe07c5bd3ff77bb8f..afba109285af78dbd2a1d187e33ac4f87c76e392 100644 GIT binary patch delta 39359 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 delta 36880 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�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%0AV^qz&fiv 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 diff --git a/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradle/wrapper/gradle-wrapper.properties b/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradle/wrapper/gradle-wrapper.properties index 98debb84d..b1624c473 100644 --- a/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradle/wrapper/gradle-wrapper.properties +++ b/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-bin.zip +networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradlew b/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradlew index 4f906e0c8..65dcd68d6 100755 --- a/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradlew +++ b/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/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,101 @@ # ############################################################################## -## -## 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"` +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit # 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"' # 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 +121,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,7 +132,7 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" + 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. Please set the JAVA_HOME variable in your environment to match the @@ -106,80 +140,105 @@ location of your Java installation." 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 +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 -# 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 +# 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. # 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 +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 - 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\"" + 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 - i=`expr $i + 1` + # 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 - 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" ;; - 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; +# * $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. +# -# 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" +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/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradlew.bat b/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradlew.bat index ac1b06f93..6689b85be 100644 --- a/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradlew.bat +++ b/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/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/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradle/wrapper/gradle-wrapper.jar b/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradle/wrapper/gradle-wrapper.jar index e708b1c023ec8b20f512888fe07c5bd3ff77bb8f..afba109285af78dbd2a1d187e33ac4f87c76e392 100644 GIT binary patch delta 39359 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 delta 36880 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�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%0AV^qz&fiv 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 diff --git a/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradle/wrapper/gradle-wrapper.properties b/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradle/wrapper/gradle-wrapper.properties index 98debb84d..b1624c473 100644 --- a/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradle/wrapper/gradle-wrapper.properties +++ b/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-bin.zip +networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradlew b/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradlew index 4f906e0c8..65dcd68d6 100755 --- a/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradlew +++ b/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/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,101 @@ # ############################################################################## -## -## 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"` +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit # 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"' # 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 +121,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,7 +132,7 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" + 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. Please set the JAVA_HOME variable in your environment to match the @@ -106,80 +140,105 @@ location of your Java installation." 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 +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 -# 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 +# 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. # 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 +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 - 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\"" + 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 - i=`expr $i + 1` + # 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 - 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" ;; - 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; +# * $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. +# -# 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" +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/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradlew.bat b/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradlew.bat index ac1b06f93..6689b85be 100644 --- a/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradlew.bat +++ b/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/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/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 7454180f2ae8848c63b8b4dea2cb829da983f2fa..afba109285af78dbd2a1d187e33ac4f87c76e392 100644 GIT binary patch delta 36947 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

      h3Y5Ua5>0<>`e@0qkQ+|8VA&>!KrR0;1 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 GO8pnEgtf;2 delta 35088 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 \(.*\)$'` - 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"` +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit # 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"' # 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 - ;; - MSYS* | 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 +121,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,7 +132,7 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" + 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. Please set the JAVA_HOME variable in your environment to match the @@ -106,80 +140,105 @@ location of your Java installation." 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 +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 -# 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 +# 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. # 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 +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 - 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\"" + 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 - i=`expr $i + 1` + # 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 - 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" ;; - 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; +# * $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. +# -# 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" +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/gradlew.bat b/gradlew.bat index ac1b06f93..6689b85be 100644 --- a/gradlew.bat +++ b/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 From 5507d112cbe0241803b3c67bb6342bdf25aeb227 Mon Sep 17 00:00:00 2001 From: "Mark S. Lewis" Date: Mon, 4 Dec 2023 15:00:23 +0000 Subject: [PATCH 12/18] Update dependencies to address CVE-2023-3635 (#319) Signed-off-by: Mark S. Lewis --- build.gradle | 2 +- fabric-chaincode-shim/build.gradle | 14 ++++++++------ .../traces/impl/OpenTelemetryTracesProvider.java | 3 ++- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/build.gradle b/build.gradle index 6fd0c9137..c3a0584c7 100644 --- a/build.gradle +++ b/build.gradle @@ -42,7 +42,7 @@ subprojects { targetCompatibility = 1.8 dependencies { - implementation group: 'commons-cli', name: 'commons-cli', version: '1.4' + implementation group: 'commons-cli', name: 'commons-cli', version: '1.6.0' implementation group: 'commons-logging', name: 'commons-logging', version: '1.2' testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.3.1' testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.3.1' diff --git a/fabric-chaincode-shim/build.gradle b/fabric-chaincode-shim/build.gradle index 90c22b6eb..02c8e1d4f 100644 --- a/fabric-chaincode-shim/build.gradle +++ b/fabric-chaincode-shim/build.gradle @@ -47,22 +47,24 @@ tasks.withType(org.gradle.api.tasks.testing.Test) { dependencies { implementation 'org.hyperledger.fabric:fabric-protos:0.2.1' - implementation 'org.bouncycastle:bcpkix-jdk18on:1.76' - implementation 'org.bouncycastle:bcprov-jdk18on:1.76' + implementation 'org.bouncycastle:bcpkix-jdk18on:1.77' + implementation 'org.bouncycastle:bcprov-jdk18on:1.77' implementation 'io.github.classgraph:classgraph:4.8.162' implementation 'com.github.everit-org.json-schema:org.everit.json.schema:1.14.2' implementation 'org.json:json:20231013' - implementation 'com.google.protobuf:protobuf-java-util:3.22.5' + implementation 'com.google.protobuf:protobuf-java-util:3.24.4' // Required if using Java 11+ as no longer bundled in the core libraries testImplementation 'javax.xml.bind:jaxb-api:2.3.1' - implementation platform('io.grpc:grpc-bom:1.57.2') + implementation platform('io.grpc:grpc-bom:1.59.0') implementation 'io.grpc:grpc-netty-shaded' implementation 'io.grpc:grpc-protobuf' implementation 'io.grpc:grpc-stub' - implementation platform("io.opentelemetry:opentelemetry-bom:1.29.0") + testImplementation 'io.grpc:grpc-inprocess' + + implementation platform("io.opentelemetry:opentelemetry-bom:1.32.0") implementation 'io.opentelemetry:opentelemetry-api' implementation 'io.opentelemetry.proto:opentelemetry-proto:1.0.0-alpha' @@ -71,7 +73,7 @@ dependencies { implementation 'io.opentelemetry:opentelemetry-sdk-trace' implementation 'io.opentelemetry:opentelemetry-exporter-otlp' implementation 'io.opentelemetry:opentelemetry-extension-trace-propagators' - implementation 'io.opentelemetry.instrumentation:opentelemetry-grpc-1.6:1.29.0-alpha' + implementation 'io.opentelemetry.instrumentation:opentelemetry-grpc-1.6:1.32.0-alpha' } dependencyCheck { diff --git a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/traces/impl/OpenTelemetryTracesProvider.java b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/traces/impl/OpenTelemetryTracesProvider.java index dd15f05e4..696aececb 100644 --- a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/traces/impl/OpenTelemetryTracesProvider.java +++ b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/traces/impl/OpenTelemetryTracesProvider.java @@ -13,7 +13,8 @@ import io.opentelemetry.context.Context; import io.opentelemetry.instrumentation.grpc.v1_6.GrpcTelemetry; import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk; -import io.opentelemetry.semconv.resource.attributes.ResourceAttributes; +import io.opentelemetry.semconv.ResourceAttributes; + import org.hyperledger.fabric.shim.ChaincodeStub; import org.hyperledger.fabric.traces.TracesProvider; From a917adc9cc4e6690e51e4083566fd883e3a340e1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Dec 2023 10:01:13 -0500 Subject: [PATCH 13/18] Bump ch.qos.logback:logback-classic (#320) Bumps [ch.qos.logback:logback-classic](https://github.com/qos-ch/logback) from 1.3.11 to 1.3.12. - [Commits](https://github.com/qos-ch/logback/compare/v_1.3.11...v_1.3.12) --- updated-dependencies: - dependency-name: ch.qos.logback:logback-classic dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- examples/fabric-contract-example-maven/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/fabric-contract-example-maven/pom.xml b/examples/fabric-contract-example-maven/pom.xml index e32eb70ad..a5adfe54e 100644 --- a/examples/fabric-contract-example-maven/pom.xml +++ b/examples/fabric-contract-example-maven/pom.xml @@ -15,7 +15,7 @@ 2.5.0 - 1.3.11 + 1.3.12 1.7.5 From 233e3827e3661d3f603d93725d7e281ef48d009e Mon Sep 17 00:00:00 2001 From: Ben Smith Date: Wed, 6 Dec 2023 09:23:13 -0500 Subject: [PATCH 14/18] Address CVE-2023-6481 by moving to logback v1.3.14. Signed-off-by: Ben Smith --- examples/fabric-contract-example-maven/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/fabric-contract-example-maven/pom.xml b/examples/fabric-contract-example-maven/pom.xml index a5adfe54e..94162af1e 100644 --- a/examples/fabric-contract-example-maven/pom.xml +++ b/examples/fabric-contract-example-maven/pom.xml @@ -15,7 +15,7 @@ 2.5.0 - 1.3.12 + 1.3.14 1.7.5 From 63816aa7ba65a17587798c5d59467c79637100b6 Mon Sep 17 00:00:00 2001 From: "Mark S. Lewis" Date: Thu, 7 Dec 2023 12:53:33 +0000 Subject: [PATCH 15/18] Use OSV-Scanner instead of dependency-check (#321) The existing dependency-check version is no longer supported and might fail after the NVD data feeds it uses are deprecated on 2023-12-15. The updated version requires an API key to interact with the newer NVD APIs. For details see: - https://github.com/jeremylong/DependencyCheck#900-upgrade-notice It also requires periodic triage and suppression of false positive detections. OSV-Scanner appears less prone to false positives and does not require an API key to be maintained. Implement a scheduled vulnerability scan (using OSV-Scanner) so that vulnerabilities are more visible than the current (dependency-check) implementation, which runs in PR builds but does not fail builds or make the results very visible. Signed-off-by: Mark S. Lewis --- .github/workflows/release.yml | 2 +- .github/workflows/scheduled-scan.yml | 21 +++++++++++++++ .github/workflows/test.yml | 11 ++------ CONTRIBUTING.md | 15 +++++++---- Makefile | 9 +++++++ dependency-suppression.xml | 38 ---------------------------- fabric-chaincode-docker/Dockerfile | 3 +-- fabric-chaincode-shim/build.gradle | 28 ++++++++------------ 8 files changed, 55 insertions(+), 72 deletions(-) create mode 100644 .github/workflows/scheduled-scan.yml create mode 100644 Makefile delete mode 100644 dependency-suppression.xml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index cee7cbce3..386719ebe 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -71,7 +71,7 @@ jobs: uses: gradle/gradle-build-action@v2 with: arguments: | - :fabric-chaincode-docker:copyAllDeps -x dependencyCheckAnalyze + :fabric-chaincode-docker:copyAllDeps - name: Set up QEMU uses: docker/setup-qemu-action@v2 - name: Set up Docker Buildx diff --git a/.github/workflows/scheduled-scan.yml b/.github/workflows/scheduled-scan.yml new file mode 100644 index 000000000..8e778d33b --- /dev/null +++ b/.github/workflows/scheduled-scan.yml @@ -0,0 +1,21 @@ +name: "Scheduled vulnerability scan" + +on: + schedule: + - cron: "20 3 * * *" + workflow_dispatch: + +permissions: + contents: read + +jobs: + osv-scanner: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Set up Go + uses: actions/setup-go@v4 + with: + go-version: stable + - name: Scan + run: make scan diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 59d402086..a8082783a 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -26,18 +26,12 @@ jobs: cache: 'gradle' - name: Validate Gradle wrapper uses: gradle/wrapper-validation-action@v1 - - name: Dependency Check - uses: gradle/gradle-build-action@v2 - with: - arguments: | - :fabric-chaincode-shim:dependencyCheckAnalyze - name: Build and Unit test uses: gradle/gradle-build-action@v2 with: arguments: | :fabric-chaincode-shim:build - -xdependencyCheckAnalyze - + intergationtest: runs-on: ubuntu-latest steps: @@ -72,5 +66,4 @@ jobs: uses: gradle/gradle-build-action@v2 with: arguments: | - :fabric-chaincode-integration-test:build - -xdependencyCheckAnalyze + :fabric-chaincode-integration-test:build diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 37e97553a..8f6248367 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -41,20 +41,25 @@ Should you have any questions or concerns, please reach out to one of the projec ## How to work with the Codebase -Some useful gradle commands to help with building. You can add or remove the `--no-daemon` and `-x dependencyCheckAnalyze` as you wish; depending on the performance of you local machine. +Some useful gradle commands to help with building. You can add or remove the `--no-daemon` as you wish; depending on the performance of you local machine. -``` -# build everything , but skip the (slow) dependency checks -./gradlew --no-daemon build -x dependencyCheckAnalyze +```shell +# build everything +./gradlew --no-daemon build # clean up to force tests and compile to rerun ./gradlew clean cleanTest -./gradlew --no-daemon :fabric-chaincode-shim:build -x dependencyCheckAnalyze +./gradlew --no-daemon :fabric-chaincode-shim:build # build docker image ./gradlew :fabric-chaincode-docker:buildImage ``` +You can also scan for vulnerabilities in dependencies (requires [Make](https://www.gnu.org/software/make/) and [Go](https://go.dev/) to be installed): +```shell +make scan +``` + ## Hyperledger Fabric See the diff --git a/Makefile b/Makefile new file mode 100644 index 000000000..22285adc3 --- /dev/null +++ b/Makefile @@ -0,0 +1,9 @@ +# +# SPDX-License-Identifier: Apache-2.0 +# + +.PHONEY: scan +scan: + go install github.com/google/osv-scanner/cmd/osv-scanner@latest + ./gradlew cyclonedxBom + osv-scanner --sbom='fabric-chaincode-shim/build/reports/bom.json' diff --git a/dependency-suppression.xml b/dependency-suppression.xml deleted file mode 100644 index ead358878..000000000 --- a/dependency-suppression.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - ^pkg:maven/org\.hyperledger\.fabric/fabric\-protos@.*$ - CVE-2022-31121 - - - - ^pkg:maven/org\.hyperledger\.fabric/fabric\-protos@.*$ - CVE-2022-36023 - - - - ^pkg:maven/io\.opentelemetry\.instrumentation/opentelemetry\-grpc\-1\.6@.*$ - CVE-2023-33953 - - - - ^pkg:maven/io\.opentelemetry\.instrumentation/opentelemetry\-grpc\-1\.6@.*$ - CVE-2023-32732 - - - - ^pkg:maven/org\.json/json@.*$ - CVE-2022-45688 - - diff --git a/fabric-chaincode-docker/Dockerfile b/fabric-chaincode-docker/Dockerfile index 5e7f40393..f49d26ef7 100644 --- a/fabric-chaincode-docker/Dockerfile +++ b/fabric-chaincode-docker/Dockerfile @@ -41,8 +41,7 @@ RUN gradle \ -x javadoc \ -x test \ -x checkstyleMain \ - -x checkstyleTest \ - -x dependencyCheckAnalyze + -x checkstyleTest WORKDIR /root/chaincode-java # Run the Gradle and Maven commands to generate the wrapper variants diff --git a/fabric-chaincode-shim/build.gradle b/fabric-chaincode-shim/build.gradle index 02c8e1d4f..7d9b9d05e 100644 --- a/fabric-chaincode-shim/build.gradle +++ b/fabric-chaincode-shim/build.gradle @@ -17,10 +17,9 @@ plugins { id 'jacoco' id 'signing' id 'checkstyle' + id 'org.cyclonedx.bom' version '1.8.1' } -apply plugin: 'org.owasp.dependencycheck' - checkstyle { toolVersion '10.12.2' configFile file("../ci/checkstyle/checkstyle.xml") @@ -34,13 +33,18 @@ checkstyleTest { source ='src/test/java' } -dependencyCheck { - suppressionFile='dependency-suppression.xml' - scanConfigurations = ['runtimeClasspath'] +cyclonedxBom { + includeConfigs = ["runtimeClasspath"] + skipConfigs = ["compileClasspath", "testCompileClasspath"] + projectType = "library" + schemaVersion = "1.5" + destination = file("build/reports") + outputName = "bom" + outputFormat = "json" + includeBomSerialNumber = false + includeLicenseText = false } -check.dependsOn dependencyCheckAnalyze - tasks.withType(org.gradle.api.tasks.testing.Test) { systemProperty 'CORE_CHAINCODE_LOGGING_LEVEL', 'DEBUG' } @@ -76,16 +80,6 @@ dependencies { implementation 'io.opentelemetry.instrumentation:opentelemetry-grpc-1.6:1.32.0-alpha' } -dependencyCheck { - format='ALL' - analyzers { - assemblyEnabled=false - ossIndex { - enabled=false - } - } -} - sourceSets { main { java { From 518f65a3fc8c95c033c0d77a2bcfb8920fd8ad12 Mon Sep 17 00:00:00 2001 From: "Mark S. Lewis" Date: Thu, 7 Dec 2023 12:56:00 +0000 Subject: [PATCH 16/18] Prepare for v2.5.1 release (#323) - Update version numbers. - Update GitHub Actions versions. - Update base Java 11 Docker image patch level. - Upgrade Gradle and Maven patch levels in Docker image. - Update dependencies. Signed-off-by: Mark S. Lewis --- .github/workflows/release.yml | 8 ++--- .github/workflows/test.yml | 8 ++--- CHANGELOG.md | 4 +++ COMPATIBILITY.md | 29 +++++++++---------- RELEASING.md | 4 --- .../build.gradle.kts | 2 +- .../build.gradle | 2 +- .../fabric-contract-example-maven/pom.xml | 2 +- fabric-chaincode-docker/Dockerfile | 10 +++---- fabric-chaincode-docker/build.gradle | 2 +- fabric-chaincode-shim/build.gradle | 6 ++-- 11 files changed, 38 insertions(+), 39 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 386719ebe..5dde28c77 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -25,8 +25,8 @@ jobs: runs-on: ubuntu-latest needs: test steps: - - uses: actions/checkout@v3 - - uses: actions/setup-java@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 with: distribution: 'temurin' java-version: '11' @@ -59,8 +59,8 @@ jobs: contents: read packages: write steps: - - uses: actions/checkout@v3 - - uses: actions/setup-java@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 with: distribution: 'temurin' java-version: '11' diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index a8082783a..6e6d3f693 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -16,10 +16,10 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: ref: ${{ inputs.checkout-ref }} - - uses: actions/setup-java@v3 + - uses: actions/setup-java@v4 with: distribution: 'temurin' java-version: '11' @@ -35,10 +35,10 @@ jobs: intergationtest: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: ref: ${{ inputs.checkout-ref }} - - uses: actions/setup-java@v3 + - uses: actions/setup-java@v4 with: distribution: 'temurin' java-version: '11' diff --git a/CHANGELOG.md b/CHANGELOG.md index a69d7a1ac..47035ec7e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# Changelog + +Notable changes in each release are documented on the project's [GitHub releases](https://github.com/hyperledger/fabric-chaincode-java/releases) page. Change history from previous releases is retained below. + ## v2.5.0 Thu Dec 8 09:02:17 GMT 2022 diff --git a/COMPATIBILITY.md b/COMPATIBILITY.md index 82ea258be..6c1708b61 100644 --- a/COMPATIBILITY.md +++ b/COMPATIBILITY.md @@ -16,23 +16,23 @@ This table shows the summary of the compatibility of the Java libraries, togethe Testing is performed with - - Java v8: Openjdk version 1.8.0_222 - - Java v11: Eclipse Temurin 11.0.16.1_1-jdk (this has changed from Openjdk version 11.04_11) + - Java v8: OpenJDK + - Java v11: Eclipse Temurin (this has changed from OpenJDK) By default a Fabric Peer v1.4 will create a Java 8 VM, and a Fabric Peer v2.x will create a Java 11 VM. Whilst is the default, the docker image used to host the chaincode and contracts can be altered. Set the environment variable `CORE_CHAINCODE_JAVA_RUNTIME` on the peer to the name of the docker image. For example `CORE_CHAINCODE_JAVA_RUNTIME=example/customJavaRuntime:latest` -The Java Libraries will connect to the peer whilst running; this is referred to as 'Fabric Peer Connectivity' in the table. For example, whilst the Fabric Peer v1.4 will create a Java 8 environment, if a Java 11 environment was configured, the Java Libraries at v2.5.0 still function when connecting to the Fabric Peer v1.4. +The Java Libraries will connect to the peer whilst running; this is referred to as 'Fabric Peer Connectivity' in the table. For example, whilst the Fabric Peer v1.4 will create a Java 8 environment, if a Java 11 environment was configured, the Java Libraries at v2.5 still function when connecting to the Fabric Peer v1.4. ## Compatibility -The key elements are :  +The key elements are: - the version of the Fabric Contract Java libraries used - the version of the JVM used to run the code - When starting a chaincode container to run a Smart Contract the version of the runtime that is used is determined by these factors: -Fabric v1.4.2, and Fabric v2.5.0 will, by default, start up docker image to host the chaincode and contracts. The version of the docker image used is defined by the version of Fabric in use. +Fabric v1.4.2, and Fabric v2.5.x will, by default, start up docker image to host the chaincode and contracts. The version of the docker image used is defined by the version of Fabric in use. With Fabric v2.1.0 and later, the chaincode container can be configured to be started by different chaincode builders, and not the Peer. In this case, the environment used is not in the control of Fabric. @@ -40,30 +40,29 @@ The Java libraries are produced are `group: 'org.hyperledger.fabric-chaincode-ja ### Supported JVMs -v1.4.x and v2.5.0 Java Libraries are supported running in Java 11 with the x86_64 architecture. Later Java 11 versions are supported but are not tested. +v1.4.x and v2.5.x Java Libraries are supported running in Java 11 with the x86_64 architecture. Later Java 11 versions are supported but are not tested. -v1.4.x Java Libraries are supported running in Java 8 with the  x86_64 architecture. Later Java 8 versions are supported but are not tested. +v1.4.x Java Libraries are supported running in Java 8 with the x86_64 architecture. Later Java 8 versions are supported but are not tested. -Architecture Support: all docker images, JVMs, tools are tested under x86_64 ONLY +Architecture Support: all docker images, JVMs, tools are tested under x86_64 ONLY +### Default Peer Runtime selection -### Default Peer Runtime selection +When using Fabric v2.5, the default docker image that is used to run the Java chaincode is *eclipse-temurin:11.0.21_9-jdk* -When using Fabric 2.5.0, the default docker image that is used to run the Java chaincode is *eclipse-temurin:11.0.16.1_1-jdk* - -With the default docker image used by Fabric 2.5.0, if the packaged Java code contains a build script or a wrapper for either Maven or Gradle, it will be built using Gradle 7.0 wrapper , or Maven 3.8.1 wrapper. +With the default docker image used by Fabric v2.5, if the packaged Java code contains a build script or a wrapper for either Maven or Gradle, it will be built using Gradle 7.0 wrapper, or Maven 3.8.1 wrapper. - If both Gradle and Maven files are present Gradle is used. - Gradle build files can be groovy, or kotlin. - If the Gradle or Maven wrappers are present, this will used in preference to the installed wrappers. -Remeber that when using the wrappers, code will be downloaded from the internet. Keep this in mind for any installation with limited or no internet access. +Remember that when using the wrappers, code will be downloaded from the internet. Keep this in mind for any installation with limited or no internet access. Alternatively it is recommended to package prebuilt jar files, including the contract and all dependencies, in which case no build or Internet access is required when installing Java chaincode. Please check the [Dockerfile](./fabric-chaincode-docker/Dockerfile) that is used for the environment to see exactly how these versions are installed. ### Supported Runtime communication with the Peer -  -Subject to a suitable runtime environment, the 1.4 and 2.5 Java Libraries can used to communicate with Fabric Peers at 2.5 and previous LTS versions. The level of functionality that is implied by the Fabric version in use and channel capabilities.  \ No newline at end of file + +Subject to a suitable runtime environment, the 1.4 and 2.5 Java Libraries can used to communicate with Fabric Peers at 2.5 and previous LTS versions. The level of functionality that is implied by the Fabric version in use and channel capabilities. diff --git a/RELEASING.md b/RELEASING.md index 6ee535904..16288ffc0 100644 --- a/RELEASING.md +++ b/RELEASING.md @@ -18,10 +18,6 @@ The following tasks are required before releasing: - Update version numbers in `build.gradle` files to the required version - Update test, sample, and docs files to match the new version - Update the [`COMPATIBILITY.md`](./COMPATIBILITY.md) -- Create a new release notes file -- Update the [`CHANGELOG.md`](./CHANGELOG.md) file - - The `changelog.sh` script in `scripts` will prepopulate the changelog but you must check and edit the file manually afterwards as required See the [[FABCJ-289] release: 2.2.0 LTS](https://github.com/hyperledger/fabric-chaincode-java/pull/124) pull request for an example, although be careful to search for all versions in the codebase as they're easy to miss and things change! diff --git a/examples/fabric-contract-example-gradle-kotlin/build.gradle.kts b/examples/fabric-contract-example-gradle-kotlin/build.gradle.kts index e1b70a366..45d20f3e2 100644 --- a/examples/fabric-contract-example-gradle-kotlin/build.gradle.kts +++ b/examples/fabric-contract-example-gradle-kotlin/build.gradle.kts @@ -19,7 +19,7 @@ java { dependencies { - implementation("org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.5.0") + implementation("org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.5.1") implementation("org.json:json:20231013") implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8") diff --git a/examples/fabric-contract-example-gradle/build.gradle b/examples/fabric-contract-example-gradle/build.gradle index 64d1f0b28..1389be1a2 100644 --- a/examples/fabric-contract-example-gradle/build.gradle +++ b/examples/fabric-contract-example-gradle/build.gradle @@ -20,7 +20,7 @@ repositories { } dependencies { - compile group: 'org.hyperledger.fabric-chaincode-java', name: 'fabric-chaincode-shim', version: '2.5.0' + compile group: 'org.hyperledger.fabric-chaincode-java', name: 'fabric-chaincode-shim', version: '2.5.1' compile 'org.json:json:20231013' testImplementation 'org.junit.jupiter:junit-jupiter:5.4.2' testImplementation 'org.assertj:assertj-core:3.11.1' diff --git a/examples/fabric-contract-example-maven/pom.xml b/examples/fabric-contract-example-maven/pom.xml index 94162af1e..15eedfc9a 100644 --- a/examples/fabric-contract-example-maven/pom.xml +++ b/examples/fabric-contract-example-maven/pom.xml @@ -12,7 +12,7 @@ UTF-8 - 2.5.0 + 2.5.1 1.3.14 diff --git a/fabric-chaincode-docker/Dockerfile b/fabric-chaincode-docker/Dockerfile index f49d26ef7..3a8cc5f59 100644 --- a/fabric-chaincode-docker/Dockerfile +++ b/fabric-chaincode-docker/Dockerfile @@ -1,4 +1,4 @@ -FROM eclipse-temurin:11.0.18_10-jdk as builder +FROM eclipse-temurin: 11.0.21_9-jdk as builder ENV DEBIAN_FRONTEND=noninteractive # Build tools @@ -10,10 +10,10 @@ RUN curl -s "https://get.sdkman.io" | bash SHELL ["/bin/bash", "-c"] -RUN source /root/.sdkman/bin/sdkman-init.sh; sdk install gradle 7.0 -RUN source /root/.sdkman/bin/sdkman-init.sh; sdk install maven 3.8.1 +RUN source /root/.sdkman/bin/sdkman-init.sh; sdk install gradle 7.6.3 +RUN source /root/.sdkman/bin/sdkman-init.sh; sdk install maven 3.9.5 -FROM eclipse-temurin:11.0.18_10-jdk as dependencies +FROM eclipse-temurin: 11.0.21_9-jdk as dependencies COPY --from=builder /root/.sdkman/candidates/gradle/current /usr/bin/gradle COPY --from=builder /root/.sdkman/candidates/maven/current /usr/bin/maven @@ -53,7 +53,7 @@ RUN mvn -N io.takari:maven:wrapper # Creating final javaenv image which will include all required # dependencies to build and compile java chaincode -FROM eclipse-temurin:11.0.18_10-jdk +FROM eclipse-temurin: 11.0.21_9-jdk RUN apt-get update \ && apt-get -y install zip unzip \ diff --git a/fabric-chaincode-docker/build.gradle b/fabric-chaincode-docker/build.gradle index cc7c72c4c..78ae2759b 100644 --- a/fabric-chaincode-docker/build.gradle +++ b/fabric-chaincode-docker/build.gradle @@ -66,6 +66,6 @@ task copyAllDeps(type: Copy) { task buildImage(type: DockerBuildImage) { dependsOn copyAllDeps inputDir = project.file('Dockerfile').parentFile - tags = ['hyperledger/fabric-javaenv', 'hyperledger/fabric-javaenv:amd64-2.5.0', 'hyperledger/fabric-javaenv:amd64-latest'] + tags = ['hyperledger/fabric-javaenv', 'hyperledger/fabric-javaenv:amd64-2.5.1', 'hyperledger/fabric-javaenv:amd64-latest'] } diff --git a/fabric-chaincode-shim/build.gradle b/fabric-chaincode-shim/build.gradle index 7d9b9d05e..25d3c1aaf 100644 --- a/fabric-chaincode-shim/build.gradle +++ b/fabric-chaincode-shim/build.gradle @@ -21,7 +21,7 @@ plugins { } checkstyle { - toolVersion '10.12.2' + toolVersion '10.12.5' configFile file("../ci/checkstyle/checkstyle.xml") configProperties = [root_dir: file("..") ] } @@ -53,7 +53,7 @@ dependencies { implementation 'org.hyperledger.fabric:fabric-protos:0.2.1' implementation 'org.bouncycastle:bcpkix-jdk18on:1.77' implementation 'org.bouncycastle:bcprov-jdk18on:1.77' - implementation 'io.github.classgraph:classgraph:4.8.162' + implementation 'io.github.classgraph:classgraph:4.8.165' implementation 'com.github.everit-org.json-schema:org.everit.json.schema:1.14.2' implementation 'org.json:json:20231013' implementation 'com.google.protobuf:protobuf-java-util:3.24.4' @@ -61,7 +61,7 @@ dependencies { // Required if using Java 11+ as no longer bundled in the core libraries testImplementation 'javax.xml.bind:jaxb-api:2.3.1' - implementation platform('io.grpc:grpc-bom:1.59.0') + implementation platform('io.grpc:grpc-bom:1.60.0') implementation 'io.grpc:grpc-netty-shaded' implementation 'io.grpc:grpc-protobuf' implementation 'io.grpc:grpc-stub' From 8bf123a4fe16445cb61d532cce48bc111e297e16 Mon Sep 17 00:00:00 2001 From: "Mark S. Lewis" Date: Thu, 7 Dec 2023 16:10:20 +0000 Subject: [PATCH 17/18] Fix test workflow link in release workflow (#324) Signed-off-by: Mark S. Lewis --- .github/workflows/release.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5dde28c77..a8038c828 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -5,14 +5,15 @@ name: Release on: - create: + push: tags: - - '*' + - 'v[0-9]+.[0-9]+.[0-9]+' + - 'v[0-9]+.[0-9]+.[0-9]+-*' workflow_dispatch: jobs: test: - uses: ./.github/workflows/test.yaml + uses: ./.github/workflows/test.yml # Publishing steps to both the Github Packages and the Sonatype publishjars: From 68a1ef2c2cdf8a61140f75351da008f33f9ecb9d Mon Sep 17 00:00:00 2001 From: "Mark S. Lewis" Date: Thu, 7 Dec 2023 16:33:17 +0000 Subject: [PATCH 18/18] Fix image names in Dockerfile (#325) Signed-off-by: Mark S. Lewis --- fabric-chaincode-docker/Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fabric-chaincode-docker/Dockerfile b/fabric-chaincode-docker/Dockerfile index 3a8cc5f59..efc09f580 100644 --- a/fabric-chaincode-docker/Dockerfile +++ b/fabric-chaincode-docker/Dockerfile @@ -1,4 +1,4 @@ -FROM eclipse-temurin: 11.0.21_9-jdk as builder +FROM eclipse-temurin:11.0.21_9-jdk as builder ENV DEBIAN_FRONTEND=noninteractive # Build tools @@ -13,7 +13,7 @@ SHELL ["/bin/bash", "-c"] RUN source /root/.sdkman/bin/sdkman-init.sh; sdk install gradle 7.6.3 RUN source /root/.sdkman/bin/sdkman-init.sh; sdk install maven 3.9.5 -FROM eclipse-temurin: 11.0.21_9-jdk as dependencies +FROM eclipse-temurin:11.0.21_9-jdk as dependencies COPY --from=builder /root/.sdkman/candidates/gradle/current /usr/bin/gradle COPY --from=builder /root/.sdkman/candidates/maven/current /usr/bin/maven @@ -53,7 +53,7 @@ RUN mvn -N io.takari:maven:wrapper # Creating final javaenv image which will include all required # dependencies to build and compile java chaincode -FROM eclipse-temurin: 11.0.21_9-jdk +FROM eclipse-temurin:11.0.21_9-jdk RUN apt-get update \ && apt-get -y install zip unzip \