Skip to content

Web3 Quorum

Purpose

A helper layer over JP Morgan’s Quorum blockchain API: web3j-quorum

Methods

Binding name: p6.web3quorum


Value: ZERO_GAS_PROVIDER

This is a static value that can be used in various Web3j calls that require a ContractGasProvider.

This value provider specifies zero gas price with a maximum gas of three million.


Method: Quorum build(String url)

Build an instance of a Quorum object (extension of Web3j) using the supplied node URL to build an HttpService connection.

Note

You can use the core Web3j Quorum instance build methods using UnixIpcService or WindowsIpcService for a more efficient ‘same host’ connection.


Method: Enclave buildEnclave(final Quorum quorum, final String url, final int port, final String... tesseraIpcPath) throws P6Exception

Builds an instance of an Enclave object for the given Quorum instance. The URL and port parameters are used to connect to the Tessera transaction manager.

Note

The optional tesseraIpcPath parameter allows the specification of a Unix domain socket path for Tessera IPC.


Method: QuorumTransactionManager buildPrivateTransactionManager(final Quorum quorum, final Enclave enclave, final String originatorKey, final Credentials credentials, final String... recipientKeys) throws P6Exception

Create a private transaction manager using the Quorum instance, Enclave and credentials given. The list of recipient keys are the public keys of the transaction recipients: privateFor-public-keys.


Example

/**
 * Quorum example requires their 7nodes example running locally
 * plus a demo-app-smart-contract-x.x.jar deployed in P6_DATA/lib
 * See: https://github.com/amalto/solidity-jar-builder for build instructions.
 * 
 * @import _QuorumImports
 */

def TESSERA1_ENCLAVE_KEY = 'BULeR8JyUWhiuuCMU/HLA0Q5pzkYT+cHII3ZKBey3Bo='
def TESSERA7_ENCLAVE_KEY = 'ROAZBWtSacxXQrOe3FGAqJDyJjFePR5ce4TSIzmJ0Bc='

def quorum = p6.web3quorum.build('http://localhost:22000')
log.info 'Quorum node: ' + quorum.web3ClientVersion().send().getWeb3ClientVersion()

def enclave = p6.web3quorum.buildEnclave(quorum, 'http://localhost', 9081)
log.info 'Enclave is available'

// load the credentials from the 7nodes example filesystem
def credentials = WalletUtils.loadCredentials('', '/Users/simont/Documents/quorum-examples/examples/7nodes/keys/key1')
log.info 'Read credentials: ' + credentials

// Create a quorum transaction manager
// This object (used by the generated code) does the following:
// 1. sends the raw payload to tessera and retrieves the txHash
// 2. replace the transaction payload with the received txHash
// 3. create and sign a raw transaction using the provided credentials
// 4. invoke the eth_SendRawPrivateTransaction API to send the transaction to quorum
def qrtxm = p6.web3quorum.buildPrivateTransactionManager(quorum, enclave, TESSERA1_ENCLAVE_KEY, credentials, TESSERA7_ENCLAVE_KEY)
log.info 'Transaction manager available'

// Deploy the contract giving initial value of 42!
def ssContract = SimpleStorage.deploy(quorum, qrtxm, p6.web3quorum.ZERO_GAS_PROVIDER, BigInteger.valueOf(42)).send()

log.info 'Contract deployed, address:' + ssContract.getContractAddress()
log.info '    Transaction hash: ' + ssContract.getTransactionReceipt().get().getTransactionHash()

Quorum Imports

import org.web3j.protocol.core.methods.response.Web3ClientVersion
import org.web3j.crypto.WalletUtils

import io.platform6.demo.sc.SimpleStorage

log.debug '---Starting---'