Quorum tooling
Deprecation notice
Consortium networks have been deprecated. This guide is for historical reference.
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.
Having installed Go, install GoQuorum.
With GoQuorum installed, you can connect to the Quorum nodes with the geth attach
command:
geth attach ENDPOINT
where ENDPOINT — your node HTTPS endpoint
Example:
geth attach https://nd-123-456-789.p2pify.com/3c6e0b8a9c15224a8228b9a98ca1531d
geth attach https://user-name:[email protected]
Invoke any methods from Web3 JavaScript API.
The example below demonstrates how to get the current block number:
> web3.eth.blockNumber
518973
JSON-RPC API
Interact with your Quorum network using:
The example below demonstrates how to get basic network information:
$ 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"}
$ curl -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":2}' \
https://user-name:[email protected]
{"jsonrpc":"2.0","id":2,"result":"0x4"}
Developments tools
Truffle
Configure Truffle Suite to deploy contracts to your Quorum network.
-
Install Truffle Suite and create a project
Recommended version
Use Truffle >= 5.0.14 which has complete Quorum support with privacy features.
-
Install
HDWalletProvider
HDWalletProvider is Truffle's separate npm package used to sign transactions.
Run:
npm install @truffle/hdwallet-provider
-
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 thetruffle migrate --network
command.HDWalletProvider
— Truffle's custom provider to sign transactionsmnemonic
— your mnemonic that generates your accounts. You can also generate a mnemonic online with Mnemonic Code Converter. Make sure you generate a 15 word mnemonic.- ENDPOINT — your Quorum node HTTPS endpoint. See View node access details.
network_id
— your Quorum network ID. See Default network ID. You can set it to*
for any.gasPrice
— the setting must be0
for the Quorum network.gas
— the setting must be the default4500000
for the Quorum network.type
— the setting must bequorum
to instruct Truffle for the Quorum network deployment.
Example:
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" } } };
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://user-name:[email protected]"), network_id: "*", gasPrice: 0, gas: 4500000, type: "quorum" } } };
-
Run
truffle migrate --network chainstack
and Truffle will deploy using Chainstack
web3.js
Build DApps using web3.js and Quorum nodes deployed with Chainstack.
-
Install web3.js.
-
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:
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);
const Web3 = require('web3'); const web3 = new Web3(new Web3.providers.HttpProvider('https://user-name:[email protected]')); web3.eth.getBlockNumber().then(console.log);
web3j
Build DApps using web3j 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.
Updated 2 months ago