Paghimo sa publiko ug pribado nga mga transaksyon sa JPMorgan Quorum blockchain gamit ang Web3

Paghimo sa publiko ug pribado nga mga transaksyon sa JPMorgan Quorum blockchain gamit ang Web3

korum usa ka blockchain nga nakabase sa Ethereum nga gimugna sa JPMorgan ug labing bag-o nahimo nga una nga gipang-apod-apod nga platform sa ledger nga gitanyag sa Microsoft Azure.

Gisuportahan sa Korum ang pribado ug publiko nga mga transaksyon ug adunay daghang mga kaso sa paggamit sa komersyo.

Niini nga artikulo, atong susihon ang usa sa ingon nga senaryo - ang pag-deploy sa usa ka giapod-apod nga ledger network tali sa usa ka supermarket ug usa ka tag-iya sa bodega aron mahatagan ang labing bag-ong kasayuran bahin sa temperatura sa bodega.

Ang code nga gigamit niini nga panudlo anaa sa mga repositoryo sa GitHub.

Ang artikulo naglangkob:

  • paghimo sa usa ka smart nga kontrata;
  • deployment sa Quorum network gamit ang Chainstack;
  • Mga transaksyon sa publiko sa korum;
  • Pribado nga mga transaksyon sa korum.

Sa pag-ilustrar, naggamit mi og senaryo sa pagmonitor sa temperatura sa mga bodega sa mga miyembro sa Quorum network sulod sa Internet of Things (IoT).

Konteksto

Usa ka grupo sa mga kompanya sa bodega ang nagkahiusa sa usa ka consortium aron dungan nga magtipig og impormasyon ug mag-automate sa mga proseso sa blockchain. Alang niini, ang mga kompanya nakahukom sa paggamit sa Quorum. Niining artikuloha atong hisgotan ang duha ka senaryo: mga transaksyon sa publiko ug mga pribadong transaksyon.

Ang mga transaksyon gihimo sa lainlaing mga partisipante aron makig-uban sa consortium diin sila nahisakop. Ang matag transaksyon mahimong mag-deploy og kontrata o motawag og function sa kontrata para mag-upload og data sa network. Kini nga mga aksyon gisundog sa tanan nga mga node sa network.

Ang mga transaksyon sa publiko magamit alang sa pagtan-aw sa tanan nga mga partisipante sa consortium. Ang pribado nga mga transaksyon makadugang sa usa ka layer sa confidentiality ug magamit lamang niadtong mga partisipante nga adunay katungod sa pagbuhat niini.

Alang sa duha nga mga senaryo, gigamit namon ang parehas nga kontrata alang sa katin-awan.

Smart nga kontrata

Sa ubos usa ka yano nga smart nga kontrata nga gihimo alang sa among senaryo. Kini adunay usa ka publiko nga variable temperature, nga mahimong usbon gamit ang set ug makadawat pinaagi sa pamaagi get.

pragma solidity ^0.4.25;
contract TemperatureMonitor {
  int8 public temperature;
function set(int8 temp) public {
    temperature = temp;
  }
function get() view public returns (int8) {
    return temperature;
  }
}

Aron makatrabaho ang kontrata web3.js, kinahanglan kini hubaron sa ABI format ug bytecode. Paggamit sa function formatContractsa ubos nag-compile sa kontrata gamit solc-js.

function formatContract() {
  const path = './contracts/temperatureMonitor.sol';
  const source = fs.readFileSync(path,'UTF8');
return solc.compile(source, 1).contracts[':TemperatureMonitor'];
}

Ang nahuman nga kontrata ingon niini:

// interface
[ 
  { 
    constant: true,
    inputs: [],
    name: ‘get’,
    outputs: [Array],
    payable: false,
    stateMutability: ‘view’,
    type: ‘function’ 
  },
  { 
    constant: true,
    inputs: [],
    name: ‘temperature’,
    outputs: [Array],
    payable: false,
    stateMutability: ‘view’,
    type: ‘function’ 
  },
  {
    constant: false,
    inputs: [Array],
    name: ‘set’,
    outputs: [],
    payable: false,
    stateMutability: ‘nonpayable’,
    type: ‘function’ 
  }
]

// bytecode
0x608060405234801561001057600080fd5b50610104806100206000396000f30060806040526004361060525763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416636d4ce63c81146057578063adccea12146082578063faee13b9146094575b600080fd5b348015606257600080fd5b50606960ae565b60408051600092830b90920b8252519081900360200190f35b348015608d57600080fd5b50606960b7565b348015609f57600080fd5b5060ac60043560000b60c0565b005b60008054900b90565b60008054900b81565b6000805491810b60ff1660ff199092169190911790555600a165627a7a72305820af0086d55a9a4e6d52cb6b3967afd764ca89df91b2f42d7bf3b30098d222e5c50029

Karon nga ang kontrata andam na, among i-deploy ang network ug i-deploy ang kontrata.

Pag-deploy sa node

Paghimo sa publiko ug pribado nga mga transaksyon sa JPMorgan Quorum blockchain gamit ang Web3

Ang pag-deploy sa usa ka node mahimong labi ka kusog sa pagtrabaho ug kini nga proseso mahimong mapulihan pinaagi sa paggamit sa usa ka serbisyo Chainstack.

Sa ubos mao ang proseso sa pag-deploy sa Quorum network uban sa Raft consensus ug tulo ka node.

Una, maghimo kita og proyekto ug tawgon kini nga Korum Project:

Paghimo sa publiko ug pribado nga mga transaksyon sa JPMorgan Quorum blockchain gamit ang Web3

Magbuhat ta og Quorum network nga adunay Raft consensus sa Google Cloud Platform:

Paghimo sa publiko ug pribado nga mga transaksyon sa JPMorgan Quorum blockchain gamit ang Web3

Atong idugang ang duha pa ka node sa node nga nahimo na pinaagi sa default:

Paghimo sa publiko ug pribado nga mga transaksyon sa JPMorgan Quorum blockchain gamit ang Web3

Tulo ka running nodes:

Paghimo sa publiko ug pribado nga mga transaksyon sa JPMorgan Quorum blockchain gamit ang Web3

Ang panid sa mga detalye sa node nagpakita sa RPC endpoint, public key, ug uban pa.

Paghimo sa publiko ug pribado nga mga transaksyon sa JPMorgan Quorum blockchain gamit ang Web3

Gi-deploy ang network. Karon atong i-deploy ang mga smart nga kontrata ug ipahigayon ang mga transaksyon gamit web3.js.

Mga transaksyon sa publiko

Konteksto

Ang temperatura sa bodega hinungdanon kaayo sa pagkunhod sa mga gasto, labi na sa mga produkto nga gituyo nga tipigan sa sub-zero nga temperatura.

Pinaagi sa pagtugot sa mga kompanya nga ipaambit ang temperatura sa gawas sa ilang lokasyon sa heyograpiya sa tinuud nga oras ug irekord kini sa usa ka dili mausab nga ledger, ang mga partisipante sa network makapamenos sa gasto ug oras.

Paghimo sa publiko ug pribado nga mga transaksyon sa JPMorgan Quorum blockchain gamit ang Web3

Magbuhat kami og tulo ka buluhaton, nga gihulagway sa diagram:

  1. Atong i-deploy ang kontrata pinaagi sa Node 1:

    const contractAddress = await deployContract(raft1Node);
    console.log(`Contract address after deployment: ${contractAddress}`);

  2. Ibutang ang temperatura pinaagi sa Node 2 sa 3 degrees:

    const status = await setTemperature(raft2Node, contractAddress, 3);
    console.log(`Transaction status: ${status}`);

  3. Node 3 makadawat og impormasyon gikan sa smart contract. Ibalik sa kontrata ang kantidad nga 3 degree:

    const temp = await getTemperature(raft3Node, contractAddress);
    console.log(‘Retrieved contract Temperature’, temp);

    Sunod, atong tan-awon kon unsaon paghimo sa usa ka publikong transaksyon sa Quorum network gamit web3.js.

Nagsugod kami usa ka pananglitan pinaagi sa RPC alang sa tulo nga mga node:

const raft1Node = new Web3(
 new Web3.providers.HttpProvider(process.env.RPC1), null, {
   transactionConfirmationBlocks: 1,
 },
);
const raft2Node = new Web3(
 new Web3.providers.HttpProvider(process.env.RPC2), null, {
   transactionConfirmationBlocks: 1,
 },
);
const raft3Node = new Web3(
 new Web3.providers.HttpProvider(process.env.RPC3), null, {
   transactionConfirmationBlocks: 1,
 },
);

Atong i-deploy ang smart contract:

// returns the default account from the Web3 instance initiated previously
function getAddress(web3) {
  return web3.eth.getAccounts().then(accounts => accounts[0]);
}
// Deploys the contract using contract's interface and node's default address
async function deployContract(web3) {
  const address = await getAddress(web3);
// initiate contract with contract's interface
  const contract = new web3.eth.Contract(
    temperatureMonitor.interface
  );
return contract.deploy({
    // deploy contract with contract's bytecode
    data: temperatureMonitor.bytecode,
  })
  .send({
    from: address,
    gas: '0x2CD29C0',
  })
  .on('error', console.error)
  .then((newContractInstance) => {
    // returns deployed contract address
    return newContractInstance.options.address;
  });
}

web3.js naghatag og duha ka mga paagi sa pagpakig-uban sa kontrata: call и send.

Atong i-update ang temperatura sa kontrata pinaagi sa pagpatuman set gamit ang web3 nga pamaagi send.

// get contract deployed previously
async function getContract(web3, contractAddress) {
  const address = await getAddress(web3);
return web3.eth.Contract(
    temperatureMonitor.interface,
    contractAddress, {
      defaultAccount: address,
    }
  );
}
// calls contract set method to update contract's temperature
async function setTemperature(web3, contractAddress, temp) {
  const myContract = await getContract(web3, contractAddress);
return myContract.methods.set(temp).send({}).then((receipt) => {
    return receipt.status;
  });
}

Sunod atong gamiton ang web3 nga pamaagi call aron makuha ang temperatura sa kontrata. Palihug timan-i nga ang pamaagi call gipatuman sa usa ka lokal nga node ug ang transaksyon dili mahimo sa blockchain.

// calls contract get method to retrieve contract's temperature
async function getTemperature(web3, contractAddress) {
  const myContract = await getContract(web3, contractAddress);
return myContract.methods.get().call().then(result => result);
}

Karon makadagan ka publiko.js aron makuha ang mosunod nga resulta:

// Execute public script
node public.js
Contract address after deployment: 0xf46141Ac7D6D6E986eFb2321756b5d1e8a25008F
Transaction status: true
Retrieved contract Temperature 3

Sunod, atong matan-aw ang mga entry sa Quorum explorer sa Chainstack panel, sama sa gipakita sa ubos.

Ang tanan nga tulo ka mga node nakig-interact ug ang mga transaksyon gi-update:

  1. Ang unang transaksyon nag-deploy sa kontrata.
  2. Ang ikaduhang transaksyon nagtakda sa temperatura sa kontrata ngadto sa 3 degrees.
  3. Ang temperatura madawat pinaagi sa usa ka lokal nga node, mao nga walay transaksyon nga gibuhat.

Paghimo sa publiko ug pribado nga mga transaksyon sa JPMorgan Quorum blockchain gamit ang Web3

Pribado nga mga transaksyon

Konteksto

Usa ka sagad nga kinahanglanon sa mga organisasyon mao ang pagpanalipod sa datos. Ingong pananglitan, tagda ang usa ka senaryo diin Supermarket nag-abang sa usa ka bodega nga luna alang sa pagtipig sa seafood gikan sa usa ka bulag Tigbaligya:

  • Tigbaligya gamit ang mga sensor sa IoT, gibasa ang mga kantidad sa temperatura matag 30 segundos ug gipasa kini Ngadto sa supermarket;
  • kini nga mga kantidad kinahanglan nga magamit ra Sa vendor и Ngadto sa supermarket, gi-network sa usa ka consortium.

Paghimo sa publiko ug pribado nga mga transaksyon sa JPMorgan Quorum blockchain gamit ang Web3

Atong kompletohon ang upat ka buluhaton nga gihulagway sa dayagram sa ibabaw.

  • Gigamit namon ang parehas nga tulo ka mga node gikan sa miaging senaryo aron ipakita ang mga pribadong transaksyon:
  • Supermarket nag-deploy og smart contract nga pribado sa Supermarket и Tigbaligya.
  • Ang ikatulo nga bahin walay katungod sa pag-access sa smart nga kontrata.

Atong tawgon ang mga pamaagi get и set sa ngalan sa Supermarket и Tigbaligya aron ipakita ang pribadong transaksyon sa Korum.

  1. Mag-deploy kami og pribadong kontrata alang sa mga partisipante Supermarket и Tigbaligya pinaagi sa usa ka partisipante Supermarket:

    const contractAddress = await deployContract(
    raft1Node,
    process.env.PK2,
    );
    console.log(`Contract address after deployment: ${contractAddress}`);

  2. Atong ibutang ang temperatura gikan sa Ikatulong partido (external node) ug kuhaa ang kantidad sa temperatura:

    // Attempts to set Contract temperature to 10, this will not mutate contract's temperature
    await setTemperature(
    raft3Node,
    contractAddress,
    process.env.PK1,
    10,
    );
    // This returns null
    const temp = await getTemperature(raft3Node, contractAddress);
    console.log(`[Node3] temp retrieved after updating contract from external nodes: ${temp}`);

  3. Atong ibutang ang temperatura gikan sa Tigbaligya (internal node) ug kuhaa ang kantidad sa temperatura:

    Ang temperatura niini nga senaryo kinahanglang ibalik ang bili nga 12 gikan sa smart contract. Palihug timan-i kana Tigbaligya dinhi adunay awtorisado nga pag-access sa smart nga kontrata.

    // Updated Contract temperature to 12 degrees
    await setTemperature(
    raft2Node,
    contractAddress,
    process.env.PK1,
    12,
    );
    // This returns 12
    const temp2 = await getTemperature(raft2Node, contractAddress);
    console.log(`[Node2] temp retrieved after updating contract from internal nodes: ${temp2}`);

  4. Atong makuha ang temperatura gikan sa Ikatulong partido (eksternal nga node):

    Sa lakang 3 ang temperatura gitakda sa 12, apan Ang ikatulo nga bahin walay access sa smart contract. Busa ang bili sa pagbalik kinahanglan nga null.

    // This returns null
    const temp3 = await getTemperature(raft3Node, contractAddress);
    console.log(`[Node3] temp retrieved from external nodes after update ${temp}`);

    Sunod, atong tan-awon pag-ayo ang paghimo sa pribadong mga transaksyon sa Korum network uban sa web3.js. Tungod kay ang kadaghanan sa code parehas alang sa publiko nga mga transaksyon, among i-highlight ang mga bahin nga lahi sa pribado nga mga transaksyon.

Timan-i nga ang kontrata nga gi-upload sa network dili mausab, busa ang gitugutan nga pag-access kinahanglan ihatag sa angay nga mga node pinaagi sa pagpagana sa kontrata sa publiko sa panahon nga ang kontrata gi-deploy, dili pagkahuman.

async function deployContract(web3, publicKey) {
  const address = await getAddress(web3);
  const contract = new web3.eth.Contract(
    temperatureMonitor.interface,
  );
return contract.deploy({
    data: temperatureMonitor.bytecode,
  })
  .send({
    from: address,
    gas: ‘0x2CD29C0’, 
    // Grant Permission to Contract by including nodes public keys
    privateFor: [publicKey],
  })
  .then((contract) => {
    return contract.options.address;
  });
}

Ang pribado nga mga transaksyon gihimo sa susama nga paagi - pinaagi sa paglakip sa publiko nga yawe sa mga partisipante sa panahon sa pagpatay.

async function setTemperature(web3, contractAddress, publicKey, temp) {
  const address = await getAddress(web3);
  const myContract = await getContract(web3, contractAddress);
return myContract.methods.set(temp).send({
    from: address,
    // Grant Permission by including nodes public  keys
    privateFor: [publicKey],
  }).then((receipt) => {
    return receipt.status;
  });
}

Karon makadagan na kami pribado.js uban sa mosunod nga mga resulta:

node private.js
Contract address after deployment: 0x85dBF88B4dfa47e73608b33454E4e3BA2812B21D
[Node3] temp retrieved after updating contract from external nodes: null
[Node2] temp retrieved after updating contract from internal nodes: 12
[Node3] temp retrieved from external nodes after update null

Ang Quorum explorer sa Chainstack magpakita sa mosunod:

  • deployment sa kontrata gikan sa partisipante Supermarket;
  • Pag-ayo SetTemperature gikan sa Ikatulong partido;
  • Pag-ayo SetTemperature gikan sa usa ka partisipante Tigbaligya.

Paghimo sa publiko ug pribado nga mga transaksyon sa JPMorgan Quorum blockchain gamit ang Web3

Sama sa imong makita, ang duha nga mga transaksyon nahuman, apan ang transaksyon lamang gikan sa partisipante Tigbaligya gi-update ang temperatura sa kontrata. Busa, ang mga pribadong transaksyon naghatag og dili mausab, apan sa samang higayon wala magpadayag sa datos ngadto sa ikatulo nga partido.

konklusyon

Nagtan-aw kami sa usa ka komersyal nga kaso sa paggamit alang sa Quorum aron mahatagan ang labing bag-o nga impormasyon sa temperatura sa usa ka bodega pinaagi sa pagdeploy og network tali sa duha ka partido - usa ka supermarket ug usa ka tag-iya sa bodega.

Gipakita namon kung giunsa ang labing bag-o nga kasayuran sa temperatura mahimong mapadayon pinaagi sa publiko ug pribado nga mga transaksyon.

Mahimong adunay daghang mga sitwasyon sa aplikasyon ug, ingon sa imong makita, dili kini lisud.

Eksperimento, pagsulay sa pagpalapad sa imong script. Dugang pa, ang industriya sa teknolohiya sa blockchain mahimong motubo halos napulo ka pilo sa 2024.

Source: www.habr.com

Idugang sa usa ka comment