Ṣe awọn iṣowo ti gbogbo eniyan ati ni ikọkọ lori blockchain Quorum JPMorgan nipa lilo Web3

Ṣe awọn iṣowo ti gbogbo eniyan ati ni ikọkọ lori blockchain Quorum JPMorgan nipa lilo Web3

Igbimọ jẹ blockchain ti o da lori Ethereum ti o ni idagbasoke nipasẹ JPMorgan ati laipẹ julọ di ipilẹ iwe afọwọkọ pinpin akọkọ lati funni nipasẹ Microsoft Azure.

Quorum ṣe atilẹyin ikọkọ ati awọn iṣowo ti gbogbo eniyan ati pe o ni ọpọlọpọ awọn ọran lilo iṣowo.

Ninu nkan yii, a yoo ṣe ayẹwo ọkan iru oju iṣẹlẹ - imuṣiṣẹ ti nẹtiwọọki iwe afọwọkọ ti o pin laarin fifuyẹ kan ati oniwun ile itaja lati pese alaye imudojuiwọn nipa iwọn otutu ti ile-itaja naa.

Awọn koodu ti a lo ninu ikẹkọ yii wa ninu awọn ibi ipamọ lori GitHub.

Nkan naa ni wiwa:

  • ṣiṣẹda adehun ọlọgbọn;
  • imuṣiṣẹ nẹtiwọki Quorum nipa lilo Ẹwọn ẹwọn;
  • Awọn iṣowo gbogbo eniyan Quorum;
  • Awọn iṣowo ikọkọ Quorum.

Lati ṣapejuwe, a lo oju iṣẹlẹ kan fun abojuto iwọn otutu ni awọn ile itaja ti awọn ọmọ ẹgbẹ ti nẹtiwọọki Quorum laarin Intanẹẹti Awọn nkan (IoT).

Àyíká

Ẹgbẹ kan ti awọn ile-iṣẹ ile-itaja ti n ṣopọ si ajọṣepọ kan lati tọju alaye ni apapọ ati ṣe adaṣe awọn ilana lori blockchain. Fun eyi, awọn ile-iṣẹ pinnu lati lo Quorum. Ninu nkan yii a yoo bo awọn oju iṣẹlẹ meji: awọn iṣowo gbangba ati awọn iṣowo aladani.

Awọn iṣowo jẹ ipilẹṣẹ nipasẹ awọn olukopa oriṣiriṣi lati ṣe ajọṣepọ pẹlu ẹgbẹ ti wọn jẹ ti. Idunadura kọọkan boya ransiwe adehun tabi pe iṣẹ kan ninu adehun lati gbe data si nẹtiwọki. Awọn iṣe wọnyi jẹ tun ṣe si gbogbo awọn apa lori nẹtiwọọki.

Awọn iṣowo gbogbo eniyan wa fun wiwo nipasẹ gbogbo awọn alabaṣe ajọṣepọ. Awọn iṣowo aladani ṣafikun ipele ti asiri ati pe o wa fun awọn olukopa nikan ti o ni awọn ẹtọ lati ṣe bẹ.

Fun awọn oju iṣẹlẹ mejeeji, a lo adehun kanna fun mimọ.

Smart guide

Ni isalẹ ni iwe adehun ọlọgbọn ti o rọrun ti a ṣẹda fun oju iṣẹlẹ wa. O ni iyipada ti gbogbo eniyan temperature, eyiti o le yipada ni lilo set ati gba nipasẹ ọna 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;
  }
}

Ni ibere fun adehun lati ṣiṣẹ pẹlu ayelujara 3.js, o gbọdọ tumọ si ọna kika ABI ati bytecode. Lilo iṣẹ naa formatContractni isalẹ compiled awọn guide lilo solc-js.

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

Iwe adehun ti o pari dabi eyi:

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

Ni bayi ti adehun naa ti ṣetan, a yoo fi nẹtiwọọki naa ranṣẹ ati mu adehun naa ṣiṣẹ.

Node imuṣiṣẹ

Ṣe awọn iṣowo ti gbogbo eniyan ati ni ikọkọ lori blockchain Quorum JPMorgan nipa lilo Web3

Gbigbe ipade kan le jẹ aladanla pupọ ati ilana yii le rọpo nipasẹ lilo iṣẹ kan Ẹwọn ẹwọn.

Ni isalẹ ni ilana fun imuṣiṣẹ nẹtiwọọki Quorum pẹlu ipohunpo Raft ati awọn apa mẹta.

Ni akọkọ, jẹ ki a ṣẹda iṣẹ akanṣe kan ki a pe ni Ise agbese Quorum:

Ṣe awọn iṣowo ti gbogbo eniyan ati ni ikọkọ lori blockchain Quorum JPMorgan nipa lilo Web3

Jẹ ki a ṣẹda nẹtiwọki Quorum kan pẹlu ipohunpo Raft lori Google Cloud Platform:

Ṣe awọn iṣowo ti gbogbo eniyan ati ni ikọkọ lori blockchain Quorum JPMorgan nipa lilo Web3

Jẹ ki a ṣafikun awọn apa meji si ipade ti a ti ṣẹda tẹlẹ nipasẹ aiyipada:

Ṣe awọn iṣowo ti gbogbo eniyan ati ni ikọkọ lori blockchain Quorum JPMorgan nipa lilo Web3

Awọn apa ti nṣiṣẹ mẹta:

Ṣe awọn iṣowo ti gbogbo eniyan ati ni ikọkọ lori blockchain Quorum JPMorgan nipa lilo Web3

Oju-iwe awọn alaye ipade fihan aaye ipari RPC, bọtini gbangba, ati bẹbẹ lọ.

Ṣe awọn iṣowo ti gbogbo eniyan ati ni ikọkọ lori blockchain Quorum JPMorgan nipa lilo Web3

Nẹtiwọọki ti wa ni ransogun. Bayi jẹ ki a ran awọn smati siwe ki o si ṣe lẹkọ lilo ayelujara 3.js.

Gbangba lẹkọ

Àyíká

Iwọn otutu ile-ipamọ jẹ pataki pupọ ni idinku awọn idiyele, pataki fun awọn ọja ti a pinnu lati wa ni ipamọ ni awọn iwọn otutu-odo.

Nipa gbigba awọn ile-iṣẹ laaye lati pin iwọn otutu ita ti ipo agbegbe wọn ni akoko gidi ati gbasilẹ ni iwe afọwọṣe ti ko yipada, awọn olukopa nẹtiwọọki dinku awọn idiyele ati akoko.

Ṣe awọn iṣowo ti gbogbo eniyan ati ni ikọkọ lori blockchain Quorum JPMorgan nipa lilo Web3

A yoo ṣe awọn iṣẹ-ṣiṣe mẹta, ti a ṣe apejuwe ninu aworan atọka:

  1. A yoo ran awọn guide nipasẹ Node 1:

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

  2. Ṣeto iwọn otutu nipasẹ Node 2 nipasẹ 3 iwọn:

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

  3. Node 3 yoo gba alaye lati smart guide. Iwe adehun naa yoo pada si iye awọn iwọn 3:

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

    Nigbamii ti, a yoo wo bi o ṣe le ṣe iṣeduro iṣowo gbogbo eniyan lori nẹtiwọki Quorum nipa lilo ayelujara 3.js.

A bẹrẹ apẹẹrẹ nipasẹ RPC fun awọn apa mẹta:

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

Jẹ ki a gbe iwe adehun ọlọgbọn naa lọ:

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

ayelujara 3.js pese awọn ọna meji fun ibaraenisepo pẹlu adehun: call и send.

Jẹ ki a ṣe imudojuiwọn iwọn otutu adehun nipasẹ ṣiṣe set lilo web3 ọna 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;
  });
}

Nigbamii ti a lo ọna web3 call lati gba iwọn otutu adehun. Jọwọ ṣe akiyesi pe ọna naa call ti wa ni pipa lori ipade agbegbe ati idunadura naa kii yoo ṣẹda lori 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);
}

Bayi o le ṣiṣe gbangba.js lati gba abajade wọnyi:

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

Nigbamii, a le wo awọn titẹ sii inu Quorum explorer ni Chainstack nronu, bi a ṣe han ni isalẹ.

Gbogbo awọn apa mẹta ṣe ibaraenisepo ati awọn iṣowo ti ni imudojuiwọn:

  1. Idunadura akọkọ ransogun awọn guide.
  2. Idunadura keji ṣeto iwọn otutu adehun si awọn iwọn 3.
  3. Awọn iwọn otutu ti gba nipasẹ ipade agbegbe, nitorina ko si idunadura ti o ṣẹda.

Ṣe awọn iṣowo ti gbogbo eniyan ati ni ikọkọ lori blockchain Quorum JPMorgan nipa lilo Web3

Ikọkọ lẹkọ

Àyíká

Ibeere ti o wọpọ ti awọn ajo jẹ aabo data. Bi apẹẹrẹ, ro kan ohn ninu eyi ti Ile ọja nla yalo aaye ile-itaja kan fun titoju ẹja okun lati lọtọ Olutaja:

  • Olutaja lilo awọn sensọ IoT, ka awọn iye iwọn otutu ni gbogbo iṣẹju-aaya 30 ati gbejade wọn Si fifuyẹ;
  • awọn iye wọnyi yẹ ki o wa nikan Si ataja и Si fifuyẹ, nẹtiwọki nipasẹ a Consortium.

Ṣe awọn iṣowo ti gbogbo eniyan ati ni ikọkọ lori blockchain Quorum JPMorgan nipa lilo Web3

A yoo pari awọn iṣẹ-ṣiṣe mẹrin ti a ṣe apejuwe ninu aworan atọka loke.

  • A lo awọn apa mẹta kanna lati oju iṣẹlẹ iṣaaju lati ṣafihan awọn iṣowo ikọkọ:
  • Ile ọja nla deploys a smati guide ti o jẹ ikọkọ si Ile ọja nla и Olutaja.
  • Apa kẹta ko ni eto lati wọle si awọn smati guide.

A yoo pe awọn ọna get и set lori dípò Ile ọja nla и Olutaja lati ṣe afihan iṣowo Quorum ikọkọ kan.

  1. A yoo ran a ikọkọ guide fun awọn olukopa Ile ọja nla и Olutaja nipasẹ alabaṣe Ile ọja nla:

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

  2. Jẹ ki a ṣeto iwọn otutu lati Ẹnikẹta (ipade ita) ati gba iye iwọn otutu:

    // 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. Jẹ ki a ṣeto iwọn otutu lati Olutaja (ipade inu) ati gba iye iwọn otutu:

    Iwọn otutu ti o wa ninu oju iṣẹlẹ yii yẹ ki o da iye 12 pada lati inu adehun ọlọgbọn. Jọwọ ṣe akiyesi pe Olutaja nibi ti ni aṣẹ wiwọle si smati guide.

    // 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. A gba iwọn otutu lati Ẹnikẹta (ipade ita):

    Ni igbese 3 iwọn otutu ti ṣeto si 12, ṣugbọn Apa kẹta ko ni wiwọle si smart guide. Nitorinaa iye ipadabọ gbọdọ jẹ asan.

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

    Nigbamii ti, a yoo wo ni pẹkipẹki ni ṣiṣe awọn iṣowo ikọkọ lori netiwọki Quorum pẹlu ayelujara 3.js. Niwọn igba ti koodu pupọ julọ jẹ kanna fun awọn iṣowo ti gbogbo eniyan, a yoo ṣe afihan awọn apakan yẹn nikan ti o yatọ fun awọn iṣowo aladani.

Ṣe akiyesi pe adehun ti a gbejade si nẹtiwọọki jẹ aiyipada, nitorinaa iraye si igbanilaaye gbọdọ jẹ fifunni si awọn apa ti o yẹ nipa ṣiṣe adehun gbogbo eniyan ni akoko ti o ti gbe iwe adehun naa, kii ṣe lẹhin.

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

Awọn iṣowo aladani ni a ṣe ni ọna kanna - nipa pẹlu pẹlu bọtini gbangba ti awọn olukopa ni akoko ipaniyan.

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

Bayi a le ṣiṣe ikọkọ.js pẹlu awọn abajade wọnyi:

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

Oluwadi Quorum ni Chainstack yoo fi nkan wọnyi han:

  • imuṣiṣẹ ti adehun lati ọdọ alabaṣe Ile ọja nla;
  • Iṣe SetTemperature lati Ẹnikẹta;
  • Iṣe SetTemperature lati alabaṣe Olutaja.

Ṣe awọn iṣowo ti gbogbo eniyan ati ni ikọkọ lori blockchain Quorum JPMorgan nipa lilo Web3

Bi o ti le rii, awọn iṣowo mejeeji ti pari, ṣugbọn idunadura nikan lati ọdọ alabaṣe Olutaja imudojuiwọn iwọn otutu ni adehun. Bayi, awọn iṣowo aladani pese ailagbara, ṣugbọn ni akoko kanna ko ṣe afihan data si ẹgbẹ kẹta.

ipari

A wo ọran lilo iṣowo fun Quorum lati pese alaye iwọn otutu ti ode oni ni ile-itaja kan nipa gbigbe nẹtiwọọki kan ṣiṣẹ laarin awọn ẹgbẹ meji - fifuyẹ ati oniwun ile itaja kan.

A ṣe afihan bi alaye iwọn otutu ti ode-ọjọ ṣe le ṣetọju nipasẹ awọn iṣowo gbangba ati ni ikọkọ.

Ọpọlọpọ awọn oju iṣẹlẹ ohun elo le wa ati, bi o ti le rii, ko nira rara.

Ṣe idanwo, gbiyanju lati faagun iwe afọwọkọ rẹ. Pẹlupẹlu, ile-iṣẹ imọ-ẹrọ blockchain O le dagba ni igba mẹwa ni ọdun 2024.

orisun: www.habr.com

Fi ọrọìwòye kun