{"id":13766311,"url":"https://github.com/web3j/web3j-quorum","last_synced_at":"2025-04-09T11:11:36.023Z","repository":{"id":15369704,"uuid":"78003032","full_name":"web3j/web3j-quorum","owner":"web3j","description":"web3j integration layer for JP Morgan's Quorum","archived":false,"fork":false,"pushed_at":"2023-05-16T12:49:38.000Z","size":508,"stargazers_count":113,"open_issues_count":1,"forks_count":52,"subscribers_count":17,"default_branch":"master","last_synced_at":"2025-04-02T09:09:43.893Z","etag":null,"topics":["ethereum","java","quorum","web3j"],"latest_commit_sha":null,"homepage":"https://www.web3labs.com","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/web3j.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["web3j"]}},"created_at":"2017-01-04T09:49:01.000Z","updated_at":"2025-03-13T07:29:33.000Z","dependencies_parsed_at":"2024-08-03T16:14:25.827Z","dependency_job_id":null,"html_url":"https://github.com/web3j/web3j-quorum","commit_stats":null,"previous_names":[],"tags_count":28,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/web3j%2Fweb3j-quorum","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/web3j%2Fweb3j-quorum/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/web3j%2Fweb3j-quorum/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/web3j%2Fweb3j-quorum/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/web3j","download_url":"https://codeload.github.com/web3j/web3j-quorum/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248027411,"owners_count":21035594,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ethereum","java","quorum","web3j"],"created_at":"2024-08-03T16:00:53.755Z","updated_at":"2025-04-09T11:11:35.994Z","avatar_url":"https://github.com/web3j.png","language":"Java","readme":".. To build this file locally ensure docutils Python package is installed and run:\n   $ rst2html.py README.rst README.html\n\nweb3j-quorum: Java integration library for Quorum\n=================================================\n\n.. image:: https://travis-ci.org/web3j/web3j-quorum.svg?branch=master\n       :target: https://travis-ci.org/web3j/web3j-quorum\n\nweb3j-quorum is an extension to `web3j \u003chttps://github.com/web3j/web3j\u003e`_ providing support for\n`JP Morgan's Quorum \u003chttps://github.com/jpmorganchase/quorum\u003e`_ API.\n\nweb3j is a lightweight, reactive, type safe Java library for integrating with clients\n(nodes) on distributed ledger or blockchain networks.\n\nFor further information on web3j, please refer to the\n`main project page \u003chttps://github.com/web3j/web3j\u003e`_ and the documentation at\n`Read the Docs \u003chttp://docs.web3j.io\u003e`_.\n\n\nFeatures\n--------\n\n- Support for Quorum's private transactions through private transaction manager\n- Ability to send **signed** private transactions\n- Works out the box with web3j's\n  `smart contract wrappers \u003chttps://docs.web3j.io/smart_contracts/#solidity-smart-contract-wrappers\u003e`_\n\nGetting started\n---------------\n\nAdd the relevant dependency to your project:\n\nMaven\n-----\n\nJava 17:\n\n.. code-block:: xml\n\n   \u003cdependency\u003e\n     \u003cgroupId\u003eorg.web3j\u003c/groupId\u003e\n     \u003cartifactId\u003equorum\u003c/artifactId\u003e\n     \u003cversion\u003e4.10.0\u003c/version\u003e\n   \u003c/dependency\u003e\n\nGradle\n------\n\nJava 17:\n\n.. code-block:: groovy\n\n   compile ('org.web3j:quorum:4.10.0')\n\n\nRun Quorum\n----------\n\nSee instructions as per the `Quorum project page \u003chttps://github.com/jpmorganchase/quorum\u003e`_\n\n\nStart sending requests\n----------------------\n\nTo send synchronous requests:\n\n.. code-block:: java\n\n   Quorum quorum = Quorum.build(new HttpService(\"http://localhost:22001\"));\n   Web3ClientVersion web3ClientVersion = quorum.web3ClientVersion().send();\n   String clientVersion = web3ClientVersion.getWeb3ClientVersion();\n\nTo send asynchronous requests:\n\n.. code-block:: java\n\n   Quorum quorum = Quorum.build(new HttpService(\"http://localhost:22001\"));\n   Web3ClientVersion web3ClientVersion = quorum.web3ClientVersion().sendAsync().get();\n   String clientVersion = web3ClientVersion.getWeb3ClientVersion();\n\nTo use an RxJava Observable:\n\n.. code-block:: java\n\n   Quorum quorum = Quorum.build(new HttpService(\"http://localhost:22001\"));\n   quorum.web3ClientVersion().observable().subscribe(x -\u003e {\n       String clientVersion = x.getWeb3ClientVersion();\n       ...\n   });\n\n\n\nIPC\n---\n\nweb3j also supports fast inter-process communication (IPC) via file sockets to clients running on\nthe same host as web3j. To connect simply use *UnixIpcService* or *WindowsIpcService* instead of\n*HttpService* when you create your service:\n\n.. code-block:: java\n\n   // OS X/Linux/Unix:\n   Quorum quorum = Quorum.build(new UnixIpcService(\"/path/to/socketfile\"));\n   ...\n\n   // Windows\n   Quorum quorum = Quorum.build(new WindowsIpcService(\"/path/to/namedpipefile\"));\n   ...\n\n\nSmart Contract Wrappers\n-----------------------\n\n`Smart contract wrappers \u003chttps://docs.web3j.io/smart_contracts/#solidity-smart-contract-wrappers\u003e`_\ngenerated using web3j 2.0+ work out the box with with web3j-quorum.\n\nThe only difference is that you'll need to use the\n`Quorum ClientTransactionManager \u003chttps://github.com/web3j/quorum/tree/master/src/main/java/org/web3j/quorum/tx/ClientTransactionManager.java\u003e`_:\n\n.. code-block:: java\n\n   QuorumTransactionManager transactionManager = new QuorumTransactionManager(\n           web3j, \"0x\u003cfrom-address\u003e\", Arrays.asList(\"\u003cprivateFor-public-key\u003e\", ...);\n   YourSmartContract contract = YourSmartContract.deploy(\n       \u003cweb3j\u003e, \u003ctransactionManager\u003e, GAS_PRICE, GAS_LIMIT,\n       \u003cparam1\u003e, ..., \u003cparamN\u003e).send();\n\n\nThese wrappers are similar to the web3j smart contract wrappers with the exception that the\ntransactions are signed by the Quorum nodes rather then by web3j. They also support the privateFor\nfield on transactions.\n\nSee the `web3j documentation \u003chttps://docs.web3j.io/smart_contracts/\u003e`_ for a detailed overview\nof smart contracts and web3j.\n\n\nSending Raw Private Transactions\n--------------------------------\nweb3j supports sending raw private transactions through a connection to Quorum Transaction Managers. Code examples\n\nConnection to Tessera via HTTP\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n.. code-block:: java\n\n   Credentials credentials = ...\n   //connect to quorum node via http or ipc as described above\n   Quorum quorum = ... \n\n   EnclaveService enclaveService = new EnclaveService(\"http://TESSERA_THIRD_PARTY_URL\", TESSERA_THIRD_PARTY_PORT, httpClient);\n   Enclave enclave = new Tessera(enclaveService, quorum);\n\n   QuorumTransactionManager qrtxm = new QuorumTransactionManager(\n       quorum, credentials, TM_FROM_KEY, Arrays.asList(TM_TO_KEY_ARRAY),\n       enclave,\n       30,     // Retry times\n       2000);  // Sleep\n\nConnection to Tessera via IPC\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n.. code-block:: java\n\n   Credentials credentials = ...\n   //connect to quorum node via http or ipc as described above\n   Quorum quorum = ... \n   \n   //build http client that supports ipc connection\n   UnixDomainSocketFactory socketFactory = new UnixDomainSocketFactory(new File(\"TESSERA_IPC_PATH\"));\n        OkHttpClient client = new OkHttpClient.Builder()\n                .socketFactory(socketFactory)\n                .build();\n\n   EnclaveService enclaveService = new EnclaveService(\"http://localhost\", TESSERA_THIRD_PARTY_PORT, client);\n   Enclave enclave = new Tessera(enclaveService, quorum);\n\n   QuorumTransactionManager qrtxm = new QuorumTransactionManager(\n       quorum, credentials, TM_FROM_KEY, Arrays.asList(TM_TO_KEY_ARRAY),\n       enclave,\n       30,     // Retry times\n       2000);  // Sleep\n       \nConnection to Constellation via IPC\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n.. code-block:: java\n\n   Credentials credentials = ...\n   //connect to quorum node via http or ipc as described above\n   Quorum quorum = ... \n   \n   //build http client that supports ipc connection\n   UnixDomainSocketFactory socketFactory = new UnixDomainSocketFactory(new File(\"CONSTELLATION_IPC_PATH\"));\n        OkHttpClient client = new OkHttpClient.Builder()\n                .socketFactory(socketFactory)\n                .build();\n\n   EnclaveService enclaveService = new EnclaveService(\"http://localhost\", CONSTELLATION_THIRD_PARTY_PORT, client);\n   Enclave enclave = new Constellation(enclaveService, quorum);\n\n   QuorumTransactionManager qrtxm = new QuorumTransactionManager(\n       quorum, credentials, TM_FROM_KEY, Arrays.asList(TM_TO_KEY_ARRAY),\n       enclave,\n       30,     // Retry times\n       2000);  // Sleep\n       \nUsing the QuorumTransactionManager with Smart Contract Wrappers\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n.. code-block:: java\n\n   YourSmartContract.deploy(quorum,\n       qrtxm,\n       GAS_PRICE, GAS_LIMIT,\n       \u003cparam1\u003e, ..., \u003cparamN\u003e).send();\n       \n       \n       \nUsing the QuorumTransactionManager alone\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nUsing a single QuorumTransactionManager method ``signAndSend``\n\t\n.. code-block:: java\n\t\n\tRawTransaction rawTransaction = ...\n\tEthSendTransaction ethSendTransaction = qrtxm.signAndSend(rawTransaction);\n\t\nUsing multiple exposed QuorumTransactionManager methods (``storeRawRequest, sign, sendRaw``)\n\n.. code-block:: java\n\n\t//send raw bytecode to QuorumTranasctionManager\n\tSendResponse storeRawResponse = qrtxm.storeRawRequest(HEX_ENCODED_SMARTCONTRACT_BYTECODE, TM_FROM_KEY, Arrays.asList(TM_TO_KEY_ARRAY));\n\tString tesseraTxHash = Numeric.toHexString(Base64.getDecoder().decode(storeRawResponse.getKey()));\n\t\n\t//create raw transaction with hash returned from QuorumTransactionManager\n\tRawTransaction rawTransaction = ...\n\t\n\t//sign raw transaction\n\tString signedTx = qrtxm.sign(rawTransaction);\n\t\n\t//send signed raw transaction to quorum node\n\tEthSendTransaction ethSendTransaction = qrtxm.sendRaw(signedTx, Arrays.asList(TM_TO_KEY_ARRAY));\n\t\nRetrieving a private transaction payload with Enclave ``receive`` method\n\n.. code-block:: java\n\n\tString payload = enclave.receiveRequest(tesseraTxHash, TM_TO_KEY);\n\t\nFull sample code\n~~~~~~~~~~~~~~~~\n\n`Sample code \u003chttps://github.com/jpmorganchase/quorum-examples/tree/master/examples/7nodes/samples/send-private-txn-java\u003e`_ for sending raw private transactions via smart contract, QuorumTransactionManager and Enclave\n\n\nUsing web3j RawTransactionManager\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n.. code-block:: java\n\n   // Raw txn\n   RawTransactionManager qrtxm = new RawTransactionManager(\n         quorum,\n         credentials,\n         30,     // Retry times\n         2000);  // Sleep\n\n   YourSmartContract.deploy(quorum,\n         qrtxm,\n         GAS_PRICE, GAS_LIMIT,\n         \u003cparam1\u003e, ..., \u003cparamN\u003e).send();\n","funding_links":["https://github.com/sponsors/web3j"],"categories":["Software components"],"sub_categories":["Libraries"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fweb3j%2Fweb3j-quorum","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fweb3j%2Fweb3j-quorum","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fweb3j%2Fweb3j-quorum/lists"}