# Tools

# Interaction tools

# GoQuorum

To interact with your Quorum network, you must install a GoQuorum client.

Install Go

To be able to install GoQuorum, you must install Go first. See Go: Getting Started (opens new window).

Having installed Go, install GoQuorum (opens new window).

With GoQuorum installed, you can connect to the Quorum nodes with the geth attach command:

geth attach ENDPOINT

where

  • ENDPOINT — your node HTTPS endpoint.

See View node access and credentials.

Example:

  • Key-protected
  • Password-protected
geth attach https://nd-123-456-789.p2pify.com/3c6e0b8a9c15224a8228b9a98ca1531d

Invoke any methods from Web3 JavaScript API (opens new window).

Example below demonstrates how to get the current block number:

> web3.eth.blockNumber
518973

# JSON-RPC API

Interact with your Quorum network using:

Use curl (opens new window) or Postman (opens new window).

Example below demonstrates how to get basic network information:

  • Key-protected
  • Password-protected
$ curl -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":2}' \
  https://nd-123-456-789.p2pify.com/3c6e0b8a9c15224a8228b9a98ca1531d

{"jsonrpc":"2.0","id":2,"result":"0x4"}

# Developments tools

# Truffle

Configure Truffle Suite (opens new window) to deploy contracts to your Quorum network.

  1. Install Truffle Suite (opens new window) and create a project.

WARNING

Use Truffle >= 5.0.14 which has complete Quorum support with privacy features.

  1. Install HDWalletProvider.

HDWalletProvider (opens new window) is Truffle's separate npm package used to sign transactions.

Run:

npm install @truffle/hdwallet-provider
  1. Create a new environment in truffle-config.js with:
  • HDWalletProvider
  • Your Quorum network running with Chainstack
const HDWalletProvider = require("@truffle/hdwallet-provider");
const mnemonic = "word1 word2 word3 word4 word5 word6 word7 word8 word9 word10 word11 word12 word13 word14 word15";

module.exports = {
    chainstack: {
        provider: () => new HDWalletProvider(mnemonic, "ENDPOINT"),
        network_id: "*",
        gasPrice: 0,
        gas: 4500000,
        type: "quorum"
    }
   }
};

where

  • chainstack — any network name that you will pass to the truffle migrate --network command.
  • HDWalletProvider — Truffle's custom provider to sign transactions.
  • mnemonic — your mnemonic that generates your accounts. You can also generate a mnemonic online with Mnemonic Code Converter (opens new window). Make sure you generate a 15 word mnemonic.
  • ENDPOINT — your Quorum node HTTPS endpoint. See View node access and credentials.
  • network_id — your Quorum network ID. See Default network ID. You can set it to * for any.
  • gasPrice — the setting must be 0 for the Quorum network.
  • gas — the setting must be the default 4500000 for the Quorum network.
  • type — the setting must be quorum to instruct Truffle for the Quorum network deployment.

Example:

  • Key-protected
  • Password-protected
const HDWalletProvider = require("@truffle/hdwallet-provider");
const mnemonic = "word1 word2 word3 word4 word5 word6 word7 word8 word9 word10 word11 word12 word13 word14 word15";

module.exports = {
  networks: {
    chainstack: {
        provider: () => new HDWalletProvider(mnemonic, "https://nd-123-456-789.p2pify.com/3c6e0b8a9c15224a8228b9a98ca1531d"),
        network_id: "*",
        gasPrice: 0,
        gas: 4500000,
        type: "quorum"
    }
   }
};
  1. Run truffle migrate --network chainstack and Truffle will deploy using Chainstack.

# web3.js

Build DApps using web3.js (opens new window) and Quorum nodes deployed with Chainstack.

  1. Install web3.js (opens new window).
  2. Use the HttpProvider object to connect to your node HTTPS endpoint.
const Web3 = require('web3');

const web3 = new Web3(new Web3.providers.HttpProvider('ENDPOINT'));

where

  • ENDPOINT — your node HTTPS endpoint.
  • USERNAME — your Quorum node access username.
  • PASSWORD — your Quorum node access password.

Example to get the latest block number:

  • Key-protected
  • Password-protected
const Web3 = require('web3');

const web3 = new Web3(new Web3.providers.HttpProvider('https://nd-123-456-789.p2pify.com/3c6e0b8a9c15224a8228b9a98ca1531d'));

web3.eth.getBlockNumber().then(console.log);

# web3j

Build DApps using web3j (opens new window) and Quorum nodes deployed with Chainstack.

Use the HttpService object to connect to your node HTTPS endpoint.

Example to get the latest block number:

package getLatestBlock;

import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;

import org.web3j.protocol.Web3j;
import org.web3j.protocol.core.DefaultBlockParameterName;
import org.web3j.protocol.core.methods.response.EthBlock;
import org.web3j.protocol.exceptions.ClientConnectionException;
import org.web3j.protocol.http.HttpService;

import okhttp3.Authenticator;
import okhttp3.Credentials;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.Route;

public final class App {

  private static final String USERNAME = "USERNAME";
  private static final String PASSWORD = "PASSWORD";
  private static final String ENDPOINT = "ENDPOINT";

  public static void main(String[] args) {
    try {

      OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder();
      clientBuilder.authenticator(new Authenticator() {
          @Override public Request authenticate(Route route, Response response) throws IOException {
              String credential = Credentials.basic(USERNAME, PASSWORD);
              return response.request().newBuilder().header("Authorization", credential).build();
          }
      });

      HttpService service = new HttpService(ENDPOINT, clientBuilder.build(), false);
      Web3j web3 = Web3j.build(service);


      EthBlock.Block latestBlock = web3.ethGetBlockByNumber(DefaultBlockParameterName.LATEST, false).send().getBlock();


      System.out.println("Latest Block: #" + latestBlock.getNumber());

    } catch (IOException | ClientConnectionException ex) {

      Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
    }
  }

}

where

  • ENDPOINT — your node HTTPS endpoint.
  • USERNAME — your node access username.
  • PASSWORD — your node access password.

See also the full code on GitHub (opens new window).