The Java SDK for interacting with Hedera Hashgraph: the official distributed consensus platform built using the hashgraph consensus algorithm for fast, fair and secure transactions. Hedera enables and empowers developers to build an entirely new class of decentralized applications.
NOTE: v1 of the SDK is deprecated and support will be discontinued after October 2021. Please install the latest version 2.0.x or migrate from v1 to the latest 2.0.x version. You can reference the migration documentation.
Select one of the following depending on your target platform.
// Android, Corda DJVM, Java 7+
implementation 'com.hedera.hashgraph:sdk-jdk7:2.0.11'
// Java 9+, Kotlin
implementation 'com.hedera.hashgraph:sdk:2.0.11'
Select one of the following to provide the gRPC implementation.
// netty transport (for high throughput applications)
implementation 'io.grpc:grpc-netty-shaded:1.38.0'
// netty transport, unshaded (if you have a matching Netty dependency already)
implementation 'io.grpc:grpc-netty:1.38.0'
// okhttp transport (for lighter-weight applications or Android)
implementation 'io.grpc:grpc-okhttp:1.38.0'
Select one of the following to enable or disable Simple Logging Facade for Java (SLFJ4).
// Enable logs
implementation 'org.slf4j:slf4j-simple:1.7.29'
// Disable logs
implementation 'org.slf4j:slf4j-nop:1.7.29'
Select one of the following depending on your target platform.
<!-- Android, Corda DJVM, Java 7+ -->
<dependency>
<groupId>com.hedera.hashgraph</groupId>
<artifactId>sdk-jdk7</artifactId>
<version>2.0.11</version>
</dependency>
<!-- Java 9+, Kotlin -->
<dependency>
<groupId>com.hedera.hashgraph</groupId>
<artifactId>sdk</artifactId>
<version>2.0.11</version>
</dependency>
Select one of the following to provide the gRPC implementation.
<!-- netty transport (for server or desktop applications) -->
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-netty-shaded</artifactId>
<version>1.38.0</version>
</dependency>
<!-- netty transport, unshaded (if you have a matching Netty dependency already) -->
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-netty</artifactId>
<version>1.38.0</version>
</dependency>
<!-- okhttp transport (for lighter-weight applications or Android) -->
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-okhttp</artifactId>
<version>1.38.0</version>
</dependency>
Examples of several potential use cases and workflows are available
within the repository in examples/
.
- Java Development Kit (JDK) v14+ (note this is to build, not run)
$ ./gradlew compileJava
$ ./gradlew test
The easiest way to run integration tests is by providing network and operator information in a configuration file. This configuration file is passed into system properties.
$ ./gradlew integrationTest -PCONFIG_FILE="<ConfigurationFilePath>"
An example configuration file can be found in the repo here:
sdk/src/test/resources/client-config-with-operator.json
The format of the configuration file should be as follows:
{
"network": {
"<NodeAddress>": "<NodeAccountId>",
...
},
"operator": {
"accountId": "<shard.realm.num>",
"privateKey": "<PrivateKey>"
}
}
If a configuration file is not provided, OPERATOR_ID
and OPERATOR_KEY
must be passed into system properties
and integration tests will run against the Hedera test network.
$ ./gradlew integrationTest -POPERATOR_ID="<shard.realm.num>" -POPERATOR_KEY="<PrivateKey>"
HEDERA_NETWORK
can optionally be used to use previewnet
. This System Property can only be set to previewnet
.
$ ./gradlew integrationTest -POPERATOR_ID="<shard.realm.num>" -POPERATOR_KEY="<PrivateKey>" -PHEDERA_NETWORK="previewnet"
Note: It is also possible to use a custom network in a configuration file and pass OPERATOR_ID
and OPERATOR_KEY
into system properties.
An example configuration file containing only network information can be found in the repo here:
sdk/src/test/resources/client-config.json
Requires OPERATOR_ID
and OPERATOR_KEY
to be in a .env file in the examples directory. Many examples run against
the Hedera test network.
$ ./gradlew -q example:run<NameOfExample>
$ ./gradlew -q example:runGenerateKey
We welcome participation from all developers! For instructions on how to contribute to this repo, please review the Contributing Guide.
Licensed under Apache License, Version 2.0 – see LICENSE in this repo or apache.org/licenses/LICENSE-2.0.