Dèan gnothaichean poblach is prìobhaideach air blockchain JPMorgan Quorum a’ cleachdadh Web3

Dèan gnothaichean poblach is prìobhaideach air blockchain JPMorgan Quorum a’ cleachdadh Web3

Cuòram na blockchain stèidhichte air Ethereum air a leasachadh le JPMorgan agus o chionn ghoirid b ’e a’ chiad àrd-ùrlar mòr-reic sgaoilte a chaidh a thabhann le Microsoft Azure.

Bidh Cuòram a’ toirt taic do ghnothaichean prìobhaideach is poblach agus tha mòran chùisean cleachdaidh malairteach ann.

San artaigil seo, nì sinn sgrùdadh air aon leithid de shuidheachadh - cleachdadh lìonra leabhar-cunntais sgaoilte eadar mòr-bhùth agus sealbhadair taigh-bathair gus fiosrachadh as ùire a thoirt seachad mu theodhachd an taigh-bathair.

Tha an còd a chaidh a chleachdadh san oideachadh seo a-steach stòran air GitHub.

Tha an artaigil a’ còmhdach:

  • cruthachadh cùmhnant snasail;
  • cleachdadh lìonra Quorum a’ cleachdadh Slabhraidh;
  • gnothaichean poblach cuòram;
  • Cuòram gnothaichean prìobhaideach.

Gus sealltainn, bidh sinn a’ cleachdadh suidheachadh airson sùil a chumail air teòthachd ann an taighean-bathair buill de lìonra Quorum taobh a-staigh Internet of Things (IoT).

Co-theacs

Tha buidheann de chompanaidhean taigh-bathair ag aonachadh ann an co-bhanntachd gus fiosrachadh a stòradh agus pròiseasan a dhèanamh fèin-ghluasadach air na blockchain. Airson seo, cho-dhùin companaidhean Cuòram a chleachdadh. San artaigil seo còmhdaichidh sinn dà shuidheachadh: gnothaichean poblach agus gnothaichean prìobhaideach.

Tha gnothaichean air an cruthachadh le diofar chom-pàirtichean gus eadar-obrachadh leis a’ cho-bhanntachd dham buin iad. Bidh gach gnothach an dàrna cuid a’ cleachdadh cùmhnant no a’ gairm gnìomh sa chùmhnant gus dàta a luchdachadh suas chun lìonra. Tha na gnìomhan sin air an ath-aithris gu gach nodan air an lìonra.

Tha gnothaichean poblach rim faicinn leis a h-uile com-pàirtiche sa cho-bhanntachd. Bidh gnothaichean prìobhaideach a’ cur ìre de dhìomhaireachd ris agus chan fhaighear iad ach dha na com-pàirtichean sin aig a bheil còir sin a dhèanamh.

Airson an dà shuidheachadh, bidh sinn a’ cleachdadh an aon chùmhnant airson soilleireachd.

Cùmhnant glic

Gu h-ìosal tha cùmhnant snasail sìmplidh a chaidh a chruthachadh airson ar suidheachadh. Tha caochladair poblach aige temperature, a ghabhas atharrachadh le bhith a’ cleachdadh set agus a' faighinn le modh 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;
  }
}

Airson an cùmhnant a bhith ag obair leis a lìn3.js, feumaidh e a bhith air eadar-theangachadh gu cruth ABI agus bytecode. A 'cleachdadh an gnìomh formatContractgu h-ìosal a 'cur ri chèile a' chùmhnant a 'cleachdadh solc-js.

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

Tha an cùmhnant crìochnaichte a’ coimhead mar seo:

// 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

A-nis gu bheil an cùmhnant deiseil, cuiridh sinn an lìonra gu feum agus cuiridh sinn an cùmhnant gu feum.

Cleachdadh nodan

Dèan gnothaichean poblach is prìobhaideach air blockchain JPMorgan Quorum a’ cleachdadh Web3

Faodaidh a bhith a’ cleachdadh nòta a bhith gu math saothair-dian agus faodar seirbheis a chuir na àite a’ phròiseas seo Slabhraidh.

Gu h-ìosal tha am pròiseas airson lìonra Quorum a chleachdadh le co-aontachd Raft agus trì nodan.

An toiseach, cruthaichidh sinn pròiseact agus canaidh sinn Pròiseact Quorum ris:

Dèan gnothaichean poblach is prìobhaideach air blockchain JPMorgan Quorum a’ cleachdadh Web3

Cruthaichidh sinn lìonra Quorum le co-aontachd Raft air Google Cloud Platform:

Dèan gnothaichean poblach is prìobhaideach air blockchain JPMorgan Quorum a’ cleachdadh Web3

Nach cuir sinn dà nod eile ris an nód a chaidh a chruthachadh mar-thà gu bunaiteach:

Dèan gnothaichean poblach is prìobhaideach air blockchain JPMorgan Quorum a’ cleachdadh Web3

Trì puingean ruith:

Dèan gnothaichean poblach is prìobhaideach air blockchain JPMorgan Quorum a’ cleachdadh Web3

Tha duilleag mion-fhiosrachadh an nòta a’ sealltainn puing crìochnachaidh RPC, iuchair phoblach, msaa.

Dèan gnothaichean poblach is prìobhaideach air blockchain JPMorgan Quorum a’ cleachdadh Web3

Tha an lìonra ga chleachdadh. A-nis leig leinn cùmhnantan snasail a chuir an gnìomh agus gnothaichean a dhèanamh a’ cleachdadh lìn3.js.

Gnìomhan poblach

Co-theacs

Tha teòthachd taigh-bathair air leth cudromach ann a bhith a’ lughdachadh chosgaisean, gu sònraichte airson toraidhean a thathar an dùil a stòradh aig teòthachd fo-neoni.

Le bhith a’ leigeil le companaidhean teòthachd taobh a-muigh an àite cruinn-eòlasach aca a cho-roinn ann an àm fìor agus a chlàradh ann an leabhar-cunntais nach gabh atharrachadh, bidh com-pàirtichean lìonra a’ lughdachadh chosgaisean agus ùine.

Dèan gnothaichean poblach is prìobhaideach air blockchain JPMorgan Quorum a’ cleachdadh Web3

Nì sinn trì gnìomhan, mar a chithear san dealbh:

  1. Cleachdaidh sinn an cùmhnant tro Node 1:

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

  2. Suidhich an teòthachd tro Node 2 ann an 3 ìrean:

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

  3. Node 3 gheibh iad fiosrachadh bhon chùmhnant smart. Tillidh an cùmhnant an luach 3 ìrean:

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

    An ath rud, seallaidh sinn ri mar a nì thu gnothach poblach air lìonra Quorum a’ cleachdadh lìn3.js.

Bidh sinn a’ tòiseachadh eisimpleir tro RPC airson trì nodan:

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,
 },
);

Leig leinn an cùmhnant smart a chleachdadh:

// 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;
  });
}

lìn3.js a’ toirt seachad dà dhòigh air eadar-obrachadh leis a’ chùmhnant: call и send.

Leig leinn an teòthachd cùmhnant ùrachadh le bhith a 'cur an gnìomh set a’ cleachdadh modh web3 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;
  });
}

An uairsin bidh sinn a’ cleachdadh modh web3 call gus an teòthachd cùmhnant fhaighinn. Thoir an aire gu bheil an dòigh-obrach call air a chuir gu bàs air nód ionadail agus cha tèid an gnothach a chruthachadh air an 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);
}

A-nis faodaidh tu ruith poblach.js gus an toradh a leanas fhaighinn:

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

An uairsin, chì sinn na h-inntrigidhean anns an rannsachair Cuòram anns a’ phannal Chainstack, mar a chithear gu h-ìosal.

Rinn na trì nodan eadar-obrachadh agus chaidh na gnothaichean ùrachadh:

  1. B 'e a' chiad ghnothach a chuir a-steach an cùmhnant.
  2. Shuidhich an dàrna gnothach an teòthachd cùmhnant gu 3 ceum.
  3. Gheibhear an teòthachd tro nód ionadail, agus mar sin chan eil malairt air a chruthachadh.

Dèan gnothaichean poblach is prìobhaideach air blockchain JPMorgan Quorum a’ cleachdadh Web3

Gnìomhan prìobhaideach

Co-theacs

Tha dìon dàta na riatanas cumanta aig buidhnean. Mar eisimpleir, beachdaich air suidheachadh anns a bheil Mòr-bhùth a’ màl àite taigh-bathair airson biadh mara a stòradh bho àite air leth Reiceadair:

  • Reiceadair a’ cleachdadh mothachairean IoT, a’ leughadh luachan teòthachd gach 30 diog agus gan sgaoileadh Chun a’ mhòr-bhùth;
  • cha bu chòir na luachan sin a bhith rim faighinn ach Chun an neach-reic и Chun a’ mhòr-bhùth, air a lìonradh le co-bhanntachd.

Dèan gnothaichean poblach is prìobhaideach air blockchain JPMorgan Quorum a’ cleachdadh Web3

Cuiridh sinn crìoch air na ceithir gnìomhan a chithear san dealbh gu h-àrd.

  • Bidh sinn a’ cleachdadh na h-aon trì nodan bhon t-suidheachadh roimhe gus gnothaichean prìobhaideach a nochdadh:
  • Mòr-bhùth a’ cleachdadh cùmhnant snasail a tha prìobhaideach dha Mòr-bhùth и Reiceadair.
  • An treas taobh chan eil còir aige faighinn chun chùmhnant snasail.

Canaidh sinn na dòighean get и set Às leth Mòr-bhùth и Reiceadair gus malairt cuòram prìobhaideach a nochdadh.

  1. Cuiridh sinn cùmhnant prìobhaideach gu com-pàirtichean Mòr-bhùth и Reiceadair tro chom-pàirtiche Mòr-bhùth:

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

  2. Leig leinn an teòthachd a shuidheachadh bho Treas pàrtaidh (nod taobh a-muigh) agus faigh an luach teòthachd:

    // 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. Leig leinn an teòthachd a shuidheachadh bho Reiceadair (nod a-staigh) agus faigh an luach teòthachd:

    Bu chòir don teòthachd san t-suidheachadh seo an luach 12 a thilleadh bhon chùmhnant smart Reiceadair an seo tha cothrom ùghdarraichte air a’ chùmhnant snasail.

    // 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. Bidh sinn a 'faighinn an teòthachd bho Treas pàrtaidh (nòd a-muigh):

    Ann an ceum 3 chaidh an teòthachd a shuidheachadh gu 12, ach An treas taobh chan eil cothrom aige air a’ chùmhnant smart. Mar sin feumaidh an luach tilleadh a bhith null.

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

    An uairsin, bheir sinn sùil nas mionaidiche air coileanadh ghnothaichean prìobhaideach air lìonra Quorum le lìn3.js. Leis gu bheil a’ mhòr-chuid den chòd an aon rud airson gnothaichean poblach, cha toir sinn fa-near ach na pàirtean sin a tha eadar-dhealaichte airson gnothaichean prìobhaideach.

Thoir an aire gu bheil an cùmhnant a chaidh a luchdachadh suas chun lìonra neo-ghluasadach, agus mar sin feumar cead a thoirt do na nodan iomchaidh le bhith a’ toirt cothrom don chùmhnant poblach aig an àm a thèid an cùmhnant a chuir a-steach, chan ann às a dhèidh.

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;
  });
}

Bidh gnothaichean prìobhaideach air an coileanadh san aon dòigh - le bhith a’ toirt a-steach iuchair phoblach nan com-pàirtichean aig àm cur gu bàs.

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;
  });
}

A-nis is urrainn dhuinn ruith prìobhaideach.js leis na toraidhean a leanas:

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

Seallaidh an rannsachair Quorum ann an Chainstack na leanas:

  • cleachdadh cùmhnant bhon chom-pàirtiche Mòr-bhùth;
  • Coileanadh SetTemperature от Treas pàrtaidh;
  • Coileanadh SetTemperature bho chom-pàirtiche Reiceadair.

Dèan gnothaichean poblach is prìobhaideach air blockchain JPMorgan Quorum a’ cleachdadh Web3

Mar a chì thu, tha an dà ghnothach crìochnaichte, ach a-mhàin an gnothach bhon chom-pàirtiche Reiceadair Luchdaich a-nuas an teòthachd ann an cùmhnant. Mar sin, tha gnothaichean prìobhaideach a 'toirt seachad neo-sheasmhachd, ach aig an aon àm chan eil iad a' nochdadh dàta do threas phàrtaidh.

co-dhùnadh

Choimhead sinn air cùis cleachdaidh malairteach airson Quorum gus fiosrachadh teòthachd as ùire a thoirt seachad ann an taigh-bathair le bhith a’ cleachdadh lìonra eadar dà phàrtaidh - mòr-bhùth agus sealbhadair taigh-bathair.

Sheall sinn mar a ghabhas fiosrachadh teòthachd as ùire a chumail tro ghnothaichean poblach is prìobhaideach.

Faodaidh tòrr shuidheachaidhean tagraidh a bhith ann agus, mar a chì thu, chan eil e idir duilich.

Dèan deuchainn, feuch ris an sgriobt agad a leudachadh. A bharrachd air an sin, gnìomhachas teicneòlas blockchain dh’ fhaodadh fàs faisg air deich uiread ro 2024.

Source: www.habr.com

Cuir beachd ann