Private transaction, contract extension, multi tenancy in Quorum blockchain
1. To support private transaction in Quorum, we have to enable privacy enhancement before starting Quorum network.
a. modify the istanbul-genesis.json (or genesis.json) file
“eip155Block”: 0,“eip158Block”: 0,“isQuorum”: true,+ “privacyEnhancementsBlock”: 0,“maxCodeSizeConfig” : [{“block” : 0,
b. modify tessera-config.json (or tessera-config-9.0.json) file
},- “alwaysSendTo”: []+ “alwaysSendTo”: [],+ “features”: {+ “enablePrivacyEnhancements”: true+ }}
c. add the arguments to send API method
To send private transaction in Quorum blockchain, we add parameters to the send API method.
privateFor: [“…”, “…”] — a list of public key of parties included in the private transaction
PrivacyFlag: 3 -for private state validation
PrivacyFlag: 1 -for counterparty protection
.send({from: accounts1[0],gas: 1500000,gasPrice: ‘0’,privateFor: [“ROAZBWtSacxXQrOe3FGAqJDyJjFePR5ce4TSIzmJ0Bc=”],// this is public key from tm7 of 7node Quorum samplesPrivacyFlag: 3})
Reference:
https://docs.goquorum.consensys.net/en/stable/Concepts/Privacy/PrivacyEnhancements/
2. To support contract extension, pass additional parameter to geth when starting quorum:
--rpcapi quorumExtension
To extend quorum contract in javascript, add the code that extends web3 manually
const methods = [{name: ‘approveExtension’,call: ‘quorumExtension_approveExtension’,params: 3,inputFormatter: [web3.extend.formatters.inputAddressFormatter, null, web3.extend.formatters.inputTransactionFormatter]},{name: ‘extendContract’,call: ‘quorumExtension_extendContract’,params: 4,inputFormatter: [web3.extend.formatters.inputAddressFormatter, null, web3.extend.formatters.inputAddressFormatter, web3.extend.formatters.inputTransactionFormatter]},{name: ‘cancelExtension’,call: ‘quorumExtension_cancelExtension’,params: 2,inputFormatter: [web3.extend.formatters.inputAddressFormatter, web3.extend.formatters.inputTransactionFormatter]},{name: ‘getExtensionStatus’,call: ‘quorumExtension_getExtensionStatus’,params: 1,inputFormatter: [web3.extend.formatters.inputAddressFormatter]},{name: ‘activeExtensionContracts’,call: ‘quorumExtension_activeExtensionContracts’,params: 0}];web3.extend({property: ‘quorumExtension’,methods});
Then use the normal way to call the quorum contract extension APIs.
For example:
web3.quorumExtension.activeExtensionContracts()
3. Multi-tenancy support
From the release:
https://github.com/ConsenSys/quorum/releases/tag/v21.1.0, it is possible to have multiple tenants in the same node. This feature is in alpha release as of May 2021. OAuth2 server is required when multi-tenancy is used.
This pull request enables multi tenants from a single node.
https://github.com/ConsenSys/quorum/pull/1105
Reference:
https://docs.goquorum.consensys.net/en/latest/HowTo/Use/Multitenancy/
https://docs.goquorum.consensys.net/en/latest/Concepts/Multitenancy/Overview/