/web3j-quorum

web3j integration layer for JP Morgan's Quorum

Primary LanguageJavaOtherNOASSERTION

web3j-quorum: Java integration library for Quorum

web3j-quorum is an extension to web3j providing support for JP Morgan's Quorum API.

web3j is a lightweight, reactive, type safe Java library for integrating with clients (nodes) on distributed ledger or blockchain networks.

For further information on web3j, please refer to the main project page and the documentation at Read the Docs.

Features

Getting started

Add the relevant dependency to your project:

Maven

Java 8:

<dependency>
  <groupId>org.web3j</groupId>
  <artifactId>quorum</artifactId>
  <version>0.3.0</version>
</dependency>

Gradle

Java 8:

compile ('org.web3j:quorum:0.3.0')

Run Quorum

See instructions as per the Quorum project page

Start sending requests

To send asynchronous requests using a Future:

Quorum quorum = Quorum.build(new HttpService("http://localhost:22001"));
QuorumNodeInfo quorumNodeInfo = quorum.quorumNodeInfo().sendAsync().get();
String voteAccount = quorumNodeInfo.getNodeInfo().getVoteAccount();

To use an RxJava Observable:

Quorum quorum = Quorum.build(new HttpService("http://localhost:22001"));
quorum.quorumNodeInfo().observable().subscribe(x -> {
    String voteAccount = x.getNodeInfo().getVoteAccount();
    ...
});

To send synchronous requests:

Quorum quorum = Quorum.build(new HttpService("http://localhost:22001"));
QuorumNodeInfo quorumNodeInfo = quorum.quorumNodeInfo().send();
String voteAccount = quorumNodeInfo.getNodeInfo().getVoteAccount();

IPC

web3j also supports fast inter-process communication (IPC) via file sockets to clients running on the same host as web3j. To connect simply use IpcService instead of HttpService when you create your service:

Quorum quorum = Quorum.build(new IpcService("/path/to/socketfile"));
...

Smart Contract Wrappers

Smart contract wrappers generated using web3j 2.0+ work out the box with with web3j-quorum.

The only difference is that you'll need to use the Quorum ClientTransactionManager:

ClientTransactionManager transactionManager = new ClientTransactionManager(
        web3j, "0x<from-address>", Arrays.asList("0x<privateFor-addr>", ...);
YourSmartContract contract = YourSmartContract.deploy(
    <web3j>, <transactionManager>, GAS_PRICE, GAS_LIMIT,
    <initialValue>,
    <param1>, ..., <paramN>);

These wrappers are similar to the web3j smart contract wrappers with the exception that the transactions are signed by the Quorum nodes rather then by web3j. They also support the privateFor field on transactions.

See the web3j documentation for a detailed overview of smart contracts and web3j.