Hedera™ Hashgraph Java SDK
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.
Install
Gradle
Select one of the following depending on your target platform.
// Android, Corda DJVM, Java 7+
implementation 'com.hedera.hashgraph:sdk-jdk7:2.0.1'
// Java 9+, Kotlin
implementation 'com.hedera.hashgraph:sdk:2.0.1'
Select one of the following to provide the gRPC implementation.
// netty transport (for high throughput applications)
implementation 'io.grpc:grpc-netty-shaded:1.24.0'
// netty transport, unshaded (if you have a matching Netty dependency already)
implementation 'io.grpc:grpc-netty:1.24.0'
// okhttp transport (for lighter-weight applications or Android)
implementation 'io.grpc:grpc-okhttp:1.24.0'
Maven
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.0-beta.3</version>
</dependency>
<!-- Java 9+, Kotlin -->
<dependency>
<groupId>com.hedera.hashgraph</groupId>
<artifactId>sdk</artifactId>
<version>2.0.0-beta.3</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.24.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.24.0</version>
</dependency>
<!-- okhttp transport (for lighter-weight applications or Android) -->
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-okhttp</artifactId>
<version>1.24.0</version>
</dependency>
Usage
Examples of several potential use cases and workflows are available within the repository in examples/
.
Development
Dependencies
- Java Development Kit (JDK) v12+ (note this is to build, not run)
Compile
$ ./gradlew compileJava
Unit Test
$ ./gradlew test
Integration 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
Examples
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
Contributing to this Project
We welcome participation from all developers! For instructions on how to contribute to this repo, please review the Contributing Guide.
License Information
Licensed under Apache License, Version 2.0 – see LICENSE in this repo or apache.org/licenses/LICENSE-2.0.