Open In App

Quorum Blockchain

Quorum is an “Enterprise-focused” Ethereum blockchain that tries to improve blockchain technology.  Although the first generation Blockchain provides scalability, peer-to-peer networks, interoperability, transparency, and other features, it is still not perfect. Researchers around the world are working hard to improve the state of the blockchain. Quorum was the brainchild of JP Morgan, which developed to advance blockchain technology in the financial industry but J.P. Morgan handover the Quorum Blockchain to ConsenSys which provides the services and support for Quorum Blockchain.

Need For Quorum

At present, the finance sector’s information is handled by more than one organization, but still, the finance sector suffers from a lack of transparency, information control, and security. The traditional blockchain also does not fulfill the finance sector requirements even if it provides traceability and immutability. There is a need for a system that provides private control on the blockchain through automation which is customizable according to needs.   



Features of Quorum

Advantages of Quorum

Disadvantages of Quorum

Quorum Architecture

Let’s discuss the architectural details of Quorum Blockchain.



Project-based on Quorum

Applications of Quorum Blockchain

Implementation Of Quorum Blockchain Using Docker In  Google Cloud Shell

Step 1: Open the Google cloud shell in the provided editor mode from the Google developer console.

Step 2: Install Docker.

Step 3: Clone the repository by running these commands and, after that, move to the quorum-examples folder.

$ git clone https://github.com/Consensys/quorum-examples
$ cd quorum-examples
$ PRIVATE_CONFIG=ignore QUORUM_CONSENSUS=raft docker-compose up -d  

Step 4:  After running the above command there are 7 containers running with 7 nodes and 7 transaction managers. At least 3 nodes are required. So, open 3 terminals and activate the 3 nodes by running these commands:

For node1:
docker exec -it quorum-examples_node1_1 geth attach /qdata/dd/geth.ipc
eth.accounts
eth.getBalance("0xed9d02e382b34818e88b88a309c7fe71e65f419d")

For node 4:
docker exec -it quorum-examples_node7_1 geth attach /qdata/dd/geth.ipc
eth.accounts
eth.getBalance("0xcc71c7546429a13796cf1bf9228bff213e7ae9cc")

For node 7:
docker exec -it quorum-examples_node4_1 geth attach /qdata/dd/geth.ipc
eth.accounts
eth.getBalance("0x9186eb3d20cbd1f5f992a950d808c4495153abd5")

 Step 5: Create a smart contract (sample code), copy the code, and paste it into any geth console to generate the contract address: 

a = eth.accounts[0]
web3.eth.defaultAccount = a;
// abi and bytecode generated from simplestorage.sol:
// > solcjs --bin --abi simplestorage.sol
var abi = [{"constant":true,"inputs":[],"name":"storedData","outputs":
          [{"name":"","type":"uint256"}],"payable":false,"type":"function"},
           {"constant":false,"inputs":[{"name":"x","type":"uint256"}],"name":"set",
            "outputs":[],"payable":false,"type":"function"},
           {"constant":true,"inputs":[],"name":"get","outputs":
          [{"name":"retVal","type":"uint256"}],"payable":false,"type":"function"},
           {"inputs":[{"name":"initVal","type":"uint256"}],"payable":false,"type":"constructor"}];
var bytecode = "0x6060604052341561000f57600080fd5b604051602080610149833981016040528080519060200190919050505b806000819055505b505b610104806100456000396000f30060606040526000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680632a1afcd914605157806360fe47b11460775780636d4ce63c146097575b600080fd5b3415605b57600080fd5b606160bd565b6040518082815260200191505060405180910390f35b3415608157600080fd5b6095600480803590602001909190505060c3565b005b341560a157600080fd5b60a760ce565b6040518082815260200191505060405180910390f35b60005481565b806000819055505b50565b6000805490505b905600a165627a7a72305820d5851baab720bba574474de3d09dbeaabc674a15f4dd93b974908476542c23f00029";
var simpleContract = web3.eth.contract(abi);
var simple = simpleContract.new(40002, {from:web3.eth.accounts[0], 
                                data: bytecode, gas: 0x47b760}, 
                                function(e, contract){
if (e) 
{
 console.log("err creating contract", e);
} else 
{
 if (!contract.address) 
 {
  console.log("Contract transaction send: TransactionHash: " + 
               contract.transactionHash + " waiting to be mined...");
 } else 
 {
  console.log("Contract mined! Address: " + contract.address);
  console.log(contract);
 }
}
});

 

Step 6:  Once the transaction hash is generated, it is possible to get the contract address by using this command:

eth.getTransactionReceipt(mention the txHash here as shown in picture)

Step 7: Deploy the contract address.

var address = # mention your contract address here
var abi = [{"constant":true,"inputs":[],"name":"storedData","outputs":
          [{"name":"","type":"uint256"}],"payable":false,"type":"function"},
           {"constant":false,"inputs":[{"name":"x","type":"uint256"}],
            "name":"set","outputs":[],"payable":false,"type":"function"},
           {"constant":true,"inputs":[],"name":"get","outputs":
          [{"name":"retVal","type":"uint256"}],"payable":false,"type":"function"},
           {"inputs":[{"name":"initVal","type":"uint256"}],"type":"constructor"}];
var private = eth.contract(abi).at(address)

Output: Here node 1 made a private transaction to node 7 and node 4 is completely isolated from this transaction state, so only node 1 and node 7 are able to see the transaction state.  

 


Article Tags :