Showing preview only (1,066K chars total). Download the full file or copy to clipboard to get everything.
Repository: hyperledger/fabric-chaincode-java
Branch: main
Commit: 5cd4f4588b58
Files: 334
Total size: 953.0 KB
Directory structure:
gitextract_fa6p6lwj/
├── .github/
│ ├── dependabot.yml
│ ├── settings.yml
│ └── workflows/
│ ├── pull_request.yml
│ ├── push.yml
│ ├── release.yml
│ ├── scan.yml
│ ├── schedule.yml
│ ├── scheduled-scan.yml
│ └── test.yml
├── .gitignore
├── CHANGELOG.md
├── CODEOWNERS
├── CODE_OF_CONDUCT.md
├── COMPATIBILITY.md
├── CONTRIBUTING.md
├── LICENSE
├── MAINTAINERS.md
├── Makefile
├── README.md
├── RELEASING.md
├── SECURITY.md
├── build.gradle
├── docs/
│ ├── 404.md
│ ├── _config.yml
│ ├── _includes/
│ │ ├── footer.html
│ │ ├── header.html
│ │ └── javadocs.html
│ └── index.md
├── examples/
│ ├── fabric-contract-example-as-service/
│ │ ├── Dockerfile
│ │ ├── README.md
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── example/
│ │ │ └── contract/
│ │ │ ├── MyAsset.java
│ │ │ └── MyAssetContract.java
│ │ └── test/
│ │ └── java/
│ │ └── org/
│ │ └── example/
│ │ └── MyAssetContractTest.java
│ ├── fabric-contract-example-gradle/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── example/
│ │ │ ├── MyAsset.java
│ │ │ └── MyAssetContract.java
│ │ └── test/
│ │ └── java/
│ │ └── org/
│ │ └── example/
│ │ └── MyAssetContractTest.java
│ ├── fabric-contract-example-gradle-kotlin/
│ │ ├── .fabricignore
│ │ ├── .gitignore
│ │ ├── build.gradle.kts
│ │ ├── gradle/
│ │ │ └── wrapper/
│ │ │ ├── gradle-wrapper.jar
│ │ │ └── gradle-wrapper.properties
│ │ ├── gradlew
│ │ ├── gradlew.bat
│ │ ├── settings.gradle.kts
│ │ └── src/
│ │ ├── main/
│ │ │ └── kotlin/
│ │ │ └── org/
│ │ │ └── example/
│ │ │ ├── MyAsset.kt
│ │ │ └── MyAssetContract.kt
│ │ └── test/
│ │ └── kotlin/
│ │ └── org/
│ │ └── example/
│ │ └── MyAssetContractTest.kt
│ ├── fabric-contract-example-maven/
│ │ ├── .gitignore
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── example/
│ │ │ ├── MyAsset.java
│ │ │ └── MyAssetContract.java
│ │ └── test/
│ │ └── java/
│ │ └── org/
│ │ └── example/
│ │ └── MyAssetContractTest.java
│ └── ledger-api/
│ ├── .gitignore
│ ├── README.md
│ ├── build.gradle
│ └── src/
│ └── main/
│ └── java/
│ └── org/
│ └── example/
│ ├── LedgerAPIContract.java
│ └── MyAsset.java
├── fabric-chaincode-docker/
│ ├── .gitignore
│ ├── Dockerfile
│ ├── README.md
│ ├── build.gradle
│ ├── build.sh
│ └── start
├── fabric-chaincode-integration-test/
│ ├── .gitignore
│ ├── build.gradle
│ ├── chaincodebootstrap.gradle
│ └── src/
│ ├── contracts/
│ │ ├── bare-gradle/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── hyperledger/
│ │ │ │ └── fabric/
│ │ │ │ └── example/
│ │ │ │ └── BareGradle.java
│ │ │ └── resources/
│ │ │ └── config.props
│ │ ├── bare-maven/
│ │ │ ├── .gitignore
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── hyperledger/
│ │ │ │ └── fabric/
│ │ │ │ └── example/
│ │ │ │ └── BareMaven.java
│ │ │ └── resources/
│ │ │ └── config.props
│ │ ├── fabric-ledger-api/
│ │ │ ├── build.gradle
│ │ │ ├── gradle/
│ │ │ │ └── wrapper/
│ │ │ │ ├── gradle-wrapper.jar
│ │ │ │ └── gradle-wrapper.properties
│ │ │ ├── gradlew
│ │ │ ├── gradlew.bat
│ │ │ ├── settings.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── hyperledger/
│ │ │ └── fabric/
│ │ │ └── example/
│ │ │ └── AllLedgerAPI.java
│ │ ├── fabric-shim-api/
│ │ │ ├── build.gradle
│ │ │ ├── gradle/
│ │ │ │ └── wrapper/
│ │ │ │ ├── gradle-wrapper.jar
│ │ │ │ └── gradle-wrapper.properties
│ │ │ ├── gradlew
│ │ │ ├── gradlew.bat
│ │ │ ├── settings.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── hyperledger/
│ │ │ │ └── fabric/
│ │ │ │ └── example/
│ │ │ │ ├── AllAPI.java
│ │ │ │ └── EndorsementCC.java
│ │ │ └── resources/
│ │ │ └── config.props
│ │ └── wrapper-maven/
│ │ ├── .gitignore
│ │ ├── .mvn/
│ │ │ └── wrapper/
│ │ │ ├── maven-wrapper.jar
│ │ │ └── maven-wrapper.properties
│ │ ├── mvnw
│ │ ├── mvnw.cmd
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── hyperledger/
│ │ │ └── fabric/
│ │ │ └── example/
│ │ │ └── WrapperMaven.java
│ │ └── resources/
│ │ └── config.props
│ └── test/
│ ├── java/
│ │ └── org/
│ │ └── hyperleder/
│ │ └── fabric/
│ │ └── shim/
│ │ └── integration/
│ │ ├── contractinstall/
│ │ │ └── ContractInstallTest.java
│ │ ├── ledgertests/
│ │ │ └── LedgerIntegrationTest.java
│ │ ├── shimtests/
│ │ │ ├── SACCIntegrationTest.java
│ │ │ └── SBECCIntegrationTest.java
│ │ └── util/
│ │ ├── Bash.java
│ │ ├── Command.java
│ │ ├── Docker.java
│ │ ├── DockerCompose.java
│ │ ├── FabricState.java
│ │ ├── InvokeHelper.java
│ │ └── Peer.java
│ └── resources/
│ ├── docker-compose-microfab.yaml
│ └── scripts/
│ ├── ccutils.sh
│ ├── collection_config.json
│ └── mfsetup.sh
├── fabric-chaincode-shim/
│ ├── build.gradle
│ ├── javabuild.sh
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── hyperledger/
│ │ │ └── fabric/
│ │ │ ├── Logger.java
│ │ │ ├── Logging.java
│ │ │ ├── contract/
│ │ │ │ ├── ClientIdentity.java
│ │ │ │ ├── Context.java
│ │ │ │ ├── ContextFactory.java
│ │ │ │ ├── ContractInterface.java
│ │ │ │ ├── ContractRouter.java
│ │ │ │ ├── ContractRuntimeException.java
│ │ │ │ ├── annotation/
│ │ │ │ │ ├── Contact.java
│ │ │ │ │ ├── Contract.java
│ │ │ │ │ ├── DataType.java
│ │ │ │ │ ├── Default.java
│ │ │ │ │ ├── Info.java
│ │ │ │ │ ├── License.java
│ │ │ │ │ ├── Property.java
│ │ │ │ │ ├── Serializer.java
│ │ │ │ │ ├── Transaction.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── execution/
│ │ │ │ │ ├── ExecutionFactory.java
│ │ │ │ │ ├── ExecutionService.java
│ │ │ │ │ ├── InvocationRequest.java
│ │ │ │ │ ├── JSONTransactionSerializer.java
│ │ │ │ │ ├── SerializerInterface.java
│ │ │ │ │ ├── impl/
│ │ │ │ │ │ ├── ContractExecutionService.java
│ │ │ │ │ │ ├── ContractInvocationRequest.java
│ │ │ │ │ │ └── package-info.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── metadata/
│ │ │ │ │ ├── MetadataBuilder.java
│ │ │ │ │ ├── TypeSchema.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── package-info.java
│ │ │ │ ├── routing/
│ │ │ │ │ ├── ContractDefinition.java
│ │ │ │ │ ├── DataTypeDefinition.java
│ │ │ │ │ ├── ParameterDefinition.java
│ │ │ │ │ ├── PropertyDefinition.java
│ │ │ │ │ ├── RoutingRegistry.java
│ │ │ │ │ ├── TransactionType.java
│ │ │ │ │ ├── TxFunction.java
│ │ │ │ │ ├── TypeRegistry.java
│ │ │ │ │ ├── impl/
│ │ │ │ │ │ ├── ContractDefinitionImpl.java
│ │ │ │ │ │ ├── DataTypeDefinitionImpl.java
│ │ │ │ │ │ ├── ParameterDefinitionImpl.java
│ │ │ │ │ │ ├── PropertyDefinitionImpl.java
│ │ │ │ │ │ ├── RoutingRegistryImpl.java
│ │ │ │ │ │ ├── SerializerRegistryImpl.java
│ │ │ │ │ │ ├── TxFunctionImpl.java
│ │ │ │ │ │ ├── TypeRegistryImpl.java
│ │ │ │ │ │ └── package-info.java
│ │ │ │ │ └── package-info.java
│ │ │ │ └── systemcontract/
│ │ │ │ ├── SystemContract.java
│ │ │ │ └── package-info.java
│ │ │ ├── ledger/
│ │ │ │ ├── Collection.java
│ │ │ │ ├── Ledger.java
│ │ │ │ ├── impl/
│ │ │ │ │ ├── LedgerImpl.java
│ │ │ │ │ └── package-info.java
│ │ │ │ └── package-info.java
│ │ │ ├── metrics/
│ │ │ │ ├── Metrics.java
│ │ │ │ ├── MetricsProvider.java
│ │ │ │ ├── TaskMetricsCollector.java
│ │ │ │ ├── impl/
│ │ │ │ │ ├── DefaultProvider.java
│ │ │ │ │ ├── NullProvider.java
│ │ │ │ │ └── package-info.java
│ │ │ │ └── package-info.java
│ │ │ ├── overview.html
│ │ │ ├── package-info.java
│ │ │ ├── shim/
│ │ │ │ ├── Chaincode.java
│ │ │ │ ├── ChaincodeBase.java
│ │ │ │ ├── ChaincodeException.java
│ │ │ │ ├── ChaincodeServer.java
│ │ │ │ ├── ChaincodeServerProperties.java
│ │ │ │ ├── ChaincodeStub.java
│ │ │ │ ├── ChatChaincodeWithPeer.java
│ │ │ │ ├── GrpcServer.java
│ │ │ │ ├── NettyChaincodeServer.java
│ │ │ │ ├── NettyGrpcServer.java
│ │ │ │ ├── ResponseUtils.java
│ │ │ │ ├── ext/
│ │ │ │ │ └── sbe/
│ │ │ │ │ ├── StateBasedEndorsement.java
│ │ │ │ │ ├── impl/
│ │ │ │ │ │ ├── StateBasedEndorsementFactory.java
│ │ │ │ │ │ ├── StateBasedEndorsementImpl.java
│ │ │ │ │ │ ├── StateBasedEndorsementUtils.java
│ │ │ │ │ │ └── package-info.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── impl/
│ │ │ │ │ ├── ChaincodeInvocationTask.java
│ │ │ │ │ ├── ChaincodeMessageFactory.java
│ │ │ │ │ ├── ChaincodeSupportClient.java
│ │ │ │ │ ├── InvocationStubImpl.java
│ │ │ │ │ ├── InvocationTaskExecutor.java
│ │ │ │ │ ├── InvocationTaskManager.java
│ │ │ │ │ ├── KeyModificationImpl.java
│ │ │ │ │ ├── KeyValueImpl.java
│ │ │ │ │ ├── QueryResultsIteratorImpl.java
│ │ │ │ │ ├── QueryResultsIteratorWithMetadataImpl.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── ledger/
│ │ │ │ │ ├── CompositeKey.java
│ │ │ │ │ ├── CompositeKeyFormatException.java
│ │ │ │ │ ├── KeyModification.java
│ │ │ │ │ ├── KeyValue.java
│ │ │ │ │ ├── QueryResultsIterator.java
│ │ │ │ │ ├── QueryResultsIteratorWithMetadata.java
│ │ │ │ │ └── package-info.java
│ │ │ │ └── package-info.java
│ │ │ └── traces/
│ │ │ ├── Traces.java
│ │ │ ├── TracesProvider.java
│ │ │ ├── impl/
│ │ │ │ ├── DefaultTracesProvider.java
│ │ │ │ ├── NullProvider.java
│ │ │ │ ├── OpenTelemetryProperties.java
│ │ │ │ ├── OpenTelemetryTracesProvider.java
│ │ │ │ └── package-info.java
│ │ │ └── package-info.java
│ │ └── resources/
│ │ ├── contract-schema.json
│ │ └── json-schema-draft-04-schema.json
│ └── test/
│ ├── java/
│ │ ├── ChaincodeWithoutPackageTest.java
│ │ ├── EmptyChaincodeWithoutPackage.java
│ │ ├── contract/
│ │ │ ├── Greeting.java
│ │ │ └── SampleContract.java
│ │ └── org/
│ │ └── hyperledger/
│ │ └── fabric/
│ │ ├── LoggerTest.java
│ │ ├── LoggingTest.java
│ │ ├── TestUtil.java
│ │ ├── contract/
│ │ │ ├── AllTypesAsset.java
│ │ │ ├── ChaincodeStubNaiveImpl.java
│ │ │ ├── ClientIdentityTest.java
│ │ │ ├── ContextFactoryTest.java
│ │ │ ├── ContextTest.java
│ │ │ ├── ContractInterfaceTest.java
│ │ │ ├── ContractRouterTest.java
│ │ │ ├── MyType.java
│ │ │ ├── MyType2.java
│ │ │ ├── TransactionExceptionTest.java
│ │ │ ├── execution/
│ │ │ │ ├── ContractExecutionServiceTest.java
│ │ │ │ └── JSONTransactionSerializerTest.java
│ │ │ ├── metadata/
│ │ │ │ ├── MetadataBuilderTest.java
│ │ │ │ └── TypeSchemaTest.java
│ │ │ ├── routing/
│ │ │ │ ├── ContractDefinitionTest.java
│ │ │ │ ├── DataTypeDefinitionTest.java
│ │ │ │ ├── ParameterDefinitionTest.java
│ │ │ │ ├── PropertyDefinitionTest.java
│ │ │ │ ├── TxFunctionTest.java
│ │ │ │ └── TypeRegistryTest.java
│ │ │ └── simplepath/
│ │ │ └── ContractSimplePathTest.java
│ │ ├── ledger/
│ │ │ └── LedgerTest.java
│ │ ├── metrics/
│ │ │ ├── MetricsTest.java
│ │ │ └── impl/
│ │ │ └── DefaultProviderTest.java
│ │ ├── shim/
│ │ │ ├── ChaincodeBaseTest.java
│ │ │ ├── ChaincodeServerImplTest.java
│ │ │ ├── ChaincodeStubTest.java
│ │ │ ├── ChaincodeTest.java
│ │ │ ├── ChatChaincodeWithPeerTest.java
│ │ │ ├── NettyGrpcServerTest.java
│ │ │ ├── chaincode/
│ │ │ │ └── EmptyChaincode.java
│ │ │ ├── ext/
│ │ │ │ └── sbe/
│ │ │ │ ├── StateBasedEndorsementTest.java
│ │ │ │ └── impl/
│ │ │ │ ├── StateBasedEndorsementFactoryTest.java
│ │ │ │ └── StateBasedEndorsementImplTest.java
│ │ │ ├── fvt/
│ │ │ │ └── ChaincodeFVTest.java
│ │ │ ├── impl/
│ │ │ │ ├── ChaincodeMessageFactoryTest.java
│ │ │ │ ├── ChaincodeSupportClientTest.java
│ │ │ │ ├── InnvocationTaskManagerTest.java
│ │ │ │ ├── InvocationStubImplTest.java
│ │ │ │ ├── InvocationTaskManagerTest.java
│ │ │ │ ├── KeyModificationImplTest.java
│ │ │ │ ├── KeyValueImplTest.java
│ │ │ │ └── QueryResultsIteratorWithMetadataImplTest.java
│ │ │ ├── ledger/
│ │ │ │ └── CompositeKeyTest.java
│ │ │ ├── mock/
│ │ │ │ └── peer/
│ │ │ │ ├── ChaincodeMockPeer.java
│ │ │ │ ├── CompleteStep.java
│ │ │ │ ├── DelValueStep.java
│ │ │ │ ├── ErrorResponseStep.java
│ │ │ │ ├── GetHistoryForKeyStep.java
│ │ │ │ ├── GetQueryResultStep.java
│ │ │ │ ├── GetStateByRangeStep.java
│ │ │ │ ├── GetStateMetadata.java
│ │ │ │ ├── GetValueStep.java
│ │ │ │ ├── InvokeChaincodeStep.java
│ │ │ │ ├── PurgeValueStep.java
│ │ │ │ ├── PutStateMetadata.java
│ │ │ │ ├── PutValueStep.java
│ │ │ │ ├── QueryCloseStep.java
│ │ │ │ ├── QueryNextStep.java
│ │ │ │ ├── QueryResultStep.java
│ │ │ │ ├── RegisterStep.java
│ │ │ │ └── ScenarioStep.java
│ │ │ └── utils/
│ │ │ ├── MessageUtil.java
│ │ │ └── TimeoutUtil.java
│ │ └── traces/
│ │ ├── TracesTest.java
│ │ └── impl/
│ │ ├── DefaultProviderTest.java
│ │ ├── OpenTelemetryPropertiesTest.java
│ │ ├── OpenTelemetryTracesProviderTest.java
│ │ └── TestSpanExporterProvider.java
│ └── resources/
│ ├── META-INF/
│ │ └── services/
│ │ └── io.opentelemetry.sdk.autoconfigure.spi.traces.ConfigurableSpanExporterProvider
│ ├── ca.crt
│ ├── client.crt
│ ├── client.crt.enc
│ ├── client.key
│ ├── client.key.enc
│ └── client.key.password-protected
├── gradle/
│ └── wrapper/
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── pmd-ruleset.xml
├── release_notes/
│ ├── v1.3.0.txt
│ ├── v1.4.0.txt
│ ├── v2.0.0-alpha.txt
│ ├── v2.0.0-beta.txt
│ ├── v2.0.0.txt
│ ├── v2.0.1.txt
│ ├── v2.1.0.txt
│ ├── v2.1.1.txt
│ ├── v2.2.0.txt
│ ├── v2.2.1.txt
│ ├── v2.3.0.txt
│ ├── v2.3.1.txt
│ ├── v2.4.0-beta.txt
│ ├── v2.4.0.txt
│ ├── v2.4.1.txt
│ └── v2.5.0.txt
└── settings.gradle
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/dependabot.yml
================================================
version: 2
multi-ecosystem-groups:
java:
schedule:
interval: daily
updates:
- package-ecosystem: docker
directories:
- "/fabric-chaincode-docker"
- "/examples/fabric-contract-example-as-service"
schedule:
interval: daily
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: daily
- package-ecosystem: gradle
multi-ecosystem-group: java
patterns:
- "*"
directories:
- "/"
- "/fabric-chaincode-docker"
- "/examples/fabric-contract-example-as-service"
- "/examples/fabric-contract-example-gradle"
- "/examples/fabric-contract-example-gradle-kotlin"
- "/examples/ledger-api"
- "/fabric-chaincode-integration-test"
- "/fabric-chaincode-integration-test/src/contracts/bare-gradle"
- "/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api"
- "/fabric-chaincode-integration-test/src/contracts/fabric-shim-api"
- "/fabric-chaincode-shim"
- package-ecosystem: maven
multi-ecosystem-group: java
patterns:
- "*"
directories:
- "/examples/fabric-contract-example-maven"
- "/fabric-chaincode-integration-test/src/contracts/bare-maven"
- "/fabric-chaincode-integration-test/src/contracts/wrapper-maven"
================================================
FILE: .github/settings.yml
================================================
#
# SPDX-License-Identifier: Apache-2.0
#
repository:
name: fabric-chaincode-java
description: Hyperledger Fabric Contract and Chaincode implementation for Java
https://wiki.hyperledger.org/display/fabric
homepage: https://jira.hyperledger.org/issues/?jql=project+%3D+FAB+AND+component+%3D+fabric-chaincode-java
default_branch: main
has_downloads: true
has_issues: false
has_projects: false
has_wiki: false
archived: false
private: false
allow_squash_merge: false
allow_merge_commit: true
allow_rebase_merge: true
================================================
FILE: .github/workflows/pull_request.yml
================================================
# Copyright the Hyperledger Fabric contributors. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
name: Pull request
on:
pull_request:
branches:
- main
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
test:
uses: ./.github/workflows/test.yml
scan:
uses: ./.github/workflows/scan.yml
pull-request:
needs: test
name: Pull request success
runs-on: ubuntu-latest
steps:
- run: "true"
================================================
FILE: .github/workflows/push.yml
================================================
# Copyright the Hyperledger Fabric contributors. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
name: Push
on:
push:
branches:
- main
workflow_dispatch:
jobs:
test:
uses: ./.github/workflows/test.yml
================================================
FILE: .github/workflows/release.yml
================================================
# Copyright the Hyperledger Fabric contributors. All rights reserved.
#
# SPDX-License-Identifier: Apache-2.0
name: Release
on:
push:
tags:
- "v[0-9]+.[0-9]+.[0-9]+"
- "v[0-9]+.[0-9]+.[0-9]+-*"
workflow_dispatch:
env:
IMAGE_NAME: ${{ github.repository_owner }}/fabric-javaenv
jobs:
publish-github:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
with:
distribution: "temurin"
java-version: 25
- uses: gradle/actions/setup-gradle@50e97c2cd7a37755bbfafc9c5b7cafaece252f6e # v6.1.0
- name: Publish to GitHub Packages
run: |
./gradlew publishAllPublicationsToGitHubRepository
env:
ORG_GRADLE_PROJECT_signingKey: ${{ secrets.OSSRH_GPG_SECRET_KEY }}
ORG_GRADLE_PROJECT_signingPassword: ${{ secrets.OSSRH_GPG_SECRET_KEY_PASSWORD }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
publish-maven:
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
with:
distribution: "temurin"
java-version: 25
- uses: gradle/actions/setup-gradle@50e97c2cd7a37755bbfafc9c5b7cafaece252f6e # v6.1.0
- name: Publish to Maven Central
run: |
./gradlew publishAggregationToCentralPortal
env:
ORG_GRADLE_PROJECT_signingKey: ${{ secrets.OSSRH_GPG_SECRET_KEY }}
ORG_GRADLE_PROJECT_signingPassword: ${{ secrets.OSSRH_GPG_SECRET_KEY_PASSWORD }}
ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.MAVENCENTRAL_USERNAME }}
ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.MAVENCENTRAL_PASSWORD }}
docker-build-push:
name: Push Docker image
runs-on: ${{ matrix.arch.runner }}
permissions:
contents: read
packages: write
strategy:
fail-fast: false
matrix:
arch:
- platform: linux-amd64
runner: ubuntu-24.04
- platform: linux-arm64
runner: ubuntu-24.04-arm
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
with:
distribution: "temurin"
java-version: 25
- uses: gradle/actions/setup-gradle@50e97c2cd7a37755bbfafc9c5b7cafaece252f6e # v6.1.0
- name: Build the dependencies needed for the image
run: ./gradlew :fabric-chaincode-docker:copyAllDeps
- name: Get commit timestamp
run: echo "SOURCE_DATE_EPOCH=$(git log -1 --pretty=%ct)" >> "${GITHUB_ENV}"
- name: Login to GitHub Container Registry
uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4.1.0
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Login to Docker Hub
uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4.1.0
with:
registry: docker.io
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd # v4.0.0
- name: Build image
id: build
uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7.1.0
with:
file: fabric-chaincode-docker/Dockerfile
context: fabric-chaincode-docker
outputs: type=registry,"name=${{ format('ghcr.io/{0},docker.io/{0}', env.IMAGE_NAME) }}",push-by-digest=true,name-canonical=true
env:
SOURCE_DATE_EPOCH: ${{ env.SOURCE_DATE_EPOCH }}
- name: Export digest
run: |
mkdir -p ${{ runner.temp }}/digests
digest="${{ steps.build.outputs.digest }}"
touch "${{ runner.temp }}/digests/${digest#sha256:}"
- name: Upload digest
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: digest-${{ matrix.arch.platform }}
path: ${{ runner.temp }}/digests/*
if-no-files-found: error
docker-meta:
needs: docker-build-push
name: Publish Docker metadata
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
strategy:
fail-fast: false
matrix:
registry:
- docker.io
- ghcr.io
steps:
- name: Download digests
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
path: ${{ runner.temp }}/digests
pattern: digest-*
merge-multiple: true
- name: Login to ${{ matrix.registry }}
uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4.1.0
with:
registry: ${{ matrix.registry }}
username: ${{ matrix.registry == 'docker.io' && secrets.DOCKERHUB_USERNAME || github.actor }}
password: ${{ matrix.registry == 'docker.io' && secrets.DOCKERHUB_TOKEN || secrets.GITHUB_TOKEN }}
- name: Docker metadata
id: meta
uses: docker/metadata-action@030e881283bb7a6894de51c315a6bfe6a94e05cf # v6.0.0
with:
images: ${{ matrix.registry }}/${{ env.IMAGE_NAME }}
tags: |
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}.{{minor}}.{{patch}}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd # v4.0.0
- name: Create and push manifest list
working-directory: ${{ runner.temp }}/digests
run: |
docker buildx imagetools create $(jq -cr '.tags | map("--tag " + .) | join(" ")' <<< "${DOCKER_METADATA_OUTPUT_JSON}") \
$(printf '${{ matrix.registry }}/${{ env.IMAGE_NAME }}@sha256:%s ' *)
- name: Inspect image
run: docker buildx imagetools inspect '${{ matrix.registry }}/${{ env.IMAGE_NAME }}:${{ steps.meta.outputs.version }}'
================================================
FILE: .github/workflows/scan.yml
================================================
name: "Scheduled vulnerability scan"
on:
workflow_call:
inputs:
ref:
description: Branch, tag or SHA to scan.
type: string
required: false
default: ""
permissions:
contents: read
jobs:
osv-scanner:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
ref: ${{ inputs.ref }}
# Go needed for scanning of v2.5.5 and earlier
- uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
with:
go-version: stable
cache: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
with:
distribution: temurin
# Releases v2.5.7 and earlier do not support Java 25
java-version: 21
- uses: gradle/actions/setup-gradle@50e97c2cd7a37755bbfafc9c5b7cafaece252f6e # v6.1.0
- name: Scan
run: make scan
================================================
FILE: .github/workflows/schedule.yml
================================================
name: Scheduled build
on:
schedule:
- cron: "5 4 * * 0"
workflow_dispatch:
jobs:
main:
uses: ./.github/workflows/test.yml
================================================
FILE: .github/workflows/scheduled-scan.yml
================================================
name: "Scheduled vulnerability scan"
on:
schedule:
- cron: "20 3 * * *"
workflow_dispatch:
permissions:
contents: read
jobs:
release-version:
name: Get latest release tag
runs-on: ubuntu-latest
outputs:
tag_name: ${{ steps.tag-name.outputs.value }}
steps:
- id: tag-name
run: echo "value=$(curl --location --silent --fail "https://api.github.com/repos/${GITHUB_REPOSITORY}/releases/latest" | jq --raw-output '.tag_name')" >> "${GITHUB_OUTPUT}"
scan-release:
name: Scan ${{ needs.release-version.outputs.tag_name }}
needs: release-version
uses: ./.github/workflows/scan.yml
with:
ref: ${{ needs.release-version.outputs.tag_name }}
scan-latest:
name: Scan latest
uses: ./.github/workflows/scan.yml
================================================
FILE: .github/workflows/test.yml
================================================
# Copyright the Hyperledger Fabric contributors. All rights reserved.
#
# SPDX-License-Identifier: Apache-2.0
name: Test
on:
workflow_call:
inputs:
ref:
default: ""
required: false
type: string
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
ref: ${{ inputs.ref }}
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
with:
distribution: temurin
java-version: 25
- uses: gradle/actions/setup-gradle@50e97c2cd7a37755bbfafc9c5b7cafaece252f6e # v6.1.0
- name: Build and Unit test
run: ./gradlew :fabric-chaincode-shim:build
intergationtest:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
ref: ${{ inputs.ref }}
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
with:
distribution: temurin
java-version: 25
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: "lts/*"
- uses: gradle/actions/setup-gradle@50e97c2cd7a37755bbfafc9c5b7cafaece252f6e # v6.1.0
- 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
./gradlew -I $GITHUB_WORKSPACE/fabric-chaincode-integration-test/chaincodebootstrap.gradle -PchaincodeRepoDir=$GITHUB_WORKSPACE/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/repository publishShimPublicationToFabricRepository
./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
npm install -g @hyperledger-labs/weft
# set the path and cfg env var for the rest of the step
echo "FABRIC_CFG_PATH=$GITHUB_WORKSPACE/config" >> $GITHUB_ENV
echo "$GITHUB_WORKSPACE/bin" >> $GITHUB_PATH
- name: versions
run: |
peer version
weft --version
- name: Integration Tests
run: ./gradlew :fabric-chaincode-integration-test:build
docker:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
ref: ${{ inputs.ref }}
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
with:
distribution: temurin
java-version: 25
- uses: gradle/actions/setup-gradle@50e97c2cd7a37755bbfafc9c5b7cafaece252f6e # v6.1.0
- name: Build Docker image
run: ./gradlew :fabric-chaincode-docker:buildImage
================================================
FILE: .gitignore
================================================
/.settings/
/.project
*.log
*.swp
.gradletasknamecache
.classpath
**/bin/
/build/
build/*
settings-gradle.lockfile
config/
_cfg
repository
.env
.gradle
/build/
out/
gradle.lockfile
!gradle/wrapper/gradle-wrapper.jar
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
nbproject/private/
build/
nbbuild/
dist/
nbdist/
.nb-gradle/
local-config.yaml
gradle.properties
.vscode/
### Jekyll ###
.sass-cache
_site
================================================
FILE: CHANGELOG.md
================================================
# 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
* [94cfadee](https://github.com/hyperledger/fabric-chaincode-java/commit/94cfadee) Move inactive maintainers to emeritus status
* [37bebee7](https://github.com/hyperledger/fabric-chaincode-java/commit/37bebee7) Adjust to using the Temurin JVM
* [0c9f44fb](https://github.com/hyperledger/fabric-chaincode-java/commit/0c9f44fb) Basic github actions workflow
* [d15f2cd1](https://github.com/hyperledger/fabric-chaincode-java/commit/d15f2cd1) Update pom.xml
* [1fba41b2](https://github.com/hyperledger/fabric-chaincode-java/commit/1fba41b2) Remove unrequired Maven wrapper directory Update Maven wrapper to latest version
* [3a2db82d](https://github.com/hyperledger/fabric-chaincode-java/commit/3a2db82d) Bump version to 2.5.0
* [35eabb0a](https://github.com/hyperledger/fabric-chaincode-java/commit/35eabb0a) PurgePrivateData
* [80a36ee4](https://github.com/hyperledger/fabric-chaincode-java/commit/80a36ee4) Swap to using the published fabric-protos libraries
* [dd551979](https://github.com/hyperledger/fabric-chaincode-java/commit/dd551979) Update MAINTAINERS.md
* [f25df1b6](https://github.com/hyperledger/fabric-chaincode-java/commit/f25df1b6) Add test for Logger.debug
* [d1d093b4](https://github.com/hyperledger/fabric-chaincode-java/commit/d1d093b4) Regular Maintainece Task
* [22c722fe](https://github.com/hyperledger/fabric-chaincode-java/commit/22c722fe) Update README.md
* [2c35c3ed](https://github.com/hyperledger/fabric-chaincode-java/commit/2c35c3ed) JSONPropertyIgnore only works on getter
* [02d1485a](https://github.com/hyperledger/fabric-chaincode-java/commit/02d1485a) Change from RocketChat to Discord
* [5608879e](https://github.com/hyperledger/fabric-chaincode-java/commit/5608879e) Temporarily remove nightly publish & Fix PR build
* [d13d3070](https://github.com/hyperledger/fabric-chaincode-java/commit/d13d3070) Fix transaction serializer usage
* [5388349d](https://github.com/hyperledger/fabric-chaincode-java/commit/5388349d) Remove the log4j dependency
## v2.4.1
Mon Dec 13 11:50:31 GMT 2021
* [bf054cb0](https://github.com/hyperledger/fabric-chaincode-java/commit/bf054cb0) Add a brief example for the -as-a-service
* [f9ada8f5](https://github.com/hyperledger/fabric-chaincode-java/commit/f9ada8f5) Chaincode-as-a-service main bootstrap method
## 2.4.0
Fri Nov 26 08:21:40 GMT 2021
Release 2.4.0
## v2.4.0-beta
Fri 13 Aug 2021 16:43:31 CEST
* [292c4ebe](https://github.com/hyperledger/fabric-chaincode-java/commit/292c4ebe) Update the build.gradle for publishing
## v2.3.1
Wed 21 Jul 2021 11:20:03 BST
* [6be7a724](https://github.com/hyperledger/fabric-chaincode-java/commit/6be7a724) Integration tests extended
* [66e25ea9](https://github.com/hyperledger/fabric-chaincode-java/commit/66e25ea9) NettyGrpcServer -- support mutual TLS
* [1128e7b2](https://github.com/hyperledger/fabric-chaincode-java/commit/1128e7b2) NettyGrpcServer: logger->LOGGER
* [b7b4ef12](https://github.com/hyperledger/fabric-chaincode-java/commit/b7b4ef12) NettyGrpcServer -- reformat code
* [3a98fc5e](https://github.com/hyperledger/fabric-chaincode-java/commit/3a98fc5e) NettyGrpcServer -- configure ALPN
* [63c12ffa](https://github.com/hyperledger/fabric-chaincode-java/commit/63c12ffa) NettyGrpcServerTest -- improve startAndStopTlsPassword, startAndStopTlsWithoutPassword test cases
* [5046eb79](https://github.com/hyperledger/fabric-chaincode-java/commit/5046eb79) Bump logback-classic in /examples/fabric-contract-example-maven
* [ab2a166d](https://github.com/hyperledger/fabric-chaincode-java/commit/ab2a166d) added tests
* [25706938](https://github.com/hyperledger/fabric-chaincode-java/commit/25706938) Add additional contracts for deployment test
* [e096d4f7](https://github.com/hyperledger/fabric-chaincode-java/commit/e096d4f7) Review ideas
* [7645bb9d](https://github.com/hyperledger/fabric-chaincode-java/commit/7645bb9d) Move to use Maven Wrapper
* [d212e2a7](https://github.com/hyperledger/fabric-chaincode-java/commit/d212e2a7) Upgrade gradle to v7
* [f1d6b7da](https://github.com/hyperledger/fabric-chaincode-java/commit/f1d6b7da) Gradle wrapper updated to the latest version
* [3f190ef5](https://github.com/hyperledger/fabric-chaincode-java/commit/3f190ef5) Transaction metadata tags updated
* [0d0c9280](https://github.com/hyperledger/fabric-chaincode-java/commit/0d0c9280) Update "master" branch references to "main"
* [ca69f15d](https://github.com/hyperledger/fabric-chaincode-java/commit/ca69f15d) Fix link in SECURITY.md
* [4c6cbf47](https://github.com/hyperledger/fabric-chaincode-java/commit/4c6cbf47) Correct condition
* [76c7fe45](https://github.com/hyperledger/fabric-chaincode-java/commit/76c7fe45) Cleanup files
* [70bdd194](https://github.com/hyperledger/fabric-chaincode-java/commit/70bdd194) Add in publishing of the nightly master branch drivers
* [b51eac20](https://github.com/hyperledger/fabric-chaincode-java/commit/b51eac20) Change FABRIC_VERSION to latest tag
* [28dfb24b](https://github.com/hyperledger/fabric-chaincode-java/commit/28dfb24b) fix fabric-contract-example-maven/pom.xml
* [ff48941c](https://github.com/hyperledger/fabric-chaincode-java/commit/ff48941c) Logging Tests Reset Correctly
* [cc31ae01](https://github.com/hyperledger/fabric-chaincode-java/commit/cc31ae01) [FABCJ-214](https://jira.hyperledger.org/browse/FABCJ-214) - Java chaincode gRPC server
* [06f72193](https://github.com/hyperledger/fabric-chaincode-java/commit/06f72193) Fix "build shadowJar" error
* [278e9f8e](https://github.com/hyperledger/fabric-chaincode-java/commit/278e9f8e) [FABCJ-187](https://jira.hyperledger.org/browse/FABCJ-187) Add max inbound msg size configuration
* [bf4f30aa](https://github.com/hyperledger/fabric-chaincode-java/commit/bf4f30aa) Fix javadoc build
* [9e403b6d](https://github.com/hyperledger/fabric-chaincode-java/commit/9e403b6d) Fix JavaDoc link to Compatibility documentation
* [57678eea](https://github.com/hyperledger/fabric-chaincode-java/commit/57678eea) Bump version to 2.3.1
* [91e6001d](https://github.com/hyperledger/fabric-chaincode-java/commit/91e6001d) [FABCJ-290](https://jira.hyperledger.org/browse/FABCJ-290) Add release guide
* [0deb7e0d](https://github.com/hyperledger/fabric-chaincode-java/commit/0deb7e0d) [FABCJ-293](https://jira.hyperledger.org/browse/FABCJ-293) Remove gradle from image
* [2dfe17c1](https://github.com/hyperledger/fabric-chaincode-java/commit/2dfe17c1) [FABCJ-291](https://jira.hyperledger.org/browse/FABCJ-291) Startkey needs additional checks For the open ended query, the start and empty keys are empty from the chaincode. However, in the shim, if the start key is an empty key, it is replaced with 0x01 which is nothing but a namespace for the non-composite key.
* [21d81193](https://github.com/hyperledger/fabric-chaincode-java/commit/21d81193) Update doc links
* [78ed0157](https://github.com/hyperledger/fabric-chaincode-java/commit/78ed0157) [FABCJ-288](https://jira.hyperledger.org/browse/FABCJ-288) fix: simple key end of range
* [90f6c3c2](https://github.com/hyperledger/fabric-chaincode-java/commit/90f6c3c2) Update dependencies
* [526d1cc8](https://github.com/hyperledger/fabric-chaincode-java/commit/526d1cc8) [FABCJ-284](https://jira.hyperledger.org/browse/FABCJ-284) Broken link
* [7f722053](https://github.com/hyperledger/fabric-chaincode-java/commit/7f722053) force rebuild
* [9a42effb](https://github.com/hyperledger/fabric-chaincode-java/commit/9a42effb) [FABCJ-285](https://jira.hyperledger.org/browse/FABCJ-285) Remove incorrect log point
* [c2367768](https://github.com/hyperledger/fabric-chaincode-java/commit/c2367768) Clean up Fabric Version Methodology
* [88da28f6](https://github.com/hyperledger/fabric-chaincode-java/commit/88da28f6) [FAB-17777](https://jira.hyperledger.org/browse/FAB-17777) Create basic settings.yaml
* [a6b00f2d](https://github.com/hyperledger/fabric-chaincode-java/commit/a6b00f2d) [FABCJ-283](https://jira.hyperledger.org/browse/FABCJ-283) Update javadoc 2.x link
* [96fa4d6e](https://github.com/hyperledger/fabric-chaincode-java/commit/96fa4d6e) [FABCJ-283](https://jira.hyperledger.org/browse/FABCJ-283) Update docs to handle new branch
* [ff031f2d](https://github.com/hyperledger/fabric-chaincode-java/commit/ff031f2d) [FABCJ-283](https://jira.hyperledger.org/browse/FABCJ-283) Bump version number to 3.0.0 - in order to not contradict release-2.x branch
* [35a5159d](https://github.com/hyperledger/fabric-chaincode-java/commit/35a5159d) [FABCJ-283](https://jira.hyperledger.org/browse/FABCJ-283) Update docker image version to 2.1
* [67af7977](https://github.com/hyperledger/fabric-chaincode-java/commit/67af7977) [FABCJ-280](https://jira.hyperledger.org/browse/FABCJ-280) Copy chaincode into temporary directory before building
* [e69168cb](https://github.com/hyperledger/fabric-chaincode-java/commit/e69168cb) [FABCJ-276](https://jira.hyperledger.org/browse/FABCJ-276) Access localmspid
* [cc673036](https://github.com/hyperledger/fabric-chaincode-java/commit/cc673036) [FABCN-359](https://jira.hyperledger.org/browse/FABCN-359) Ledger Class
* [f0689360](https://github.com/hyperledger/fabric-chaincode-java/commit/f0689360) [FABCJ-273](https://jira.hyperledger.org/browse/FABCJ-273) Show release-2.0 Javadoc
* [364cae9d](https://github.com/hyperledger/fabric-chaincode-java/commit/364cae9d) [FABCJ-269](https://jira.hyperledger.org/browse/FABCJ-269) Compatibility Matrix
* [89ffb592](https://github.com/hyperledger/fabric-chaincode-java/commit/89ffb592) [FABCJ-273](https://jira.hyperledger.org/browse/FABCJ-273) Prepare next release v2.1.0
* [6c1cdba0](https://github.com/hyperledger/fabric-chaincode-java/commit/6c1cdba0) Java chaincode gRPC server for run external chaincode add NettyGrpcServer with method /Connect for start chat with peer without TLS add example external chaincode
## v2.3.0
Tue 3 Nov 2020 14:20:11 GMT
* [081d5c8](https://github.com/hyperledger/fabric-chaincode-java/commit/081d5c8) Bump version to 2.2.2
* [b494824](https://github.com/hyperledger/fabric-chaincode-java/commit/b494824) [FABCJ-290](https://jira.hyperledger.org/browse/FABCJ-290) Add release guide
## v2.2.1
Wed 7 Oct 2020 16:21:53 BST
* [cef231c](https://github.com/hyperledger/fabric-chaincode-java/commit/cef231c) [FABCJ-293](https://jira.hyperledger.org/browse/FABCJ-293) Remove gradle from image
* [d2643ef](https://github.com/hyperledger/fabric-chaincode-java/commit/d2643ef) Minor Performance Improvements
* [703558c](https://github.com/hyperledger/fabric-chaincode-java/commit/703558c) [FABCJ-291](https://jira.hyperledger.org/browse/FABCJ-291) Startkey needs additional checks For the open ended query, the start and empty keys are empty from the chaincode. However, in the shim, if the start key is an empty key, it is replaced with 0x01 which is nothing but a namespace for the non-composite key.
* [f35ae08](https://github.com/hyperledger/fabric-chaincode-java/commit/f35ae08) Fix tagging of fabric-javaenv image
* [cb31d36](https://github.com/hyperledger/fabric-chaincode-java/commit/cb31d36) Bump version to 2.2.1
## v2.2.0
Thu 2 Jul 11:28:13 BST 2020
* [32c8201](https://github.com/hyperledger/fabric-chaincode-java/commit/32c8201) [FABCJ-289](https://jira.hyperledger.org/browse/FABCJ-289) release: 2.2.0 LTS
* [0948234](https://github.com/hyperledger/fabric-chaincode-java/commit/0948234) [FABCJ-288](https://jira.hyperledger.org/browse/FABCJ-288) fix: simple key end of range
* [8b06be2](https://github.com/hyperledger/fabric-chaincode-java/commit/8b06be2) [FABCJ-286](https://jira.hyperledger.org/browse/FABCJ-286) Prepare 2.1.2
## v2.1.1
Mon 18 May 09:09:24 BST 2020
* [f0f958e](https://github.com/hyperledger/fabric-chaincode-java/commit/f0f958e) [FABCJ-284](https://jira.hyperledger.org/browse/FABCJ-284) Broken docs link
* [b89c464](https://github.com/hyperledger/fabric-chaincode-java/commit/b89c464) [FABCJ-285](https://jira.hyperledger.org/browse/FABCJ-285) Remove incorrect log point
* [93ff6bb](https://github.com/hyperledger/fabric-chaincode-java/commit/93ff6bb) [FABCJ-283](https://jira.hyperledger.org/browse/FABCJ-283) Bump version number to 2.1.1
## v2.1.0
Thu 9 Apr 2020 14:13:36 BST
* [72e6f78](https://github.com/hyperledger/fabric-chaincode-java/commit/72e6f78) [FABCJ-283](https://jira.hyperledger.org/browse/FABCJ-283) Update docker image version
* [54606f8](https://github.com/hyperledger/fabric-chaincode-java/commit/54606f8) [FABCJ-269](https://jira.hyperledger.org/browse/FABCJ-269) Compatibility Matrix
## v2.0.1
Wed 4 Mar 16:38:58 GMT 2020
* [8cb6a25](https://github.com/hyperledger/fabric-chaincode-java/commit/8cb6a25) [FAB-16136](https://jira.hyperledger.org/browse/FAB-16136) Do not run tests in chaincode container
* [3710641](https://github.com/hyperledger/fabric-chaincode-java/commit/3710641) [FABCJ-280](https://jira.hyperledger.org/browse/FABCJ-280) Copy chaincode into temporary directory before building
* [a25a7d6](https://github.com/hyperledger/fabric-chaincode-java/commit/a25a7d6) [FABCJ-276](https://jira.hyperledger.org/browse/FABCJ-276) Access localmspid
## v2.0.0
Fri 24 Jan 10:26:03 GMT 2020
* [659a1c4](https://github.com/hyperledger/fabric-chaincode-java/commit/659a1c4) Port fixes from master branch for Coverage & typos
* [9cf1e6a](https://github.com/hyperledger/fabric-chaincode-java/commit/9cf1e6a) [FABCI-482](https://jira.hyperledger.org/browse/FABCI-482) Update Nexus URL's to Artifactory
* [7ab7145](https://github.com/hyperledger/fabric-chaincode-java/commit/7ab7145) Fix typos in README.md
* [67fdc40](https://github.com/hyperledger/fabric-chaincode-java/commit/67fdc40) [FABCJ-259](https://jira.hyperledger.org/browse/FABCJ-259) Pagination Fix
* [1609425](https://github.com/hyperledger/fabric-chaincode-java/commit/1609425) Update maintainers list
* [1a45e3d](https://github.com/hyperledger/fabric-chaincode-java/commit/1a45e3d) [FABCJ-95](https://jira.hyperledger.org/browse/FABCJ-95) Checkstyle
## v2.0.0-beta
Thu 12 Dec 12:45:44 GMT 2019
* [4a13009](https://github.com/hyperledger/fabric-chaincode-java/commit/4a13009) Add OWASP dependency checks to build
* [44c96d7](https://github.com/hyperledger/fabric-chaincode-java/commit/44c96d7) FABCJ-258 Add latest image tag in AZP pipeline
* [e1d53bf](https://github.com/hyperledger/fabric-chaincode-java/commit/e1d53bf) Remove -SNAPSHOT from package version variable
* [fedc2ef](https://github.com/hyperledger/fabric-chaincode-java/commit/fedc2ef) Improve integration test reliability
* [6fd5507](https://github.com/hyperledger/fabric-chaincode-java/commit/6fd5507) [FABCJ-257] Rationalize examples
* [5d3cd53](https://github.com/hyperledger/fabric-chaincode-java/commit/5d3cd53) [FABCJ-160] Char support
* [e32e404](https://github.com/hyperledger/fabric-chaincode-java/commit/e32e404) [FABCJ-183] Extra properties appear in JSON from Java Objects
* [7f3c4e3](https://github.com/hyperledger/fabric-chaincode-java/commit/7f3c4e3) [FAB-17138](https://jira.hyperledger.org/browse/FAB-17138) Publish docker images to nexus
* [b52d26a](https://github.com/hyperledger/fabric-chaincode-java/commit/b52d26a) [FAB-15634](https://jira.hyperledger.org/browse/FAB-15634) Annotations for Serializer
* [207bd94](https://github.com/hyperledger/fabric-chaincode-java/commit/207bd94) [FAB-17100](https://jira.hyperledger.org/browse/FAB-17100) Default Thread Pool not set correctly
* [f50a4ed](https://github.com/hyperledger/fabric-chaincode-java/commit/f50a4ed) [FAB-16712](https://jira.hyperledger.org/browse/FAB-16712) Disable stalebot
* [ee8a1f4](https://github.com/hyperledger/fabric-chaincode-java/commit/ee8a1f4) Update javadoc location in readme
* [3951dca](https://github.com/hyperledger/fabric-chaincode-java/commit/3951dca) Fix git user email/name config in azure pipeline
* [55ad1b9](https://github.com/hyperledger/fabric-chaincode-java/commit/55ad1b9) Update javadoc build to use Hyperledger Bot
* [4680efc](https://github.com/hyperledger/fabric-chaincode-java/commit/4680efc) Publish javadoc
* [d4981a3](https://github.com/hyperledger/fabric-chaincode-java/commit/d4981a3) Fix the name of the docker image
* [6553ffc](https://github.com/hyperledger/fabric-chaincode-java/commit/6553ffc) Update readme
* [3b029a8](https://github.com/hyperledger/fabric-chaincode-java/commit/3b029a8) Fix the name of the docker image
* [d01eeff](https://github.com/hyperledger/fabric-chaincode-java/commit/d01eeff) Add artifacts to build result
* [3c2c27c](https://github.com/hyperledger/fabric-chaincode-java/commit/3c2c27c) [FAB-16712](https://jira.hyperledger.org/browse/FAB-16712) Update contributing guide
* [d13e0c0](https://github.com/hyperledger/fabric-chaincode-java/commit/d13e0c0) Next steps in publishing
* [75a0bed](https://github.com/hyperledger/fabric-chaincode-java/commit/75a0bed) Next steps in publishing
* [fd2e21a](https://github.com/hyperledger/fabric-chaincode-java/commit/fd2e21a) Next steps in publishing
* [5618de6](https://github.com/hyperledger/fabric-chaincode-java/commit/5618de6) Push the snapshot docker images to nexus
* [5a11c6e](https://github.com/hyperledger/fabric-chaincode-java/commit/5a11c6e) Push the snapshot docker images to nexus
* [4eff463](https://github.com/hyperledger/fabric-chaincode-java/commit/4eff463) [FAB-16315](https://jira.hyperledger.org/browse/FAB-16315) Improved Load Ability
* [11a26ce](https://github.com/hyperledger/fabric-chaincode-java/commit/11a26ce) Fix Azure Pipelines
* [7b3e509](https://github.com/hyperledger/fabric-chaincode-java/commit/7b3e509) [FAB-16711](https://jira.hyperledger.org/browse/FAB-16711) Azure pipelines
* [a3304ec](https://github.com/hyperledger/fabric-chaincode-java/commit/a3304ec) [FAB-16707](https://jira.hyperledger.org/browse/FAB-16707) Remove Gradle warnings
* [af3dec0](https://github.com/hyperledger/fabric-chaincode-java/commit/af3dec0) [IN-68] Add default GitHub SECURITY policy
* [88b9397](https://github.com/hyperledger/fabric-chaincode-java/commit/88b9397) [FAB-16680](https://jira.hyperledger.org/browse/FAB-16680) Fix cloudflare error on jitpack.io
* [f6076eb](https://github.com/hyperledger/fabric-chaincode-java/commit/f6076eb) [FAB-16669](https://jira.hyperledger.org/browse/FAB-16669) WIP: Use native Java 11 ALPN support
* [5520053](https://github.com/hyperledger/fabric-chaincode-java/commit/5520053) [FAB-16669](https://jira.hyperledger.org/browse/FAB-16669) Update gRPC and Protocol Buffers code
* [abff28f](https://github.com/hyperledger/fabric-chaincode-java/commit/abff28f) [FAB-16655](https://jira.hyperledger.org/browse/FAB-16655) Warnings as errors for Java chaincode docs
* [50e75bf](https://github.com/hyperledger/fabric-chaincode-java/commit/50e75bf) [FAB-16655](https://jira.hyperledger.org/browse/FAB-16655) Warnings as errors for Java chaincode
* [d79f5a6](https://github.com/hyperledger/fabric-chaincode-java/commit/d79f5a6) [FAB-6415](https://jira.hyperledger.org/browse/FAB-6415) Remove tests from Docker image build
* [35d5884](https://github.com/hyperledger/fabric-chaincode-java/commit/35d5884) [FAB-6415](https://jira.hyperledger.org/browse/FAB-6415) Various chaincode deployment updates
* [12b5243](https://github.com/hyperledger/fabric-chaincode-java/commit/12b5243) [FAB-16493](https://jira.hyperledger.org/browse/FAB-16493) Fixed gradle build on windows
* [2f6be19](https://github.com/hyperledger/fabric-chaincode-java/commit/2f6be19) [FAB-6415](https://jira.hyperledger.org/browse/FAB-6415) Remove cglib dependency
* [56c533e](https://github.com/hyperledger/fabric-chaincode-java/commit/56c533e) [FAB-6415](https://jira.hyperledger.org/browse/FAB-6415) Upgrade Docker image to Java 11
* [5dbbea7](https://github.com/hyperledger/fabric-chaincode-java/commit/5dbbea7) [FAB-6415](https://jira.hyperledger.org/browse/FAB-6415) Replace org.reflections with classgraph
* [059d043](https://github.com/hyperledger/fabric-chaincode-java/commit/059d043) [FAB-6415](https://jira.hyperledger.org/browse/FAB-6415) Add javax.xml.bind dependency for Java 11
* [cbe663b](https://github.com/hyperledger/fabric-chaincode-java/commit/cbe663b) [FAB-6415](https://jira.hyperledger.org/browse/FAB-6415) Upgrade to Gradle 5.6.2 and Maven 3.6.2
* [887153c](https://github.com/hyperledger/fabric-chaincode-java/commit/887153c) [FAB-6415](https://jira.hyperledger.org/browse/FAB-6415) Add javax.annotation dependency for Java 11
* [66e9079](https://github.com/hyperledger/fabric-chaincode-java/commit/66e9079) [FAB-16489](https://jira.hyperledger.org/browse/FAB-16489) Add CODEOWNERS
* [182c050](https://github.com/hyperledger/fabric-chaincode-java/commit/182c050) [FAB-15507](https://jira.hyperledger.org/browse/FAB-15507) Add doc
* [1a38b84](https://github.com/hyperledger/fabric-chaincode-java/commit/1a38b84) [FABN-1320] Remove sed from git_tag.sh script
* [25ed6c1](https://github.com/hyperledger/fabric-chaincode-java/commit/25ed6c1) [FABN-1320] Fix git_tag.sh
* [f47f601](https://github.com/hyperledger/fabric-chaincode-java/commit/f47f601) [FAB-15929](https://jira.hyperledger.org/browse/FAB-15929) Add getPrivateDataHash support
* [4371d07](https://github.com/hyperledger/fabric-chaincode-java/commit/4371d07) [FAB-16217](https://jira.hyperledger.org/browse/FAB-16217) Do not load JSON Schema schema from network
* [44d76f4](https://github.com/hyperledger/fabric-chaincode-java/commit/44d76f4) [FAB-15895](https://jira.hyperledger.org/browse/FAB-15895) Added client identity to context
* [9169e14](https://github.com/hyperledger/fabric-chaincode-java/commit/9169e14) New maintainer application
* [12309b5](https://github.com/hyperledger/fabric-chaincode-java/commit/12309b5) [FAB-16091](https://jira.hyperledger.org/browse/FAB-16091) Handle invalid contract name
* [e8ca970](https://github.com/hyperledger/fabric-chaincode-java/commit/e8ca970) [FAB-15647](https://jira.hyperledger.org/browse/FAB-15647) Fix markup of README
* [360d75a](https://github.com/hyperledger/fabric-chaincode-java/commit/360d75a) [FAB-15883](https://jira.hyperledger.org/browse/FAB-15883) Removed swagger annotations
* [25c5be6](https://github.com/hyperledger/fabric-chaincode-java/commit/25c5be6) [FAB-15615](https://jira.hyperledger.org/browse/FAB-15615) Add ChaincodeException support
* [9077581](https://github.com/hyperledger/fabric-chaincode-java/commit/9077581) [FAB-15823](https://jira.hyperledger.org/browse/FAB-15823) Fix getStringPayload npe
* [e163d3f](https://github.com/hyperledger/fabric-chaincode-java/commit/e163d3f) [FAB-15743](https://jira.hyperledger.org/browse/FAB-15743) Align Context
* [5ad6ed8](https://github.com/hyperledger/fabric-chaincode-java/commit/5ad6ed8) [FAB-15507](https://jira.hyperledger.org/browse/FAB-15507) Exclude unnecessary contract javadoc
* [9cc6553](https://github.com/hyperledger/fabric-chaincode-java/commit/9cc6553) [FAB-15720](https://jira.hyperledger.org/browse/FAB-15720) prevent duplicate transactions
* [f87de8e](https://github.com/hyperledger/fabric-chaincode-java/commit/f87de8e) [FAB-15632](https://jira.hyperledger.org/browse/FAB-15632) Add name element to transaction annotation
* [d726175](https://github.com/hyperledger/fabric-chaincode-java/commit/d726175) [FAB-13803](https://jira.hyperledger.org/browse/FAB-13803) Parameter Marshalling
* [72dc716](https://github.com/hyperledger/fabric-chaincode-java/commit/72dc716) [FAB-15214](https://jira.hyperledger.org/browse/FAB-15214) Remove init annotation
* [509bfbf](https://github.com/hyperledger/fabric-chaincode-java/commit/509bfbf) [FAB-13802](https://jira.hyperledger.org/browse/FAB-13802) Metadata Support
* [0467032](https://github.com/hyperledger/fabric-chaincode-java/commit/0467032) Application to be consider for maintainer of this repo
* [526f36d](https://github.com/hyperledger/fabric-chaincode-java/commit/526f36d) [FAB-13802](https://jira.hyperledger.org/browse/FAB-13802) Return types update
* [1662390](https://github.com/hyperledger/fabric-chaincode-java/commit/1662390) [FAB-13912](https://jira.hyperledger.org/browse/FAB-13912) Implement new interfaces
* [bd1c269](https://github.com/hyperledger/fabric-chaincode-java/commit/bd1c269) [FAB-14961](https://jira.hyperledger.org/browse/FAB-14961) Update to the FAQ
* [dc02c3b](https://github.com/hyperledger/fabric-chaincode-java/commit/dc02c3b) [FAB-14995](https://jira.hyperledger.org/browse/FAB-14995) Prepare for next release
## v2.0.0-alpha
Sun Apr 9 15:37:09 IDT 2019
* [b62740c](https://github.com/hyperledger/fabric-chaincode-java/commit/b62740c) [FAB-13798](https://jira.hyperledger.org/browse/FAB-13798) New interfaces
* [8235149](https://github.com/hyperledger/fabric-chaincode-java/commit/8235149) [FAB-13795](https://jira.hyperledger.org/browse/FAB-13795) Contract definition
* [762a955](https://github.com/hyperledger/fabric-chaincode-java/commit/762a955) [FAB-13800](https://jira.hyperledger.org/browse/FAB-13800) Transaction Context
* [351acb5](https://github.com/hyperledger/fabric-chaincode-java/commit/351acb5) [FAB-13794](https://jira.hyperledger.org/browse/FAB-13794) New Annotations
* [3e13a57](https://github.com/hyperledger/fabric-chaincode-java/commit/3e13a57) [FAB-12960](https://jira.hyperledger.org/browse/FAB-12960) Adding cc without main method
* [40bf2c1](https://github.com/hyperledger/fabric-chaincode-java/commit/40bf2c1) [FAB-14533](https://jira.hyperledger.org/browse/FAB-14533) Updating integration tests
* [b17d8a2](https://github.com/hyperledger/fabric-chaincode-java/commit/b17d8a2) [FAB-12504](https://jira.hyperledger.org/browse/FAB-12504) Added maven integration test.
* [0e76b72](https://github.com/hyperledger/fabric-chaincode-java/commit/0e76b72) [FAB-14522](https://jira.hyperledger.org/browse/FAB-14522) README update: sdk compatibility
* [e5d3e40](https://github.com/hyperledger/fabric-chaincode-java/commit/e5d3e40) [FAB-14460](https://jira.hyperledger.org/browse/FAB-14460) Better chaincode source check
* [0adaf35](https://github.com/hyperledger/fabric-chaincode-java/commit/0adaf35) [FAB-13490](https://jira.hyperledger.org/browse/FAB-13490) javaenv image based on openjdk:slim-8
* [e33b4bd](https://github.com/hyperledger/fabric-chaincode-java/commit/e33b4bd) [FAB-13672](https://jira.hyperledger.org/browse/FAB-13672) stop using deprecated left closure
* [c3e342a](https://github.com/hyperledger/fabric-chaincode-java/commit/c3e342a) [FAB-13097](https://jira.hyperledger.org/browse/FAB-13097) Getting correct jar
* [cc76d2f](https://github.com/hyperledger/fabric-chaincode-java/commit/cc76d2f) [FAB-13097](https://jira.hyperledger.org/browse/FAB-13097) Adding shim 1.3.0 to docker image
* [b22858b](https://github.com/hyperledger/fabric-chaincode-java/commit/b22858b) Configure Stale ProBot
* [1279d2c](https://github.com/hyperledger/fabric-chaincode-java/commit/1279d2c) [FAB-13436](https://jira.hyperledger.org/browse/FAB-13436) multistage docker build
* [035a7d2](https://github.com/hyperledger/fabric-chaincode-java/commit/035a7d2) [FAB-13243](https://jira.hyperledger.org/browse/FAB-13243) fix javaenv docker build tag
* [ad89bbb](https://github.com/hyperledger/fabric-chaincode-java/commit/ad89bbb) [FAB-13248](https://jira.hyperledger.org/browse/FAB-13248) Update dependencies for sonatype
* [cea4db0](https://github.com/hyperledger/fabric-chaincode-java/commit/cea4db0) [FAB-13229](https://jira.hyperledger.org/browse/FAB-13229) Prepare for next release (2.0.0 on master)
* [4c6cd6c](https://github.com/hyperledger/fabric-chaincode-java/commit/4c6cd6c) [FAB-13236](https://jira.hyperledger.org/browse/FAB-13236) Publish jars to sonatype
## v1.4.0-rc1
Sun Apr 7 15:37:00 IDT 2019
* [2d26e5d](https://github.com/hyperledger/fabric-chaincode-java/commit/2d26e5d) [FAB-13117](https://jira.hyperledger.org/browse/FAB-13117) Release java chaincode 1.4.0-rc1
* [3628832](https://github.com/hyperledger/fabric-chaincode-java/commit/3628832) [FAB-13194](https://jira.hyperledger.org/browse/FAB-13194) Script to publish javaenv multiarch image
* [455100c](https://github.com/hyperledger/fabric-chaincode-java/commit/455100c) [FAB-12426](https://jira.hyperledger.org/browse/FAB-12426) Fix java chaincode return status.
* [ea26118](https://github.com/hyperledger/fabric-chaincode-java/commit/ea26118) [FAB-12197](https://jira.hyperledger.org/browse/FAB-12197) Integration tests
* [3b61085](https://github.com/hyperledger/fabric-chaincode-java/commit/3b61085) [FAB-12110](https://jira.hyperledger.org/browse/FAB-12110) SimpleAsset java chaincode example
* [b46fc70](https://github.com/hyperledger/fabric-chaincode-java/commit/b46fc70) [FAB-12328](https://jira.hyperledger.org/browse/FAB-12328) java cc pagination
* [68685dc](https://github.com/hyperledger/fabric-chaincode-java/commit/68685dc) [FAB-12469](https://jira.hyperledger.org/browse/FAB-12469) Java sbe tests
* [748ea9f](https://github.com/hyperledger/fabric-chaincode-java/commit/748ea9f) [FAB-12468](https://jira.hyperledger.org/browse/FAB-12468) Utility classes for java sbe
* [b4b3a87](https://github.com/hyperledger/fabric-chaincode-java/commit/b4b3a87) [FAB-12467](https://jira.hyperledger.org/browse/FAB-12467) State-based endorsement
* [c32c4c4](https://github.com/hyperledger/fabric-chaincode-java/commit/c32c4c4) [FAB-12568](https://jira.hyperledger.org/browse/FAB-12568) Adding identities to JavaCC
* [fb81132](https://github.com/hyperledger/fabric-chaincode-java/commit/fb81132) Fix LFID for gennadyl
* [7522309](https://github.com/hyperledger/fabric-chaincode-java/commit/7522309) Retire dormant maintainers, suggest new nomination
* [321db66](https://github.com/hyperledger/fabric-chaincode-java/commit/321db66) [FAB-12444](https://jira.hyperledger.org/browse/FAB-12444) Update java cc to baseimage 0.4.14
* [aa177d2](https://github.com/hyperledger/fabric-chaincode-java/commit/aa177d2) [FAB-12347](https://jira.hyperledger.org/browse/FAB-12347) Update java cc to baseimage 0.4.13
* [e9c5602](https://github.com/hyperledger/fabric-chaincode-java/commit/e9c5602) [FAB-12223](https://jira.hyperledger.org/browse/FAB-12223) Adding FAQ file
* [af01201](https://github.com/hyperledger/fabric-chaincode-java/commit/af01201) [FAB-12278](https://jira.hyperledger.org/browse/FAB-12278) Fixing java cc build script
* [52cc6bd](https://github.com/hyperledger/fabric-chaincode-java/commit/52cc6bd) [FAB-12157](https://jira.hyperledger.org/browse/FAB-12157) Hadling chaincode in default package
* [8dcd819](https://github.com/hyperledger/fabric-chaincode-java/commit/8dcd819) [FAB-12152](https://jira.hyperledger.org/browse/FAB-12152) Prepare for next release (1.4.0 on master)
* [cc91af5](https://github.com/hyperledger/fabric-chaincode-java/commit/cc91af5) [FAB-12152](https://jira.hyperledger.org/browse/FAB-12152) Prepare for next release (1.3.0 on master)
* [9cbb36c](https://github.com/hyperledger/fabric-chaincode-java/commit/9cbb36c) [FAB-10525](https://jira.hyperledger.org/browse/FAB-10525) Fix the bug getStateByPartialCompositeKey
## v1.3.0-rc1
Tue Sep 25 15:25:05 EDT 2018
* [224bc4d](https://github.com/hyperledger/fabric-chaincode-java/commit/224bc4d) [FAB-12160](https://jira.hyperledger.org/browse/FAB-12160) Release fabric-chaincode-java v1.3.0-rc1
* [333d91b](https://github.com/hyperledger/fabric-chaincode-java/commit/333d91b) [FAB-12129](https://jira.hyperledger.org/browse/FAB-12129) Update baseimage version
* [01dd207](https://github.com/hyperledger/fabric-chaincode-java/commit/01dd207) [FAB-12115](https://jira.hyperledger.org/browse/FAB-12115) Fix groupId in shim jars
* [5d7ed1c](https://github.com/hyperledger/fabric-chaincode-java/commit/5d7ed1c) [FAB-9519](https://jira.hyperledger.org/browse/FAB-9519) Java shim readmy and tutorial
* [44a1367](https://github.com/hyperledger/fabric-chaincode-java/commit/44a1367) [FAB-12017](https://jira.hyperledger.org/browse/FAB-12017) Adding java docs
* [56e2a11](https://github.com/hyperledger/fabric-chaincode-java/commit/56e2a11) [FAB-11839](https://jira.hyperledger.org/browse/FAB-11839) Adding FVT tests
* [ac70a6f](https://github.com/hyperledger/fabric-chaincode-java/commit/ac70a6f) [FAB-10032](https://jira.hyperledger.org/browse/FAB-10032) Adding unit test
* [ac6c906](https://github.com/hyperledger/fabric-chaincode-java/commit/ac6c906) [FAB-11750](https://jira.hyperledger.org/browse/FAB-11750) Updating version to 1.3.0
* [e80ba7c](https://github.com/hyperledger/fabric-chaincode-java/commit/e80ba7c) [FAB-11288](https://jira.hyperledger.org/browse/FAB-11288) Adding private data functions
* [79497bc](https://github.com/hyperledger/fabric-chaincode-java/commit/79497bc) [FAB-11741](https://jira.hyperledger.org/browse/FAB-11741) Reformat code
* [71ca2a2](https://github.com/hyperledger/fabric-chaincode-java/commit/71ca2a2) [FAB-11664](https://jira.hyperledger.org/browse/FAB-11664) Enable separate docker build
* [52f2c8b](https://github.com/hyperledger/fabric-chaincode-java/commit/52f2c8b) [FAB-11485](https://jira.hyperledger.org/browse/FAB-11485) Fixing empty proposal handling
* [2b35a46](https://github.com/hyperledger/fabric-chaincode-java/commit/2b35a46) [FAB-11304](https://jira.hyperledger.org/browse/FAB-11304) Handling READY message from peer
* [4b27549](https://github.com/hyperledger/fabric-chaincode-java/commit/4b27549) [FAB-9380](https://jira.hyperledger.org/browse/FAB-9380) remove FSM from java chaincode shim
* [f5e6fb4](https://github.com/hyperledger/fabric-chaincode-java/commit/f5e6fb4) [FAB-9920](https://jira.hyperledger.org/browse/FAB-9920) Java shim mutual TLS
* [d295c96](https://github.com/hyperledger/fabric-chaincode-java/commit/d295c96) [FAB-9424](https://jira.hyperledger.org/browse/FAB-9424) Adding docker build support
* [1cb0493](https://github.com/hyperledger/fabric-chaincode-java/commit/1cb0493) [FAB-10845](https://jira.hyperledger.org/browse/FAB-10845) Remove protos files
* [6c8abf4](https://github.com/hyperledger/fabric-chaincode-java/commit/6c8abf4) [FAB-9416](https://jira.hyperledger.org/browse/FAB-9416): Add gradle task to update protos
* [e3be99e](https://github.com/hyperledger/fabric-chaincode-java/commit/e3be99e) [FAB-9407](https://jira.hyperledger.org/browse/FAB-9407): Extract JavaCC shim protos
* [e4c9867](https://github.com/hyperledger/fabric-chaincode-java/commit/e4c9867) [FAB-9359](https://jira.hyperledger.org/browse/FAB-9359) add CODE_OF_CONDUCT.md and other docs
* [8772201](https://github.com/hyperledger/fabric-chaincode-java/commit/8772201) [FAB-9063](https://jira.hyperledger.org/browse/FAB-9063) Provide link to Fabric committers
* [4a9406b](https://github.com/hyperledger/fabric-chaincode-java/commit/4a9406b) Add Maintainers to fabric-chaincode-java
* [091a081](https://github.com/hyperledger/fabric-chaincode-java/commit/091a081) [FAB-8986](https://jira.hyperledger.org/browse/FAB-8986): Harden gradle build configuration
* [bb958eb](https://github.com/hyperledger/fabric-chaincode-java/commit/bb958eb) [FAB-8346](https://jira.hyperledger.org/browse/FAB-8346) sync chaincode proto files w/ fabric
* [c399853](https://github.com/hyperledger/fabric-chaincode-java/commit/c399853) [FAB-7989](https://jira.hyperledger.org/browse/FAB-7989) --peerAddress should be --peer.address
* [308eb63](https://github.com/hyperledger/fabric-chaincode-java/commit/308eb63) [FAB-7626](https://jira.hyperledger.org/browse/FAB-7626) Move to Gradle 4.4.1
* [d73edd6](https://github.com/hyperledger/fabric-chaincode-java/commit/d73edd6) [FAB-7294](https://jira.hyperledger.org/browse/FAB-7294) enable shim jar publication
* [d9c463e](https://github.com/hyperledger/fabric-chaincode-java/commit/d9c463e) [FAB-7091](https://jira.hyperledger.org/browse/FAB-7091) Extract StreamObserver out of ChaincodeBase
* [e3644f4](https://github.com/hyperledger/fabric-chaincode-java/commit/e3644f4) [FAB-6889](https://jira.hyperledger.org/browse/FAB-6889) add channel ID to chaincode message
* [2eda08b](https://github.com/hyperledger/fabric-chaincode-java/commit/2eda08b) [FAB-6726](https://jira.hyperledger.org/browse/FAB-6726) move to gradle 4.2.1
* [5cf4f73](https://github.com/hyperledger/fabric-chaincode-java/commit/5cf4f73) [FAB-3650](https://jira.hyperledger.org/browse/FAB-3650) add getBinding() API
* [a3b7d71](https://github.com/hyperledger/fabric-chaincode-java/commit/a3b7d71) [FAB-3649](https://jira.hyperledger.org/browse/FAB-3649) add getTransient() API
* [3cb86b0](https://github.com/hyperledger/fabric-chaincode-java/commit/3cb86b0) [FAB-3648](https://jira.hyperledger.org/browse/FAB-3648) add getCreator() API
* [5982e40](https://github.com/hyperledger/fabric-chaincode-java/commit/5982e40) [FAB-3653](https://jira.hyperledger.org/browse/FAB-3653) add getTxTimestamp() API
* [5566a62](https://github.com/hyperledger/fabric-chaincode-java/commit/5566a62) [FAB-6681](https://jira.hyperledger.org/browse/FAB-6681) Add code coverage report and verification
* [64de43a](https://github.com/hyperledger/fabric-chaincode-java/commit/64de43a) [FAB-6637](https://jira.hyperledger.org/browse/FAB-6637) add license check to fabric-chaincode-java
* [9f2f4f9](https://github.com/hyperledger/fabric-chaincode-java/commit/9f2f4f9) [FAB-3470](https://jira.hyperledger.org/browse/FAB-3470) update composite key format
* [61b8fc2](https://github.com/hyperledger/fabric-chaincode-java/commit/61b8fc2) [FAB-3651](https://jira.hyperledger.org/browse/FAB-3651) add getSignedProposal() API
* [8c2352a](https://github.com/hyperledger/fabric-chaincode-java/commit/8c2352a) [FAB-6494](https://jira.hyperledger.org/browse/FAB-6494) Add unit tests for ChaincodeStubImpl
* [b58bcc2](https://github.com/hyperledger/fabric-chaincode-java/commit/b58bcc2) Update Jim's RC ID in MAINTAINERS.rst
* [02520ac](https://github.com/hyperledger/fabric-chaincode-java/commit/02520ac) Initial MAINTAINERS file
* [915824f](https://github.com/hyperledger/fabric-chaincode-java/commit/915824f) [FAB-6435](https://jira.hyperledger.org/browse/FAB-6435) Copy Java shim from fabric repository
* [067b712](https://github.com/hyperledger/fabric-chaincode-java/commit/067b712) [FAB-5928](https://jira.hyperledger.org/browse/FAB-5928) Initial gradle build script
================================================
FILE: CODEOWNERS
================================================
# SPDX-License-Identifier: Apache-2.0
# Fabric Chaincode Java Maintainers
* @hyperledger/fabric-chaincode-java-maintainers
================================================
FILE: CODE_OF_CONDUCT.md
================================================
Code of Conduct Guidelines
==========================
Please review the Hyperledger [Code of
Conduct](https://wiki.hyperledger.org/community/hyperledger-project-code-of-conduct)
before participating. It is important that we keep things civil.
<a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/88x31.png" /></a><br />This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International License</a>.
================================================
FILE: COMPATIBILITY.md
================================================
# Support and Compatibility
Github is used for code base management and issue tracking.
## Summary of Compatibility
This table shows the summary of the compatibility of the Java chaincode libraries, together with the JVM version they require.
| Java chaincode version | Minimum supported Java | Java runtime | Docker image platforms |
|------------------------|------------------------|--------------|------------------------|
| v1.4 | 8 | 8 | amd64 |
| v2.2 | 11 | 11 | amd64 |
| v2.5.0 - v2.5.4 | 11 | 11 | amd64, arm64 |
| v2.5.5 - v2.5.7 | 11 | 21 | amd64, arm64 |
| v2.5.8+ | 11 | 25 | amd64, arm64 |
The Java runtime provided by the chaincode Docker image determines the maximum Java version (and features) that smart contract code can exploit when using the default Java chaincode container.
Subject to a suitable runtime environment, the Java chaincode libraries can be used to communicate with Fabric peers at different LTS versions. The level of functionality is determined by the Fabric version in use and channel capabilities.
All Docker images, chaincode libraries and tools are tested using amd64 (x86-64) only.
## Chaincode builder
The default Fabric chaincode builder creates a Docker container to run deployed smart contracts. Java chaincode Docker containers are built using the `hyperledger/fabric-javaenv` Docker image, tagged with the same major and minor version as the Fabric peer version. For example, Fabric v2.5 creates Java chaincode containers using the `hyperledger/fabric-javaenv:2.5` Docker image. Fabric v3 continues to use the v2.5 Java chaincode image.
A different chaincode Docker image can be specified using the `CORE_CHAINCODE_JAVA_RUNTIME` environment variable on the Fabric peer. For example, `CORE_CHAINCODE_JAVA_RUNTIME=example/customJavaRuntime:latest`.
With Fabric v2 and later, an alternative chaincode builder can be configured on the Fabric peer. In this case the configured chaincode builder controls how chaincode is launched. See the [Fabric documentation](https://hyperledger-fabric.readthedocs.io/en/release-2.5/cc_launcher.html) for further details.
## Chaincode packaging
When using the `hyperledger/fabric-javaenv` Java chaincode Docker images, deployed chaincode is built as follows:
- If both Gradle and Maven files are present, Gradle is used.
- Gradle build files can be either Groovy or Kotlin.
- If Gradle or Maven wrappers are present, they will be used instead of the preinstalled Gradle or Maven versions.
Remember that when using the wrappers, code will be downloaded from the Internet. Keep this in mind for any installation with limited network access.
Alternatively, it is recommended to package prebuilt JAR files, including the smart contract and all dependencies. In this case, no Internet access is required when deploying Java chaincode.
================================================
FILE: CONTRIBUTING.md
================================================
# Contributing to fabric-chaincode-java
We welcome contributions to the [Hyperledger Fabric](https://hyperledger-fabric.readthedocs.io) Project. There's always plenty to do!
If you have any questions about the project or how to contribute, you can find us in the [fabric-contracts-api](https://discordapp.com/channels/905194001349627914/943090527920877598) channel on [Discord](https://discord.lfdecentralizedtrust.org/).
Here are a few guidelines to help you contribute successfully...
## Issues
All issues are tracked in the issues tab in GitHub. If you find a bug which we don't already know about, you can help us by creating a new issue describing the problem. Please include as much detail as possible to help us track down the cause.If you want to begin contributing code, looking through our open issues is a good way to start. Try looking for recent issues with detailed descriptions first, or ask us on Discord if you're unsure which issue to choose.
## Enhancements
Make sure you have the support of the Hyperledger Fabric community before investing a lot of effort in project enhancements. Please look up the [Fabric RFC](https://github.com/hyperledger/fabric-rfcs) process for large changes.
## Pull Requests
We use our own forks and [Github Flow](https://docs.github.com/en/get-started/using-github/github-flow) to deliver changes to the code. Follow these steps to deliver your first pull request:
1. [Fork the repository](https://docs.github.com/en/get-started/exploring-projects-on-github/contributing-to-a-project) and create a new branch from `main`.
2. If you've added code that should be tested, add tests!
3. If you've added any new features or made breaking changes, update the documentation.
4. Ensure all the tests pass.
5. Include the JIRA issue number, a descriptive message, and the [Developer Certificate of Origin (DCO) sign-off](https://github.com/dcoapp/app#how-it-works) on all commit messages.
6. [Issue a pull request](https://docs.github.com/en/get-started/exploring-projects-on-github/contributing-to-a-project#making-a-pull-request)!
7. [GitHub Actions](https://github.com/hyperledger/fabric-chaincode-java/actions) builds must succeed before the pull request can be reviewed and merged.
## Coding Style
Please to try to be consistent with the rest of the code and conform to checkstyle rules where they are provided. [Spotless](https://github.com/diffplug/spotless) is used to enforce code formatting. You can run `./gradlew spotlessApply` to apply the mandated code formatting to the codebase before submitting changes to avoid failing the build with formatting violations.
## Code of Conduct Guidelines <a name="conduct"></a>
See our [Code of Conduct Guidelines](../blob/main/CODE_OF_CONDUCT.md).
## Maintainers <a name="maintainers"></a>
Should you have any questions or concerns, please reach out to one of the project's [Maintainers](../blob/main/MAINTAINERS.md).
## How to work with the Codebase
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.
```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
# 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
[Hyperledger Fabric contributors guide](http://hyperledger-fabric.readthedocs.io/en/latest/CONTRIBUTING.html) for more details, including other Hyperledger Fabric projects you may wish to contribute to.
---
[](http://creativecommons.org/licenses/by/4.0/)
This work is licensed under a [Creative Commons Attribution 4.0 International License](http://creativecommons.org/licenses/by/4.0/)
================================================
FILE: LICENSE
================================================
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "{}"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright {yyyy} {name of copyright owner}
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
================================================
FILE: MAINTAINERS.md
================================================
# Maintainers
| Name | GitHub | Chat | email |
| ------------ | ----------------------------------------------------- | --------------- | -------------------------- |
| Dave Enyeart | [denyeart](https://github.com/denyeart) | denyeart | <enyeart@us.ibm.com> |
| Mark Lewis | [bestbeforetoday](https://github.com/bestbeforetoday) | bestbeforetoday | <Mark.S.Lewis@outlook.com> |
# Retired Maintainers
| Name | GitHub | Chat | email |
| ----------------------- | ------------------------------------------------------- | ------------- | ------------------------------------- |
| Artem Barger | [c0rwin](https://github.com/c0rwin) | c0rwin | <bartem@il.ibm.com> |
| Matthew B White | [mbwhite](https://github.com/mbwhite) | mbwhite | <whitemat@uk.ibm.com> |
| James Taylor | [jt-nti](https://github.com/jt-nti) | jtonline | <jamest@uk.ibm.com> |
| Gari Singh | [mastersingh24](https://github.com/mastersingh24) | mastersingh24 | <gari.r.singh@gmail.com> |
| Gennady Laventman | [gennadylaventman](https://github.com/gennadylaventman) | gennadyl | <gennady@il.ibm.com> |
| Jim Zhang | [jimthematrix](https://github.com/jimthematrix) | jimthematrix | <jim\_the\_matrix@hotmail.com> |
| Luis Sanchez | [sanchezl](https://github.com/sanchezl) | sanchezl | <sanchezl@us.ibm.com> |
| Srinivasan Muralidharan | [muralisrini](https://github.com/muralisrini) | muralisr | <srinivasan.muralidharan99@gmail.com> |
| Yacov Manevich | [yacovm](https://github.com/yacovm) | yacovm | <yacovm@il.ibm.com> |
Also: Please see the [Release Manager section](https://github.com/hyperledger/fabric/blob/main/MAINTAINERS.md)
<a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/88x31.png" /></a><br />This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International License</a>.
================================================
FILE: Makefile
================================================
#
# SPDX-License-Identifier: Apache-2.0
#
bin_dir := bin
osv-scanner := $(bin_dir)/osv-scanner
kernel_name := $(shell uname -s | tr '[:upper:]' '[:lower:]')
machine_hardware := $(shell uname -m)
ifeq ($(machine_hardware), x86_64)
machine_hardware := amd64
endif
ifeq ($(machine_hardware), aarch64)
machine_hardware := arm64
endif
.PHONY: scan
scan: $(osv-scanner)
rm -f fabric-chaincode-shim/gradle.lockfile
./gradlew --quiet :fabric-chaincode-shim:dependencies --write-locks --configuration runtimeClasspath
bin/osv-scanner scan --lockfile=fabric-chaincode-shim/gradle.lockfile
.PHONY: scan-all
scan-all: $(osv-scanner)
rm -f fabric-chaincode-shim/gradle.lockfile
./gradlew --quiet :fabric-chaincode-shim:dependencies --write-locks
bin/osv-scanner scan --lockfile=fabric-chaincode-shim/gradle.lockfile
.PHONY: install-osv-scanner
install-osv-scanner:
mkdir -p '$(bin_dir)'
curl --fail --location --show-error --silent --output '$(osv-scanner)' \
'https://github.com/google/osv-scanner/releases/latest/download/osv-scanner_$(kernel_name)_$(machine_hardware)'
chmod u+x '$(osv-scanner)'
$(osv-scanner):
$(MAKE) install-osv-scanner
================================================
FILE: README.md
================================================
# Hyperledger Fabric Chaincode Java
[](https://dev.azure.com/Hyperledger/Fabric-Chaincode-Java/_build/latest?definitionId=39&branchName=main)
[](https://maven-badges.herokuapp.com/maven-central/org.hyperledger.fabric-chaincode-java/fabric-chaincode-shim)
[](https://discordapp.com/channels/905194001349627914/943090527920877598)
This is a Java based implementation of Hyperledger Fabric chaincode shim APIs, which enables development of smart contracts using the Java language.
This project creates `fabric-chaincode-shim` jar
files for developers' consumption and the `hyperledger/fabric-javaenv` docker image
to run Java chaincode.
## Getting Started
Application developers interested in developing Java smart contracts for Hyperledger Fabric should read the [JavaDoc](https://hyperledger.github.io/fabric-chaincode-java/) which includes download information, and links to documentation and samples.
## Project structure
### fabric-chaincode-shim
Contains the java shim classes that define Java chaincode API and way to communicate with Fabric peers.
### fabric-chaincode-docker
Contains instructions to build the `hyperledger/fabric-javaenv` docker image.
### fabric-chaincode-integration-test
Contains higher level tests for Java chaincode.
> **Note:** in the future these should be replaced with a separate suite of [Cucumber](https://cucumber.io) tests which run against all chaincode implementations.
### examples
The following technical examples are in this repository. Please see the tutorials in the [documentation](https://hyperledger-fabric.readthedocs.io/en/latest/tutorials.html)
- **fabric-contract-example-gradle** - Contains an example Java contract built using gradle
- **fabric-contract-example-maven** - Contains an example Java contract built using maven
- **fabric-contract-example-gradle-kotlin** - Contains an example Kotlin contract build using gradle (Kotlin gradle files)
- **fabric-chaincode-example-sacc** - Contains an example java chaincode gradle project that includes sample chaincode and basic gradle build instructions.
- **fabric-chaincode-example-sbe** - Contains an example java chaincode gradle project that includes state based endorsement
## 'dev' main branch builds
These 'dev' drivers are built from the main branch only, and have a version format including the date for example `2.3.1.dev.20210303`.
They are published to Artifactory. These can be accessed via the repository at
```
maven {
url "https://hyperledger.jfrog.io/hyperledger/fabric-maven"
}
```
They can be accessed in a build file like this
```
dependencies {
compile group: 'org.hyperledger.fabric-chaincode-java', name: 'fabric-chaincode-shim', version: '2.3.1.dev.+'
}
```
## Building and testing
Make sure you have the following prereqs installed:
- [Docker](https://www.docker.com/get-docker)
- [Docker Compose](https://docs.docker.com/compose/install/)
- [JDK 11](https://adoptium.net/)
> **Note:** Java can be installed using [sdkman](https://sdkman.io/).
Clone the repository if you haven't already.
```
git clone https://github.com/hyperledger/fabric-chaincode-java.git
```
Build java shim jars (proto and shim jars) and install them to local maven repository.
```
cd fabric-chaincode-java
./gradlew clean build install
```
> **Note:** `./gradlew clean build classes` can be used instead to reduce the binaries that are built. This should be sufficient for using the local repository.
Build javaenv docker image, to have it locally.
```
./gradlew buildImage
```
## Compatibility
For details on what Java runtime and versions of Hyperledger Fabric can be used please see the [compatibility document](COMPATIBILITY.md).
---
[](http://creativecommons.org/licenses/by/4.0/)
This work is licensed under a [Creative Commons Attribution 4.0 International License](http://creativecommons.org/licenses/by/4.0/)
================================================
FILE: RELEASING.md
================================================
# Releasing
The following artifacts are created as a result of releasing Fabric Chaincode Java:
- `fabric-javaenv` Docker images:
- [Docker Hub](https://hub.docker.com/r/hyperledger/fabric-javaenv)
- [GitHub Packages](https://github.com/orgs/hyperledger/packages/container/package/fabric-javaenv)
- `fabric-chaincode-shim` Java libraries:
- [Maven Central](https://central.sonatype.com/artifact/org.hyperledger.fabric-chaincode-java/fabric-chaincode-shim)
- [GitHub Packages](https://github.com/hyperledger/fabric-chaincode-java/packages/50049)
## Before releasing
The following tasks are required before releasing:
- Ensure the version number in `build.gradle` is the required release version.
- Check the last branch build passed since exactly this repository state will be released.
## Create release
Creating a GitHub release on the [releases page](https://github.com/hyperledger/fabric-chaincode-java/releases) will trigger the build to publish the new release.
When drafting the release, create a new tag for the new version (with a `v` prefix). For example: `v2.1.4`
See previous releases for examples of the title and description.
## After releasing
- Update the version number in `build.gradle` to the next version.
- Update image version numbers in `fabric-chaincode-docker/build.gradle` to match the next version.
- Update the `fabric-chaincode-shim` dependency version in all `build.gradle` and `pom.xml` files within `fabric-chaincode-integration-test/src/contracts` to match the next version.
- Update the `fabric-chaincode-shim` dependency version in all `build.gradle`, `build.gradle.kts` and `pom.xml` files within `examples` to match the last _released_ version.
- Check that `COMPATIBILITY.md` is correct and update if required.
================================================
FILE: SECURITY.md
================================================
# Hyperledger Security Policy
## Reporting a Security Bug
If you think you have discovered a security issue in any of the Hyperledger projects, we'd love to hear from you. We will take all security bugs seriously and if confirmed upon investigation we will patch it within a reasonable amount of time and release a public security bulletin discussing the impact and credit the discoverer.
There are two ways to report a security bug. The easiest is to email a description of the flaw and any related information (e.g. reproduction steps, version) to [security at hyperledger dot org](mailto:security@hyperledger.org).
The other way is to file a confidential security bug in our [JIRA bug tracking system](https://jira.hyperledger.org). Be sure to set the “Security Level” to “Security issue”.
The process by which the Hyperledger Security Team handles security bugs is documented further in our [Defect Response page](https://wiki.hyperledger.org/display/SEC/Defect+Response) on our [wiki](https://wiki.hyperledger.org).
================================================
FILE: build.gradle
================================================
/*
* Copyright IBM Corp. 2018 All Rights Reserved.
*
* SPDX-License-Identifier: Apache-2.0
*/
plugins {
id "com.github.ben-manes.versions" version "0.54.0"
id "com.diffplug.spotless" version "8.4.0"
id "com.gradleup.nmcp.aggregation" version "1.4.4"
id "com.gradleup.nmcp" version "1.4.4" apply false
}
version = '2.5.9'
// If the nightly property is set, then this is the scheduled main
// build - and we should publish this to artifactory
//
// Use the .dev.<number> format to match Maven convention
if (properties.containsKey('NIGHTLY')) {
version = version + '.dev.' + getDate()
ext.nightly = true // set property for use in subprojects
} else {
ext.nightly = false
}
nmcpAggregation {
centralPortal {
username = findProperty('mavenCentralUsername')
password = findProperty('mavenCentralPassword')
publishingType = "AUTOMATIC"
}
}
dependencies {
nmcpAggregation(project(':fabric-chaincode-shim'))
}
allprojects {
apply plugin: "com.diffplug.spotless"
repositories {
mavenCentral()
}
spotless {
format 'misc', {
target '*.gradle', '.gitattributes', '.gitignore'
trimTrailingWhitespace()
leadingTabsToSpaces()
endWithNewline()
}
}
}
subprojects {
apply plugin: 'java'
apply plugin: "maven-publish"
group = 'org.hyperledger.fabric-chaincode-java'
version = rootProject.version
compileJava {
options.release = 11
options.compilerArgs += ['-Werror', '-Xlint:all']
}
dependencies {
implementation 'commons-cli:commons-cli:1.11.0'
implementation 'commons-logging:commons-logging:1.3.6'
testImplementation platform('org.junit:junit-bom:6.0.3')
testImplementation 'org.junit.jupiter:junit-jupiter'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
testImplementation 'org.assertj:assertj-core:3.27.7'
testImplementation 'org.mockito:mockito-core:5.23.0'
testImplementation 'uk.org.webcompere:system-stubs-jupiter:2.1.8'
testImplementation 'org.hamcrest:hamcrest-library:3.0'
}
test {
useJUnitPlatform()
}
spotless {
java {
removeUnusedImports()
palantirJavaFormat().formatJavadoc(true)
formatAnnotations()
}
}
}
// Get the date in the reverse format for sorting
static def getDate() {
def date = new Date()
def formattedDate = date.format('yyyyMMdd')
return formattedDate
}
================================================
FILE: docs/404.md
================================================
---
title: "404 - Page Not Found"
permalink: /404.html
---
## The page you wanted does not exist
If you were looking for Javadoc, try one of the releases below:
{% include javadocs.html %}
================================================
FILE: docs/_config.yml
================================================
theme: minima
title: "fabric-chaincode-java"
releases:
- main
- release-1.4
- release-2.2
================================================
FILE: docs/_includes/footer.html
================================================
================================================
FILE: docs/_includes/header.html
================================================
<header class="site-header">
<div class="wrapper">
<a class="site-title" rel="author" href="{{ "/" | relative_url }}">{{ site.title | escape }}</a>
<nav class="site-nav">
<input type="checkbox" id="nav-trigger" class="nav-trigger" />
<label for="nav-trigger">
<span class="menu-icon">
<svg viewBox="0 0 18 15" width="18px" height="15px">
<path d="M18,1.484c0,0.82-0.665,1.484-1.484,1.484H1.484C0.665,2.969,0,2.304,0,1.484l0,0C0,0.665,0.665,0,1.484,0 h15.032C17.335,0,18,0.665,18,1.484L18,1.484z M18,7.516C18,8.335,17.335,9,16.516,9H1.484C0.665,9,0,8.335,0,7.516l0,0 c0-0.82,0.665-1.484,1.484-1.484h15.032C17.335,6.031,18,6.696,18,7.516L18,7.516z M18,13.516C18,14.335,17.335,15,16.516,15H1.484 C0.665,15,0,14.335,0,13.516l0,0c0-0.82,0.665-1.483,1.484-1.483h15.032C17.335,12.031,18,12.695,18,13.516L18,13.516z"/>
</svg>
</span>
</label>
<div class="trigger">
<a class="page-link" href="https://github.com/hyperledger/fabric-chaincode-java/">View on GitHub</a>
</div>
</nav>
</div>
</header>
================================================
FILE: docs/_includes/javadocs.html
================================================
<ul>
{%- for release in site.releases -%}
<li><a class="page-link" href="{{ release | relative_url }}/api/">{{ release | escape }}</a></li>
{%- endfor -%}
</ul>
================================================
FILE: docs/index.md
================================================
---
layout: home
---
Hyperledger Fabric offers a number of SDKs to support developing smart contracts (chaincode)
in various programming languages. There are two other smart contract SDKs available for Go, and Node.js, in addition to this Java SDK:
* [Go SDK documentation](https://godoc.org/github.com/hyperledger/fabric/core/chaincode/shim)
* [Node.js SDK documentation](https://hyperledger.github.io/fabric-chaincode-node/)
## Documentation
Detailed explanation on the concepts and programming model for smart contracts can be found in the [Chaincode Tutorials section of the Hyperledger Fabric documentation](https://hyperledger-fabric.readthedocs.io/en/latest/developapps/smartcontract.html#).
Javadoc is available for each release:
{% include javadocs.html %}
## Download
Gradle:
```
dependencies {
implementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:VERSION'
}
```
Maven:
```
<dependency>
<groupId>org.hyperledger.fabric-chaincode-java</groupId>
<artifactId>fabric-chaincode-shim</artifactId>
<version>VERSION</version>
</dependency>
```
More options can be found on the [central maven repository](https://search.maven.org/artifact/org.hyperledger.fabric-chaincode-java/fabric-chaincode-shim/).
Check the [release notes](https://github.com/hyperledger/fabric-chaincode-java/releases) for the changes in each version.
## Compatibility
For details on what versions of Java and Hyperledger Fabric can be used please see the [compatibility document](https://github.com/hyperledger/fabric-chaincode-java/blob/main/COMPATIBILITY.md).
## Samples
Several Java chaincode samples can be found in the [fabric-samples repository](https://github.com/hyperledger/fabric-samples)
================================================
FILE: examples/fabric-contract-example-as-service/Dockerfile
================================================
# Copyright 2019 IBM All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
# Example multi-stage dockerfile for Java Chaincode
# the first stage
FROM gradle:9-jdk21 AS gradle_build
# copy the build.gradle and src code to the container
COPY src/ src/
COPY build.gradle ./
# Build and package our code
RUN gradle build shadowJar
# the second stage of our build just needs the compiled files
FROM eclipse-temurin:25-jre
# copy only the artifacts we need from the first stage and discard the rest
COPY --from=gradle_build /home/gradle/build/libs/chaincode.jar /chaincode.jar
ENV PORT=9999
EXPOSE 9999
# set the startup command to execute the jar
CMD ["java", "-jar", "/chaincode.jar"]
================================================
FILE: examples/fabric-contract-example-as-service/README.md
================================================
# Java Chaincode -as-a-service
This example shows how to start the chaincode in it's 'as-a-service' mode.
Note that this has been improved over the original mechanism
## Build Changes
There are no changes required to tbe build file. For example the `build.gradle` can be left like this
```
manifest {
attributes 'Main-Class': 'org.hyperledger.fabric.contract.ContractRouter'
}
```
## Contract Code
No changes are required to the contract code. Note that the previous 'bootstrap' main method is not required.
## Environment Variables
The setting of the `CHAINCODE_SERVER_ADDRESS` environment variable will trigger the code to work in the 'as-a-service' mode. This should be set to the hostname:port that the server will be exposed on. Typically this would be
```
CHAINCODE_SERVER_ADDRESS=0.0.0.0:9999
```
*NOTE* if `CHAINCODE_SERVER_ADDRESS` is set, and the chaincode is deployed as a regular chaincode, this will result in a failure. The chaincode will still start in 'as-a-service' mode.
The `CORE_CHAINCODE_ID_NAME` must also be set to match the ID used when deploying the chaincode.
*For TLS* ensure that
- `CORE_PEERT_TLS_ENABLED` is true
- `CORE_PEER_TLS_ROOTCERT_FILE` is set to the certificate of the root CA
- `CORE_TLS_CLIENT_KEY_FILE` and `CORE_TLS_CLIENT_CERT_FILE` if using mutual TLS (PEM encoded)
## Dockerfile
There is an example dockerfile that shows how the chaincode can be built into a container image.
================================================
FILE: examples/fabric-contract-example-as-service/build.gradle
================================================
plugins {
id 'com.gradleup.shadow' version '9.3.1'
id 'java'
}
version = '0.0.1'
repositories {
mavenCentral()
maven {
url = "https://www.jitpack.io"
}
}
dependencies {
implementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.5.8'
implementation 'org.json:json:20251224'
testImplementation platform('org.junit:junit-bom:6.0.2')
testImplementation 'org.junit.jupiter:junit-jupiter'
testImplementation 'org.assertj:assertj-core:3.27.7'
testImplementation 'org.mockito:mockito-core:5.21.0'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
shadowJar {
archiveBaseName = 'chaincode'
archiveVersion = ''
archiveClassifier = ''
duplicatesStrategy = DuplicatesStrategy.INCLUDE
mergeServiceFiles()
manifest {
attributes 'Main-Class': 'org.example.Application'
}
}
compileJava {
options.release.set(11)
options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" << "-parameters"
}
test {
useJUnitPlatform()
testLogging {
events "PASSED", "SKIPPED", "FAILED"
}
}
================================================
FILE: examples/fabric-contract-example-as-service/src/main/java/org/example/contract/MyAsset.java
================================================
/*
* SPDX-License-Identifier: Apache-2.0
*/
package org.example.contract;
import org.hyperledger.fabric.contract.annotation.DataType;
import org.hyperledger.fabric.contract.annotation.Property;
import org.json.JSONObject;
@DataType()
public class MyAsset {
@Property()
private String value;
public MyAsset() {
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String toJSONString() {
return new JSONObject(this).toString();
}
public static MyAsset fromJSONString(String json) {
String value = new JSONObject(json).getString("value");
MyAsset asset = new MyAsset();
asset.setValue(value);
return asset;
}
}
================================================
FILE: examples/fabric-contract-example-as-service/src/main/java/org/example/contract/MyAssetContract.java
================================================
/*
* SPDX-License-Identifier: Apache-2.0
*/
package org.example.contract;
import static java.nio.charset.StandardCharsets.UTF_8;
import org.hyperledger.fabric.contract.Context;
import org.hyperledger.fabric.contract.ContractInterface;
import org.hyperledger.fabric.contract.annotation.Contract;
import org.hyperledger.fabric.contract.annotation.Default;
import org.hyperledger.fabric.contract.annotation.Transaction;
@Contract
@Default
public class MyAssetContract implements ContractInterface {
public MyAssetContract() {
}
@Transaction()
public boolean myAssetExists(Context ctx, String myAssetId) {
byte[] buffer = ctx.getStub().getState(myAssetId);
return (buffer != null && buffer.length > 0);
}
@Transaction()
public void createMyAsset(Context ctx, String myAssetId, String value) {
boolean exists = myAssetExists(ctx, myAssetId);
if (exists) {
throw new RuntimeException("The asset " + myAssetId + " already exists");
}
MyAsset asset = new MyAsset();
asset.setValue(value);
ctx.getStub().putState(myAssetId, asset.toJSONString().getBytes(UTF_8));
}
@Transaction()
public MyAsset readMyAsset(Context ctx, String myAssetId) {
boolean exists = myAssetExists(ctx, myAssetId);
if (!exists) {
throw new RuntimeException("The asset " + myAssetId + " does not exist");
}
MyAsset newAsset = MyAsset.fromJSONString(new String(ctx.getStub().getState(myAssetId), UTF_8));
return newAsset;
}
@Transaction()
public void updateMyAsset(Context ctx, String myAssetId, String newValue) {
boolean exists = myAssetExists(ctx, myAssetId);
if (!exists) {
throw new RuntimeException("The asset " + myAssetId + " does not exist");
}
MyAsset asset = new MyAsset();
asset.setValue(newValue);
ctx.getStub().putState(myAssetId, asset.toJSONString().getBytes(UTF_8));
}
@Transaction()
public void deleteMyAsset(Context ctx, String myAssetId) {
boolean exists = myAssetExists(ctx, myAssetId);
if (!exists) {
throw new RuntimeException("The asset " + myAssetId + " does not exist");
}
ctx.getStub().delState(myAssetId);
}
}
================================================
FILE: examples/fabric-contract-example-as-service/src/test/java/org/example/MyAssetContractTest.java
================================================
/*
* SPDX-License-Identifier: Apache License 2.0
*/
package org.example;
import static java.nio.charset.StandardCharsets.UTF_8;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.nio.charset.StandardCharsets;
import org.example.contract.MyAsset;
import org.example.contract.MyAssetContract;
import org.hyperledger.fabric.contract.Context;
import org.hyperledger.fabric.shim.ChaincodeServerProperties;
import org.hyperledger.fabric.shim.ChaincodeStub;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
public final class MyAssetContractTest {
@Nested
class AssetExists {
@Test
public void noProperAsset() {
MyAssetContract contract = new MyAssetContract();
Context ctx = mock(Context.class);
ChaincodeStub stub = mock(ChaincodeStub.class);
when(ctx.getStub()).thenReturn(stub);
when(stub.getState("10001")).thenReturn(new byte[]{});
boolean result = contract.myAssetExists(ctx, "10001");
assertFalse(result);
}
@Test
public void assetExists() {
MyAssetContract contract = new MyAssetContract();
Context ctx = mock(Context.class);
ChaincodeStub stub = mock(ChaincodeStub.class);
when(ctx.getStub()).thenReturn(stub);
when(stub.getState("10001")).thenReturn(new byte[]{42});
boolean result = contract.myAssetExists(ctx, "10001");
assertTrue(result);
}
@Test
public void noKey() {
MyAssetContract contract = new MyAssetContract();
Context ctx = mock(Context.class);
ChaincodeStub stub = mock(ChaincodeStub.class);
when(ctx.getStub()).thenReturn(stub);
when(stub.getState("10002")).thenReturn(null);
boolean result = contract.myAssetExists(ctx, "10002");
assertFalse(result);
}
}
@Nested
class AssetCreates {
@Test
public void newAssetCreate() {
MyAssetContract contract = new MyAssetContract();
Context ctx = mock(Context.class);
ChaincodeStub stub = mock(ChaincodeStub.class);
when(ctx.getStub()).thenReturn(stub);
String json = "{\"value\":\"TheAsset\"}";
contract.createMyAsset(ctx, "10001", "TheAsset");
verify(stub).putState("10001", json.getBytes(UTF_8));
}
@Test
public void alreadyExists() {
MyAssetContract contract = new MyAssetContract();
Context ctx = mock(Context.class);
ChaincodeStub stub = mock(ChaincodeStub.class);
when(ctx.getStub()).thenReturn(stub);
when(stub.getState("10002")).thenReturn(new byte[]{42});
Exception thrown = assertThrows(RuntimeException.class, () -> {
contract.createMyAsset(ctx, "10002", "TheAsset");
});
assertEquals(thrown.getMessage(), "The asset 10002 already exists");
}
}
@Test
public void assetRead() {
MyAssetContract contract = new MyAssetContract();
Context ctx = mock(Context.class);
ChaincodeStub stub = mock(ChaincodeStub.class);
when(ctx.getStub()).thenReturn(stub);
MyAsset asset = new MyAsset();
asset.setValue("Valuable");
String json = asset.toJSONString();
when(stub.getState("10001")).thenReturn(json.getBytes(StandardCharsets.UTF_8));
MyAsset returnedAsset = contract.readMyAsset(ctx, "10001");
assertEquals(returnedAsset.getValue(), asset.getValue());
}
@Nested
class AssetUpdates {
@Test
public void updateExisting() {
MyAssetContract contract = new MyAssetContract();
Context ctx = mock(Context.class);
ChaincodeStub stub = mock(ChaincodeStub.class);
when(ctx.getStub()).thenReturn(stub);
when(stub.getState("10001")).thenReturn(new byte[]{42});
contract.updateMyAsset(ctx, "10001", "updates");
String json = "{\"value\":\"updates\"}";
verify(stub).putState("10001", json.getBytes(UTF_8));
}
@Test
public void updateMissing() {
MyAssetContract contract = new MyAssetContract();
Context ctx = mock(Context.class);
ChaincodeStub stub = mock(ChaincodeStub.class);
when(ctx.getStub()).thenReturn(stub);
when(stub.getState("10001")).thenReturn(null);
Exception thrown = assertThrows(RuntimeException.class, () -> {
contract.updateMyAsset(ctx, "10001", "TheAsset");
});
assertEquals(thrown.getMessage(), "The asset 10001 does not exist");
}
}
@Test
public void assetDelete() {
MyAssetContract contract = new MyAssetContract();
Context ctx = mock(Context.class);
ChaincodeStub stub = mock(ChaincodeStub.class);
when(ctx.getStub()).thenReturn(stub);
when(stub.getState("10001")).thenReturn(null);
Exception thrown = assertThrows(RuntimeException.class, () -> {
contract.deleteMyAsset(ctx, "10001");
});
assertEquals(thrown.getMessage(), "The asset 10001 does not exist");
}
@Test
public void test() {
ChaincodeServerProperties chaincodeServerProperties = new ChaincodeServerProperties();
chaincodeServerProperties.setKeepAliveTimeMinutes(-10);
assertEquals(true, true);
}
}
================================================
FILE: examples/fabric-contract-example-gradle/.gitignore
================================================
.gradle/
build/
bin/
================================================
FILE: examples/fabric-contract-example-gradle/README.md
================================================
This example needs to use gradle4.6 please install this first
eg using sdkman
`sdk install gradle 4.6`
and then add the wrapper code before building
`gradle wrapper`
================================================
FILE: examples/fabric-contract-example-gradle/build.gradle
================================================
plugins {
id 'com.gradleup.shadow' version '9.3.1'
id 'java'
}
version = '0.0.1'
repositories {
mavenCentral()
maven {
url = "https://www.jitpack.io"
}
}
dependencies {
implementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.5.8'
implementation 'org.json:json:20251224'
testImplementation platform('org.junit:junit-bom:6.0.2')
testImplementation 'org.junit.jupiter:junit-jupiter'
testImplementation 'org.assertj:assertj-core:3.27.7'
testImplementation 'org.mockito:mockito-core:5.21.0'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
shadowJar {
archiveBaseName = 'chaincode'
archiveVersion = ''
archiveClassifier = ''
duplicatesStrategy = DuplicatesStrategy.INCLUDE
mergeServiceFiles()
manifest {
attributes 'Main-Class': 'org.hyperledger.fabric.contract.ContractRouter'
}
}
compileJava {
options.release.set(11)
options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" << "-parameters"
}
test {
useJUnitPlatform()
testLogging {
events "PASSED", "SKIPPED", "FAILED"
}
}
================================================
FILE: examples/fabric-contract-example-gradle/src/main/java/org/example/MyAsset.java
================================================
/*
* SPDX-License-Identifier: Apache-2.0
*/
package org.example;
import org.hyperledger.fabric.contract.annotation.Contract;
import org.hyperledger.fabric.contract.annotation.DataType;
import org.hyperledger.fabric.contract.annotation.Property;
import org.json.JSONObject;
@DataType()
public class MyAsset {
@Property()
private String value;
public MyAsset(){
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String toJSONString() {
return new JSONObject(this).toString();
}
public static MyAsset fromJSONString(String json) {
String value = new JSONObject(json).getString("value");
MyAsset asset = new MyAsset();
asset.setValue(value);
return asset;
}
}
================================================
FILE: examples/fabric-contract-example-gradle/src/main/java/org/example/MyAssetContract.java
================================================
/*
* SPDX-License-Identifier: Apache-2.0
*/
package org.example;
import org.hyperledger.fabric.contract.Context;
import org.hyperledger.fabric.contract.ContractInterface;
import org.hyperledger.fabric.contract.annotation.Contract;
import org.hyperledger.fabric.contract.annotation.Default;
import org.hyperledger.fabric.contract.annotation.Transaction;
import io.swagger.v3.oas.annotations.info.Contact;
import io.swagger.v3.oas.annotations.info.Info;
import io.swagger.v3.oas.annotations.info.License;
import static java.nio.charset.StandardCharsets.UTF_8;
@Contract(name = "MyAssetContract",
info = @Info(title = "MyAsset contract",
description = "Very basic Java Contract example",
version = "0.0.1",
license =
@License(name = "SPDX-License-Identifier: Apache-2.0",
url = ""),
contact = @Contact(email = "MyAssetContract@example.com",
name = "MyAssetContract",
url = "http://MyAssetContract.me")))
@Default
public class MyAssetContract implements ContractInterface {
public MyAssetContract() {
}
@Transaction()
public boolean myAssetExists(Context ctx, String myAssetId) {
byte[] buffer = ctx.getStub().getState(myAssetId);
return (buffer != null && buffer.length > 0);
}
@Transaction()
public void createMyAsset(Context ctx, String myAssetId, String value) {
boolean exists = myAssetExists(ctx,myAssetId);
if (exists) {
throw new RuntimeException("The asset "+myAssetId+" already exists");
}
MyAsset asset = new MyAsset();
asset.setValue(value);
ctx.getStub().putState(myAssetId, asset.toJSONString().getBytes(UTF_8));
}
@Transaction()
public MyAsset readMyAsset(Context ctx, String myAssetId) {
boolean exists = myAssetExists(ctx,myAssetId);
if (!exists) {
throw new RuntimeException("The asset "+myAssetId+" does not exist");
}
MyAsset newAsset = MyAsset.fromJSONString(new String(ctx.getStub().getState(myAssetId),UTF_8));
return newAsset;
}
@Transaction()
public void updateMyAsset(Context ctx, String myAssetId, String newValue) {
boolean exists = myAssetExists(ctx,myAssetId);
if (!exists) {
throw new RuntimeException("The asset "+myAssetId+" does not exist");
}
MyAsset asset = new MyAsset();
asset.setValue(newValue);
ctx.getStub().putState(myAssetId, asset.toJSONString().getBytes(UTF_8));
}
@Transaction()
public void deleteMyAsset(Context ctx, String myAssetId) {
boolean exists = myAssetExists(ctx,myAssetId);
if (!exists) {
throw new RuntimeException("The asset "+myAssetId+" does not exist");
}
ctx.getStub().delState(myAssetId);
}
}
================================================
FILE: examples/fabric-contract-example-gradle/src/test/java/org/example/MyAssetContractTest.java
================================================
/*
* SPDX-License-Identifier: Apache License 2.0
*/
package org.example;
import static java.nio.charset.StandardCharsets.UTF_8;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.nio.charset.StandardCharsets;
import org.hyperledger.fabric.contract.Context;
import org.hyperledger.fabric.shim.ChaincodeStub;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
public final class MyAssetContractTest {
@Nested
class AssetExists {
@Test
public void noProperAsset() {
MyAssetContract contract = new MyAssetContract();
Context ctx = mock(Context.class);
ChaincodeStub stub = mock(ChaincodeStub.class);
when(ctx.getStub()).thenReturn(stub);
when(stub.getState("10001")).thenReturn(new byte[] {});
boolean result = contract.myAssetExists(ctx,"10001");
assertFalse(result);
}
@Test
public void assetExists() {
MyAssetContract contract = new MyAssetContract();
Context ctx = mock(Context.class);
ChaincodeStub stub = mock(ChaincodeStub.class);
when(ctx.getStub()).thenReturn(stub);
when(stub.getState("10001")).thenReturn(new byte[] {42});
boolean result = contract.myAssetExists(ctx,"10001");
assertTrue(result);
}
@Test
public void noKey() {
MyAssetContract contract = new MyAssetContract();
Context ctx = mock(Context.class);
ChaincodeStub stub = mock(ChaincodeStub.class);
when(ctx.getStub()).thenReturn(stub);
when(stub.getState("10002")).thenReturn(null);
boolean result = contract.myAssetExists(ctx,"10002");
assertFalse(result);
}
}
@Nested
class AssetCreates {
@Test
public void newAssetCreate() {
MyAssetContract contract = new MyAssetContract();
Context ctx = mock(Context.class);
ChaincodeStub stub = mock(ChaincodeStub.class);
when(ctx.getStub()).thenReturn(stub);
String json = "{\"value\":\"TheAsset\"}";
contract.createMyAsset(ctx, "10001", "TheAsset");
verify(stub).putState("10001", json.getBytes(UTF_8));
}
@Test
public void alreadyExists() {
MyAssetContract contract = new MyAssetContract();
Context ctx = mock(Context.class);
ChaincodeStub stub = mock(ChaincodeStub.class);
when(ctx.getStub()).thenReturn(stub);
when(stub.getState("10002")).thenReturn(new byte[] { 42 });
Exception thrown = assertThrows(RuntimeException.class, () -> {
contract.createMyAsset(ctx, "10002", "TheAsset");
});
assertEquals(thrown.getMessage(), "The asset 10002 already exists");
}
}
@Test
public void assetRead() {
MyAssetContract contract = new MyAssetContract();
Context ctx = mock(Context.class);
ChaincodeStub stub = mock(ChaincodeStub.class);
when(ctx.getStub()).thenReturn(stub);
MyAsset asset = new MyAsset();
asset.setValue("Valuable");
String json = asset.toJSONString();
when(stub.getState("10001")).thenReturn(json.getBytes(StandardCharsets.UTF_8));
MyAsset returnedAsset = contract.readMyAsset(ctx, "10001");
assertEquals(returnedAsset.getValue(), asset.getValue());
}
@Nested
class AssetUpdates {
@Test
public void updateExisting() {
MyAssetContract contract = new MyAssetContract();
Context ctx = mock(Context.class);
ChaincodeStub stub = mock(ChaincodeStub.class);
when(ctx.getStub()).thenReturn(stub);
when(stub.getState("10001")).thenReturn(new byte[] { 42 });
contract.updateMyAsset(ctx, "10001", "updates");
String json = "{\"value\":\"updates\"}";
verify(stub).putState("10001", json.getBytes(UTF_8));
}
@Test
public void updateMissing() {
MyAssetContract contract = new MyAssetContract();
Context ctx = mock(Context.class);
ChaincodeStub stub = mock(ChaincodeStub.class);
when(ctx.getStub()).thenReturn(stub);
when(stub.getState("10001")).thenReturn(null);
Exception thrown = assertThrows(RuntimeException.class, () -> {
contract.updateMyAsset(ctx, "10001", "TheAsset");
});
assertEquals(thrown.getMessage(), "The asset 10001 does not exist");
}
}
@Test
public void assetDelete() {
MyAssetContract contract = new MyAssetContract();
Context ctx = mock(Context.class);
ChaincodeStub stub = mock(ChaincodeStub.class);
when(ctx.getStub()).thenReturn(stub);
when(stub.getState("10001")).thenReturn(null);
Exception thrown = assertThrows(RuntimeException.class, () -> {
contract.deleteMyAsset(ctx, "10001");
});
assertEquals(thrown.getMessage(), "The asset 10001 does not exist");
}
}
================================================
FILE: examples/fabric-contract-example-gradle-kotlin/.fabricignore
================================================
#
# SPDX-License-Identifier: Apache-2.0
#
/.classpath
/.git/
/.gradle/
/.project
/.settings/
/bin/
/build/
================================================
FILE: examples/fabric-contract-example-gradle-kotlin/.gitignore
================================================
#
# SPDX-License-Identifier: Apache-2.0
#
/.classpath
/.gradle/
/.project
/.settings/
/bin/
/build/
================================================
FILE: examples/fabric-contract-example-gradle-kotlin/build.gradle.kts
================================================
/*
* SPDX-License-Identifier: Apache-2.0
*/
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
plugins {
id("com.gradleup.shadow") version "9.3.1"
id("org.jetbrains.kotlin.jvm") version "2.2.21"
}
version = "0.0.1"
dependencies {
implementation("org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.5.8")
implementation("org.json:json:20250517")
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
testImplementation("org.junit.jupiter:junit-jupiter:6.0.1")
testImplementation("com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0")
}
repositories {
mavenCentral()
maven {
setUrl("https://jitpack.io")
}
}
tasks {
"shadowJar"(ShadowJar::class) {
archiveBaseName = "chaincode"
archiveVersion = ""
archiveClassifier = ""
duplicatesStrategy = DuplicatesStrategy.INCLUDE
mergeServiceFiles()
manifest {
attributes(mapOf("Main-Class" to "org.hyperledger.fabric.contract.ContractRouter"))
}
}
}
tasks.withType<Test> {
useJUnitPlatform()
testLogging {
events("passed", "skipped", "failed")
}
}
================================================
FILE: examples/fabric-contract-example-gradle-kotlin/gradle/wrapper/gradle-wrapper.properties
================================================
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
================================================
FILE: examples/fabric-contract-example-gradle-kotlin/gradlew
================================================
#!/bin/sh
#
# 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.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
##############################################################################
#
# 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
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
# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
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 ;;
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
else
JAVACMD=$JAVA_HOME/bin/java
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD=java
if ! command -v java >/dev/null 2>&1
then
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
fi
# Increase the maximum file descriptors if we can.
if ! "$cygwin" && ! "$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=SC2039,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=SC2039,SC3045
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
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" )
# Now convert the arguments - kludge to limit ourselves to /bin/sh
for arg do
if
case $arg in #(
-*) false ;; # don't mess with options #(
/?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
[ -e "$t" ] ;; #(
*) false ;;
esac
then
arg=$( cygpath --path --ignore --mixed "$arg" )
fi
# Roll the args list around exactly as many times as the number of
# args, so each arg winds up back in the position where it started, but
# possibly modified.
#
# NB: a `for` loop captures its iteration list before it begins, so
# changing the positional parameters here affects neither the number of
# iterations, nor the values presented in `arg`.
shift # remove old arg
set -- "$@" "$arg" # push replacement arg
done
fi
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Collect all arguments for the java command:
# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# and any embedded shellness will be escaped.
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
# treated as '${Hostname}' itself on the command line.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
-classpath "$CLASSPATH" \
org.gradle.wrapper.GradleWrapperMain \
"$@"
# Stop when "xargs" is not available.
if ! command -v xargs >/dev/null 2>&1
then
die "xargs is not available"
fi
# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
#
# In Bash we could simply go:
#
# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
# set -- "${ARGS[@]}" "$@"
#
# but POSIX shell has neither arrays nor command substitution, so instead we
# post-process each arg (as a line of input to sed) to backslash-escape any
# character that might be a shell metacharacter, then use eval to reverse
# that process (while maintaining the separation between arguments), and wrap
# the whole thing up as a single "set" statement.
#
# This will of course break if any of these variables contains a newline or
# an unmatched quote.
#
eval "set -- $(
printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
xargs -n1 |
sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
tr '\n' ' '
)" '"$@"'
exec "$JAVACMD" "$@"
================================================
FILE: examples/fabric-contract-example-gradle-kotlin/gradlew.bat
================================================
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%"=="" set DIRNAME=.
@rem This is normally unused
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if %ERRORLEVEL% equ 0 goto execute
echo. 1>&2
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
echo. 1>&2
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2
goto fail
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
:end
@rem End local scope for the variables with windows NT shell
if %ERRORLEVEL% equ 0 goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
set EXIT_CODE=%ERRORLEVEL%
if %EXIT_CODE% equ 0 set EXIT_CODE=1
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
exit /b %EXIT_CODE%
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega
================================================
FILE: examples/fabric-contract-example-gradle-kotlin/settings.gradle.kts
================================================
/*
* SPDX-License-Identifier: Apache-2.0
*/
rootProject.name = "gradle-kotlin"
================================================
FILE: examples/fabric-contract-example-gradle-kotlin/src/main/kotlin/org/example/MyAsset.kt
================================================
/*
* SPDX-License-Identifier: Apache-2.0
*/
package org.example
import org.hyperledger.fabric.contract.annotation.DataType
import org.hyperledger.fabric.contract.annotation.Property
import org.json.JSONObject
@DataType
class MyAsset(@Property() var value: String?) {
fun toJSONString(): String {
return JSONObject(this).toString()
}
companion object {
fun fromJSONString(json: String): MyAsset {
val value = JSONObject(json).getString("value")
return MyAsset(value)
}
}
}
================================================
FILE: examples/fabric-contract-example-gradle-kotlin/src/main/kotlin/org/example/MyAssetContract.kt
================================================
/*
* SPDX-License-Identifier: Apache-2.0
*/
package org.example
import org.hyperledger.fabric.contract.Context
import org.hyperledger.fabric.contract.ContractInterface
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 = "MyAssetContract",
info = Info(title = "MyAsset contract",
description = "Kotlin gradle dsl and Kotlin Contract",
version = "0.0.1",
license =
License(name = "Apache-2.0",
url = ""),
contact = Contact(email = "gradle-kotlin@example.com",
name = "gradle-kotlin",
url = "http://gradle-kotlin.me")))
@Default
class MyAssetContract : ContractInterface {
@Transaction
fun myAssetExists(ctx: Context, myAssetId: String): Boolean {
val buffer = ctx.stub.getState(myAssetId)
return (buffer != null && buffer.size > 0)
}
@Transaction
fun createMyAsset(ctx: Context, myAssetId: String, value: String) {
val exists = myAssetExists(ctx, myAssetId)
if (exists) {
throw RuntimeException("The my asset $myAssetId already exists")
}
val asset = MyAsset(value)
ctx.stub.putState(myAssetId, asset.toJSONString().toByteArray(Charsets.UTF_8))
}
@Transaction
fun readMyAsset(ctx: Context, myAssetId: String): MyAsset {
val exists = myAssetExists(ctx, myAssetId)
if (!exists) {
throw RuntimeException("The my asset $myAssetId does not exist")
}
return MyAsset.fromJSONString(ctx.stub.getState(myAssetId).toString(Charsets.UTF_8))
}
@Transaction
fun updateMyAsset(ctx: Context, myAssetId: String, newValue: String) {
val asset = readMyAsset(ctx, myAssetId)
asset.value = newValue
ctx.stub.putState(myAssetId, asset.toJSONString().toByteArray(Charsets.UTF_8))
}
@Transaction
fun deleteMyAsset(ctx: Context, myAssetId: String) {
val exists = myAssetExists(ctx, myAssetId)
if (!exists) {
throw RuntimeException("The my asset $myAssetId does not exist")
}
ctx.stub.delState(myAssetId)
}
}
================================================
FILE: examples/fabric-contract-example-gradle-kotlin/src/test/kotlin/org/example/MyAssetContractTest.kt
================================================
/*
* SPDX-License-Identifier: Apache-2.0
*/
package org.example
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Nested
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.Assertions.*
import com.nhaarman.mockitokotlin2.*
import java.util.ArrayList
import org.hyperledger.fabric.contract.Context
import org.hyperledger.fabric.shim.ChaincodeStub
import org.hyperledger.fabric.shim.Chaincode.Response
import org.hyperledger.fabric.shim.Chaincode.Response.Status
class MyAssetContractTest {
lateinit var ctx: Context
lateinit var stub: ChaincodeStub
@BeforeEach
fun beforeEach() {
ctx = mock()
stub = mock()
whenever(ctx.stub).thenReturn(stub)
whenever(stub.getState("1001")).thenReturn("{\"value\":\"my asset 1001 value\"}".toByteArray(Charsets.UTF_8))
whenever(stub.getState("1002")).thenReturn("{\"value\":\"my asset 1002 value\"}".toByteArray(Charsets.UTF_8))
}
@Nested
inner class myAssetExists {
@Test
fun `should return true for a my asset`() {
val contract = MyAssetContract()
val result = contract.myAssetExists(ctx, "1001")
assertTrue(result)
}
@Test
fun `should return false for a my asset that does not exist (no key)`() {
val contract = MyAssetContract()
val result = contract.myAssetExists(ctx, "1003")
assertFalse(result)
}
@Test
fun `should return false for a my asset that does not exist (no data)`() {
val contract = MyAssetContract()
whenever(stub.getState("1003")).thenReturn(ByteArray(0))
val result = contract.myAssetExists(ctx, "1003")
assertFalse(result)
}
}
@Nested
inner class createMyAsset {
@Test
fun `should create a my asset`() {
val contract = MyAssetContract()
contract.createMyAsset(ctx, "1003", "my asset 1003 value")
verify(stub, times(1)).putState("1003", "{\"value\":\"my asset 1003 value\"}".toByteArray(Charsets.UTF_8))
}
@Test
fun `should throw an error for a my asset that already exists`() {
val contract = MyAssetContract()
val e = assertThrows(RuntimeException::class.java) { contract.createMyAsset(ctx, "1001", "my asset 1001 value") }
assertEquals(e.message, "The my asset 1001 already exists")
}
}
@Nested
inner class readMyAsset {
@Test
fun `should return a my asset`() {
val contract = MyAssetContract()
val asset = contract.readMyAsset(ctx, "1001")
assertEquals("my asset 1001 value", asset.value)
}
@Test
fun `should throw an error for a my asset that does not exist`() {
val contract = MyAssetContract()
val e = assertThrows(RuntimeException::class.java) { contract.readMyAsset(ctx, "1003") }
assertEquals(e.message, "The my asset 1003 does not exist")
}
}
@Nested
inner class updateMyAsset {
@Test
fun `should update a my asset`() {
val contract = MyAssetContract()
contract.updateMyAsset(ctx, "1001", "my asset 1001 new value")
verify(stub, times(1)).putState("1001", "{\"value\":\"my asset 1001 new value\"}".toByteArray(Charsets.UTF_8))
}
@Test
fun `should throw an error for a my asset that does not exist`() {
val contract = MyAssetContract()
val e = assertThrows(RuntimeException::class.java) { contract.updateMyAsset(ctx, "1003", "my asset 1003 new value") }
assertEquals(e.message, "The my asset 1003 does not exist")
}
}
@Nested
inner class deleteMyAsset {
@Test
fun `should delete a my asset`() {
val contract = MyAssetContract()
contract.deleteMyAsset(ctx, "1001")
verify(stub, times(1)).delState("1001")
}
@Test
fun `should throw an error for a my asset that does not exist`() {
val contract = MyAssetContract()
val e = assertThrows(RuntimeException::class.java) { contract.deleteMyAsset(ctx, "1003") }
assertEquals(e.message, "The my asset 1003 does not exist")
}
}
}
================================================
FILE: examples/fabric-contract-example-maven/.gitignore
================================================
target
================================================
FILE: examples/fabric-contract-example-maven/pom.xml
================================================
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>MyAssetContract</groupId>
<artifactId>MyAssetContract</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<!-- Generic properties -->
<java.version>21</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!-- fabric-chaincode-java -->
<fabric-chaincode-java.version>2.5.8</fabric-chaincode-java.version>
<!-- Logging -->
<logback.version>1.5.32</logback.version>
<slf4j.version>2.0.17</slf4j.version>
</properties>
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://www.jitpack.io</url>
</repository>
</repositories>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.junit</groupId>
<artifactId>junit-bom</artifactId>
<version>6.0.3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- fabric-chaincode-java -->
<dependency>
<groupId>org.hyperledger.fabric-chaincode-java</groupId>
<artifactId>fabric-chaincode-shim</artifactId>
<version>${fabric-chaincode-java.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.hyperledger.fabric</groupId>
<artifactId>fabric-protos</artifactId>
<version>0.3.7</version>
<scope>compile</scope>
</dependency>
<!-- fabric-sdk-java -->
<!-- Logging with SLF4J & LogBack -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
<scope>runtime</scope>
</dependency>
<!-- Test Artifacts -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>5.23.0</version>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20251224</version>
</dependency>
</dependencies>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.5.5</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.15.0</version>
<configuration>
<release>${java.version}</release>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.6.2</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<finalName>chaincode</finalName>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>org.hyperledger.fabric.contract.ContractRouter</mainClass>
</transformer>
</transformers>
<filters>
<filter>
<!-- filter out signature files from signed dependencies, else repackaging fails with security ex -->
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
================================================
FILE: examples/fabric-contract-example-maven/src/main/java/org/example/MyAsset.java
================================================
/*
* SPDX-License-Identifier: Apache-2.0
*/
package org.example;
import org.hyperledger.fabric.contract.annotation.Contract;
import org.hyperledger.fabric.contract.annotation.DataType;
import org.hyperledger.fabric.contract.annotation.Property;
import org.json.JSONObject;
@DataType()
public class MyAsset {
@Property()
private String value;
public MyAsset(){
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String toJSONString() {
return new JSONObject(this).toString();
}
public static MyAsset fromJSONString(String json) {
String value = new JSONObject(json).getString("value");
MyAsset asset = new MyAsset();
asset.setValue(value);
return asset;
}
}
================================================
FILE: examples/fabric-contract-example-maven/src/main/java/org/example/MyAssetContract.java
================================================
/*
* SPDX-License-Identifier: Apache-2.0
*/
package org.example;
import org.hyperledger.fabric.contract.Context;
import org.hyperledger.fabric.contract.ContractInterface;
import org.hyperledger.fabric.contract.annotation.Contract;
import org.hyperledger.fabric.contract.annotation.Default;
import org.hyperledger.fabric.contract.annotation.Transaction;
import org.hyperledger.fabric.contract.annotation.Contact;
import org.hyperledger.fabric.contract.annotation.Info;
import org.hyperledger.fabric.contract.annotation.License;
import static java.nio.charset.StandardCharsets.UTF_8;
@Contract(name = "MyAssetContract",
info = @Info(title = "MyAsset contract",
description = "Very basic Java Contract example",
version = "0.0.1",
license =
@License(name = "SPDX-License-Identifier: Apache-2.0",
url = ""),
contact = @Contact(email = "MyAssetContract@example.com",
name = "MyAssetContract",
url = "http://MyAssetContract.me")))
@Default
public class MyAssetContract implements ContractInterface {
public MyAssetContract() {
}
@Transaction()
public boolean myAssetExists(Context ctx, String myAssetId) {
byte[] buffer = ctx.getStub().getState(myAssetId);
return (buffer != null && buffer.length > 0);
}
@Transaction()
public void createMyAsset(Context ctx, String myAssetId, String value) {
boolean exists = myAssetExists(ctx,myAssetId);
if (exists) {
throw new RuntimeException("The asset "+myAssetId+" already exists");
}
MyAsset asset = new MyAsset();
asset.setValue(value);
ctx.getStub().putState(myAssetId, asset.toJSONString().getBytes(UTF_8));
}
@Transaction()
public MyAsset readMyAsset(Context ctx, String myAssetId) {
boolean exists = myAssetExists(ctx,myAssetId);
if (!exists) {
throw new RuntimeException("The asset "+myAssetId+" does not exist");
}
MyAsset newAsset = MyAsset.fromJSONString(new String(ctx.getStub().getState(myAssetId),UTF_8));
return newAsset;
}
@Transaction()
public void updateMyAsset(Context ctx, String myAssetId, String newValue) {
boolean exists = myAssetExists(ctx,myAssetId);
if (!exists) {
throw new RuntimeException("The asset "+myAssetId+" does not exist");
}
MyAsset asset = new MyAsset();
asset.setValue(newValue);
ctx.getStub().putState(myAssetId, asset.toJSONString().getBytes(UTF_8));
}
@Transaction()
public void deleteMyAsset(Context ctx, String myAssetId) {
boolean exists = myAssetExists(ctx,myAssetId);
if (!exists) {
throw new RuntimeException("The asset "+myAssetId+" does not exist");
}
ctx.getStub().delState(myAssetId);
}
}
================================================
FILE: examples/fabric-contract-example-maven/src/test/java/org/example/MyAssetContractTest.java
================================================
/*
* SPDX-License-Identifier: Apache License 2.0
*/
package org.example;
import static java.nio.charset.StandardCharsets.UTF_8;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.nio.charset.StandardCharsets;
import org.hyperledger.fabric.contract.Context;
import org.hyperledger.fabric.shim.ChaincodeStub;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
public final class MyAssetContractTest {
@Nested
class AssetExists {
@Test
public void noProperAsset() {
MyAssetContract contract = new MyAssetContract();
Context ctx = mock(Context.class);
ChaincodeStub stub = mock(ChaincodeStub.class);
when(ctx.getStub()).thenReturn(stub);
when(stub.getState("10001")).thenReturn(new byte[] {});
boolean result = contract.myAssetExists(ctx,"10001");
assertFalse(result);
}
@Test
public void assetExists() {
MyAssetContract contract = new MyAssetContract();
Context ctx = mock(Context.class);
ChaincodeStub stub = mock(ChaincodeStub.class);
when(ctx.getStub()).thenReturn(stub);
when(stub.getState("10001")).thenReturn(new byte[] {42});
boolean result = contract.myAssetExists(ctx,"10001");
assertTrue(result);
}
@Test
public void noKey() {
MyAssetContract contract = new MyAssetContract();
Context ctx = mock(Context.class);
ChaincodeStub stub = mock(ChaincodeStub.class);
when(ctx.getStub()).thenReturn(stub);
when(stub.getState("10002")).thenReturn(null);
boolean result = contract.myAssetExists(ctx,"10002");
assertFalse(result);
}
}
@Nested
class AssetCreates {
@Test
public void newAssetCreate() {
MyAssetContract contract = new MyAssetContract();
Context ctx = mock(Context.class);
ChaincodeStub stub = mock(ChaincodeStub.class);
when(ctx.getStub()).thenReturn(stub);
String json = "{\"value\":\"TheAsset\"}";
contract.createMyAsset(ctx, "10001", "TheAsset");
verify(stub).putState("10001", json.getBytes(UTF_8));
}
@Test
public void alreadyExists() {
MyAssetContract contract = new MyAssetContract();
Context ctx = mock(Context.class);
ChaincodeStub stub = mock(ChaincodeStub.class);
when(ctx.getStub()).thenReturn(stub);
when(stub.getState("10002")).thenReturn(new byte[] { 42 });
Exception thrown = assertThrows(RuntimeException.class, () -> {
contract.createMyAsset(ctx, "10002", "TheAsset");
});
assertEquals(thrown.getMessage(), "The asset 10002 already exists");
}
}
@Test
public void assetRead() {
MyAssetContract contract = new MyAssetContract();
Context ctx = mock(Context.class);
ChaincodeStub stub = mock(ChaincodeStub.class);
when(ctx.getStub()).thenReturn(stub);
MyAsset asset = new MyAsset();
asset.setValue("Valuable");
String json = asset.toJSONString();
when(stub.getState("10001")).thenReturn(json.getBytes(StandardCharsets.UTF_8));
MyAsset returnedAsset = contract.readMyAsset(ctx, "10001");
assertEquals(returnedAsset.getValue(), asset.getValue());
}
@Nested
class AssetUpdates {
@Test
public void updateExisting() {
MyAssetContract contract = new MyAssetContract();
Context ctx = mock(Context.class);
ChaincodeStub stub = mock(ChaincodeStub.class);
when(ctx.getStub()).thenReturn(stub);
when(stub.getState("10001")).thenReturn(new byte[] { 42 });
contract.updateMyAsset(ctx, "10001", "updates");
String json = "{\"value\":\"updates\"}";
verify(stub).putState("10001", json.getBytes(UTF_8));
}
@Test
public void updateMissing() {
MyAssetContract contract = new MyAssetContract();
Context ctx = mock(Context.class);
ChaincodeStub stub = mock(ChaincodeStub.class);
when(ctx.getStub()).thenReturn(stub);
when(stub.getState("10001")).thenReturn(null);
Exception thrown = assertThrows(RuntimeException.class, () -> {
contract.updateMyAsset(ctx, "10001", "TheAsset");
});
assertEquals(thrown.getMessage(), "The asset 10001 does not exist");
}
}
@Test
public void assetDelete() {
MyAssetContract contract = new MyAssetContract();
Context ctx = mock(Context.class);
ChaincodeStub stub = mock(ChaincodeStub.class);
when(ctx.getStub()).thenReturn(stub);
when(stub.getState("10001")).thenReturn(null);
Exception thrown = assertThrows(RuntimeException.class, () -> {
contract.deleteMyAsset(ctx, "10001");
});
assertEquals(thrown.getMessage(), "The asset 10001 does not exist");
}
}
================================================
FILE: examples/ledger-api/.gitignore
================================================
.gradle/
build/
bin/
================================================
FILE: examples/ledger-api/README.md
================================================
This example needs to use gradle4.6 please install this first
eg using sdkman
`sdk install gradle 4.6`
and then add the wrapper code before building
`gradle wrapper`
================================================
FILE: examples/ledger-api/build.gradle
================================================
plugins {
id 'com.gradleup.shadow' version '9.3.1'
id 'java'
}
version '0.0.1'
repositories {
mavenCentral()
maven {
url "https://www.jitpack.io"
}
}
dependencies {
implementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.5.8'
implementation 'org.json:json:20251224'
testImplementation platform('org.junit:junit-bom:6.0.2')
testImplementation 'org.junit.jupiter:junit-jupiter'
testImplementation 'org.assertj:assertj-core:3.27.7'
testImplementation 'org.mockito:mockito-core:5.21.0'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
shadowJar {
archiveBaseName = 'chaincode'
archiveVersion = ''
archiveClassifier = ''
duplicatesStrategy = DuplicatesStrategy.INCLUDE
mergeServiceFiles()
manifest {
attributes 'Main-Class': 'org.hyperledger.fabric.contract.ContractRouter'
}
}
compileJava {
options.release.set(11)
options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" << "-parameters"
}
test {
useJUnitPlatform()
testLogging {
events "PASSED", "SKIPPED", "FAILED"
}
}
================================================
FILE: examples/ledger-api/src/main/java/org/example/LedgerAPIContract.java
================================================
/*
* SPDX-License-Identifier: Apache-2.0
*/
package org.example;
import org.hyperledger.fabric.contract.Context;
import org.hyperledger.fabric.contract.ContractInterface;
import org.hyperledger.fabric.contract.annotation.Contract;
import org.hyperledger.fabric.contract.annotation.Default;
import org.hyperledger.fabric.contract.annotation.Transaction;
import org.hyperledger.fabric.contract.annotation.Contact;
import org.hyperledger.fabric.contract.annotation.Info;
import org.hyperledger.fabric.contract.annotation.License;
import static java.nio.charset.StandardCharsets.UTF_8;
@Contract(name = "LedgerAPI",
info = @Info(title = "Ledger API Examples",
description = "Technical Details and use of the Ledger API",
version = "0.0.1",
license =
@License(name = "SPDX-License-Identifier: Apache-2.0",
url = ""),
contact = @Contact(email = "ledgerapi@example.com",
name = "ledgerapi",
url = "http://ledgerapi.me")))
@Default
public class LedgerAPIContract implements ContractInterface {
public LedgerAPIContract() {
}
/**
* Example showing getting the world state ledger.
*/
@Transaction()
public boolean assetExistsInWorldState(Context ctx, String myAssetId) {
Collection collection = Ledger.getLedger(ctx).getCollection(Collection.WORLD);
// check exists
return false;
}
public final static String PRIVATE_RECORDS = "PrivateRecords";
/**
* Example showing getting the a named private data collectionm.
*/
@Transaction()
public boolean assetExistsInPrivateData(Context ctx, String myAssetId) {
Collection collection = Ledger.getLedger(ctx).getCollection(LedgerAPIContract.PRIVATE_RECORDS);
// check exists
return false;
}
/**
* Exanmple showing getting one of the organizational collections
*/
@Transaction()
public boolean assetExistsInOrganizationPrivateData(Context ctx, String myAssetId) {
Collection collection = Ledger.getLedger(ctx).getCollection(Collection.organizationCollection("myMspId"));
// check exists
return false;
}
}
================================================
FILE: examples/ledger-api/src/main/java/org/example/MyAsset.java
================================================
/*
* SPDX-License-Identifier: Apache-2.0
*/
package org.example;
import org.hyperledger.fabric.contract.annotation.Contract;
import org.hyperledger.fabric.contract.annotation.DataType;
import org.hyperledger.fabric.contract.annotation.Property;
import org.json.JSONObject;
@DataType()
public class MyAsset {
@Property()
private String value;
public MyAsset(){
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String toJSONString() {
return new JSONObject(this).toString();
}
public static MyAsset fromJSONString(String json) {
String value = new JSONObject(json).getString("value");
MyAsset asset = new MyAsset();
asset.setValue(value);
return asset;
}
}
================================================
FILE: fabric-chaincode-docker/.gitignore
================================================
/bin/
================================================
FILE: fabric-chaincode-docker/Dockerfile
================================================
ARG JAVA_IMAGE=eclipse-temurin:25-jdk
FROM ${JAVA_IMAGE} AS builder
RUN apt-get update \
&& apt-get install -y curl zip unzip
RUN curl -s "https://get.sdkman.io" | bash
SHELL ["/bin/bash", "-c"]
RUN . /root/.sdkman/bin/sdkman-init.sh \
&& sdk install gradle 9.4.1 \
&& sdk install maven 3.9.15
FROM ${JAVA_IMAGE} AS dependencies
COPY --from=builder /root/.sdkman/candidates/gradle/current /opt/gradle
COPY --from=builder /root/.sdkman/candidates/maven/current /opt/maven
SHELL ["/bin/bash", "-c"]
ENV PATH="/opt/maven/bin:/opt/gradle/bin:${PATH}"
# Coping libs, scripts and sources
COPY build/distributions/ /root/
#Creating folders structure
RUN mkdir -p \
/root/chaincode-java/chaincode/src \
/root/chaincode-java/chaincode/build/out \
/root/chaincode-java/shim-src/fabric-chaincode-integration-test \
/root/chaincode-java/shim-src/fabric-chaincode-docker
#Making scripts runnable
RUN chmod +x /root/chaincode-java/start /root/chaincode-java/build.sh
# Build protos and shim jar and installing them to maven local and gradle cache
WORKDIR /root/chaincode-java/shim-src
RUN gradle \
clean \
fabric-chaincode-shim:build \
fabric-chaincode-shim:publishToMavenLocal \
-x javadoc \
-x test \
-x pmdMain \
-x pmdTest \
-x spotlessCheck
WORKDIR /root/chaincode-java
# Run the Gradle and Maven commands to generate the wrapper variants
# of each tool
# Gradle doesn't run without settings.gradle file, so create one
RUN touch settings.gradle \
&& gradle wrapper \
&& ./gradlew wrapper \
&& mvn -N wrapper:wrapper
# Creating final javaenv image which will include all required
# dependencies to build and compile java chaincode
FROM ${JAVA_IMAGE}
RUN apt-get update \
&& apt-get install -y zip unzip \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* \
&& mkdir -p /chaincode/input \
&& mkdir -p /chaincode/output
SHELL ["/bin/bash", "-c"]
# Copy setup scripts, and the cached dependencies
COPY --from=dependencies /root/chaincode-java /root/chaincode-java
COPY --from=dependencies /root/.gradle /root/.gradle
COPY --from=dependencies /root/.m2 /root/.m2
WORKDIR /root/chaincode-java
================================================
FILE: fabric-chaincode-docker/README.md
================================================
# Quick reference
- **Maintained by**:
[The Fabric Java chaincode maintainers](https://github.com/hyperledger/fabric-chaincode-java)
# Overview
This image is used by the default [Hyperledger Fabric](https://hyperledger-fabric.readthedocs.io/) chaincode builder when deploying Java smart contracts. It is not intended for use independently of Hyperledger Fabric.
# Image variants
Detailed information on image tags, interoperability, and supported Java versions can be found in the [compatibility](https://github.com/hyperledger/fabric-chaincode-java/blob/main/COMPATIBILITY.md) documentation.
# License
This image is provided under the [Apache-2.0](https://github.com/hyperledger/fabric-chaincode-java/blob/main/LICENSE) license.
================================================
FILE: fabric-chaincode-docker/build.gradle
================================================
/*
* Copyright IBM Corp. 2018 All Rights Reserved.
*
* SPDX-License-Identifier: Apache-2.0
*/
plugins {
id 'com.bmuschko.docker-remote-api' version '10.0.0'
}
repositories {
mavenCentral()
}
import com.bmuschko.gradle.docker.tasks.image.*
tasks.register('copyLib', Copy) {
dependsOn ':fabric-chaincode-shim:build'
from project(':fabric-chaincode-shim').configurations.runtimeClasspath
into('build/distributions/chaincode-java/lib')
}
tasks.register('copyShimJar', Copy) {
dependsOn copyLib
from project(':fabric-chaincode-shim').jar
into('build/distributions/chaincode-java/lib')
}
tasks.register('copyStartScript', Copy) {
dependsOn copyShimJar
from('start')
into('build/distributions/chaincode-java')
}
tasks.register('copyBuildScript', Copy) {
dependsOn copyStartScript
from('build.sh')
into('build/distributions/chaincode-java')
}
tasks.register('copyAllDeps', Copy) {
dependsOn copyBuildScript
copy {
from project(':fabric-chaincode-shim').getProjectDir()
into('build/distributions/chaincode-java/shim-src/fabric-chaincode-shim/')
}
copy {
from project.getParent().file("build.gradle")
into('build/distributions/chaincode-java/shim-src/')
}
copy {
from project.getParent().file("settings.gradle")
into('build/distributions/chaincode-java/shim-src/')
}
}
tasks.register('buildImage', DockerBuildImage) {
dependsOn copyAllDeps
inputDir = project.file('Dockerfile').parentFile
images = ['hyperledger/fabric-javaenv', 'hyperledger/fabric-javaenv:2.5', 'hyperledger/fabric-javaenv:2.5.9']
}
================================================
FILE: fabric-chaincode-docker/build.sh
================================================
#!/usr/bin/env bash
set -ex
INPUT_DIR=/chaincode/input
OUTPUT_DIR=/chaincode/output
TMP_DIR=$(mktemp -d)
NUM_JARS=$(find ${INPUT_DIR} -name "*.jar" | wc -l)
buildGradle() {
echo "Copying from $1 to ${TMP_DIR}"
cd $1
tar cf - . | (cd ${TMP_DIR}; tar xf -)
cd ${TMP_DIR}
echo "Gradle build"
if [ -f ./gradlew ]; then
chmod +x ./gradlew
./gradlew build shadowJar -x test
else
/root/chaincode-java/gradlew build shadowJar -x test
fi
retval=$?
if [ $retval -ne 0 ]; then
exit $retval
fi
cp build/libs/chaincode.jar $2
retval=$?
if [ $retval -ne 0 ]; then
exit $retval
fi
touch $2/.uberjar
cd "$SAVED" >/dev/null
}
buildMaven() {
echo "Copying from $1 to ${TMP_DIR}"
cd $1
tar cf - . | (cd ${TMP_DIR}; tar xf -)
cd ${TMP_DIR}
echo "Maven build"
if [ -f ./mvnw ]; then
chmod +x ./mvnw
else
cp -r /root/chaincode-java/.mvn .
cp /root/chaincode-java/mvnw .
fi
./mvnw compile package -DskipTests -Dmaven.test.skip=true
retval=$?
if [ $retval -ne 0 ]; then
exit $retval
fi
cp target/chaincode.jar $2
retval=$?
if [ $retval -ne 0 ]; then
exit $retval
fi
touch $2/.uberjar
cd "$SAVED" >/dev/null
}
for DIR in ${INPUT_DIR} ${INPUT_DIR}/src; do
if [ -f ${DIR}/build.gradle -o -f ${DIR}/build.gradle.kts ]; then
buildGradle ${DIR} ${OUTPUT_DIR}
exit 0
elif [ -f ${DIR}/pom.xml ]; then
buildMaven ${DIR} ${OUTPUT_DIR}
exit 0
fi
done
if [ ${NUM_JARS} -eq 0 ]; then
>&2 echo "Not build.gradle nor pom.xml found in chaincode source, don't know how to build chaincode"
>&2 echo "Project folder content:"
>&2 find ${INPUT_DIR} -name "*" -exec ls -ld '{}' \;
exit 255
else
cd ${INPUT_DIR} && tar cf - $(find . -name "*.jar") | (cd ${OUTPUT_DIR} && tar xvf -)
fi
================================================
FILE: fabric-chaincode-docker/start
================================================
#!/usr/bin/env bash
set -ex
ROOT_DIR=/root/chaincode-java
LIB_DIR=${ROOT_DIR}/lib
CHAINCODE_DIR=${ROOT_DIR}/chaincode
LIB_JARS=$(find ${LIB_DIR} -name "*.jar" | paste -s -d ":" -)
CHAINCODE_JARS=$(find ${CHAINCODE_DIR} -name "*.jar" | paste -s -d ":" -)
NUM_CHAINCODE_JARS=$(find ${CHAINCODE_DIR} -name "*.jar" | wc -l)
JAVA_OPTS="-XshowSettings"
if [ -f ${CHAINCODE_DIR}/.uberjar ]; then
if [ ${NUM_CHAINCODE_JARS} -ne 1 ]; then
>&2 echo "Cannot start uber JAR as more than one JAR file was found in the chaincode directory"
exit 255
fi
exec java ${JAVA_OPTS} -jar ${CHAINCODE_JARS} "$@"
else
exec java ${JAVA_OPTS} -cp ${CHAINCODE_JARS}:${LIB_JARS} org.hyperledger.fabric.contract.ContractRouter "$@"
fi
================================================
FILE: fabric-chaincode-integration-test/.gitignore
================================================
repository
_cfg
*.tar.gz
log.txt
================================================
FILE: fabric-chaincode-integration-test/build.gradle
================================================
dependencies {
implementation project(':fabric-chaincode-docker')
implementation project(':fabric-chaincode-shim')
implementation 'org.json:json:20251224'
}
test {
// Always run tests, even when nothing changed.
dependsOn 'cleanTest'
// Show test results.
testLogging {
events "passed", "skipped", "failed"
showExceptions = true
showCauses = true
showStandardStreams = true
exceptionFormat = "full"
}
}
tasks.register('getLatestDockerImages') {
doLast {
providers.exec {
workingDir "."
commandLine "sh", "-c", "./getDockerImages.sh"
}
}
}
================================================
FILE: fabric-chaincode-integration-test/chaincodebootstrap.gradle
================================================
allprojects {
apply plugin: 'maven-publish'
publishing {
repositories {
maven {
name = 'fabric'
url = "file:$chaincodeRepoDir"
}
}
}
}
================================================
FILE: fabric-chaincode-integration-test/src/contracts/bare-gradle/build.gradle
================================================
plugins {
id 'com.gradleup.shadow' version '9.3.1'
id 'java'
}
group 'org.hyperledger.fabric-chaincode-java'
version '1.0-SNAPSHOT'
compileJava {
options.release = 11
}
repositories {
mavenCentral()
maven {
url "$projectDir/repository"
}
}
dependencies {
implementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.5.9'
implementation 'org.hyperledger.fabric:fabric-protos:0.3.7'
}
shadowJar {
archiveBaseName = 'chaincode'
archiveVersion = ''
archiveClassifier = ''
duplicatesStrategy = DuplicatesStrategy.INCLUDE
mergeServiceFiles()
manifest {
attributes 'Main-Class': 'org.hyperledger.fabric.contract.ContractRouter'
}
}
================================================
FILE: fabric-chaincode-integration-test/src/contracts/bare-gradle/src/main/java/org/hyperledger/fabric/example/BareGradle.java
================================================
/*
* SPDX-License-Identifier: Apache-2.0
*/
package org.hyperledger.fabric.example;
import org.hyperledger.fabric.contract.Context;
import org.hyperledger.fabric.contract.ContractInterface;
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",
description = "Contract but using all the APIs",
version = "0.0.1",
license =
@License(name = "SPDX-License-Identifier: Apache-2.0",
url = ""),
contact = @Contact(email = "fred@example.com",
name = "fred",
url = "http://fred.example.com")))
@Default
public class BareGradle implements ContractInterface {
public BareGradle() {
}
@Transaction()
public String whoami(Context ctx){
return this.getClass().getSimpleName();
}
}
================================================
FILE: fabric-chaincode-integration-test/src/contracts/bare-gradle/src/main/resources/config.props
================================================
MAX_INBOUND_MESSAGE_SIZE=4000
CHAINCODE_METRICS_ENABLED=true
TP_CORE_POOL_SIZE=4
TP_MAX_POOL_SIZE=4
TP_QUEUE_SIZE=4000
================================================
FILE: fabric-chaincode-integration-test/src/contracts/bare-maven/.gitignore
================================================
target
================================================
FILE: fabric-chaincode-integration-test/src/contracts/bare-maven/pom.xml
================================================
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>MyAssetContract</groupId>
<artifactId>MyAssetContract</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<!-- Generic properties -->
<java.version>11</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!-- fabric-chaincode-java -->
<fabric-chaincode-java.version>2.5.9</fabric-chaincode-java.version>
</properties>
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://www.jitpack.io</url>
</repository>
<repository>
<id>localfabirc</id>
<url>file://${project.basedir}/repository</url>
</repository>
</repositories>
<dependencies>
<!-- fabric-chaincode-java -->
<dependency>
<groupId>org.hyperledger.fabric-chaincode-java</groupId>
<artifactId>fabric-chaincode-shim</artifactId>
<version>${fabric-chaincode-java.version}</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.15.0</version>
<configuration>
<release>${java.version}</release>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.6.2</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<finalName>chaincode</finalName>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>org.hyperledger.fabric.contract.ContractRouter</mainClass>
</transformer>
</transformers>
<filters>
<filter>
<!-- filter out signature files from signed dependencies, else repackaging fails with security ex -->
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
================================================
FILE: fabric-chaincode-integration-test/src/contracts/bare-maven/src/main/java/org/hyperledger/fabric/example/BareMaven.java
================================================
/*
* SPDX-License-Identifier: Apache-2.0
*/
package org.hyperledger.fabric.example;
import org.hyperledger.fabric.contract.Context;
import org.hyperledger.fabric.contract.ContractInterface;
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",
description = "Contract but using all the APIs",
version = "0.0.1",
license =
@License(name = "SPDX-License-Identifier: Apache-2.0",
url = ""),
contact = @Contact(email = "fred@example.com",
name = "fred",
url = "http://fred.example.com")))
@Default
public class BareMaven implements ContractInterface {
public BareMaven() {
}
@Transaction()
public String whoami(Context ctx){
return this.getClass().getSimpleName();
}
}
================================================
FILE: fabric-chaincode-integration-test/src/contracts/bare-maven/src/main/resources/config.props
================================================
MAX_INBOUND_MESSAGE_SIZE=4000
CHAINCODE_METRICS_ENABLED=true
TP_CORE_POOL_SIZE=4
TP_MAX_POOL_SIZE=4
TP_QUEUE_SIZE=4000
================================================
FILE: fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/build.gradle
================================================
plugins {
id 'com.gradleup.shadow' version '9.3.1'
id 'java'
}
group 'org.hyperledger.fabric-chaincode-java'
version ''
compileJava {
options.release = 11
}
repositories {
mavenCentral()
maven {
url "$projectDir/repository"
}
}
dependencies {
implementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.5.9'
implementation 'org.hyperledger.fabric:fabric-protos:0.3.7'
}
shadowJar {
archiveBaseName = 'chaincode'
archiveVersion = ''
archiveClassifier = ''
duplicatesStrategy = DuplicatesStrategy.INCLUDE
mergeServiceFiles()
manifest {
attributes 'Main-Class': 'org.hyperledger.fabric.contract.ContractRouter'
}
}
================================================
FILE: fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradle/wrapper/gradle-wrapper.properties
================================================
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
================================================
FILE: fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradlew
================================================
#!/bin/sh
#
# 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.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# SPDX-License-Identifier: Apache-2.0
#
##############################################################################
#
# 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/platforms/jvm/plugins-application/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
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
# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s
' "$PWD" ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
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 ;;
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
else
JAVACMD=$JAVA_HOME/bin/java
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD=java
if ! command -v java >/dev/null 2>&1
then
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
fi
# Increase the maximum file descriptors if we can.
if ! "$cygwin" && ! "$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=SC2039,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=SC2039,SC3045
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
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" )
# Now convert the arguments - kludge to limit ourselves to /bin/sh
for arg do
if
case $arg in #(
-*) false ;; # don't mess with options #(
/?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
[ -e "$t" ] ;; #(
*) false ;;
esac
then
arg=$( cygpath --path --ignore --mixed "$arg" )
fi
# Roll the args list around exactly as many times as the number of
# args, so each arg winds up back in the position where it started, but
# possibly modified.
#
# NB: a `for` loop captures its iteration list before it begins, so
# changing the positional parameters here affects neither the number of
# iterations, nor the values presented in `arg`.
shift # remove old arg
set -- "$@" "$arg" # push replacement arg
done
fi
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Collect all arguments for the java command:
# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# and any embedded shellness will be escaped.
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
# treated as '${Hostname}' itself on the command line.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
-classpath "$CLASSPATH" \
org.gradle.wrapper.GradleWrapperMain \
"$@"
# Stop when "xargs" is not available.
if ! command -v xargs >/dev/null 2>&1
then
die "xargs is not available"
fi
# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
#
# In Bash we could simply go:
#
# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
# set -- "${ARGS[@]}" "$@"
#
# but POSIX shell has neither arrays nor command substitution, so instead we
# post-process each arg (as a line of input to sed) to backslash-escape any
# character that might be a shell metacharacter, then use eval to reverse
# that process (while maintaining the separation between arguments), and wrap
# the whole thing up as a single "set" statement.
#
# This will of course break if any of these variables contains a newline or
# an unmatched quote.
#
eval "set -- $(
printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
xargs -n1 |
sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
tr '\n' ' '
)" '"$@"'
exec "$JAVACMD" "$@"
================================================
FILE: fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradlew.bat
================================================
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@rem SPDX-License-Identifier: Apache-2.0
@rem
@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%"=="" set DIRNAME=.
@rem This is normally unused
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if %ERRORLEVEL% equ 0 goto execute
echo. 1>&2
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
echo. 1>&2
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2
goto fail
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
:end
@rem End local scope for the variables with windows NT shell
if %ERRORLEVEL% equ 0 goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
set EXIT_CODE=%ERRORLEVEL%
if %EXIT_CODE% equ 0 set EXIT_CODE=1
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
exit /b %EXIT_CODE%
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega
================================================
FILE: fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/settings.gradle
================================================
rootProject.name = 'fabric-chaincode-example-sacc'
================================================
FILE: fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/src/main/java/org/hyperledger/fabric/example/AllLedgerAPI.java
================================================
/*
* SPDX-License-Identifier: Apache-2.0
*/
package org.hyperledger.fabric.example;
import org.hyperledger.fabric.contract.Context;
import org.hyperledger.fabric.contract.ContractInterface;
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",
description = "Contract but using all the Ledger APIs",
version = "0.0.1",
license =
@License(name = "SPDX-License-Identifier: Apache-2.0",
url = ""),
contact = @Contact(email = "fred@example.com",
name = "fred",
url = "http://fred.example.com")))
@Default
public class AllLedgerAPI implements ContractInterface {
public AllLedgerAPI() {
}
@Transaction()
public void accessLedgers(Context ctx){
Ledger ledger = Ledger.getLedger(ctx);
// not much else can be done for the moment
}
}
================================================
FILE: fabric-chaincode-integration-test/src/contracts/fabric-shim-api/build.gradle
================================================
plugins {
id 'com.gradleup.shadow' version '9.3.1'
id 'java'
}
group 'org.hyperledger.fabric-chaincode-java'
version '1.0-SNAPSHOT'
compileJava {
options.release = 11
}
repositories {
mavenCentral()
maven {
url "$projectDir/repository"
}
}
dependencies {
implementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.5.9'
implementation 'org.hyperledger.fabric:fabric-protos:0.3.7'
implementation 'commons-logging:commons-logging:1.3.5'
implementation 'com.google.code.gson:gson:2.13.2'
}
shadowJar {
archiveBaseName = 'chaincode'
archiveVersion = ''
archiveClassifier = ''
duplicatesStrategy = DuplicatesStrategy.INCLUDE
mergeServiceFiles()
manifest {
attributes 'Main-Class': 'org.hyperledger.fabric.contract.ContractRouter'
}
}
================================================
FILE: fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradle/wrapper/gradle-wrapper.properties
================================================
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
================================================
FILE: fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradlew
================================================
#!/bin/sh
#
# 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.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# SPDX-License-Identifier: Apache-2.0
#
##############################################################################
#
# 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/platforms/jvm/plugins-application/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
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
# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
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 ;;
esac
CLASSPATH="\\\"\\\""
# 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
else
JAVACMD=$JAVA_HOME/bin/java
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD=java
if ! command -v java >/dev/null 2>&1
then
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
fi
# Increase the maximum file descriptors if we can.
if ! "$cygwin" && ! "$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=SC2039,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=SC2039,SC3045
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
fi
# Collect all
gitextract_fa6p6lwj/ ├── .github/ │ ├── dependabot.yml │ ├── settings.yml │ └── workflows/ │ ├── pull_request.yml │ ├── push.yml │ ├── release.yml │ ├── scan.yml │ ├── schedule.yml │ ├── scheduled-scan.yml │ └── test.yml ├── .gitignore ├── CHANGELOG.md ├── CODEOWNERS ├── CODE_OF_CONDUCT.md ├── COMPATIBILITY.md ├── CONTRIBUTING.md ├── LICENSE ├── MAINTAINERS.md ├── Makefile ├── README.md ├── RELEASING.md ├── SECURITY.md ├── build.gradle ├── docs/ │ ├── 404.md │ ├── _config.yml │ ├── _includes/ │ │ ├── footer.html │ │ ├── header.html │ │ └── javadocs.html │ └── index.md ├── examples/ │ ├── fabric-contract-example-as-service/ │ │ ├── Dockerfile │ │ ├── README.md │ │ ├── build.gradle │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── example/ │ │ │ └── contract/ │ │ │ ├── MyAsset.java │ │ │ └── MyAssetContract.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── example/ │ │ └── MyAssetContractTest.java │ ├── fabric-contract-example-gradle/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── build.gradle │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── example/ │ │ │ ├── MyAsset.java │ │ │ └── MyAssetContract.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── example/ │ │ └── MyAssetContractTest.java │ ├── fabric-contract-example-gradle-kotlin/ │ │ ├── .fabricignore │ │ ├── .gitignore │ │ ├── build.gradle.kts │ │ ├── gradle/ │ │ │ └── wrapper/ │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ │ ├── gradlew │ │ ├── gradlew.bat │ │ ├── settings.gradle.kts │ │ └── src/ │ │ ├── main/ │ │ │ └── kotlin/ │ │ │ └── org/ │ │ │ └── example/ │ │ │ ├── MyAsset.kt │ │ │ └── MyAssetContract.kt │ │ └── test/ │ │ └── kotlin/ │ │ └── org/ │ │ └── example/ │ │ └── MyAssetContractTest.kt │ ├── fabric-contract-example-maven/ │ │ ├── .gitignore │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── example/ │ │ │ ├── MyAsset.java │ │ │ └── MyAssetContract.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── example/ │ │ └── MyAssetContractTest.java │ └── ledger-api/ │ ├── .gitignore │ ├── README.md │ ├── build.gradle │ └── src/ │ └── main/ │ └── java/ │ └── org/ │ └── example/ │ ├── LedgerAPIContract.java │ └── MyAsset.java ├── fabric-chaincode-docker/ │ ├── .gitignore │ ├── Dockerfile │ ├── README.md │ ├── build.gradle │ ├── build.sh │ └── start ├── fabric-chaincode-integration-test/ │ ├── .gitignore │ ├── build.gradle │ ├── chaincodebootstrap.gradle │ └── src/ │ ├── contracts/ │ │ ├── bare-gradle/ │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── hyperledger/ │ │ │ │ └── fabric/ │ │ │ │ └── example/ │ │ │ │ └── BareGradle.java │ │ │ └── resources/ │ │ │ └── config.props │ │ ├── bare-maven/ │ │ │ ├── .gitignore │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── hyperledger/ │ │ │ │ └── fabric/ │ │ │ │ └── example/ │ │ │ │ └── BareMaven.java │ │ │ └── resources/ │ │ │ └── config.props │ │ ├── fabric-ledger-api/ │ │ │ ├── build.gradle │ │ │ ├── gradle/ │ │ │ │ └── wrapper/ │ │ │ │ ├── gradle-wrapper.jar │ │ │ │ └── gradle-wrapper.properties │ │ │ ├── gradlew │ │ │ ├── gradlew.bat │ │ │ ├── settings.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── hyperledger/ │ │ │ └── fabric/ │ │ │ └── example/ │ │ │ └── AllLedgerAPI.java │ │ ├── fabric-shim-api/ │ │ │ ├── build.gradle │ │ │ ├── gradle/ │ │ │ │ └── wrapper/ │ │ │ │ ├── gradle-wrapper.jar │ │ │ │ └── gradle-wrapper.properties │ │ │ ├── gradlew │ │ │ ├── gradlew.bat │ │ │ ├── settings.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── hyperledger/ │ │ │ │ └── fabric/ │ │ │ │ └── example/ │ │ │ │ ├── AllAPI.java │ │ │ │ └── EndorsementCC.java │ │ │ └── resources/ │ │ │ └── config.props │ │ └── wrapper-maven/ │ │ ├── .gitignore │ │ ├── .mvn/ │ │ │ └── wrapper/ │ │ │ ├── maven-wrapper.jar │ │ │ └── maven-wrapper.properties │ │ ├── mvnw │ │ ├── mvnw.cmd │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── hyperledger/ │ │ │ └── fabric/ │ │ │ └── example/ │ │ │ └── WrapperMaven.java │ │ └── resources/ │ │ └── config.props │ └── test/ │ ├── java/ │ │ └── org/ │ │ └── hyperleder/ │ │ └── fabric/ │ │ └── shim/ │ │ └── integration/ │ │ ├── contractinstall/ │ │ │ └── ContractInstallTest.java │ │ ├── ledgertests/ │ │ │ └── LedgerIntegrationTest.java │ │ ├── shimtests/ │ │ │ ├── SACCIntegrationTest.java │ │ │ └── SBECCIntegrationTest.java │ │ └── util/ │ │ ├── Bash.java │ │ ├── Command.java │ │ ├── Docker.java │ │ ├── DockerCompose.java │ │ ├── FabricState.java │ │ ├── InvokeHelper.java │ │ └── Peer.java │ └── resources/ │ ├── docker-compose-microfab.yaml │ └── scripts/ │ ├── ccutils.sh │ ├── collection_config.json │ └── mfsetup.sh ├── fabric-chaincode-shim/ │ ├── build.gradle │ ├── javabuild.sh │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── hyperledger/ │ │ │ └── fabric/ │ │ │ ├── Logger.java │ │ │ ├── Logging.java │ │ │ ├── contract/ │ │ │ │ ├── ClientIdentity.java │ │ │ │ ├── Context.java │ │ │ │ ├── ContextFactory.java │ │ │ │ ├── ContractInterface.java │ │ │ │ ├── ContractRouter.java │ │ │ │ ├── ContractRuntimeException.java │ │ │ │ ├── annotation/ │ │ │ │ │ ├── Contact.java │ │ │ │ │ ├── Contract.java │ │ │ │ │ ├── DataType.java │ │ │ │ │ ├── Default.java │ │ │ │ │ ├── Info.java │ │ │ │ │ ├── License.java │ │ │ │ │ ├── Property.java │ │ │ │ │ ├── Serializer.java │ │ │ │ │ ├── Transaction.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── execution/ │ │ │ │ │ ├── ExecutionFactory.java │ │ │ │ │ ├── ExecutionService.java │ │ │ │ │ ├── InvocationRequest.java │ │ │ │ │ ├── JSONTransactionSerializer.java │ │ │ │ │ ├── SerializerInterface.java │ │ │ │ │ ├── impl/ │ │ │ │ │ │ ├── ContractExecutionService.java │ │ │ │ │ │ ├── ContractInvocationRequest.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── metadata/ │ │ │ │ │ ├── MetadataBuilder.java │ │ │ │ │ ├── TypeSchema.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── package-info.java │ │ │ │ ├── routing/ │ │ │ │ │ ├── ContractDefinition.java │ │ │ │ │ ├── DataTypeDefinition.java │ │ │ │ │ ├── ParameterDefinition.java │ │ │ │ │ ├── PropertyDefinition.java │ │ │ │ │ ├── RoutingRegistry.java │ │ │ │ │ ├── TransactionType.java │ │ │ │ │ ├── TxFunction.java │ │ │ │ │ ├── TypeRegistry.java │ │ │ │ │ ├── impl/ │ │ │ │ │ │ ├── ContractDefinitionImpl.java │ │ │ │ │ │ ├── DataTypeDefinitionImpl.java │ │ │ │ │ │ ├── ParameterDefinitionImpl.java │ │ │ │ │ │ ├── PropertyDefinitionImpl.java │ │ │ │ │ │ ├── RoutingRegistryImpl.java │ │ │ │ │ │ ├── SerializerRegistryImpl.java │ │ │ │ │ │ ├── TxFunctionImpl.java │ │ │ │ │ │ ├── TypeRegistryImpl.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ └── package-info.java │ │ │ │ └── systemcontract/ │ │ │ │ ├── SystemContract.java │ │ │ │ └── package-info.java │ │ │ ├── ledger/ │ │ │ │ ├── Collection.java │ │ │ │ ├── Ledger.java │ │ │ │ ├── impl/ │ │ │ │ │ ├── LedgerImpl.java │ │ │ │ │ └── package-info.java │ │ │ │ └── package-info.java │ │ │ ├── metrics/ │ │ │ │ ├── Metrics.java │ │ │ │ ├── MetricsProvider.java │ │ │ │ ├── TaskMetricsCollector.java │ │ │ │ ├── impl/ │ │ │ │ │ ├── DefaultProvider.java │ │ │ │ │ ├── NullProvider.java │ │ │ │ │ └── package-info.java │ │ │ │ └── package-info.java │ │ │ ├── overview.html │ │ │ ├── package-info.java │ │ │ ├── shim/ │ │ │ │ ├── Chaincode.java │ │ │ │ ├── ChaincodeBase.java │ │ │ │ ├── ChaincodeException.java │ │ │ │ ├── ChaincodeServer.java │ │ │ │ ├── ChaincodeServerProperties.java │ │ │ │ ├── ChaincodeStub.java │ │ │ │ ├── ChatChaincodeWithPeer.java │ │ │ │ ├── GrpcServer.java │ │ │ │ ├── NettyChaincodeServer.java │ │ │ │ ├── NettyGrpcServer.java │ │ │ │ ├── ResponseUtils.java │ │ │ │ ├── ext/ │ │ │ │ │ └── sbe/ │ │ │ │ │ ├── StateBasedEndorsement.java │ │ │ │ │ ├── impl/ │ │ │ │ │ │ ├── StateBasedEndorsementFactory.java │ │ │ │ │ │ ├── StateBasedEndorsementImpl.java │ │ │ │ │ │ ├── StateBasedEndorsementUtils.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── impl/ │ │ │ │ │ ├── ChaincodeInvocationTask.java │ │ │ │ │ ├── ChaincodeMessageFactory.java │ │ │ │ │ ├── ChaincodeSupportClient.java │ │ │ │ │ ├── InvocationStubImpl.java │ │ │ │ │ ├── InvocationTaskExecutor.java │ │ │ │ │ ├── InvocationTaskManager.java │ │ │ │ │ ├── KeyModificationImpl.java │ │ │ │ │ ├── KeyValueImpl.java │ │ │ │ │ ├── QueryResultsIteratorImpl.java │ │ │ │ │ ├── QueryResultsIteratorWithMetadataImpl.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── ledger/ │ │ │ │ │ ├── CompositeKey.java │ │ │ │ │ ├── CompositeKeyFormatException.java │ │ │ │ │ ├── KeyModification.java │ │ │ │ │ ├── KeyValue.java │ │ │ │ │ ├── QueryResultsIterator.java │ │ │ │ │ ├── QueryResultsIteratorWithMetadata.java │ │ │ │ │ └── package-info.java │ │ │ │ └── package-info.java │ │ │ └── traces/ │ │ │ ├── Traces.java │ │ │ ├── TracesProvider.java │ │ │ ├── impl/ │ │ │ │ ├── DefaultTracesProvider.java │ │ │ │ ├── NullProvider.java │ │ │ │ ├── OpenTelemetryProperties.java │ │ │ │ ├── OpenTelemetryTracesProvider.java │ │ │ │ └── package-info.java │ │ │ └── package-info.java │ │ └── resources/ │ │ ├── contract-schema.json │ │ └── json-schema-draft-04-schema.json │ └── test/ │ ├── java/ │ │ ├── ChaincodeWithoutPackageTest.java │ │ ├── EmptyChaincodeWithoutPackage.java │ │ ├── contract/ │ │ │ ├── Greeting.java │ │ │ └── SampleContract.java │ │ └── org/ │ │ └── hyperledger/ │ │ └── fabric/ │ │ ├── LoggerTest.java │ │ ├── LoggingTest.java │ │ ├── TestUtil.java │ │ ├── contract/ │ │ │ ├── AllTypesAsset.java │ │ │ ├── ChaincodeStubNaiveImpl.java │ │ │ ├── ClientIdentityTest.java │ │ │ ├── ContextFactoryTest.java │ │ │ ├── ContextTest.java │ │ │ ├── ContractInterfaceTest.java │ │ │ ├── ContractRouterTest.java │ │ │ ├── MyType.java │ │ │ ├── MyType2.java │ │ │ ├── TransactionExceptionTest.java │ │ │ ├── execution/ │ │ │ │ ├── ContractExecutionServiceTest.java │ │ │ │ └── JSONTransactionSerializerTest.java │ │ │ ├── metadata/ │ │ │ │ ├── MetadataBuilderTest.java │ │ │ │ └── TypeSchemaTest.java │ │ │ ├── routing/ │ │ │ │ ├── ContractDefinitionTest.java │ │ │ │ ├── DataTypeDefinitionTest.java │ │ │ │ ├── ParameterDefinitionTest.java │ │ │ │ ├── PropertyDefinitionTest.java │ │ │ │ ├── TxFunctionTest.java │ │ │ │ └── TypeRegistryTest.java │ │ │ └── simplepath/ │ │ │ └── ContractSimplePathTest.java │ │ ├── ledger/ │ │ │ └── LedgerTest.java │ │ ├── metrics/ │ │ │ ├── MetricsTest.java │ │ │ └── impl/ │ │ │ └── DefaultProviderTest.java │ │ ├── shim/ │ │ │ ├── ChaincodeBaseTest.java │ │ │ ├── ChaincodeServerImplTest.java │ │ │ ├── ChaincodeStubTest.java │ │ │ ├── ChaincodeTest.java │ │ │ ├── ChatChaincodeWithPeerTest.java │ │ │ ├── NettyGrpcServerTest.java │ │ │ ├── chaincode/ │ │ │ │ └── EmptyChaincode.java │ │ │ ├── ext/ │ │ │ │ └── sbe/ │ │ │ │ ├── StateBasedEndorsementTest.java │ │ │ │ └── impl/ │ │ │ │ ├── StateBasedEndorsementFactoryTest.java │ │ │ │ └── StateBasedEndorsementImplTest.java │ │ │ ├── fvt/ │ │ │ │ └── ChaincodeFVTest.java │ │ │ ├── impl/ │ │ │ │ ├── ChaincodeMessageFactoryTest.java │ │ │ │ ├── ChaincodeSupportClientTest.java │ │ │ │ ├── InnvocationTaskManagerTest.java │ │ │ │ ├── InvocationStubImplTest.java │ │ │ │ ├── InvocationTaskManagerTest.java │ │ │ │ ├── KeyModificationImplTest.java │ │ │ │ ├── KeyValueImplTest.java │ │ │ │ └── QueryResultsIteratorWithMetadataImplTest.java │ │ │ ├── ledger/ │ │ │ │ └── CompositeKeyTest.java │ │ │ ├── mock/ │ │ │ │ └── peer/ │ │ │ │ ├── ChaincodeMockPeer.java │ │ │ │ ├── CompleteStep.java │ │ │ │ ├── DelValueStep.java │ │ │ │ ├── ErrorResponseStep.java │ │ │ │ ├── GetHistoryForKeyStep.java │ │ │ │ ├── GetQueryResultStep.java │ │ │ │ ├── GetStateByRangeStep.java │ │ │ │ ├── GetStateMetadata.java │ │ │ │ ├── GetValueStep.java │ │ │ │ ├── InvokeChaincodeStep.java │ │ │ │ ├── PurgeValueStep.java │ │ │ │ ├── PutStateMetadata.java │ │ │ │ ├── PutValueStep.java │ │ │ │ ├── QueryCloseStep.java │ │ │ │ ├── QueryNextStep.java │ │ │ │ ├── QueryResultStep.java │ │ │ │ ├── RegisterStep.java │ │ │ │ └── ScenarioStep.java │ │ │ └── utils/ │ │ │ ├── MessageUtil.java │ │ │ └── TimeoutUtil.java │ │ └── traces/ │ │ ├── TracesTest.java │ │ └── impl/ │ │ ├── DefaultProviderTest.java │ │ ├── OpenTelemetryPropertiesTest.java │ │ ├── OpenTelemetryTracesProviderTest.java │ │ └── TestSpanExporterProvider.java │ └── resources/ │ ├── META-INF/ │ │ └── services/ │ │ └── io.opentelemetry.sdk.autoconfigure.spi.traces.ConfigurableSpanExporterProvider │ ├── ca.crt │ ├── client.crt │ ├── client.crt.enc │ ├── client.key │ ├── client.key.enc │ └── client.key.password-protected ├── gradle/ │ └── wrapper/ │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── pmd-ruleset.xml ├── release_notes/ │ ├── v1.3.0.txt │ ├── v1.4.0.txt │ ├── v2.0.0-alpha.txt │ ├── v2.0.0-beta.txt │ ├── v2.0.0.txt │ ├── v2.0.1.txt │ ├── v2.1.0.txt │ ├── v2.1.1.txt │ ├── v2.2.0.txt │ ├── v2.2.1.txt │ ├── v2.3.0.txt │ ├── v2.3.1.txt │ ├── v2.4.0-beta.txt │ ├── v2.4.0.txt │ ├── v2.4.1.txt │ └── v2.5.0.txt └── settings.gradle
SYMBOL INDEX (1482 symbols across 185 files)
FILE: examples/fabric-contract-example-as-service/src/main/java/org/example/contract/MyAsset.java
class MyAsset (line 11) | @DataType()
method MyAsset (line 17) | public MyAsset() {
method getValue (line 20) | public String getValue() {
method setValue (line 24) | public void setValue(String value) {
method toJSONString (line 28) | public String toJSONString() {
method fromJSONString (line 32) | public static MyAsset fromJSONString(String json) {
FILE: examples/fabric-contract-example-as-service/src/main/java/org/example/contract/MyAssetContract.java
class MyAssetContract (line 14) | @Contract
method MyAssetContract (line 18) | public MyAssetContract() {
method myAssetExists (line 22) | @Transaction()
method createMyAsset (line 28) | @Transaction()
method readMyAsset (line 39) | @Transaction()
method updateMyAsset (line 50) | @Transaction()
method deleteMyAsset (line 62) | @Transaction()
FILE: examples/fabric-contract-example-as-service/src/test/java/org/example/MyAssetContractTest.java
class MyAssetContractTest (line 26) | public final class MyAssetContractTest {
class AssetExists (line 28) | @Nested
method noProperAsset (line 31) | @Test
method assetExists (line 45) | @Test
method noKey (line 60) | @Test
class AssetCreates (line 76) | @Nested
method newAssetCreate (line 79) | @Test
method alreadyExists (line 93) | @Test
method assetRead (line 112) | @Test
class AssetUpdates (line 129) | @Nested
method updateExisting (line 132) | @Test
method updateMissing (line 146) | @Test
method assetDelete (line 164) | @Test
method test (line 179) | @Test
FILE: examples/fabric-contract-example-gradle/src/main/java/org/example/MyAsset.java
class MyAsset (line 12) | @DataType()
method MyAsset (line 18) | public MyAsset(){
method getValue (line 21) | public String getValue() {
method setValue (line 25) | public void setValue(String value) {
method toJSONString (line 29) | public String toJSONString() {
method fromJSONString (line 33) | public static MyAsset fromJSONString(String json) {
FILE: examples/fabric-contract-example-gradle/src/main/java/org/example/MyAssetContract.java
class MyAssetContract (line 17) | @Contract(name = "MyAssetContract",
method MyAssetContract (line 29) | public MyAssetContract() {
method myAssetExists (line 32) | @Transaction()
method createMyAsset (line 38) | @Transaction()
method readMyAsset (line 49) | @Transaction()
method updateMyAsset (line 60) | @Transaction()
method deleteMyAsset (line 72) | @Transaction()
FILE: examples/fabric-contract-example-gradle/src/test/java/org/example/MyAssetContractTest.java
class MyAssetContractTest (line 23) | public final class MyAssetContractTest {
class AssetExists (line 25) | @Nested
method noProperAsset (line 27) | @Test
method assetExists (line 41) | @Test
method noKey (line 56) | @Test
class AssetCreates (line 72) | @Nested
method newAssetCreate (line 75) | @Test
method alreadyExists (line 89) | @Test
method assetRead (line 108) | @Test
class AssetUpdates (line 125) | @Nested
method updateExisting (line 127) | @Test
method updateMissing (line 141) | @Test
method assetDelete (line 159) | @Test
FILE: examples/fabric-contract-example-maven/src/main/java/org/example/MyAsset.java
class MyAsset (line 12) | @DataType()
method MyAsset (line 18) | public MyAsset(){
method getValue (line 21) | public String getValue() {
method setValue (line 25) | public void setValue(String value) {
method toJSONString (line 29) | public String toJSONString() {
method fromJSONString (line 33) | public static MyAsset fromJSONString(String json) {
FILE: examples/fabric-contract-example-maven/src/main/java/org/example/MyAssetContract.java
class MyAssetContract (line 17) | @Contract(name = "MyAssetContract",
method MyAssetContract (line 29) | public MyAssetContract() {
method myAssetExists (line 32) | @Transaction()
method createMyAsset (line 38) | @Transaction()
method readMyAsset (line 49) | @Transaction()
method updateMyAsset (line 60) | @Transaction()
method deleteMyAsset (line 72) | @Transaction()
FILE: examples/fabric-contract-example-maven/src/test/java/org/example/MyAssetContractTest.java
class MyAssetContractTest (line 23) | public final class MyAssetContractTest {
class AssetExists (line 25) | @Nested
method noProperAsset (line 27) | @Test
method assetExists (line 41) | @Test
method noKey (line 56) | @Test
class AssetCreates (line 72) | @Nested
method newAssetCreate (line 75) | @Test
method alreadyExists (line 89) | @Test
method assetRead (line 108) | @Test
class AssetUpdates (line 125) | @Nested
method updateExisting (line 127) | @Test
method updateMissing (line 141) | @Test
method assetDelete (line 159) | @Test
FILE: examples/ledger-api/src/main/java/org/example/LedgerAPIContract.java
class LedgerAPIContract (line 17) | @Contract(name = "LedgerAPI",
method LedgerAPIContract (line 30) | public LedgerAPIContract() {
method assetExistsInWorldState (line 38) | @Transaction()
method assetExistsInPrivateData (line 50) | @Transaction()
method assetExistsInOrganizationPrivateData (line 61) | @Transaction()
FILE: examples/ledger-api/src/main/java/org/example/MyAsset.java
class MyAsset (line 12) | @DataType()
method MyAsset (line 18) | public MyAsset(){
method getValue (line 21) | public String getValue() {
method setValue (line 25) | public void setValue(String value) {
method toJSONString (line 29) | public String toJSONString() {
method fromJSONString (line 33) | public static MyAsset fromJSONString(String json) {
FILE: fabric-chaincode-integration-test/src/contracts/bare-gradle/src/main/java/org/hyperledger/fabric/example/BareGradle.java
class BareGradle (line 15) | @Contract(name = "BareGradle",
method BareGradle (line 27) | public BareGradle() {
method whoami (line 31) | @Transaction()
FILE: fabric-chaincode-integration-test/src/contracts/bare-maven/src/main/java/org/hyperledger/fabric/example/BareMaven.java
class BareMaven (line 15) | @Contract(name = "BareMaven",
method BareMaven (line 27) | public BareMaven() {
method whoami (line 31) | @Transaction()
FILE: fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/src/main/java/org/hyperledger/fabric/example/AllLedgerAPI.java
class AllLedgerAPI (line 16) | @Contract(name = "AllLedgerAPI",
method AllLedgerAPI (line 29) | public AllLedgerAPI() {
method accessLedgers (line 33) | @Transaction()
FILE: fabric-chaincode-integration-test/src/contracts/fabric-shim-api/src/main/java/org/hyperledger/fabric/example/AllAPI.java
class AllAPI (line 20) | @Contract(name = "AllAPI",
method AllAPI (line 32) | public AllAPI() {
method putBulkStates (line 36) | @Transaction()
method putState (line 46) | @Transaction()
method putStateComposite (line 52) | @Transaction()
method getState (line 58) | @Transaction()
method getByRange (line 69) | @Transaction()
method getByRangePaged (line 85) | @Transaction()
method getMetricsProviderName (line 104) | @Transaction()
FILE: fabric-chaincode-integration-test/src/contracts/fabric-shim-api/src/main/java/org/hyperledger/fabric/example/EndorsementCC.java
class EndorsementCC (line 18) | @Contract()
method setup (line 23) | public void setup(Context ctx) {
method addorgs (line 29) | @Transaction()
method delorgs (line 55) | @Transaction()
method listorgs (line 84) | @Transaction()
method delEP (line 109) | @Transaction()
method setval (line 123) | @Transaction()
method getval (line 135) | @Transaction()
method deleteval (line 152) | @Transaction()
method recordExists (line 165) | @Transaction(intent = Transaction.TYPE.EVALUATE)
FILE: fabric-chaincode-integration-test/src/contracts/wrapper-maven/src/main/java/org/hyperledger/fabric/example/WrapperMaven.java
class WrapperMaven (line 15) | @Contract(name = "WrapperMaven",
method WrapperMaven (line 27) | public WrapperMaven() {
method whoami (line 31) | @Transaction()
FILE: fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/contractinstall/ContractInstallTest.java
class ContractInstallTest (line 17) | public class ContractInstallTest {
method setUp (line 19) | @BeforeAll
method testInstall (line 24) | @Test
FILE: fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/ledgertests/LedgerIntegrationTest.java
class LedgerIntegrationTest (line 17) | public class LedgerIntegrationTest {
method setUp (line 19) | @BeforeAll
method testLedgers (line 25) | @Test
FILE: fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/shimtests/SACCIntegrationTest.java
class SACCIntegrationTest (line 17) | public class SACCIntegrationTest {
method setUp (line 19) | @BeforeAll
method testLedger (line 24) | @Test
FILE: fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/shimtests/SBECCIntegrationTest.java
class SBECCIntegrationTest (line 17) | public class SBECCIntegrationTest {
method setUp (line 19) | @BeforeAll
method runSBE_pub_setget (line 24) | @Test
method runSBE_priv (line 87) | @Test
FILE: fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/Bash.java
class Bash (line 14) | public final class Bash extends Command {
method newBuilder (line 16) | public static BashBuilder newBuilder() {
class BashBuilder (line 20) | public static class BashBuilder extends Command.Builder<Bash> {
method duplicate (line 30) | public BashBuilder duplicate() {
method cmd (line 40) | public BashBuilder cmd(String cmd) {
method cmdargs (line 45) | public BashBuilder cmdargs(String argsArray[]) {
method build (line 50) | public Bash build(Map<String, String> additionalEnv) {
method build (line 58) | public Bash build() {
method Bash (line 68) | Bash(List<String> cmd) {
method Bash (line 72) | Bash(List<String> cmd, Map<String, String> env) {
FILE: fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/Command.java
class Command (line 23) | public class Command {
method Command (line 28) | Command(List<String> cmd, Map<String, String> additionalEnv) {
method Command (line 33) | Command(List<String> cmd) {
class Result (line 37) | public static final class Result {
method run (line 44) | public Result run() {
method run (line 53) | public Result run(boolean quiet) {
method readOutStream (line 99) | CompletableFuture<ArrayList<String>> readOutStream(InputStream is, Pri...
method toString (line 116) | public String toString() {
class Builder (line 120) | public static class Builder<T extends Command> implements Cloneable {
method duplicate (line 121) | @SuppressWarnings("unchecked")
FILE: fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/Docker.java
class Docker (line 12) | public final class Docker extends Command {
method newBuilder (line 14) | public static DockerBuilder newBuilder() {
class DockerBuilder (line 18) | public static final class DockerBuilder implements Cloneable {
method duplicate (line 24) | public DockerBuilder duplicate() {
method script (line 33) | public DockerBuilder script(String script) {
method channel (line 38) | public DockerBuilder channel(String channel) {
method container (line 43) | public DockerBuilder container(String container) {
method exec (line 48) | public DockerBuilder exec() {
method build (line 53) | public Docker build() {
method Docker (line 80) | Docker(List<String> cmd) {
FILE: fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/DockerCompose.java
class DockerCompose (line 12) | public final class DockerCompose extends Command {
method newBuilder (line 14) | public static DockerComposeBuilder newBuilder() {
class DockerComposeBuilder (line 18) | public static final class DockerComposeBuilder extends Command.Builder...
method file (line 24) | public DockerComposeBuilder file(String composeFile) {
method duplicate (line 29) | public DockerComposeBuilder duplicate() {
method up (line 33) | public DockerComposeBuilder up() {
method detach (line 38) | public DockerComposeBuilder detach() {
method down (line 43) | public DockerComposeBuilder down() {
method build (line 48) | public DockerCompose build() {
method DockerCompose (line 65) | DockerCompose(List<String> cmd) {
FILE: fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/FabricState.java
class FabricState (line 14) | public final class FabricState {
method getState (line 20) | public static FabricState getState() {
method start (line 24) | public synchronized void start() {
method orgEnv (line 35) | public Map<String, String> orgEnv(String org) {
FILE: fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/InvokeHelper.java
class InvokeHelper (line 9) | public class InvokeHelper {
method newHelper (line 14) | public static InvokeHelper newHelper(String ccname, String channel) {
method invoke (line 24) | public String invoke(String org, String... args) {
FILE: fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/Peer.java
class Peer (line 16) | public final class Peer extends Command {
method newBuilder (line 18) | public static PeerBuilder newBuilder() {
class PeerBuilder (line 22) | public static final class PeerBuilder extends Command.Builder<Peer> {
method duplicate (line 32) | public PeerBuilder duplicate() {
method tlsArgs (line 42) | public PeerBuilder tlsArgs(String tlsArgs) {
method orderer (line 47) | public PeerBuilder orderer(String orderer) {
method channel (line 52) | public PeerBuilder channel(String channel) {
method ccname (line 57) | public PeerBuilder ccname(String ccname) {
method evaluate (line 62) | public PeerBuilder evaluate() {
method invoke (line 67) | public PeerBuilder invoke() {
method argsTx (line 72) | public PeerBuilder argsTx(List<String> args) {
method argsTx (line 77) | public PeerBuilder argsTx(String[] argsArray) {
method transientData (line 82) | public PeerBuilder transientData(Map<String, String> transientData) {
method waitForEvent (line 87) | public PeerBuilder waitForEvent(int seconds) {
method waitForEvent (line 92) | public PeerBuilder waitForEvent() {
method transientToString (line 97) | private String transientToString() {
method argsToString (line 102) | private String argsToString() {
method build (line 109) | public Peer build(Map<String, String> additionalEnv) {
method Peer (line 160) | Peer(List<String> cmd, Map<String, String> additionalEnv) {
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/Logger.java
class Logger (line 15) | public class Logger extends java.util.logging.Logger {
method Logger (line 24) | protected Logger(final String name) {
method getLogger (line 32) | public static Logger getLogger(final String name) {
method debug (line 39) | public void debug(final Supplier<String> msgSupplier) {
method debug (line 44) | public void debug(final String msg) {
method getLogger (line 52) | public static Logger getLogger(final Class<?> class1) {
method error (line 60) | public void error(final String message) {
method error (line 65) | public void error(final Supplier<String> msgSupplier) {
method formatError (line 73) | public String formatError(final Throwable throwable) {
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/Logging.java
class Logging (line 28) | public final class Logging {
method Logging (line 34) | private Logging() {}
method formatError (line 42) | public static String formatError(final Throwable throwable) {
method setLogLevel (line 65) | public static void setLogLevel(final String newLevel) {
method mapLevel (line 83) | private static Level mapLevel(final String level) {
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/ClientIdentity.java
class ClientIdentity (line 32) | public final class ClientIdentity {
method ClientIdentity (line 50) | public ClientIdentity(final ChaincodeStub stub) throws CertificateExce...
method getId (line 81) | public String getId() {
method getMSPID (line 90) | public String getMSPID() {
method parseAttributes (line 102) | private Map<String, String> parseAttributes(final byte[] extensionValu...
method getAttributeValue (line 145) | public String getAttributeValue(final String attrName) {
method assertAttributeValue (line 159) | public boolean assertAttributeValue(final String attrName, final Strin...
method getX509Certificate (line 170) | public X509Certificate getX509Certificate() {
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/Context.java
class Context (line 31) | public class Context {
method Context (line 43) | public Context(final ChaincodeStub stub) {
method getStub (line 53) | public ChaincodeStub getStub() {
method getClientIdentity (line 58) | public ClientIdentity getClientIdentity() {
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/ContextFactory.java
class ContextFactory (line 12) | public final class ContextFactory {
method getInstance (line 16) | public static ContextFactory getInstance() {
method createContext (line 24) | public Context createContext(final ChaincodeStub stub) {
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/ContractInterface.java
type ContractInterface (line 44) | public interface ContractInterface {
method createContext (line 54) | default Context createContext(final ChaincodeStub stub) {
method unknownTransaction (line 66) | default void unknownTransaction(final Context ctx) {
method beforeTransaction (line 78) | default void beforeTransaction(final Context ctx) {
method afterTransaction (line 91) | default void afterTransaction(final Context ctx, final Object result) {
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/ContractRouter.java
class ContractRouter (line 37) | public final class ContractRouter extends ChaincodeBase {
method ContractRouter (line 55) | public ContractRouter(final String[] args) {
method findAllContracts (line 84) | void findAllContracts() {
method startRouting (line 95) | @SuppressWarnings("PMD.AvoidCatchingGenericException")
method processRequest (line 105) | @SuppressWarnings("PMD.AvoidCatchingGenericException")
method invoke (line 123) | @Override
method init (line 128) | @Override
method getRouting (line 139) | TxFunction getRouting(final InvocationRequest request) {
method main (line 155) | @SuppressWarnings("PMD.SignatureDeclareThrowsException")
method getTypeRegistry (line 179) | TypeRegistry getTypeRegistry() {
method getRoutingRegistry (line 183) | RoutingRegistry getRoutingRegistry() {
method startRouterWithChaincodeServer (line 192) | public void startRouterWithChaincodeServer(final ChaincodeServer chain...
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/ContractRuntimeException.java
class ContractRuntimeException (line 16) | public class ContractRuntimeException extends ChaincodeException {
method ContractRuntimeException (line 21) | public ContractRuntimeException(final String string) {
method ContractRuntimeException (line 29) | public ContractRuntimeException(final String string, final Throwable c...
method ContractRuntimeException (line 34) | public ContractRuntimeException(final Throwable cause) {
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/annotation/Serializer.java
type TARGET (line 24) | enum TARGET {
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/annotation/Transaction.java
type TYPE (line 31) | enum TYPE {
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/execution/ExecutionFactory.java
class ExecutionFactory (line 14) | public class ExecutionFactory {
method getInstance (line 18) | public static ExecutionFactory getInstance() {
method createRequest (line 26) | public InvocationRequest createRequest(final ChaincodeStub context) {
method createExecutionService (line 34) | public ExecutionService createExecutionService(final SerializerRegistr...
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/execution/ExecutionService.java
type ExecutionService (line 18) | @FunctionalInterface
method executeRequest (line 27) | Chaincode.Response executeRequest(TxFunction txFn, InvocationRequest r...
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/execution/InvocationRequest.java
type InvocationRequest (line 16) | public interface InvocationRequest {
method getNamespace (line 21) | String getNamespace();
method getMethod (line 24) | String getMethod();
method getArgs (line 27) | List<byte[]> getArgs();
method getRequestName (line 30) | String getRequestName();
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/execution/JSONTransactionSerializer.java
class JSONTransactionSerializer (line 28) | @Serializer()
method toBuffer (line 46) | @Override
method normalizeArray (line 109) | @SuppressWarnings("PMD.AvoidInstantiatingObjectsInLoops")
method fromBuffer (line 153) | @Override
method mapPrimitive (line 172) | private Class<?> mapPrimitive(final Class<?> primitive) {
method mapArrayPrimitive (line 180) | private Class<?> mapArrayPrimitive(final Class<?> primitive) {
method mapBasicPrimitive (line 203) | private Class<?> mapBasicPrimitive(final Class<?> primitive) {
method convert (line 227) | private Object convert(final String stringData, final TypeSchema ts)
method convertArray (line 258) | private Object convertArray(final String stringData, final TypeSchema ts)
method convertNumber (line 274) | private Object convertNumber(final String stringData, final TypeSchema...
method convertInteger (line 282) | private Object convertInteger(final String stringData, final TypeSchem...
method convertString (line 297) | private Object convertString(final String stringData, final TypeSchema...
method createComponentInstance (line 313) | @SuppressWarnings("PMD.AvoidAccessibilityAlteration")
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/execution/SerializerInterface.java
type SerializerInterface (line 20) | public interface SerializerInterface {
method toBuffer (line 29) | byte[] toBuffer(Object value, TypeSchema ts);
method fromBuffer (line 38) | Object fromBuffer(byte[] buffer, TypeSchema ts);
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/execution/impl/ContractExecutionService.java
class ContractExecutionService (line 29) | public class ContractExecutionService implements ExecutionService {
method ContractExecutionService (line 36) | public ContractExecutionService(final SerializerRegistryImpl serialize...
method executeRequest (line 41) | @Override
method convertReturn (line 81) | private byte[] convertReturn(final Object obj, final TxFunction txFn) {
method convertArgs (line 88) | private List<Object> convertArgs(final List<byte[]> stubArgs, final Tx...
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/execution/impl/ContractInvocationRequest.java
class ContractInvocationRequest (line 17) | public final class ContractInvocationRequest implements InvocationRequest {
method ContractInvocationRequest (line 28) | @SuppressWarnings("PMD.AvoidLiteralsInIfCondition")
method getNamespace (line 54) | @Override
method getMethod (line 60) | @Override
method getArgs (line 66) | @Override
method getRequestName (line 72) | @Override
method toString (line 78) | @Override
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/metadata/MetadataBuilder.java
class MetadataBuilder (line 44) | @SuppressWarnings("PMD.AvoidDuplicateLiterals")
class MetadataMap (line 59) | static final class MetadataMap<K, V> extends HashMap<K, V> {
method putIfNotNull (line 62) | V putIfNotNull(final K key, final V value) {
method MetadataBuilder (line 72) | private MetadataBuilder() {}
method validate (line 79) | public static void validate() {
method initialize (line 112) | public static void initialize(final RoutingRegistry registry, final Ty...
method addComponent (line 131) | public static void addComponent(final DataTypeDefinition datatype) {
method addContract (line 152) | @SuppressWarnings("PMD.LooseCoupling")
method addTransaction (line 198) | public static void addTransaction(final TxFunction txFunction, final S...
method getMetadata (line 238) | public static String getMetadata() {
method debugString (line 247) | public static String debugString() {
method metadata (line 256) | private static JSONObject metadata() {
method getComponents (line 268) | public static Map<?, ?> getComponents() {
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/metadata/TypeSchema.java
class TypeSchema (line 28) | @SuppressWarnings("PMD.GodClass")
method putInternal (line 39) | private Object putInternal(final String key, final Object value) {
method putIfNotNull (line 47) | String putIfNotNull(final String key, final String value) {
method putIfNotNull (line 51) | String[] putIfNotNull(final String key, final String[] value) {
method putIfNotNull (line 55) | TypeSchema putIfNotNull(final String key, final TypeSchema value) {
method putIfNotNull (line 59) | TypeSchema[] putIfNotNull(final String key, final TypeSchema[] value) {
method getType (line 64) | public String getType() {
method getItems (line 73) | public TypeSchema getItems() {
method getRef (line 82) | public String getRef() {
method getFormat (line 91) | public String getFormat() {
method getTypeClass (line 103) | public Class<?> getTypeClass(final TypeRegistry typeRegistry) {
method getArrayClass (line 124) | private Class<?> getArrayClass(final TypeRegistry typeRegistry) {
method getNumberClass (line 130) | private Class<?> getNumberClass() {
method getIntegerClass (line 141) | private Class<?> getIntegerClass() {
method getStringClass (line 157) | @SuppressWarnings("PMD.AvoidLiteralsInIfCondition")
method getObjectClass (line 165) | private Class<?> getObjectClass(final TypeRegistry typeRegistry) {
method typeConvert (line 177) | @SuppressWarnings({"PMD.ReturnEmptyCollectionRatherThanNull", "PMD.Avo...
method updateSchemaForClass (line 209) | @SuppressWarnings("PMD.CyclomaticComplexity")
method validate (line 264) | public void validate(final JSONObject obj) {
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/ContractDefinition.java
type ContractDefinition (line 26) | public interface ContractDefinition {
method getName (line 29) | String getName();
method getTxFunctions (line 32) | Collection<TxFunction> getTxFunctions();
method getContractImpl (line 35) | Class<? extends ContractInterface> getContractImpl();
method addTxFunction (line 41) | TxFunction addTxFunction(Method m);
method isDefault (line 44) | boolean isDefault();
method getTxFunction (line 50) | TxFunction getTxFunction(String method);
method hasTxFunction (line 56) | boolean hasTxFunction(String method);
method getUnknownRoute (line 59) | TxFunction getUnknownRoute();
method getAnnotation (line 62) | Contract getAnnotation();
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/DataTypeDefinition.java
type DataTypeDefinition (line 11) | public interface DataTypeDefinition {
method getName (line 14) | String getName();
method getProperties (line 17) | Map<String, PropertyDefinition> getProperties();
method getSimpleName (line 20) | String getSimpleName();
method getTypeClass (line 23) | Class<?> getTypeClass();
method getSchema (line 26) | TypeSchema getSchema();
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/ParameterDefinition.java
type ParameterDefinition (line 11) | public interface ParameterDefinition {
method getTypeClass (line 14) | Class<?> getTypeClass();
method getSchema (line 17) | TypeSchema getSchema();
method getParameter (line 20) | Parameter getParameter();
method getName (line 23) | String getName();
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/PropertyDefinition.java
type PropertyDefinition (line 11) | public interface PropertyDefinition {
method getTypeClass (line 14) | Class<?> getTypeClass();
method getSchema (line 17) | TypeSchema getSchema();
method getField (line 20) | Field getField();
method getName (line 23) | String getName();
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/RoutingRegistry.java
type RoutingRegistry (line 12) | public interface RoutingRegistry {
method addNewContract (line 20) | ContractDefinition addNewContract(Class<ContractInterface> clz);
method containsRoute (line 28) | boolean containsRoute(InvocationRequest request);
method getRoute (line 36) | TxFunction.Routing getRoute(InvocationRequest request);
method getTxFn (line 44) | TxFunction getTxFn(InvocationRequest request);
method getContract (line 52) | ContractDefinition getContract(String name);
method getAllDefinitions (line 59) | Collection<ContractDefinition> getAllDefinitions();
method findAndSetContracts (line 66) | void findAndSetContracts(TypeRegistry typeRegistry);
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/TransactionType.java
type TransactionType (line 8) | public enum TransactionType {
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/TxFunction.java
type TxFunction (line 14) | public interface TxFunction {
type Routing (line 16) | interface Routing {
method getMethod (line 22) | Method getMethod();
method getContractClass (line 29) | Class<? extends ContractInterface> getContractClass();
method getContractInstance (line 40) | ContractInterface getContractInstance()
method getSerializerName (line 48) | String getSerializerName();
method isUnknownTx (line 52) | boolean isUnknownTx();
method setUnknownTx (line 55) | void setUnknownTx(boolean unknown);
method getName (line 58) | String getName();
method getRouting (line 61) | Routing getRouting();
method getReturnType (line 64) | Class<?> getReturnType();
method getParameters (line 67) | java.lang.reflect.Parameter[] getParameters();
method getType (line 70) | TransactionType getType();
method setReturnSchema (line 73) | void setReturnSchema(TypeSchema returnSchema);
method getReturnSchema (line 76) | TypeSchema getReturnSchema();
method setParameterDefinitions (line 79) | void setParameterDefinitions(List<ParameterDefinition> list);
method getParamsList (line 82) | List<ParameterDefinition> getParamsList();
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/TypeRegistry.java
type TypeRegistry (line 12) | public interface TypeRegistry {
method getRegistry (line 15) | static TypeRegistry getRegistry() {
method addDataType (line 20) | void addDataType(DataTypeDefinition dtd);
method addDataType (line 23) | void addDataType(Class<?> cl);
method getDataType (line 29) | DataTypeDefinition getDataType(String name);
method getDataType (line 35) | DataTypeDefinition getDataType(TypeSchema schema);
method getAllDataTypes (line 38) | Collection<DataTypeDefinition> getAllDataTypes();
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/impl/ContractDefinitionImpl.java
class ContractDefinitionImpl (line 26) | public final class ContractDefinitionImpl implements ContractDefinition {
method ContractDefinitionImpl (line 37) | public ContractDefinitionImpl(final Class<? extends ContractInterface>...
method getName (line 69) | @Override
method getTxFunctions (line 74) | @Override
method getContractImpl (line 79) | @Override
method addTxFunction (line 84) | @Override
method isDefault (line 98) | @Override
method getTxFunction (line 103) | @Override
method hasTxFunction (line 108) | @Override
method getUnknownRoute (line 113) | @Override
method getAnnotation (line 118) | @Override
method toString (line 123) | @Override
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/impl/DataTypeDefinitionImpl.java
class DataTypeDefinitionImpl (line 18) | public final class DataTypeDefinitionImpl implements DataTypeDefinition {
method DataTypeDefinitionImpl (line 26) | @SuppressWarnings("PMD.AvoidInstantiatingObjectsInLoops")
method getTypeClass (line 71) | @Override
method getSchema (line 76) | @Override
method getName (line 86) | @Override
method getProperties (line 97) | @Override
method getSimpleName (line 108) | @Override
method toString (line 113) | @Override
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/impl/ParameterDefinitionImpl.java
class ParameterDefinitionImpl (line 13) | public final class ParameterDefinitionImpl implements ParameterDefinition {
method ParameterDefinitionImpl (line 26) | public ParameterDefinitionImpl(
method getTypeClass (line 34) | @Override
method getSchema (line 39) | @Override
method getParameter (line 44) | @Override
method getName (line 49) | @Override
method toString (line 54) | @Override
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/impl/PropertyDefinitionImpl.java
class PropertyDefinitionImpl (line 13) | public final class PropertyDefinitionImpl implements PropertyDefinition {
method PropertyDefinitionImpl (line 26) | public PropertyDefinitionImpl(final String name, final Class<?> typeCl...
method getTypeClass (line 33) | @Override
method getSchema (line 38) | @Override
method getField (line 43) | @Override
method getName (line 48) | @Override
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/impl/RoutingRegistryImpl.java
class RoutingRegistryImpl (line 38) | public final class RoutingRegistryImpl implements RoutingRegistry {
method addNewContract (line 50) | @Override
method containsRoute (line 73) | @Override
method getRoute (line 91) | @Override
method getTxFn (line 97) | @Override
method getContract (line 109) | @Override
method getAllDefinitions (line 126) | @Override
method findAndSetContracts (line 137) | @Override
method addContracts (line 195) | private void addContracts(final List<Class<ContractInterface>> contrac...
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/impl/SerializerRegistryImpl.java
class SerializerRegistryImpl (line 25) | public class SerializerRegistryImpl {
method getSerializer (line 40) | public SerializerInterface getSerializer(final String name, final Seri...
method add (line 45) | private void add(final String name, final Serializer.TARGET target, fi...
method findAndSetContents (line 68) | public void findAndSetContents() throws InstantiationException, Illega...
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/impl/TxFunctionImpl.java
class TxFunctionImpl (line 26) | public final class TxFunctionImpl implements TxFunction {
class RoutingImpl (line 37) | public static final class RoutingImpl implements Routing {
method RoutingImpl (line 47) | public RoutingImpl(final Method method, final ContractDefinition con...
method getMethod (line 53) | @Override
method getContractClass (line 58) | @Override
method getContractInstance (line 63) | @Override
method toString (line 70) | @Override
method getSerializerName (line 75) | @Override
method TxFunctionImpl (line 87) | public TxFunctionImpl(final Method m, final ContractDefinition contrac...
method buildParameters (line 119) | private List<ParameterDefinition> buildParameters(final Method m) {
method newParameterDefinition (line 141) | private static ParameterDefinitionImpl newParameterDefinition(final Pa...
method getName (line 158) | @Override
method getRouting (line 163) | @Override
method getReturnType (line 168) | @Override
method getParameters (line 173) | @Override
method getType (line 178) | @Override
method toString (line 183) | @Override
method setReturnSchema (line 188) | @Override
method getParamsList (line 193) | @Override
method setParamsList (line 199) | public void setParamsList(final List<ParameterDefinition> paramsList) {
method getReturnSchema (line 203) | @Override
method setParameterDefinitions (line 208) | @Override
method isUnknownTx (line 213) | @Override
method setUnknownTx (line 218) | @Override
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/impl/TypeRegistryImpl.java
class TypeRegistryImpl (line 16) | public final class TypeRegistryImpl implements TypeRegistry {
method getInstance (line 26) | public static TypeRegistry getInstance() {
method addDataType (line 37) | @Override
method getAllDataTypes (line 48) | @Override
method addDataType (line 53) | @Override
method getDataType (line 58) | @Override
method getDataType (line 63) | @Override
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/systemcontract/SystemContract.java
class SystemContract (line 16) | @Contract(
method getMetadata (line 28) | @Transaction(intent = Transaction.TYPE.EVALUATE, name = "GetMetadata")
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/ledger/Collection.java
type Collection (line 9) | @SuppressWarnings("PMD.ImplicitFunctionalInterface")
method placeholder (line 19) | void placeholder();
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/ledger/Ledger.java
type Ledger (line 20) | public interface Ledger {
method getLedger (line 33) | static Ledger getLedger(final Context ctx) {
method getCollection (line 47) | Collection getCollection(String name);
method getDefaultCollection (line 56) | Collection getDefaultCollection();
method getOrganizationCollection (line 68) | Collection getOrganizationCollection(String mspid);
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/ledger/impl/LedgerImpl.java
class LedgerImpl (line 12) | public final class LedgerImpl implements Ledger {
method LedgerImpl (line 19) | public LedgerImpl(final Context ctx) {
method getCollection (line 23) | @Override
method getDefaultCollection (line 33) | @Override
method getOrganizationCollection (line 38) | @Override
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/metrics/Metrics.java
class Metrics (line 19) | public final class Metrics {
method Metrics (line 28) | private Metrics() {}
method initialize (line 34) | @SuppressWarnings("PMD.AvoidCatchingGenericException")
method getProvider (line 63) | public static MetricsProvider getProvider() {
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/metrics/MetricsProvider.java
type MetricsProvider (line 24) | public interface MetricsProvider {
method initialize (line 31) | default void initialize(final Properties props) {
method setTaskMetricsCollector (line 41) | default void setTaskMetricsCollector(final TaskMetricsCollector taskSe...
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/metrics/TaskMetricsCollector.java
type TaskMetricsCollector (line 15) | public interface TaskMetricsCollector {
method getCurrentTaskCount (line 22) | int getCurrentTaskCount();
method getCurrentQueueCount (line 29) | int getCurrentQueueCount();
method getActiveCount (line 36) | int getActiveCount();
method getPoolSize (line 43) | int getPoolSize();
method getCorePoolSize (line 50) | int getCorePoolSize();
method getLargestPoolSize (line 57) | int getLargestPoolSize();
method getMaximumPoolSize (line 64) | int getMaximumPoolSize();
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/metrics/impl/DefaultProvider.java
class DefaultProvider (line 17) | public final class DefaultProvider implements MetricsProvider {
method DefaultProvider (line 24) | public DefaultProvider() {
method setTaskMetricsCollector (line 28) | @Override
method initialize (line 33) | @Override
method logMetrics (line 47) | void logMetrics() {
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/metrics/impl/NullProvider.java
class NullProvider (line 11) | public class NullProvider implements MetricsProvider {}
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/Chaincode.java
type Chaincode (line 15) | public interface Chaincode {
method init (line 23) | Response init(ChaincodeStub stub);
method invoke (line 31) | Response invoke(ChaincodeStub stub);
class Response (line 37) | class Response {
method Response (line 49) | @SuppressWarnings("PMD.ArrayIsStoredDirectly")
method Response (line 63) | @SuppressWarnings("PMD.ArrayIsStoredDirectly")
method getStatus (line 75) | public Status getStatus() {
method getStatusCode (line 88) | public int getStatusCode() {
method getMessage (line 97) | public String getMessage() {
method getPayload (line 106) | @SuppressWarnings("PMD.MethodReturnsInternalArray")
method getStringPayload (line 116) | public String getStringPayload() {
type Status (line 121) | public enum Status {
method Status (line 132) | Status(final int code) {
method getCode (line 141) | public int getCode() {
method forCode (line 151) | public static Status forCode(final int code) {
method hasStatusForCode (line 165) | public static boolean hasStatusForCode(final int code) {
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ChaincodeBase.java
class ChaincodeBase (line 59) | @SuppressWarnings({"PMD.CyclomaticComplexity", "PMD.GodClass"})
method init (line 112) | @Override
method invoke (line 115) | @Override
method getMaxInboundMessageSize (line 118) | private int getMaxInboundMessageSize() {
method start (line 135) | @SuppressWarnings("PMD.AvoidCatchingGenericException")
method connectToPeer (line 152) | protected final void connectToPeer() throws IOException {
method connectToPeer (line 228) | protected StreamObserver<ChaincodeMessage> connectToPeer(final StreamO...
method initializeLogging (line 274) | protected final void initializeLogging() {
method mapLevel (line 312) | private Level mapLevel(final String level) {
method parseHostPort (line 335) | private SocketAddress parseHostPort(final String hostAddrStr) throws U...
method isServer (line 355) | public boolean isServer() {
method validateOptions (line 360) | @SuppressWarnings("PMD.CyclomaticComplexity")
method processCommandLineOptions (line 383) | @SuppressWarnings({
method processEnvironmentOptions (line 427) | @SuppressWarnings("PMD.AvoidLiteralsInIfCondition")
method getChaincodeConfig (line 486) | public Properties getChaincodeConfig() {
method getChaincodeServerConfig (line 518) | public final ChaincodeServerProperties getChaincodeServerConfig() thro...
method newChannelBuilder (line 539) | @SuppressWarnings("deprecation")
method createSSLContext (line 563) | final SslContext createSSLContext() throws IOException {
method newSuccessResponse (line 575) | @Deprecated
method newSuccessResponse (line 580) | @Deprecated
method newSuccessResponse (line 585) | @Deprecated
method newSuccessResponse (line 590) | @Deprecated
method newErrorResponse (line 595) | @Deprecated
method newErrorResponse (line 600) | @Deprecated
method newErrorResponse (line 605) | @Deprecated
method newErrorResponse (line 610) | @Deprecated
method newErrorResponse (line 615) | @Deprecated
method getHost (line 620) | final String getHost() {
method getPort (line 624) | final int getPort() {
method isTlsEnabled (line 628) | final boolean isTlsEnabled() {
method getTlsClientKeyPath (line 632) | final String getTlsClientKeyPath() {
method getTlsClientCertPath (line 636) | final String getTlsClientCertPath() {
method getTlsClientRootCertPath (line 640) | final String getTlsClientRootCertPath() {
method getId (line 649) | String getId() {
type CCState (line 654) | public enum CCState {
method getState (line 664) | public final CCState getState() {
method setState (line 669) | public final void setState(final CCState newState) {
method toJsonString (line 679) | public static String toJsonString(final ChaincodeMessage message) {
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ChaincodeException.java
class ChaincodeException (line 20) | public class ChaincodeException extends RuntimeException {
method ChaincodeException (line 27) | public ChaincodeException() {
method ChaincodeException (line 36) | public ChaincodeException(final String message) {
method ChaincodeException (line 45) | public ChaincodeException(final Throwable cause) {
method ChaincodeException (line 55) | public ChaincodeException(final String message, final Throwable cause) {
method ChaincodeException (line 65) | @SuppressWarnings("PMD.ArrayIsStoredDirectly")
method ChaincodeException (line 79) | @SuppressWarnings("PMD.ArrayIsStoredDirectly")
method ChaincodeException (line 92) | public ChaincodeException(final String message, final String payload) {
method ChaincodeException (line 105) | public ChaincodeException(final String message, final String payload, ...
method getPayload (line 120) | @SuppressWarnings("PMD.MethodReturnsInternalArray")
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ChaincodeServer.java
type ChaincodeServer (line 12) | public interface ChaincodeServer {
method start (line 20) | void start() throws IOException, InterruptedException;
method stop (line 23) | void stop();
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ChaincodeServerProperties.java
class ChaincodeServerProperties (line 10) | public final class ChaincodeServerProperties {
method ChaincodeServerProperties (line 26) | public ChaincodeServerProperties() {
method ChaincodeServerProperties (line 44) | @SuppressWarnings({"PMD.NullAssignment"})
method getMaxInboundMetadataSize (line 70) | public int getMaxInboundMetadataSize() {
method setMaxInboundMetadataSize (line 79) | public void setMaxInboundMetadataSize(final int maxInboundMetadataSize) {
method getMaxInboundMessageSize (line 88) | public int getMaxInboundMessageSize() {
method setMaxInboundMessageSize (line 97) | public void setMaxInboundMessageSize(final int maxInboundMessageSize) {
method getMaxConnectionAgeSeconds (line 106) | public int getMaxConnectionAgeSeconds() {
method setMaxConnectionAgeSeconds (line 115) | public void setMaxConnectionAgeSeconds(final int maxConnectionAgeSecon...
method getKeepAliveTimeoutSeconds (line 124) | public int getKeepAliveTimeoutSeconds() {
method setKeepAliveTimeoutSeconds (line 133) | public void setKeepAliveTimeoutSeconds(final int keepAliveTimeoutSecon...
method getPermitKeepAliveTimeMinutes (line 142) | public int getPermitKeepAliveTimeMinutes() {
method setPermitKeepAliveTimeMinutes (line 151) | public void setPermitKeepAliveTimeMinutes(final int permitKeepAliveTim...
method getKeepAliveTimeMinutes (line 160) | public int getKeepAliveTimeMinutes() {
method setKeepAliveTimeMinutes (line 169) | public void setKeepAliveTimeMinutes(final int keepAliveTimeMinutes) {
method getPermitKeepAliveWithoutCalls (line 179) | @SuppressWarnings("PMD.BooleanGetMethodName")
method getServerAddress (line 189) | public SocketAddress getServerAddress() {
method setServerAddress (line 198) | public void setServerAddress(final SocketAddress address) {
method isPermitKeepAliveWithoutCalls (line 208) | public boolean isPermitKeepAliveWithoutCalls() {
method setPermitKeepAliveWithoutCalls (line 218) | public void setPermitKeepAliveWithoutCalls(final boolean permitKeepAli...
method getKeyPassword (line 227) | public String getKeyPassword() {
method setKeyPassword (line 236) | public void setKeyPassword(final String keyPassword) {
method getKeyCertChainFile (line 245) | public String getKeyCertChainFile() {
method setKeyCertChainFile (line 254) | public void setKeyCertChainFile(final String keyCertChainFile) {
method getKeyFile (line 263) | public String getKeyFile() {
method setKeyFile (line 272) | public void setKeyFile(final String keyFile) {
method getTrustCertCollectionFile (line 281) | public String getTrustCertCollectionFile() {
method setTrustCertCollectionFile (line 290) | public void setTrustCertCollectionFile(final String trustCertCollectio...
method isTlsEnabled (line 299) | public boolean isTlsEnabled() {
method setTlsEnabled (line 308) | public void setTlsEnabled(final boolean tlsEnabled) {
method validate (line 317) | @SuppressWarnings("PMD.CyclomaticComplexity")
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ChaincodeStub.java
type ChaincodeStub (line 29) | @SuppressWarnings("PMD.ExcessivePublicCount")
method getArgs (line 38) | List<byte[]> getArgs();
method getStringArgs (line 46) | List<String> getStringArgs();
method getFunction (line 55) | String getFunction();
method getParameters (line 65) | List<String> getParameters();
method getTxId (line 74) | String getTxId();
method getChannelId (line 84) | String getChannelId();
method invokeChaincode (line 110) | Response invokeChaincode(String chaincodeName, List<byte[]> args, Stri...
method getState (line 121) | byte[] getState(String key);
method getStateValidationParameter (line 130) | byte[] getStateValidationParameter(String key);
method putState (line 143) | void putState(String key, byte[] value);
method setStateValidationParameter (line 151) | void setStateValidationParameter(String key, byte[] value);
method delState (line 161) | void delState(String key);
method getStateByRange (line 176) | QueryResultsIterator<KeyValue> getStateByRange(String startKey, String...
method getStateByRangeWithPagination (line 196) | QueryResultsIteratorWithMetadata<KeyValue> getStateByRangeWithPagination(
method getStateByPartialCompositeKey (line 212) | QueryResultsIterator<KeyValue> getStateByPartialCompositeKey(String co...
method getStateByPartialCompositeKey (line 229) | QueryResultsIterator<KeyValue> getStateByPartialCompositeKey(String ob...
method getStateByPartialCompositeKey (line 239) | QueryResultsIterator<KeyValue> getStateByPartialCompositeKey(Composite...
method getStateByPartialCompositeKeyWithPagination (line 263) | QueryResultsIteratorWithMetadata<KeyValue> getStateByPartialCompositeK...
method createCompositeKey (line 273) | CompositeKey createCompositeKey(String objectType, String... attributes);
method splitCompositeKey (line 281) | CompositeKey splitCompositeKey(String compositeKey);
method getQueryResult (line 294) | QueryResultsIterator<KeyValue> getQueryResult(String query);
method getQueryResultWithPagination (line 317) | QueryResultsIteratorWithMetadata<KeyValue> getQueryResultWithPagination(
method getHistoryForKey (line 330) | QueryResultsIterator<KeyModification> getHistoryForKey(String key);
method getPrivateData (line 343) | byte[] getPrivateData(String collection, String key);
method getPrivateDataHash (line 350) | byte[] getPrivateDataHash(String collection, String key);
method getPrivateDataValidationParameter (line 360) | byte[] getPrivateDataValidationParameter(String collection, String key);
method putPrivateData (line 376) | void putPrivateData(String collection, String key, byte[] value);
method setPrivateDataValidationParameter (line 385) | void setPrivateDataValidationParameter(String collection, String key, ...
method delPrivateData (line 398) | void delPrivateData(String collection, String key);
method purgePrivateData (line 414) | void purgePrivateData(String collection, String key);
method getPrivateDataByRange (line 429) | QueryResultsIterator<KeyValue> getPrivateDataByRange(String collection...
method getPrivateDataByPartialCompositeKey (line 447) | QueryResultsIterator<KeyValue> getPrivateDataByPartialCompositeKey(Str...
method getPrivateDataByPartialCompositeKey (line 462) | QueryResultsIterator<KeyValue> getPrivateDataByPartialCompositeKey(Str...
method getPrivateDataByPartialCompositeKey (line 482) | QueryResultsIterator<KeyValue> getPrivateDataByPartialCompositeKey(
method getPrivateDataQueryResult (line 501) | QueryResultsIterator<KeyValue> getPrivateDataQueryResult(String collec...
method setEvent (line 515) | void setEvent(String name, byte[] payload);
method invokeChaincode (line 526) | default Response invokeChaincode(final String chaincodeName, final Lis...
method invokeChaincodeWithStringArgs (line 541) | default Response invokeChaincodeWithStringArgs(
method invokeChaincodeWithStringArgs (line 557) | default Response invokeChaincodeWithStringArgs(final String chaincodeN...
method invokeChaincodeWithStringArgs (line 571) | default Response invokeChaincodeWithStringArgs(final String chaincodeN...
method getStringState (line 583) | default String getStringState(final String key) {
method putPrivateData (line 594) | default void putPrivateData(final String collection, final String key,...
method getPrivateDataUTF8 (line 606) | default String getPrivateDataUTF8(final String collection, final Strin...
method putStringState (line 616) | default void putStringState(final String key, final String value) {
method getEvent (line 626) | ChaincodeEvent getEvent();
method getSignedProposal (line 633) | SignedProposal getSignedProposal();
method getTxTimestamp (line 640) | Instant getTxTimestamp();
method getCreator (line 647) | byte[] getCreator();
method getTransient (line 654) | Map<String, byte[]> getTransient();
method getBinding (line 661) | byte[] getBinding();
method getMspId (line 668) | String getMspId();
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ChatChaincodeWithPeer.java
class ChatChaincodeWithPeer (line 15) | public class ChatChaincodeWithPeer extends ChaincodeGrpc.ChaincodeImplBa...
method ChatChaincodeWithPeer (line 20) | ChatChaincodeWithPeer(final ChaincodeBase chaincodeBase) throws IOExce...
method connect (line 37) | @Override
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/GrpcServer.java
type GrpcServer (line 12) | public interface GrpcServer {
method start (line 19) | void start() throws IOException;
method stop (line 22) | void stop();
method blockUntilShutdown (line 29) | void blockUntilShutdown() throws InterruptedException;
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/NettyChaincodeServer.java
class NettyChaincodeServer (line 11) | public class NettyChaincodeServer implements ChaincodeServer {
method NettyChaincodeServer (line 23) | public NettyChaincodeServer(
method start (line 36) | @Override
method stop (line 43) | @Override
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/NettyGrpcServer.java
class NettyGrpcServer (line 24) | public final class NettyGrpcServer implements GrpcServer {
method NettyGrpcServer (line 37) | public NettyGrpcServer(final ChaincodeBase chaincodeBase, final Chainc...
method configureTls (line 83) | private static void configureTls(
method start (line 121) | @SuppressWarnings("PMD.SystemPrintln")
method blockUntilShutdown (line 139) | @Override
method stop (line 146) | @Override
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ResponseUtils.java
class ResponseUtils (line 13) | public final class ResponseUtils {
method ResponseUtils (line 17) | private ResponseUtils() {}
method newSuccessResponse (line 24) | public static Chaincode.Response newSuccessResponse(final String messa...
method newSuccessResponse (line 29) | public static Chaincode.Response newSuccessResponse() {
method newSuccessResponse (line 37) | public static Chaincode.Response newSuccessResponse(final String messa...
method newSuccessResponse (line 45) | public static Chaincode.Response newSuccessResponse(final byte[] paylo...
method newErrorResponse (line 54) | public static Chaincode.Response newErrorResponse(final String message...
method newErrorResponse (line 59) | public static Chaincode.Response newErrorResponse() {
method newErrorResponse (line 67) | public static Chaincode.Response newErrorResponse(final String message) {
method newErrorResponse (line 75) | public static Chaincode.Response newErrorResponse(final byte[] payload) {
method newErrorResponse (line 83) | public static Chaincode.Response newErrorResponse(final Throwable thro...
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ext/sbe/StateBasedEndorsement.java
type StateBasedEndorsement (line 17) | public interface StateBasedEndorsement {
method policy (line 23) | byte[] policy();
method addOrgs (line 34) | void addOrgs(RoleType roleType, String... organizations);
method delOrgs (line 41) | void delOrgs(String... organizations);
method listOrgs (line 48) | List<String> listOrgs();
type RoleType (line 51) | @SuppressWarnings("PMD.FieldNamingConventions")
method RoleType (line 68) | RoleType(final String val) {
method getVal (line 73) | public String getVal() {
method forVal (line 81) | public static RoleType forVal(final String val) {
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ext/sbe/impl/StateBasedEndorsementFactory.java
class StateBasedEndorsementFactory (line 11) | public class StateBasedEndorsementFactory {
method getInstance (line 15) | public static StateBasedEndorsementFactory getInstance() {
method newStateBasedEndorsement (line 26) | public StateBasedEndorsement newStateBasedEndorsement(final byte[] ep) {
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ext/sbe/impl/StateBasedEndorsementImpl.java
class StateBasedEndorsementImpl (line 25) | public final class StateBasedEndorsementImpl implements StateBasedEndors...
method StateBasedEndorsementImpl (line 31) | StateBasedEndorsementImpl(final byte[] ep) {
method policy (line 46) | @Override
method addOrgs (line 52) | @Override
method delOrgs (line 65) | @Override
method listOrgs (line 72) | @Override
method setMSPIDsFromSP (line 79) | private void setMSPIDsFromSP(final SignaturePolicyEnvelope spe) {
method addOrg (line 85) | private void addOrg(final MSPPrincipal identity) {
method policyFromMSPIDs (line 95) | private SignaturePolicyEnvelope policyFromMSPIDs() {
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ext/sbe/impl/StateBasedEndorsementUtils.java
class StateBasedEndorsementUtils (line 19) | public final class StateBasedEndorsementUtils {
method StateBasedEndorsementUtils (line 21) | private StateBasedEndorsementUtils() {}
method signedBy (line 29) | static SignaturePolicy signedBy(final int index) {
method nOutOf (line 42) | static SignaturePolicy nOutOf(final int n, final List<SignaturePolicy>...
method signedByFabricEntity (line 56) | static SignaturePolicyEnvelope signedByFabricEntity(final String mspId...
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/impl/ChaincodeInvocationTask.java
class ChaincodeInvocationTask (line 31) | @SuppressWarnings("PMD.MoreThanOneLogger")
method ChaincodeInvocationTask (line 58) | public ChaincodeInvocationTask(
method call (line 73) | @Override
method getTxKey (line 152) | public String getTxKey() {
method equals (line 162) | @Override
method hashCode (line 172) | @Override
method postMessage (line 187) | public void postMessage(final ChaincodeMessage msg) throws Interrupted...
method invoke (line 206) | protected ByteString invoke(final ChaincodeMessage message) {
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/impl/ChaincodeMessageFactory.java
class ChaincodeMessageFactory (line 36) | public final class ChaincodeMessageFactory {
method ChaincodeMessageFactory (line 38) | private ChaincodeMessageFactory() {}
method newGetPrivateDataHashEventMessage (line 40) | static ChaincodeMessage newGetPrivateDataHashEventMessage(
method newGetStateEventMessage (line 53) | static ChaincodeMessage newGetStateEventMessage(
method newGetStateMetadataEventMessage (line 66) | static ChaincodeMessage newGetStateMetadataEventMessage(
method newPutStateEventMessage (line 79) | static ChaincodeMessage newPutStateEventMessage(
method newPutStateMetadataEventMessage (line 97) | static ChaincodeMessage newPutStateMetadataEventMessage(
method newDeleteStateEventMessage (line 119) | static ChaincodeMessage newDeleteStateEventMessage(
method newPurgeStateEventMessage (line 132) | static ChaincodeMessage newPurgeStateEventMessage(
method newErrorEventMessage (line 145) | static ChaincodeMessage newErrorEventMessage(final String channelId, f...
method newErrorEventMessage (line 149) | static ChaincodeMessage newErrorEventMessage(final String channelId, f...
method newErrorEventMessage (line 153) | static ChaincodeMessage newErrorEventMessage(
method newCompletedEventMessage (line 158) | static ChaincodeMessage newCompletedEventMessage(
method newInvokeChaincodeMessage (line 164) | static ChaincodeMessage newInvokeChaincodeMessage(
method newRegisterChaincodeMessage (line 169) | static ChaincodeMessage newRegisterChaincodeMessage(final ChaincodeID ...
method newEventMessage (line 176) | static ChaincodeMessage newEventMessage(
method newEventMessage (line 181) | static ChaincodeMessage newEventMessage(
method toProtoResponse (line 198) | private static Response toProtoResponse(final Chaincode.Response respo...
method printStackTrace (line 210) | private static String printStackTrace(final Throwable throwable) {
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/impl/ChaincodeSupportClient.java
class ChaincodeSupportClient (line 23) | public class ChaincodeSupportClient {
method ChaincodeSupportClient (line 30) | public ChaincodeSupportClient(final ManagedChannelBuilder<?> channelBu...
method shutdown (line 40) | public void shutdown(final InvocationTaskManager itm) {
method start (line 61) | public void start(final InvocationTaskManager itm, final StreamObserve...
method getStub (line 103) | public ChaincodeSupportStub getStub() {
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/impl/InvocationStubImpl.java
class InvocationStubImpl (line 62) | @SuppressWarnings({"PMD.CyclomaticComplexity", "PMD.GodClass"})
method InvocationStubImpl (line 105) | InvocationStubImpl(final ChaincodeMessage message, final ChaincodeInvo...
method isEmptyString (line 136) | private static boolean isEmptyString(final String str) {
method computeBinding (line 145) | private byte[] computeBinding(final ChannelHeader channelHeader, final...
method validateProposalType (line 157) | private void validateProposalType(final ChannelHeader channelHeader) {
method getArgs (line 168) | @Override
method getStringArgs (line 173) | @Override
method getFunction (line 178) | @Override
method getParameters (line 183) | @Override
method setEvent (line 188) | @Override
method getEvent (line 203) | @Override
method getChannelId (line 208) | @Override
method getTxId (line 213) | @Override
method getState (line 218) | @Override
method getStateValidationParameter (line 225) | @Override
method putState (line 251) | @Override
method setStateValidationParameter (line 258) | @Override
method delState (line 266) | @Override
method getStateByRange (line 272) | @Override
method executeGetStateByRange (line 288) | private QueryResultsIterator<KeyValue> executeGetStateByRange(
method getStateByRangeWithPagination (line 306) | @Override
method executeGetStateByRangeWithMetadata (line 330) | private QueryResultsIteratorWithMetadataImpl<KeyValue> executeGetState...
method getStateByPartialCompositeKey (line 350) | @Override
method getStateByPartialCompositeKey (line 364) | @Override
method getStateByPartialCompositeKey (line 370) | @Override
method getStateByPartialCompositeKeyWithPagination (line 384) | @Override
method createCompositeKey (line 405) | @Override
method splitCompositeKey (line 410) | @Override
method getQueryResult (line 415) | @Override
method getQueryResultWithPagination (line 431) | @Override
method getHistoryForKey (line 454) | @Override
method getPrivateData (line 474) | @Override
method getPrivateDataHash (line 482) | @Override
method getPrivateDataValidationParameter (line 498) | @Override
method putPrivateData (line 525) | @Override
method setPrivateDataValidationParameter (line 533) | @Override
method delPrivateData (line 547) | @Override
method purgePrivateData (line 555) | @Override
method getPrivateDataByRange (line 563) | @Override
method getPrivateDataByPartialCompositeKey (line 581) | @Override
method getPrivateDataByPartialCompositeKey (line 598) | @Override
method getPrivateDataByPartialCompositeKey (line 611) | @Override
method getPrivateDataQueryResult (line 617) | @Override
method invokeChaincode (line 633) | @Override
method getSignedProposal (line 683) | @Override
method getTxTimestamp (line 688) | @Override
method getCreator (line 693) | @Override
method getTransient (line 702) | @Override
method getBinding (line 708) | @Override
method validateKey (line 714) | private void validateKey(final String key) {
method validateCollection (line 721) | private void validateCollection(final String collection) {
method getMspId (line 728) | @Override
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/impl/InvocationTaskExecutor.java
class InvocationTaskExecutor (line 18) | public final class InvocationTaskExecutor extends ThreadPoolExecutor imp...
method InvocationTaskExecutor (line 32) | public InvocationTaskExecutor(
method beforeExecute (line 45) | @Override
method afterExecute (line 51) | @Override
method getCurrentTaskCount (line 57) | @Override
method getCurrentQueueCount (line 62) | @Override
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/impl/InvocationTaskManager.java
class InvocationTaskManager (line 39) | @SuppressWarnings("PMD.MoreThanOneLogger")
method newThread (line 72) | @Override
method getManager (line 98) | public static InvocationTaskManager getManager(final ChaincodeBase cha...
method InvocationTaskManager (line 108) | public InvocationTaskManager(final ChaincodeBase chaincode, final Chai...
method onChaincodeMessage (line 143) | @SuppressWarnings("PMD.AvoidCatchingGenericException")
method processChaincodeMessage (line 161) | private void processChaincodeMessage(final ChaincodeMessage chaincodeM...
method handleMsg (line 195) | private void handleMsg(final ChaincodeMessage message, final Type msgT...
method sendToTask (line 217) | private void sendToTask(final ChaincodeMessage message) {
method sendFailure (line 234) | private void sendFailure(final ChaincodeMessage message, final Interru...
method newTask (line 249) | private void newTask(final ChaincodeMessage message, final Type type) {
method setResponseConsumer (line 297) | public void setResponseConsumer(final Consumer<ChaincodeMessage> outgo...
method register (line 306) | public void register() {
method shutdown (line 317) | @SuppressWarnings("PMD.SystemPrintln")
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/impl/KeyModificationImpl.java
class KeyModificationImpl (line 12) | public final class KeyModificationImpl implements KeyModification {
method KeyModificationImpl (line 19) | KeyModificationImpl(final org.hyperledger.fabric.protos.ledger.queryre...
method getTxId (line 27) | @Override
method getValue (line 32) | @Override
method getStringValue (line 37) | @Override
method getTimestamp (line 42) | @Override
method isDeleted (line 47) | @Override
method hashCode (line 52) | @Override
method equals (line 62) | @Override
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/impl/KeyValueImpl.java
class KeyValueImpl (line 12) | class KeyValueImpl implements KeyValue {
method KeyValueImpl (line 17) | KeyValueImpl(final KV kv) {
method getKey (line 22) | @Override
method getValue (line 27) | @Override
method getStringValue (line 32) | @Override
method hashCode (line 37) | @Override
method equals (line 45) | @Override
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/impl/QueryResultsIteratorImpl.java
class QueryResultsIteratorImpl (line 36) | class QueryResultsIteratorImpl<T> implements QueryResultsIterator<T> {
method QueryResultsIteratorImpl (line 45) | QueryResultsIteratorImpl(
method iterator (line 64) | @Override
method close (line 109) | @Override
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/impl/QueryResultsIteratorWithMetadataImpl.java
class QueryResultsIteratorWithMetadataImpl (line 27) | public final class QueryResultsIteratorWithMetadataImpl<T> extends Query...
method QueryResultsIteratorWithMetadataImpl (line 40) | public QueryResultsIteratorWithMetadataImpl(
method getMetadata (line 56) | @Override
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ledger/CompositeKey.java
class CompositeKey (line 18) | public class CompositeKey {
method CompositeKey (line 36) | public CompositeKey(final String objectType, final String... attribute...
method CompositeKey (line 44) | public CompositeKey(final String objectType, final List<String> attrib...
method getObjectType (line 52) | public String getObjectType() {
method getAttributes (line 57) | public List<String> getAttributes() {
method toString (line 62) | @Override
method parseCompositeKey (line 71) | public static CompositeKey parseCompositeKey(final String compositeKey) {
method validateSimpleKeys (line 91) | public static void validateSimpleKeys(final String... keys) {
method generateCompositeKeyString (line 99) | private String generateCompositeKeyString(final String objectType, fin...
method validateCompositeKeySegment (line 114) | private void validateCompositeKeySegment(final String segment) {
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ledger/CompositeKeyFormatException.java
class CompositeKeyFormatException (line 9) | final class CompositeKeyFormatException extends IllegalArgumentException {
method CompositeKeyFormatException (line 12) | private CompositeKeyFormatException(final String s) {
method forInputString (line 16) | static CompositeKeyFormatException forInputString(final String s, fina...
method forSimpleKey (line 21) | static CompositeKeyFormatException forSimpleKey(final String key) {
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ledger/KeyModification.java
type KeyModification (line 13) | public interface KeyModification {
method getTxId (line 20) | String getTxId();
method getValue (line 27) | byte[] getValue();
method getStringValue (line 34) | String getStringValue();
method getTimestamp (line 41) | java.time.Instant getTimestamp();
method isDeleted (line 48) | boolean isDeleted();
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ledger/KeyValue.java
type KeyValue (line 10) | public interface KeyValue {
method getKey (line 17) | String getKey();
method getValue (line 24) | byte[] getValue();
method getStringValue (line 31) | String getStringValue();
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ledger/QueryResultsIterator.java
type QueryResultsIterator (line 15) | public interface QueryResultsIterator<T> extends Iterable<T>, AutoClosea...
method close (line 16) | @Override
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ledger/QueryResultsIteratorWithMetadata.java
type QueryResultsIteratorWithMetadata (line 18) | public interface QueryResultsIteratorWithMetadata<T> extends Iterable<T>...
method getMetadata (line 20) | QueryResponseMetadata getMetadata();
method close (line 22) | @Override
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/traces/Traces.java
class Traces (line 20) | public final class Traces {
method Traces (line 29) | private Traces() {}
method initialize (line 35) | @SuppressWarnings("PMD.AvoidCatchingGenericException")
method getProvider (line 64) | public static TracesProvider getProvider() {
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/traces/TracesProvider.java
type TracesProvider (line 27) | public interface TracesProvider {
method initialize (line 34) | default void initialize(final Properties props) {
method createSpan (line 44) | default Span createSpan(ChaincodeStub stub) {
method createInterceptor (line 54) | default ClientInterceptor createInterceptor() {
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/traces/impl/DefaultTracesProvider.java
class DefaultTracesProvider (line 10) | public final class DefaultTracesProvider implements TracesProvider {}
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/traces/impl/NullProvider.java
class NullProvider (line 10) | public final class NullProvider implements TracesProvider {}
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/traces/impl/OpenTelemetryProperties.java
class OpenTelemetryProperties (line 24) | final class OpenTelemetryProperties implements ConfigProperties {
method OpenTelemetryProperties (line 27) | @SafeVarargs
method getString (line 37) | @Override
method getBoolean (line 42) | @Override
method getInt (line 51) | @Override
method getLong (line 64) | @Override
method getDouble (line 77) | @Override
method getDuration (line 90) | @Override
method getList (line 112) | @Override
method getMap (line 121) | @Override
method newInvalidPropertyException (line 138) | private static ConfigurationException newInvalidPropertyException(
method filterBlanksAndNulls (line 146) | private static List<String> filterBlanksAndNulls(final String[] values) {
method getDurationUnit (line 156) | private static Optional<TimeUnit> getDurationUnit(final String unitStr...
method getUnitString (line 182) | private static String getUnitString(final String rawValue) {
FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/traces/impl/OpenTelemetryTracesProvider.java
class OpenTelemetryTracesProvider (line 23) | public final class OpenTelemetryTracesProvider implements TracesProvider {
method initialize (line 32) | @Override
method getOpenTelemetryProperties (line 46) | private Map<String, String> getOpenTelemetryProperties(final Propertie...
method createSpan (line 57) | @Override
method createInterceptor (line 68) | @Override
FILE: fabric-chaincode-shim/src/test/java/ChaincodeWithoutPackageTest.java
class ChaincodeWithoutPackageTest (line 21) | final class ChaincodeWithoutPackageTest {
method afterTest (line 24) | @AfterEach
method testRegisterChaincodeWithoutPackage (line 32) | @Test
FILE: fabric-chaincode-shim/src/test/java/EmptyChaincodeWithoutPackage.java
class EmptyChaincodeWithoutPackage (line 11) | public final class EmptyChaincodeWithoutPackage extends ChaincodeBase {
method init (line 12) | @Override
method invoke (line 17) | @Override
FILE: fabric-chaincode-shim/src/test/java/contract/Greeting.java
class Greeting (line 14) | @DataType()
method getText (line 23) | public String getText() {
method setText (line 27) | public void setText(final String text) {
method getTextLength (line 31) | public int getTextLength() {
method setTextLength (line 35) | public void setTextLength(final int textLength) {
method getWordCount (line 39) | public int getWordCount() {
method setWordCount (line 43) | public void setWordCount(final int wordCount) {
method Greeting (line 49) | public Greeting(final String text) {
method validate (line 55) | public static void validate(final Greeting greeting) {
method toJSONString (line 62) | public String toJSONString() {
FILE: fabric-chaincode-shim/src/test/java/contract/SampleContract.java
class SampleContract (line 19) | @Contract(
method getBeforeInvoked (line 30) | public static int getBeforeInvoked() {
method getAfterInvoked (line 34) | public static int getAfterInvoked() {
method getDoWorkInvoked (line 38) | public static int getDoWorkInvoked() {
method getT1Invoked (line 42) | public static int getT1Invoked() {
method getI1Invoked (line 46) | public static int getI1Invoked() {
method setBeforeInvoked (line 50) | public static void setBeforeInvoked(final int beforeInvoked) {
method setAfterInvoked (line 54) | public static void setAfterInvoked(final int afterInvoked) {
method setDoWorkInvoked (line 58) | public static void setDoWorkInvoked(final int doWorkInvoked) {
method setT1Invoked (line 62) | public static void setT1Invoked(final int t1Invoked) {
method setI1Invoked (line 66) | public static void setI1Invoked(final int i1Invoked) {
method t5 (line 80) | @Transaction
method tFour (line 91) | @Transaction(name = "t4")
method t3 (line 104) | @Transaction
method t2 (line 121) | @Transaction
method noReturn (line 129) | @Transaction
method t1 (line 139) | @Transaction
method beforeTransaction (line 150) | @Override
method afterTransaction (line 156) | @Override
method doSomeWork (line 161) | private void doSomeWork() {
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/LoggerTest.java
class LoggerTest (line 12) | class LoggerTest {
method logger (line 13) | @Test
method testContractException (line 19) | @Test
method testDebug (line 34) | @Test
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/LoggingTest.java
class LoggingTest (line 18) | final class LoggingTest {
method testMapLevel (line 19) | @Test
method proxyMapLevel (line 33) | private Object proxyMapLevel(final Object... args)
method testFormatError (line 40) | @Test
method testSetLogLevel (line 55) | @Test
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/TestUtil.java
class TestUtil (line 21) | public final class TestUtil {
method TestUtil (line 23) | private TestUtil() {}
method createCertWithIdentityAttributes (line 85) | public static String createCertWithIdentityAttributes(final String att...
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/contract/AllTypesAsset.java
class AllTypesAsset (line 11) | @DataType()
method getTheByte (line 45) | public byte getTheByte() {
method setTheByte (line 49) | public void setTheByte(final byte aByte) {
method getTheShort (line 53) | public short getTheShort() {
method setTheShort (line 57) | public void setTheShort(final short aShort) {
method getTheInt (line 61) | public int getTheInt() {
method setTheInt (line 65) | public void setTheInt(final int aInt) {
method getTheLong (line 69) | public long getTheLong() {
method setTheLong (line 73) | public void setTheLong(final long aLong) {
method getTheFloat (line 77) | public float getTheFloat() {
method setTheFloat (line 81) | public void setTheFloat(final float aFloat) {
method getTheDouble (line 85) | public double getTheDouble() {
method setTheDouble (line 89) | public void setTheDouble(final double aDouble) {
method isTheBoolean (line 93) | public boolean isTheBoolean() {
method setBoolean (line 97) | public void setBoolean(final boolean aBoolean) {
method getTheChar (line 101) | public char getTheChar() {
method setTheChar (line 105) | public void setTheChar(final char aChar) {
method getTheString (line 109) | public String getTheString() {
method setString (line 113) | public void setString(final String aString) {
method getTheCustomObject (line 117) | public MyType getTheCustomObject() {
method setTheCustomObject (line 121) | public void setTheCustomObject(final MyType customObject) {
method equals (line 125) | @Override
method toString (line 142) | @Override
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/contract/ChaincodeStubNaiveImpl.java
class ChaincodeStubNaiveImpl (line 29) | public final class ChaincodeStubNaiveImpl implements ChaincodeStub {
method ChaincodeStubNaiveImpl (line 36) | public ChaincodeStubNaiveImpl() {
method ChaincodeStubNaiveImpl (line 50) | ChaincodeStubNaiveImpl(final List<String> args) {
method getArgs (line 60) | @Override
method getStringArgs (line 70) | @Override
method getFunction (line 75) | @Override
method getParameters (line 80) | @Override
method getTxId (line 85) | @Override
method getChannelId (line 90) | @Override
method invokeChaincode (line 95) | @Override
method getState (line 101) | @Override
method getStateValidationParameter (line 106) | @Override
method putState (line 111) | @Override
method setStateValidationParameter (line 116) | @Override
method delState (line 119) | @Override
method getStateByRange (line 124) | @Override
method getStateByRangeWithPagination (line 129) | @Override
method getStateByPartialCompositeKey (line 135) | @Override
method getStateByPartialCompositeKey (line 140) | @Override
method getStateByPartialCompositeKey (line 146) | @Override
method getStateByPartialCompositeKeyWithPagination (line 151) | @Override
method createCompositeKey (line 157) | @Override
method splitCompositeKey (line 162) | @Override
method getQueryResult (line 167) | @Override
method getQueryResultWithPagination (line 172) | @Override
method getHistoryForKey (line 178) | @Override
method getPrivateData (line 183) | @Override
method getPrivateDataHash (line 188) | @Override
method getPrivateDataValidationParameter (line 193) | @Override
method putPrivateData (line 198) | @Override
method setPrivateDataValidationParameter (line 201) | @Override
method delPrivateData (line 204) | @Override
method purgePrivateData (line 207) | @Override
method getPrivateDataByRange (line 210) | @Override
method getPrivateDataByPartialCompositeKey (line 216) | @Override
method getPrivateDataByPartialCompositeKey (line 222) | @Override
method getPrivateDataByPartialCompositeKey (line 228) | @Override
method getPrivateDataQueryResult (line 234) | @Override
method setEvent (line 239) | @Override
method getEvent (line 242) | @Override
method getSignedProposal (line 247) | @Override
method getTxTimestamp (line 252) | @Override
method getCreator (line 257) | @Override
method getTransient (line 262) | @Override
method getBinding (line 267) | @Override
method setStringArgs (line 272) | void setStringArgs(final List<String> args) {
method buildSerializedIdentity (line 277) | public byte[] buildSerializedIdentity() {
method setCertificate (line 288) | public void setCertificate(final String certificateToTest) {
method getMspId (line 292) | @Override
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/contract/ClientIdentityTest.java
class ClientIdentityTest (line 19) | final class ClientIdentityTest {
method clientIdentityWithoutAttributes (line 21) | @Test
method clientIdentityWithAttributes (line 41) | @Test
method clientIdentityWithMultipleAttributes (line 60) | @Test
method clientIdentityWithLongDNs (line 83) | @Test
method catchInvalidProtocolBufferException (line 102) | @Test
method createClientIdentityWithDummyAttributesCert (line 113) | @Test
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/contract/ContextFactoryTest.java
class ContextFactoryTest (line 17) | final class ContextFactoryTest {
method getInstance (line 19) | @Test
method createContext (line 26) | @Test
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/contract/ContextTest.java
class ContextTest (line 14) | final class ContextTest {
method getInstance (line 17) | @Test
method getSetClientIdentity (line 26) | @Test
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/contract/ContractInterfaceTest.java
class ContractInterfaceTest (line 16) | final class ContractInterfaceTest {
method createContext (line 17) | @Test
method unknownTransaction (line 23) | @Test
method beforeTransaction (line 32) | @Test
method afterTransaction (line 39) | @Test
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/contract/ContractRouterTest.java
class ContractRouterTest (line 31) | final class ContractRouterTest {
method testCreateFailsWithoutValidOptions (line 32) | @Test
method testCreateAndScan (line 40) | @Test
method testInit (line 60) | @Test
method testInvokeTwoTxnsThatExist (line 88) | @Test
method testInvokeTxnWithDefinedName (line 135) | @Test
method testInvokeTwoTxnsWithDefaultNamespace (line 163) | @Test
method testInvokeTxnWithDefinedNameUsingMethodName (line 210) | @Test
method testInvokeContractThatDoesNotExist (line 237) | @Test
method testInvokeTxnThatDoesNotExist (line 264) | @Test
method testInvokeTxnThatReturnsNullString (line 291) | @Test
method testInvokeTxnThatThrowsAnException (line 318) | @Test
method testInvokeTxnThatThrowsAChaincodeException (line 344) | @Test
method createContractRuntimeExceptions (line 371) | @Test
method testStartingContractRouterWithStartingAChaincodeServer (line 378) | @Test
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/contract/MyType.java
class MyType (line 13) | @DataType
method setState (line 24) | public void setState(final String state) {
method isStarted (line 28) | @JSONPropertyIgnore()
method isStopped (line 33) | @JSONPropertyIgnore()
method setValue (line 38) | public MyType setValue(final String value) {
method getValue (line 43) | public String getValue() {
method toString (line 47) | @Override
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/contract/MyType2.java
class MyType2 (line 12) | @DataType
method setValue (line 35) | public MyType2 setValue(final String value) {
method getValue (line 40) | public String getValue() {
method toString (line 44) | @Override
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/contract/TransactionExceptionTest.java
class TransactionExceptionTest (line 15) | final class TransactionExceptionTest {
class MyTransactionException (line 17) | class MyTransactionException extends ChaincodeException {
method MyTransactionException (line 23) | MyTransactionException(final int errorCode) {
method getPayload (line 28) | @Override
method testNoArgConstructor (line 35) | @Test
method testMessageArgConstructor (line 42) | @Test
method testCauseArgConstructor (line 49) | @Test
method testMessageAndCauseArgConstructor (line 57) | @Test
method testMessageAndPayloadArgConstructor (line 65) | @Test
method testMessagePayloadAndCauseArgConstructor (line 72) | @Test
method testMessageAndStringPayloadArgConstructor (line 81) | @Test
method testMessageStringPayloadAndCauseArgConstructor (line 88) | @Test
method testSubclass (line 96) | @Test
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/contract/execution/ContractExecutionServiceTest.java
class ContractExecutionServiceTest (line 36) | final class ContractExecutionServiceTest {
method noReturnValue (line 37) | @Test
method failureToInvoke (line 63) | @Test()
method invokeWithDifferentSerializers (line 90) | @Test()
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/contract/execution/JSONTransactionSerializerTest.java
class JSONTransactionSerializerTest (line 24) | final class JSONTransactionSerializerTest {
method toBuffer (line 25) | @Test
class ComplexDataTypes (line 59) | @Nested
method alltypes (line 63) | @Test
class PrimitiveArrays (line 82) | @Nested
method ints (line 85) | @Test
method bytes (line 97) | @Test
method floats (line 109) | @Test
method booleans (line 121) | @Test
method chars (line 133) | @Test
class NestedArrays (line 146) | @Nested
method ints (line 149) | @Test
method longs (line 160) | @Test
method doubles (line 171) | @Test
method bytes (line 182) | @Test
method shorts (line 193) | @Test
method fromBufferObject (line 205) | @Test
method toBufferPrimitive (line 222) | @Test
method fromBufferErrors (line 263) | @Test
class MyTestObject (line 274) | class MyTestObject {}
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/contract/metadata/MetadataBuilderTest.java
class MetadataBuilderTest (line 24) | final class MetadataBuilderTest {
method setMetadataBuilderField (line 26) | private void setMetadataBuilderField(final String name, final Object v...
method beforeAndAfterEach (line 33) | @BeforeEach
method systemContract (line 43) | @Test
method defaultSchemasNotLoadedFromNetwork (line 51) | @Test
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/contract/metadata/TypeSchemaTest.java
class TypeSchemaTest (line 21) | final class TypeSchemaTest {
method beforeEach (line 23) | @BeforeEach
method putIfNotNull (line 26) | @Test
method getType (line 42) | @Test
method getFormat (line 53) | @Test
method getRef (line 64) | @Test
method getItems (line 75) | @Test
class MyType (line 88) | @DataType
method getTypeClass (line 91) | @Test
method unknownConversions (line 138) | @Test
method typeConvertPrimitives (line 157) | @Test
method typeConvertObjects (line 187) | @Test
method validate (line 222) | @Test
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/contract/routing/ContractDefinitionTest.java
class ContractDefinitionTest (line 19) | final class ContractDefinitionTest {
method constructor (line 20) | @Test
method duplicateTransaction (line 27) | @Test
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/contract/routing/DataTypeDefinitionTest.java
class DataTypeDefinitionTest (line 17) | final class DataTypeDefinitionTest {
method constructor (line 18) | @Test
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/contract/routing/ParameterDefinitionTest.java
class ParameterDefinitionTest (line 16) | final class ParameterDefinitionTest {
method constructor (line 17) | @Test
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/contract/routing/PropertyDefinitionTest.java
class PropertyDefinitionTest (line 16) | final class PropertyDefinitionTest {
method constructor (line 17) | @Test
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/contract/routing/TxFunctionTest.java
class TxFunctionTest (line 27) | final class TxFunctionTest {
class TestObject (line 28) | @Contract()
method testMethod1 (line 31) | @Transaction()
method testMethod2 (line 34) | @Transaction()
method wibble (line 37) | @Transaction()
method constructor (line 41) | @Test
method property (line 55) | @Test
method invaldtxfn (line 76) | @Test
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/contract/routing/TypeRegistryTest.java
class TypeRegistryTest (line 16) | final class TypeRegistryTest {
method addDataType (line 17) | @Test
method addDataTypeDefinition (line 26) | @Test
method getAllDataTypes (line 36) | @Test
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/contract/simplepath/ContractSimplePathTest.java
class ContractSimplePathTest (line 33) | @ExtendWith(SystemStubsExtension.class)
method afterTest (line 40) | @AfterEach
method testContract (line 53) | @Test
method newInvokeFn (line 69) | private ChaincodeMessage newInvokeFn(final String[] args) {
method getLastReturnString (line 79) | private String getLastReturnString() throws Exception {
method setLogLevel (line 84) | private void setLogLevel(final String logLevel) {
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/ledger/LedgerTest.java
class LedgerTest (line 15) | final class LedgerTest {
method getLedger (line 17) | @Test
method getCollection (line 31) | @Test
method getNamedCollection (line 46) | @Test
method getOrganizationCollection (line 59) | @Test
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/metrics/MetricsTest.java
class MetricsTest (line 19) | final class MetricsTest {
class TestProvider (line 21) | private static final class TestProvider implements MetricsProvider {
method TestProvider (line 23) | public TestProvider() {}
method setTaskMetricsCollector (line 25) | @Override
method initialize (line 28) | @Override
class Initialize (line 32) | @Nested
method metricsDisabled (line 36) | @Test
method metricsEnabledUnknownProvider (line 42) | @Test
method metricsNoProvider (line 56) | @Test
method metricsValid (line 65) | @Test
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/metrics/impl/DefaultProviderTest.java
class DefaultProviderTest (line 21) | final class DefaultProviderTest {
method allMethods (line 23) | @Test
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/ChaincodeBaseTest.java
class ChaincodeBaseTest (line 36) | @ExtendWith(SystemStubsExtension.class)
method testNewSuccessResponseEmpty (line 41) | @Test
method testNewSuccessResponseWithMessage (line 51) | @Test
method testNewSuccessResponseWithPayload (line 62) | @Test
method testNewSuccessResponseWithMessageAndPayload (line 75) | @Test
method testNewErrorResponseEmpty (line 88) | @Test
method testNewErrorResponseWithMessage (line 98) | @Test
method testNewErrorResponseWithPayload (line 109) | @Test
method testNewErrorResponseWithMessageAndPayload (line 122) | @Test
method testNewErrorResponseWithException (line 135) | @Test
method testNewErrorResponseWithChaincodeException (line 146) | @Test
method testOptions (line 157) | @Test
method testUnsetOptionId (line 199) | @Test
method testUnsetOptionClientCertPath (line 207) | @Test
method testUnsetOptionClientKeyPath (line 218) | @Test
method testNewChannelBuilder (line 230) | @Test
method testInitializeLogging (line 247) | @Test
method testStartFailsWithoutValidOptions (line 293) | @Test
method setLogLevelForChaincode (line 314) | private static void setLogLevelForChaincode(
method connectChaincodeBase (line 325) | @Test
method connectChaincodeBaseNull (line 356) | @Test
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/ChaincodeServerImplTest.java
class ChaincodeServerImplTest (line 20) | @ExtendWith(SystemStubsExtension.class)
method setEnv (line 25) | @BeforeEach
method clearEnv (line 36) | @AfterEach
method init (line 47) | @Test
method initEnvNotSet (line 58) | @Test
method startAndStop (line 70) | @Test
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/ChaincodeStubTest.java
class ChaincodeStubTest (line 22) | final class ChaincodeStubTest {
class FakeStub (line 24) | @SuppressWarnings("PMD.ReturnEmptyCollectionRatherThanNull")
method getArgs (line 27) | @Override
method getStringArgs (line 33) | @Override
method getFunction (line 39) | @Override
method getParameters (line 45) | @Override
method getTxId (line 51) | @Override
method getChannelId (line 57) | @Override
method invokeChaincode (line 63) | @Override
method getState (line 69) | @Override
method getStateValidationParameter (line 74) | @Override
method putState (line 80) | @Override
method setStateValidationParameter (line 86) | @Override
method delState (line 92) | @Override
method getStateByRange (line 98) | @Override
method getStateByRangeWithPagination (line 104) | @Override
method getStateByPartialCompositeKey (line 111) | @Override
method getStateByPartialCompositeKey (line 117) | @Override
method getStateByPartialCompositeKey (line 124) | @Override
method getStateByPartialCompositeKeyWithPagination (line 130) | @Override
method createCompositeKey (line 137) | @Override
method splitCompositeKey (line 143) | @Override
method getQueryResult (line 149) | @Override
method getQueryResultWithPagination (line 155) | @Override
method getHistoryForKey (line 162) | @Override
method getPrivateData (line 168) | @Override
method getPrivateDataHash (line 173) | @Override
method getPrivateDataValidationParameter (line 179) | @Override
method putPrivateData (line 185) | @Override
method setPrivateDataValidationParameter (line 191) | @Override
method delPrivateData (line 197) | @Override
method purgePrivateData (line 203) | @Override
method getPrivateDataByRange (line 209) | @Override
method getPrivateDataByPartialCompositeKey (line 216) | @Override
method getPrivateDataByPartialCompositeKey (line 223) | @Override
method getPrivateDataByPartialCompositeKey (line 230) | @Override
method getPrivateDataQueryResult (line 237) | @Override
method setEvent (line 243) | @Override
method getEvent (line 249) | @Override
method getSignedProposal (line 255) | @Override
method getTxTimestamp (line 261) | @Override
method getCreator (line 267) | @Override
method getTransient (line 273) | @Override
method getBinding (line 279) | @Override
method getMspId (line 285) | @Override
method testDefaultMethods (line 292) | @Test
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/ChaincodeTest.java
class ChaincodeTest (line 14) | final class ChaincodeTest {
method testResponse (line 15) | @Test
method testResponseWithCode (line 24) | @Test
method testStatus (line 48) | @Test
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/ChatChaincodeWithPeerTest.java
class ChatChaincodeWithPeerTest (line 43) | @ExtendWith(SystemStubsExtension.class)
method setEnv (line 50) | @BeforeEach
method clearEnv (line 60) | @AfterEach
method initNull (line 70) | @Test
method init (line 80) | @Test
method initEmptyId (line 97) | @Test
method connectEnvNotSet (line 116) | @Test
method connectNull (line 126) | @Test
method connectAndReceiveRegister (line 139) | @Test
method connectAndReceiveRegisterComplete (line 223) | @Test
method connectAndReceiveRegisterException (line 253) | @Test
method connectOnCompletedException (line 278) | @Test
method testMockChaincodeBase (line 310) | @Test
method testMockChaincodeBaseThrowIOException (line 331) | @Test
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/NettyGrpcServerTest.java
class NettyGrpcServerTest (line 23) | @ExtendWith(SystemStubsExtension.class)
method setEnv (line 28) | @BeforeEach
method clearEnv (line 39) | @AfterEach
method initNoTls (line 50) | @Test
method validationNoChaincodeServerPropertiesg (line 62) | @Test
method validationPortChaincodeServer (line 73) | @Test
method validationKeepAliveTimeMinutes (line 87) | @Test
method validationKeepAliveTimeoutSeconds (line 101) | @Test
method validationPermitKeepAliveTimeMinutes (line 115) | @Test
method validationMaxConnectionAgeSeconds (line 129) | @Test
method validationMaxInboundMetadataSize (line 143) | @Test
method validationMaxInboundMessageSize (line 157) | @Test
method validationTlsEnabledButKeyNotSet (line 171) | @Test
method initNull (line 188) | @Test
method initNullEnvNotSet (line 198) | @Test
method initEnvNotSet (line 206) | @Test
method initEnvSetPortChaincodeServerAndCoreChaincodeIdName (line 215) | @Test
method startAndStopSetCoreChaincodeIdName (line 231) | @Test
method startAndStop (line 265) | @Test
method startAndStopTlsPassword (line 292) | @Test
method startAndStopTlsWithoutPassword (line 323) | @Test
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/chaincode/EmptyChaincode.java
class EmptyChaincode (line 12) | public final class EmptyChaincode extends ChaincodeBase {
method init (line 13) | @Override
method invoke (line 18) | @Override
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/ext/sbe/StateBasedEndorsementTest.java
class StateBasedEndorsementTest (line 13) | final class StateBasedEndorsementTest {
method testRoleType (line 14) | @Test
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/ext/sbe/impl/StateBasedEndorsementFactoryTest.java
class StateBasedEndorsementFactoryTest (line 14) | final class StateBasedEndorsementFactoryTest {
method getInstance (line 15) | @Test
method newStateBasedEndorsement (line 21) | @Test
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/ext/sbe/impl/StateBasedEndorsementImplTest.java
class StateBasedEndorsementImplTest (line 23) | final class StateBasedEndorsementImplTest {
method addOrgs (line 25) | @Test
method delOrgs (line 41) | @Test
method listOrgs (line 68) | @Test
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/fvt/ChaincodeFVTest.java
class ChaincodeFVTest (line 63) | @ExtendWith(SystemStubsExtension.class)
method afterTest (line 71) | @AfterEach
method testRegister (line 79) | @Test
method testRegisterAndEmptyInit (line 96) | @Test
method testInitAndInvoke (line 132) | @Test
method testStateValidationParameter (line 206) | @Test
method testInvokeRangeQ (line 274) | @Test
method testGetQueryResult (line 353) | @Test
method testGetHistoryForKey (line 428) | @Test
method testInvokeChaincode (line 492) | @Test
method testErrorInitInvoke (line 542) | @Test
method testStreamShutdown (line 598) | @Test
method testChaincodeLogLevel (line 636) | @Test
method setLogLevel (line 655) | private void setLogLevel(final String logLevel) {
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/impl/ChaincodeMessageFactoryTest.java
class ChaincodeMessageFactoryTest (line 18) | final class ChaincodeMessageFactoryTest {
method testNewGetPrivateDataHashEventMessage (line 35) | @Test
method testNewGetStateEventMessage (line 40) | @Test
method testNewGetStateMetadataEventMessage (line 45) | @Test
method testNewPutStateEventMessage (line 50) | @Test
method testNewPutStateMetadataEventMessage (line 55) | @Test
method testNewDeleteStateEventMessage (line 60) | @Test
method testNewErrorEventMessage (line 65) | @Test
method testNewCompletedEventMessage (line 72) | @Test
method testNewInvokeChaincodeMessage (line 78) | @Test
method testNewRegisterChaincodeMessage (line 83) | @Test
method testNewEventMessageTypeStringStringByteString (line 88) | @Test
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/impl/ChaincodeSupportClientTest.java
class ChaincodeSupportClientTest (line 26) | @ExtendWith(SystemStubsExtension.class)
method testStartInvocationTaskManagerAndRequestObserverNull (line 31) | @Test
method testStartInvocationTaskManagerNullAndRequestObserver (line 61) | @Test
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/impl/InnvocationTaskManagerTest.java
class InnvocationTaskManagerTest (line 30) | @ExtendWith(SystemStubsExtension.class)
method setEnv (line 35) | @BeforeEach
method clearEnv (line 45) | @AfterEach
method getManager (line 55) | @Test
method getManagerChaincodeIDNull (line 71) | @Test
method getManagerChaincodeBaseNull (line 90) | @Test
method onChaincodeMessage (line 104) | @Test
method setResponseConsumer (line 123) | @Test
method registerException (line 140) | @Test
method onChaincodeMessageREGISTER (line 158) | @Test
method onChaincodeMessageInvokeChaincode (line 181) | @Test
method onChaincodeMessagePutState (line 206) | @Test
method shutdown (line 231) | @Test
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/impl/InvocationStubImplTest.java
class InvocationStubImplTest (line 28) | final class InvocationStubImplTest {
class GetStateByRangeTests (line 34) | @Nested
method beforeEach (line 41) | @BeforeEach
method regular (line 54) | @Test
method nullvalues (line 70) | @Test
method unbounded (line 87) | @Test
method simplekeys (line 104) | @Test
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/impl/InvocationTaskManagerTest.java
class InvocationTaskManagerTest (line 26) | final class InvocationTaskManagerTest {
method setup (line 32) | @BeforeEach
method teardown (line 47) | @AfterEach
method register (line 54) | @Test
method onMessageTestTx (line 59) | @Test
method onWrongCreatedState (line 70) | @Test
method onWrongEstablishedState (line 82) | @Test
method onErrorResponse (line 95) | @Test
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/impl/KeyModificationImplTest.java
class KeyModificationImplTest (line 18) | final class KeyModificationImplTest {
method testKeyModificationImpl (line 20) | @Test
method testGetTxId (line 30) | @Test
method testGetValue (line 39) | @Test
method testGetStringValue (line 48) | @Test
method testGetTimestamp (line 57) | @Test
method testIsDeleted (line 68) | @Test
method testHashCode (line 79) | @Test
method testEquals (line 93) | @Test
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/impl/KeyValueImplTest.java
class KeyValueImplTest (line 16) | final class KeyValueImplTest {
method testKeyValueImpl (line 18) | @Test
method testGetKey (line 26) | @Test
method testGetValue (line 35) | @Test
method testGetStringValue (line 44) | @Test
method testHashCode (line 53) | @Test
method testEquals (line 61) | @Test
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/impl/QueryResultsIteratorWithMetadataImplTest.java
class QueryResultsIteratorWithMetadataImplTest (line 19) | final class QueryResultsIteratorWithMetadataImplTest {
method getMetadata (line 22) | @Test
method getInvalidMetadata (line 30) | @Test
method prepareQueryResponse (line 37) | private QueryResponse prepareQueryResponse() {
method prepareQueryResponseWrongMeta (line 49) | private QueryResponse prepareQueryResponseWrongMeta() {
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/ledger/CompositeKeyTest.java
class CompositeKeyTest (line 19) | final class CompositeKeyTest {
method testValidateSimpleKeys (line 20) | @Test
method testValidateSimpleKeysException (line 25) | @Test
method testCompositeKeyStringStringArray (line 31) | @Test
method testCompositeKeyStringListOfString (line 39) | @Test
method testEmptyAttributes (line 47) | @Test
method testCompositeKeyWithInvalidObjectTypeDelimiter (line 55) | @Test
method testCompositeKeyWithInvalidAttributeDelimiter (line 61) | @Test
method testCompositeKeyWithInvalidObjectTypeMaxCodePoint (line 67) | @Test
method testCompositeKeyWithInvalidAttributeMaxCodePoint (line 73) | @Test
method testGetObjectType (line 79) | @Test
method testGetAttributes (line 85) | @Test
method testToString (line 93) | @Test
method testParseCompositeKey (line 99) | @Test
method testParseCompositeKeyInvalidObjectType (line 108) | @Test
method testParseCompositeKeyInvalidAttribute (line 115) | @Test
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/mock/peer/ChaincodeMockPeer.java
class ChaincodeMockPeer (line 26) | public final class ChaincodeMockPeer {
method ChaincodeMockPeer (line 40) | public ChaincodeMockPeer(final List<ScenarioStep> scenario, final int ...
method start (line 48) | @SuppressWarnings("PMD.SystemPrintln")
method stop (line 64) | public void stop() {
method send (line 79) | public void send(final ChaincodeMessage msg) {
method getLastExecutedStep (line 91) | public int getLastExecutedStep() {
method getLastMessageRcvd (line 96) | public ChaincodeMessage getLastMessageRcvd() {
method getAllReceivedMessages (line 100) | public List<ChaincodeMessage> getAllReceivedMessages() {
method getLastMessageSend (line 105) | public ChaincodeMessage getLastMessageSend() {
method startServer (line 116) | public static ChaincodeMockPeer startServer(final List<ScenarioStep> s...
class ChaincodeMockPeerService (line 122) | private static class ChaincodeMockPeerService extends ChaincodeSupport...
method ChaincodeMockPeerService (line 133) | ChaincodeMockPeerService(final List<ScenarioStep> scenario) {
method send (line 138) | public void send(final ChaincodeMessage msg) {
method register (line 151) | @Override
method checkScenarioStepEnded (line 208) | @SuppressWarnings("PMD.SystemPrintln")
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/mock/peer/CompleteStep.java
class CompleteStep (line 14) | public final class CompleteStep implements ScenarioStep {
method expected (line 15) | @Override
method next (line 20) | @Override
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/mock/peer/DelValueStep.java
class DelValueStep (line 16) | public final class DelValueStep implements ScenarioStep {
method expected (line 19) | @Override
method next (line 25) | @Override
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/mock/peer/ErrorResponseStep.java
class ErrorResponseStep (line 13) | public final class ErrorResponseStep implements ScenarioStep {
method expected (line 14) | @Override
method next (line 19) | @Override
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/mock/peer/GetHistoryForKeyStep.java
class GetHistoryForKeyStep (line 19) | public final class GetHistoryForKeyStep implements ScenarioStep {
method GetHistoryForKeyStep (line 30) | public GetHistoryForKeyStep(final boolean hasNext, final String... val...
method expected (line 35) | @Override
method next (line 41) | @Override
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/mock/peer/GetQueryResultStep.java
class GetQueryResultStep (line 14) | public final class GetQueryResultStep extends QueryResultStep {
method GetQueryResultStep (line 22) | public GetQueryResultStep(final boolean hasNext, final String... vals) {
method expected (line 26) | @Override
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/mock/peer/GetStateByRangeStep.java
class GetStateByRangeStep (line 14) | public final class GetStateByRangeStep extends QueryResultStep {
method GetStateByRangeStep (line 22) | public GetStateByRangeStep(final boolean hasNext, final String... vals) {
method expected (line 26) | @Override
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/mock/peer/GetStateMetadata.java
class GetStateMetadata (line 20) | public final class GetStateMetadata implements ScenarioStep {
method GetStateMetadata (line 25) | public GetStateMetadata(final StateBasedEndorsement sbe) {
method expected (line 29) | @Override
method next (line 35) | @Override
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/mock/peer/GetValueStep.java
class GetValueStep (line 14) | public final class GetValueStep implements ScenarioStep {
method GetValueStep (line 19) | public GetValueStep(final String val) {
method expected (line 23) | @Override
method next (line 29) | @Override
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/mock/peer/InvokeChaincodeStep.java
class InvokeChaincodeStep (line 19) | public final class InvokeChaincodeStep implements ScenarioStep {
method expected (line 22) | @Override
method next (line 31) | @Override
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/mock/peer/PurgeValueStep.java
class PurgeValueStep (line 16) | public final class PurgeValueStep implements ScenarioStep {
method expected (line 20) | @Override
method next (line 26) | @Override
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/mock/peer/PutStateMetadata.java
class PutStateMetadata (line 20) | public final class PutStateMetadata implements ScenarioStep {
method PutStateMetadata (line 24) | public PutStateMetadata(final StateBasedEndorsement sbe) {
method expected (line 34) | @Override
method next (line 52) | @Override
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/mock/peer/PutValueStep.java
class PutValueStep (line 20) | public final class PutValueStep implements ScenarioStep {
method PutValueStep (line 29) | public PutValueStep(final String val) {
method expected (line 39) | @Override
method next (line 52) | @Override
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/mock/peer/QueryCloseStep.java
class QueryCloseStep (line 16) | public final class QueryCloseStep implements ScenarioStep {
method expected (line 19) | @Override
method next (line 26) | @Override
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/mock/peer/QueryNextStep.java
class QueryNextStep (line 14) | public final class QueryNextStep extends QueryResultStep {
method QueryNextStep (line 22) | public QueryNextStep(final boolean hasNext, final String... vals) {
method expected (line 26) | @Override
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/mock/peer/QueryResultStep.java
class QueryResultStep (line 20) | public abstract class QueryResultStep implements ScenarioStep {
method QueryResultStep (line 31) | QueryResultStep(final boolean hasNext, final String... vals) {
method next (line 41) | @Override
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/mock/peer/RegisterStep.java
class RegisterStep (line 17) | public final class RegisterStep implements ScenarioStep {
method expected (line 21) | @Override
method next (line 27) | @Override
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/mock/peer/ScenarioStep.java
type ScenarioStep (line 12) | public interface ScenarioStep {
method expected (line 19) | boolean expected(ChaincodeMessage msg);
method next (line 26) | List<ChaincodeMessage> next();
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/utils/MessageUtil.java
class MessageUtil (line 13) | public final class MessageUtil {
method MessageUtil (line 15) | private MessageUtil() {}
method newEventMessage (line 27) | public static ChaincodeMessage newEventMessage(
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/utils/TimeoutUtil.java
class TimeoutUtil (line 15) | public final class TimeoutUtil {
method TimeoutUtil (line 17) | private TimeoutUtil() {}
method runWithTimeout (line 19) | public static void runWithTimeout(final Runnable callable, final long ...
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/traces/TracesTest.java
class TracesTest (line 22) | final class TracesTest {
class TestProvider (line 24) | private static final class TestProvider implements TracesProvider {
method TestProvider (line 26) | public TestProvider() {}
method initialize (line 28) | @Override
method createSpan (line 31) | @Override
class Initialize (line 37) | @Nested
method tracesDisabled (line 41) | @Test
method tracesEnabledUnknownProvider (line 47) | @Test
method tracesNoProvider (line 61) | @Test
method tracesOpenTelemetryProvider (line 70) | @Test
method tracesValid (line 80) | @Test
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/traces/impl/DefaultProviderTest.java
class DefaultProviderTest (line 15) | final class DefaultProviderTest {
method testDefaultProvider (line 17) | @Test
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/traces/impl/OpenTelemetryPropertiesTest.java
class OpenTelemetryPropertiesTest (line 24) | final class OpenTelemetryPropertiesTest {
method testOverrideValue (line 26) | @Test
method testCanGetDurationDays (line 33) | @Test
method testCanGetDurationHours (line 39) | @Test
method testCanGetDurationMinutes (line 45) | @Test
method testCanGetDurationSeconds (line 51) | @Test
method testCanGetDurationMilliSeconds (line 57) | @Test
method testCanGetDurationInvalid (line 63) | @Test
method testGetDouble (line 69) | @Test
method testGetDoubleInvalid (line 76) | @Test
method testGetLong (line 82) | @Test
method testGetInt (line 89) | @Test
method testGetBoolean (line 96) | @Test
method testGetList (line 103) | @Test
method testGetMap (line 110) | @Test
method testGetMapInvalid (line 120) | @Test
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/traces/impl/OpenTelemetryTracesProviderTest.java
class OpenTelemetryTracesProviderTest (line 40) | final class OpenTelemetryTracesProviderTest {
class ContextGetterChaincode (line 42) | private final class ContextGetterChaincode extends ChaincodeBase {
method init (line 44) | @Override
method invoke (line 49) | @Override
method getChaincodeConfig (line 54) | @Override
method testProvider (line 60) | @Test
method testTracing (line 70) | @Test
FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/traces/impl/TestSpanExporterProvider.java
class TestSpanExporterProvider (line 17) | public final class TestSpanExporterProvider implements ConfigurableSpanE...
method export (line 22) | @Override
method flush (line 28) | @Override
method shutdown (line 33) | @Override
method createExporter (line 39) | @Override
method getName (line 44) | @Override
Condensed preview — 334 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,048K chars).
[
{
"path": ".github/dependabot.yml",
"chars": 1306,
"preview": "version: 2\n\nmulti-ecosystem-groups:\n java:\n schedule:\n interval: daily\n\nupdates:\n - package-ecosystem: docker\n"
},
{
"path": ".github/settings.yml",
"chars": 545,
"preview": "#\n# SPDX-License-Identifier: Apache-2.0\n#\n\nrepository:\n name: fabric-chaincode-java\n description: Hyperledger Fabric C"
},
{
"path": ".github/workflows/pull_request.yml",
"chars": 548,
"preview": "# Copyright the Hyperledger Fabric contributors. All rights reserved.\n# SPDX-License-Identifier: Apache-2.0\n\nname: Pull "
},
{
"path": ".github/workflows/push.yml",
"chars": 235,
"preview": "# Copyright the Hyperledger Fabric contributors. All rights reserved.\n# SPDX-License-Identifier: Apache-2.0\n\nname: Push\n"
},
{
"path": ".github/workflows/release.yml",
"chars": 6418,
"preview": "# Copyright the Hyperledger Fabric contributors. All rights reserved.\n#\n# SPDX-License-Identifier: Apache-2.0\n\nname: Rel"
},
{
"path": ".github/workflows/scan.yml",
"chars": 998,
"preview": "name: \"Scheduled vulnerability scan\"\r\n\r\non:\r\n workflow_call:\r\n inputs:\r\n ref:\r\n description: Branch, tag"
},
{
"path": ".github/workflows/schedule.yml",
"chars": 138,
"preview": "name: Scheduled build\n\non:\n schedule:\n - cron: \"5 4 * * 0\"\n workflow_dispatch:\n\njobs:\n main:\n uses: ./.github/w"
},
{
"path": ".github/workflows/scheduled-scan.yml",
"chars": 813,
"preview": "name: \"Scheduled vulnerability scan\"\r\n\r\non:\r\n schedule:\r\n - cron: \"20 3 * * *\"\r\n workflow_dispatch:\r\n\r\npermissions:"
},
{
"path": ".github/workflows/test.yml",
"chars": 3786,
"preview": "# Copyright the Hyperledger Fabric contributors. All rights reserved.\n#\n# SPDX-License-Identifier: Apache-2.0\n\nname: Tes"
},
{
"path": ".gitignore",
"chars": 509,
"preview": "/.settings/\n/.project\n*.log\n*.swp\n.gradletasknamecache\n.classpath\n**/bin/\n/build/\nbuild/*\nsettings-gradle.lockfile\nconfi"
},
{
"path": "CHANGELOG.md",
"chars": 38083,
"preview": "# Changelog\n\nNotable changes in each release are documented on the project's [GitHub releases](https://github.com/hyperl"
},
{
"path": "CODEOWNERS",
"chars": 124,
"preview": "# SPDX-License-Identifier: Apache-2.0\n\n# Fabric Chaincode Java Maintainers\n*\t@hyperledger/fabric-chaincode-java-maintain"
},
{
"path": "CODE_OF_CONDUCT.md",
"chars": 597,
"preview": "Code of Conduct Guidelines\n==========================\n\nPlease review the Hyperledger [Code of\nConduct](https://wiki.hype"
},
{
"path": "COMPATIBILITY.md",
"chars": 3108,
"preview": "# Support and Compatibility\n\nGithub is used for code base management and issue tracking.\n\n## Summary of Compatibility\n\nT"
},
{
"path": "CONTRIBUTING.md",
"chars": 4045,
"preview": "# Contributing to fabric-chaincode-java\n\nWe welcome contributions to the [Hyperledger Fabric](https://hyperledger-fabric"
},
{
"path": "LICENSE",
"chars": 11358,
"preview": " Apache License\n Version 2.0, January 2004\n "
},
{
"path": "MAINTAINERS.md",
"chars": 2546,
"preview": "# Maintainers\n\n| Name | GitHub | Chat | email "
},
{
"path": "Makefile",
"chars": 1193,
"preview": "#\r\n# SPDX-License-Identifier: Apache-2.0\r\n#\r\n\r\nbin_dir := bin\r\nosv-scanner := $(bin_dir)/osv-scanner\r\n\r\nkernel_name := $"
},
{
"path": "README.md",
"chars": 4305,
"preview": "# Hyperledger Fabric Chaincode Java\n\n[\nin va"
},
{
"path": "examples/fabric-contract-example-as-service/Dockerfile",
"chars": 697,
"preview": "# Copyright 2019 IBM All Rights Reserved.\n# SPDX-License-Identifier: Apache-2.0\n\n# Example multi-stage dockerfile for Ja"
},
{
"path": "examples/fabric-contract-example-as-service/README.md",
"chars": 1456,
"preview": "# Java Chaincode -as-a-service\n\nThis example shows how to start the chaincode in it's 'as-a-service' mode.\nNote that thi"
},
{
"path": "examples/fabric-contract-example-as-service/build.gradle",
"chars": 1122,
"preview": "plugins {\n id 'com.gradleup.shadow' version '9.3.1'\n id 'java'\n}\n\nversion = '0.0.1'\n\nrepositories {\n mavenCentr"
},
{
"path": "examples/fabric-contract-example-as-service/src/main/java/org/example/contract/MyAsset.java",
"chars": 782,
"preview": "/*\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.example.contract;\n\nimport org.hyperledger.fabric.contract.ann"
},
{
"path": "examples/fabric-contract-example-as-service/src/main/java/org/example/contract/MyAssetContract.java",
"chars": 2314,
"preview": "/*\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.example.contract;\n\nimport static java.nio.charset.StandardChar"
},
{
"path": "examples/fabric-contract-example-as-service/src/test/java/org/example/MyAssetContractTest.java",
"chars": 5900,
"preview": "/*\n * SPDX-License-Identifier: Apache License 2.0\n */\n\npackage org.example;\n\nimport static java.nio.charset.StandardChar"
},
{
"path": "examples/fabric-contract-example-gradle/.gitignore",
"chars": 20,
"preview": ".gradle/\nbuild/\nbin/"
},
{
"path": "examples/fabric-contract-example-gradle/README.md",
"chars": 171,
"preview": "This example needs to use gradle4.6 please install this first\n\neg using sdkman\n\n`sdk install gradle 4.6`\n\n\nand then add"
},
{
"path": "examples/fabric-contract-example-gradle/build.gradle",
"chars": 1145,
"preview": "plugins {\n id 'com.gradleup.shadow' version '9.3.1'\n id 'java'\n}\n\nversion = '0.0.1'\n\nrepositories {\n mavenCentr"
},
{
"path": "examples/fabric-contract-example-gradle/src/main/java/org/example/MyAsset.java",
"chars": 832,
"preview": "/*\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.example;\n\nimport org.hyperledger.fabric.contract.annotation.C"
},
{
"path": "examples/fabric-contract-example-gradle/src/main/java/org/example/MyAssetContract.java",
"chars": 3003,
"preview": "/*\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.example;\n\nimport org.hyperledger.fabric.contract.Context;\nimpo"
},
{
"path": "examples/fabric-contract-example-gradle/src/test/java/org/example/MyAssetContractTest.java",
"chars": 5533,
"preview": "/*\n * SPDX-License-Identifier: Apache License 2.0\n */\n\npackage org.example;\nimport static java.nio.charset.StandardChars"
},
{
"path": "examples/fabric-contract-example-gradle-kotlin/.fabricignore",
"chars": 108,
"preview": "#\n# SPDX-License-Identifier: Apache-2.0\n#\n\n/.classpath\n/.git/\n/.gradle/\n/.project\n/.settings/\n/bin/\n/build/\n"
},
{
"path": "examples/fabric-contract-example-gradle-kotlin/.gitignore",
"chars": 101,
"preview": "#\n# SPDX-License-Identifier: Apache-2.0\n#\n\n/.classpath\n/.gradle/\n/.project\n/.settings/\n/bin/\n/build/\n"
},
{
"path": "examples/fabric-contract-example-gradle-kotlin/build.gradle.kts",
"chars": 1180,
"preview": "/*\n * SPDX-License-Identifier: Apache-2.0\n */\nimport com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar\n\n\nplugin"
},
{
"path": "examples/fabric-contract-example-gradle-kotlin/gradle/wrapper/gradle-wrapper.properties",
"chars": 250,
"preview": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributi"
},
{
"path": "examples/fabric-contract-example-gradle-kotlin/gradlew",
"chars": 8669,
"preview": "#!/bin/sh\n\n#\n# Copyright © 2015-2021 the original authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"Lice"
},
{
"path": "examples/fabric-contract-example-gradle-kotlin/gradlew.bat",
"chars": 2918,
"preview": "@rem\r\n@rem Copyright 2015 the original author or authors.\r\n@rem\r\n@rem Licensed under the Apache License, Version 2.0 (th"
},
{
"path": "examples/fabric-contract-example-gradle-kotlin/settings.gradle.kts",
"chars": 82,
"preview": "/*\n * SPDX-License-Identifier: Apache-2.0\n */\n\nrootProject.name = \"gradle-kotlin\"\n"
},
{
"path": "examples/fabric-contract-example-gradle-kotlin/src/main/kotlin/org/example/MyAsset.kt",
"chars": 547,
"preview": "/*\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.example\n\nimport org.hyperledger.fabric.contract.annotation.Da"
},
{
"path": "examples/fabric-contract-example-gradle-kotlin/src/main/kotlin/org/example/MyAssetContract.kt",
"chars": 2588,
"preview": "/*\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.example\n\nimport org.hyperledger.fabric.contract.Context\nimpor"
},
{
"path": "examples/fabric-contract-example-gradle-kotlin/src/test/kotlin/org/example/MyAssetContractTest.kt",
"chars": 4385,
"preview": "/*\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.example\n\nimport org.junit.jupiter.api.BeforeEach\nimport org.j"
},
{
"path": "examples/fabric-contract-example-maven/.gitignore",
"chars": 6,
"preview": "target"
},
{
"path": "examples/fabric-contract-example-maven/pom.xml",
"chars": 4348,
"preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLoca"
},
{
"path": "examples/fabric-contract-example-maven/src/main/java/org/example/MyAsset.java",
"chars": 832,
"preview": "/*\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.example;\n\nimport org.hyperledger.fabric.contract.annotation.C"
},
{
"path": "examples/fabric-contract-example-maven/src/main/java/org/example/MyAssetContract.java",
"chars": 3027,
"preview": "/*\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.example;\n\nimport org.hyperledger.fabric.contract.Context;\nimpo"
},
{
"path": "examples/fabric-contract-example-maven/src/test/java/org/example/MyAssetContractTest.java",
"chars": 5533,
"preview": "/*\n * SPDX-License-Identifier: Apache License 2.0\n */\n\npackage org.example;\nimport static java.nio.charset.StandardChars"
},
{
"path": "examples/ledger-api/.gitignore",
"chars": 20,
"preview": ".gradle/\nbuild/\nbin/"
},
{
"path": "examples/ledger-api/README.md",
"chars": 171,
"preview": "This example needs to use gradle4.6 please install this first\n\neg using sdkman\n\n`sdk install gradle 4.6`\n\n\nand then add"
},
{
"path": "examples/ledger-api/build.gradle",
"chars": 1141,
"preview": "plugins {\n id 'com.gradleup.shadow' version '9.3.1'\n id 'java'\n}\n\nversion '0.0.1'\n\nrepositories {\n mavenCentral"
},
{
"path": "examples/ledger-api/src/main/java/org/example/LedgerAPIContract.java",
"chars": 2350,
"preview": "/*\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.example;\n\nimport org.hyperledger.fabric.contract.Context;\nimpo"
},
{
"path": "examples/ledger-api/src/main/java/org/example/MyAsset.java",
"chars": 832,
"preview": "/*\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.example;\n\nimport org.hyperledger.fabric.contract.annotation.C"
},
{
"path": "fabric-chaincode-docker/.gitignore",
"chars": 6,
"preview": "/bin/\n"
},
{
"path": "fabric-chaincode-docker/Dockerfile",
"chars": 2188,
"preview": "ARG JAVA_IMAGE=eclipse-temurin:25-jdk\n\nFROM ${JAVA_IMAGE} AS builder\n\nRUN apt-get update \\\n && apt-get install -y cur"
},
{
"path": "fabric-chaincode-docker/README.md",
"chars": 741,
"preview": "# Quick reference\n\n- **Maintained by**: \n [The Fabric Java chaincode maintainers](https://github.com/hyperledger/fabri"
},
{
"path": "fabric-chaincode-docker/build.gradle",
"chars": 1650,
"preview": "/*\n * Copyright IBM Corp. 2018 All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nplugins {\n id 'com"
},
{
"path": "fabric-chaincode-docker/build.sh",
"chars": 1920,
"preview": "#!/usr/bin/env bash\nset -ex\n\nINPUT_DIR=/chaincode/input\nOUTPUT_DIR=/chaincode/output\nTMP_DIR=$(mktemp -d)\n\nNUM_JARS=$(fi"
},
{
"path": "fabric-chaincode-docker/start",
"chars": 740,
"preview": "#!/usr/bin/env bash\nset -ex\n\nROOT_DIR=/root/chaincode-java\nLIB_DIR=${ROOT_DIR}/lib\nCHAINCODE_DIR=${ROOT_DIR}/chaincode\nL"
},
{
"path": "fabric-chaincode-integration-test/.gitignore",
"chars": 33,
"preview": "repository\n_cfg\n*.tar.gz\nlog.txt\n"
},
{
"path": "fabric-chaincode-integration-test/build.gradle",
"chars": 666,
"preview": "dependencies {\n implementation project(':fabric-chaincode-docker')\n implementation project(':fabric-chaincode-shim"
},
{
"path": "fabric-chaincode-integration-test/chaincodebootstrap.gradle",
"chars": 220,
"preview": "allprojects {\n apply plugin: 'maven-publish'\n\n publishing {\n repositories {\n maven {\n "
},
{
"path": "fabric-chaincode-integration-test/src/contracts/bare-gradle/build.gradle",
"chars": 722,
"preview": "plugins {\n id 'com.gradleup.shadow' version '9.3.1'\n id 'java'\n}\n\ngroup 'org.hyperledger.fabric-chaincode-java'\nve"
},
{
"path": "fabric-chaincode-integration-test/src/contracts/bare-gradle/src/main/java/org/hyperledger/fabric/example/BareGradle.java",
"chars": 1313,
"preview": "/*\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabric.example;\n\nimport org.hyperledger.fabric.con"
},
{
"path": "fabric-chaincode-integration-test/src/contracts/bare-gradle/src/main/resources/config.props",
"chars": 120,
"preview": "MAX_INBOUND_MESSAGE_SIZE=4000\nCHAINCODE_METRICS_ENABLED=true\nTP_CORE_POOL_SIZE=4\nTP_MAX_POOL_SIZE=4\nTP_QUEUE_SIZE=4000\n "
},
{
"path": "fabric-chaincode-integration-test/src/contracts/bare-maven/.gitignore",
"chars": 6,
"preview": "target"
},
{
"path": "fabric-chaincode-integration-test/src/contracts/bare-maven/pom.xml",
"chars": 2683,
"preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLoca"
},
{
"path": "fabric-chaincode-integration-test/src/contracts/bare-maven/src/main/java/org/hyperledger/fabric/example/BareMaven.java",
"chars": 1310,
"preview": "/*\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabric.example;\n\nimport org.hyperledger.fabric.con"
},
{
"path": "fabric-chaincode-integration-test/src/contracts/bare-maven/src/main/resources/config.props",
"chars": 120,
"preview": "MAX_INBOUND_MESSAGE_SIZE=4000\nCHAINCODE_METRICS_ENABLED=true\nTP_CORE_POOL_SIZE=4\nTP_MAX_POOL_SIZE=4\nTP_QUEUE_SIZE=4000\n "
},
{
"path": "fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/build.gradle",
"chars": 710,
"preview": "plugins {\n id 'com.gradleup.shadow' version '9.3.1'\n id 'java'\n}\n\ngroup 'org.hyperledger.fabric-chaincode-java'\nve"
},
{
"path": "fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradle/wrapper/gradle-wrapper.properties",
"chars": 253,
"preview": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributi"
},
{
"path": "fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradlew",
"chars": 8739,
"preview": "#!/bin/sh\n\n#\n# Copyright © 2015-2021 the original authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"Lice"
},
{
"path": "fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradlew.bat",
"chars": 2966,
"preview": "@rem\r\n@rem Copyright 2015 the original author or authors.\r\n@rem\r\n@rem Licensed under the Apache License, Version 2.0 (th"
},
{
"path": "fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/settings.gradle",
"chars": 52,
"preview": "rootProject.name = 'fabric-chaincode-example-sacc'\n\n"
},
{
"path": "fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/src/main/java/org/hyperledger/fabric/example/AllLedgerAPI.java",
"chars": 1450,
"preview": "/*\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabric.example;\n\nimport org.hyperledger.fabric.con"
},
{
"path": "fabric-chaincode-integration-test/src/contracts/fabric-shim-api/build.gradle",
"chars": 835,
"preview": "plugins {\n id 'com.gradleup.shadow' version '9.3.1'\n id 'java'\n}\n\ngroup 'org.hyperledger.fabric-chaincode-java'\nve"
},
{
"path": "fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradle/wrapper/gradle-wrapper.properties",
"chars": 253,
"preview": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributi"
},
{
"path": "fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradlew",
"chars": 8710,
"preview": "#!/bin/sh\n\n#\n# Copyright © 2015-2021 the original authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"Lice"
},
{
"path": "fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradlew.bat",
"chars": 2937,
"preview": "@rem\r\n@rem Copyright 2015 the original author or authors.\r\n@rem\r\n@rem Licensed under the Apache License, Version 2.0 (th"
},
{
"path": "fabric-chaincode-integration-test/src/contracts/fabric-shim-api/settings.gradle",
"chars": 52,
"preview": "rootProject.name = 'fabric-chaincode-example-sacc'\n\n"
},
{
"path": "fabric-chaincode-integration-test/src/contracts/fabric-shim-api/src/main/java/org/hyperledger/fabric/example/AllAPI.java",
"chars": 4017,
"preview": "/*\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabric.example;\n\nimport org.hyperledger.fabric.con"
},
{
"path": "fabric-chaincode-integration-test/src/contracts/fabric-shim-api/src/main/java/org/hyperledger/fabric/example/EndorsementCC.java",
"chars": 6396,
"preview": "package org.hyperledger.fabric.example;\n\nimport static java.nio.charset.StandardCharsets.UTF_8;\n\nimport java.util.List;\n"
},
{
"path": "fabric-chaincode-integration-test/src/contracts/fabric-shim-api/src/main/resources/config.props",
"chars": 120,
"preview": "MAX_INBOUND_MESSAGE_SIZE=4000\nCHAINCODE_METRICS_ENABLED=true\nTP_CORE_POOL_SIZE=4\nTP_MAX_POOL_SIZE=4\nTP_QUEUE_SIZE=4000\n "
},
{
"path": "fabric-chaincode-integration-test/src/contracts/wrapper-maven/.gitignore",
"chars": 6,
"preview": "target"
},
{
"path": "fabric-chaincode-integration-test/src/contracts/wrapper-maven/.mvn/wrapper/maven-wrapper.properties",
"chars": 277,
"preview": "wrapperVersion=3.3.4\ndistributionType=bin\ndistributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-m"
},
{
"path": "fabric-chaincode-integration-test/src/contracts/wrapper-maven/mvnw",
"chars": 11336,
"preview": "#!/bin/sh\n# ----------------------------------------------------------------------------\n# Licensed to the Apache Softwa"
},
{
"path": "fabric-chaincode-integration-test/src/contracts/wrapper-maven/mvnw.cmd",
"chars": 7903,
"preview": "@REM ----------------------------------------------------------------------------\r\n@REM Licensed to the Apache Software "
},
{
"path": "fabric-chaincode-integration-test/src/contracts/wrapper-maven/pom.xml",
"chars": 2829,
"preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLoca"
},
{
"path": "fabric-chaincode-integration-test/src/contracts/wrapper-maven/src/main/java/org/hyperledger/fabric/example/WrapperMaven.java",
"chars": 1319,
"preview": "/*\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabric.example;\n\nimport org.hyperledger.fabric.con"
},
{
"path": "fabric-chaincode-integration-test/src/contracts/wrapper-maven/src/main/resources/config.props",
"chars": 120,
"preview": "MAX_INBOUND_MESSAGE_SIZE=4000\nCHAINCODE_METRICS_ENABLED=true\nTP_CORE_POOL_SIZE=4\nTP_MAX_POOL_SIZE=4\nTP_QUEUE_SIZE=4000\n "
},
{
"path": "fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/contractinstall/ContractInstallTest.java",
"chars": 1245,
"preview": "/*\nCopyright IBM Corp. All Rights Reserved.\n\nSPDX-License-Identifier: Apache-2.0\n*/\npackage org.hyperleder.fabric.shim.i"
},
{
"path": "fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/ledgertests/LedgerIntegrationTest.java",
"chars": 896,
"preview": "/*\nCopyright IBM Corp. All Rights Reserved.\n\nSPDX-License-Identifier: Apache-2.0\n*/\npackage org.hyperleder.fabric.shim.i"
},
{
"path": "fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/shimtests/SACCIntegrationTest.java",
"chars": 1379,
"preview": "/*\nCopyright IBM Corp. All Rights Reserved.\n\nSPDX-License-Identifier: Apache-2.0\n*/\npackage org.hyperleder.fabric.shim.i"
},
{
"path": "fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/shimtests/SBECCIntegrationTest.java",
"chars": 5746,
"preview": "/*\nCopyright IBM Corp. All Rights Reserved.\n\nSPDX-License-Identifier: Apache-2.0\n*/\npackage org.hyperleder.fabric.shim.i"
},
{
"path": "fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/Bash.java",
"chars": 1787,
"preview": "/*\nCopyright IBM Corp. All Rights Reserved.\n\nSPDX-License-Identifier: Apache-2.0\n*/\npackage org.hyperleder.fabric.shim.i"
},
{
"path": "fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/Command.java",
"chars": 4217,
"preview": "/*\nCopyright IBM Corp. All Rights Reserved.\n\nSPDX-License-Identifier: Apache-2.0\n*/\n\npackage org.hyperleder.fabric.shim."
},
{
"path": "fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/Docker.java",
"chars": 2102,
"preview": "/*\nCopyright IBM Corp. All Rights Reserved.\n\nSPDX-License-Identifier: Apache-2.0\n*/\npackage org.hyperleder.fabric.shim.i"
},
{
"path": "fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/DockerCompose.java",
"chars": 1757,
"preview": "/*\nCopyright IBM Corp. All Rights Reserved.\n\nSPDX-License-Identifier: Apache-2.0\n*/\npackage org.hyperleder.fabric.shim.i"
},
{
"path": "fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/FabricState.java",
"chars": 1466,
"preview": "/*\nCopyright IBM Corp. All Rights Reserved.\n\nSPDX-License-Identifier: Apache-2.0\n*/\npackage org.hyperleder.fabric.shim.i"
},
{
"path": "fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/InvokeHelper.java",
"chars": 1535,
"preview": "package org.hyperleder.fabric.shim.integration.util;\n\nimport java.util.Arrays;\nimport java.util.Map;\nimport java.util.st"
},
{
"path": "fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/Peer.java",
"chars": 4700,
"preview": "/*\nCopyright IBM Corp. All Rights Reserved.\n\nSPDX-License-Identifier: Apache-2.0\n*/\npackage org.hyperleder.fabric.shim.i"
},
{
"path": "fabric-chaincode-integration-test/src/test/resources/docker-compose-microfab.yaml",
"chars": 494,
"preview": "# Copyright IBM Corp. All Rights Reserved.\n#\n# SPDX-License-Identifier: Apache-2.0\n#\n\nversion: '2'\n\nservices:\n\n microfa"
},
{
"path": "fabric-chaincode-integration-test/src/test/resources/scripts/ccutils.sh",
"chars": 8992,
"preview": "#!/bin/bash\n\nC_RESET='\\033[0m'\nC_RED='\\033[0;31m'\nC_GREEN='\\033[0;32m'\nC_BLUE='\\033[0;34m'\nC_YELLOW='\\033[1;33m'\n\nexport"
},
{
"path": "fabric-chaincode-integration-test/src/test/resources/scripts/collection_config.json",
"chars": 193,
"preview": "[\n{\n \"name\": \"col\",\n \"policy\": \"OR( OR('org1MSP.member','org1MSP.admin') , OR('org2MSP.member','org2MSP.admin') )\",\n "
},
{
"path": "fabric-chaincode-integration-test/src/test/resources/scripts/mfsetup.sh",
"chars": 3173,
"preview": "#!/bin/bash\nset -x\n\nDIR=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\" )\"/.. && pwd )\"\nexport CFG=\"${DIR}/_cfg\"\nmkdir -p \"${CFG}\"\n"
},
{
"path": "fabric-chaincode-shim/build.gradle",
"chars": 13215,
"preview": "/*\n * Copyright IBM Corp. 2018 All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nplugins {\n id 'mav"
},
{
"path": "fabric-chaincode-shim/javabuild.sh",
"chars": 2183,
"preview": "#!/bin/bash\n\n#\n#Copyright DTCC 2016 All Rights Reserved.\n#\n#Licensed under the Apache License, Version 2.0 (the \"License"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/Logger.java",
"chars": 2425,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/Logging.java",
"chars": 3425,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/ClientIdentity.java",
"chars": 7034,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/Context.java",
"chars": 1668,
"preview": "/*\n * Copyright 2019 IBM DTCC All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledge"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/ContextFactory.java",
"chars": 677,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledger.fab"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/ContractInterface.java",
"chars": 3860,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledger.fab"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/ContractRouter.java",
"chars": 7198,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledger.fab"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/ContractRuntimeException.java",
"chars": 1044,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/annotation/Contact.java",
"chars": 704,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/annotation/Contract.java",
"chars": 1583,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/annotation/DataType.java",
"chars": 1093,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/annotation/Default.java",
"chars": 617,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/annotation/Info.java",
"chars": 1221,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledger.fab"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/annotation/License.java",
"chars": 645,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/annotation/Property.java",
"chars": 1285,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/annotation/Serializer.java",
"chars": 923,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/annotation/Transaction.java",
"chars": 2017,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/annotation/package-info.java",
"chars": 277,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Provides annotations"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/execution/ExecutionFactory.java",
"chars": 1151,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledger.fab"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/execution/ExecutionService.java",
"chars": 718,
"preview": "/*\n * Copyright 2019 IBM DTCC All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledge"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/execution/InvocationRequest.java",
"chars": 653,
"preview": "/*\n * Copyright 2019 IBM DTCC All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledge"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/execution/JSONTransactionSerializer.java",
"chars": 13072,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledger.fab"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/execution/SerializerInterface.java",
"chars": 1216,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledger.fab"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/execution/impl/ContractExecutionService.java",
"chars": 4325,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledger.fab"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/execution/impl/ContractInvocationRequest.java",
"chars": 2316,
"preview": "/*\n * Copyright 2019 IBM DTCC All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledge"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/execution/impl/package-info.java",
"chars": 156,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/** */\npackage org.hyperled"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/execution/package-info.java",
"chars": 151,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/** */\npackage org.hyperled"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/metadata/MetadataBuilder.java",
"chars": 10367,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/metadata/TypeSchema.java",
"chars": 9915,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledger.fab"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/metadata/package-info.java",
"chars": 150,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/** */\npackage org.hyperled"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/package-info.java",
"chars": 618,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Provides interfaces "
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/ContractDefinition.java",
"chars": 2151,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledger.fab"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/DataTypeDefinition.java",
"chars": 612,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/ParameterDefinition.java",
"chars": 557,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/PropertyDefinition.java",
"chars": 516,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/RoutingRegistry.java",
"chars": 1711,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/TransactionType.java",
"chars": 337,
"preview": "/*\n * Copyright 2019 IBM DTCC All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/TxFunction.java",
"chars": 2331,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/TypeRegistry.java",
"chars": 922,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/impl/ContractDefinitionImpl.java",
"chars": 4183,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/impl/DataTypeDefinitionImpl.java",
"chars": 3902,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/impl/ParameterDefinitionImpl.java",
"chars": 1384,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledger.fab"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/impl/PropertyDefinitionImpl.java",
"chars": 1191,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledger.fab"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/impl/RoutingRegistryImpl.java",
"chars": 8827,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/impl/SerializerRegistryImpl.java",
"chars": 3603,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/impl/TxFunctionImpl.java",
"chars": 7079,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/impl/TypeRegistryImpl.java",
"chars": 1978,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/impl/package-info.java",
"chars": 154,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/** */\npackage org.hyperled"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/package-info.java",
"chars": 149,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/** */\npackage org.hyperled"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/systemcontract/SystemContract.java",
"chars": 1064,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/systemcontract/package-info.java",
"chars": 156,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/** */\npackage org.hyperled"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/ledger/Collection.java",
"chars": 536,
"preview": "/*\n * Copyright 2020 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/ledger/Ledger.java",
"chars": 2253,
"preview": "/*\n * Copyright 2020 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/ledger/impl/LedgerImpl.java",
"chars": 1018,
"preview": "/*\n * Copyright 2020 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/ledger/impl/package-info.java",
"chars": 136,
"preview": "/*\n * Copyright 2023 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/ledger/package-info.java",
"chars": 199,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/** Provides the API for co"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/metrics/Metrics.java",
"chars": 2521,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/metrics/MetricsProvider.java",
"chars": 1378,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledger.fab"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/metrics/TaskMetricsCollector.java",
"chars": 1334,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/metrics/impl/DefaultProvider.java",
"chars": 2246,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/metrics/impl/NullProvider.java",
"chars": 340,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/metrics/impl/package-info.java",
"chars": 145,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/** */\npackage org.hyperled"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/metrics/package-info.java",
"chars": 1365,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Provides interfaces "
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/overview.html",
"chars": 2506,
"preview": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\n<!-- SPDX-License-Identifier: Apache-2.0 -->\n<html>\n <bo"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/package-info.java",
"chars": 158,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/** Provides logging classe"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/Chaincode.java",
"chars": 5108,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledger.fab"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ChaincodeBase.java",
"chars": 26641,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledger.fab"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ChaincodeException.java",
"chars": 4128,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ChaincodeServer.java",
"chars": 554,
"preview": "/*\n * Copyright 2020 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledger.fab"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ChaincodeServerProperties.java",
"chars": 11748,
"preview": "/*\n * Copyright 2020 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ChaincodeStub.java",
"chars": 30953,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledger.fab"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ChatChaincodeWithPeer.java",
"chars": 1683,
"preview": "/*\n * Copyright 2020 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/GrpcServer.java",
"chars": 641,
"preview": "/*\n * Copyright 2020 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledger.fab"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/NettyChaincodeServer.java",
"chars": 1287,
"preview": "/*\n * Copyright 2020 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledger.fab"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/NettyGrpcServer.java",
"chars": 6932,
"preview": "/*\n * Copyright 2020 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledger.fab"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ResponseUtils.java",
"chars": 2839,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ext/sbe/StateBasedEndorsement.java",
"chars": 2769,
"preview": "/*\n * Copyright 2019 IBM DTCC All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ext/sbe/impl/StateBasedEndorsementFactory.java",
"chars": 954,
"preview": "/*\n * Copyright 2019 IBM DTCC All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ext/sbe/impl/StateBasedEndorsementImpl.java",
"chars": 4492,
"preview": "/*\n * Copyright 2019 IBM DTCC All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ext/sbe/impl/StateBasedEndorsementUtils.java",
"chars": 2688,
"preview": "/*\n * Copyright 2019 IBM DTCC All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ext/sbe/impl/package-info.java",
"chars": 142,
"preview": "/*\n * Copyright 2023 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ext/sbe/package-info.java",
"chars": 228,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/** Provides an interface f"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/impl/ChaincodeInvocationTask.java",
"chars": 10320,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/impl/ChaincodeMessageFactory.java",
"chars": 8722,
"preview": "/*\n * Copyright 2019 IBM DTCC All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/impl/ChaincodeSupportClient.java",
"chars": 3883,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
},
{
"path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/impl/InvocationStubImpl.java",
"chars": 29262,
"preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledger.fab"
}
]
// ... and 134 more files (download for full content)
About this extraction
This page contains the full source code of the hyperledger/fabric-chaincode-java GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 334 files (953.0 KB), approximately 234.0k tokens, and a symbol index with 1482 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.