Chitani zochitika zapagulu komanso zachinsinsi pa blockchain ya JPMorgan Quorum pogwiritsa ntchito Web3

Chitani zochitika zapagulu komanso zachinsinsi pa blockchain ya JPMorgan Quorum pogwiritsa ntchito Web3

Chiwerengero ndi blockchain yochokera ku Ethereum yopangidwa ndi JPMorgan ndipo posachedwa idakhala nsanja yoyamba yogawidwa yoperekedwa ndi Microsoft Azure.

Quorum imathandizira zochitika zachinsinsi komanso zapagulu ndipo ili ndi zochitika zambiri zogwiritsira ntchito malonda.

M'nkhaniyi, tiwona chimodzi mwazinthu zotere - kutumizidwa kwa netiweki yogawa pakati pa sitolo yayikulu ndi mwini nyumba yosungiramo katundu kuti apereke zambiri zaposachedwa za kutentha kwa nyumba yosungiramo katundu.

Khodi yogwiritsidwa ntchito mu phunziroli ili mkati nkhokwe pa GitHub.

Nkhaniyi ikuti:

  • kupanga mgwirizano wanzeru;
  • kutumizidwa kwa Quorum network pogwiritsa ntchito Chainstack;
  • Chiwerengero cha anthu onse;
  • Zochita zachinsinsi za quorum.

Mwachitsanzo, timagwiritsa ntchito zochitika zowunikira kutentha m'malo osungiramo zinthu za mamembala a Quorum network mkati mwa intaneti ya Zinthu (IoT).

Nkhani

Gulu lamakampani osungiramo zinthu akulumikizana mu mgwirizano kuti asungire pamodzi zidziwitso ndikusintha njira pa blockchain. Pachifukwa ichi, makampani adaganiza zogwiritsa ntchito Quorum. M'nkhaniyi tiwona zochitika ziwiri: zochitika zapagulu komanso zachinsinsi.

Zochita zimapangidwa ndi otenga nawo mbali osiyanasiyana kuti azilumikizana ndi ma consortium omwe amakhala. Ntchito iliyonse imatumiza mgwirizano kapena kuyitana ntchito mu mgwirizano kuti itumize deta pa intaneti. Zochita izi zimatsatiridwa ndi ma node onse pa intaneti.

Zochita zapagulu zilipo kuti onse omwe atenga nawo mbali a consortium awonedwe. Zochita zachinsinsi zimawonjezera chinsinsi ndipo zimapezeka kwa omwe ali ndi ufulu wochita izi.

Pazochitika zonsezi, timagwiritsa ntchito mgwirizano womwewo kuti timveke bwino.

Smart contract

Pansipa pali mgwirizano wosavuta wanzeru womwe wapangidwira zochitika zathu. Ili ndi kusintha kwapagulu temperature, zomwe zingasinthidwe pogwiritsa ntchito set ndi kulandira mwa njira 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;
  }
}

Kuti contract igwire ntchito web3.js, iyenera kumasuliridwa mu mtundu wa ABI ndi bytecode. Kugwiritsa ntchito formatContractapa akulemba mgwirizano ntchito solc-js.

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

Mgwirizano womalizidwa ukuwoneka motere:

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

Tsopano popeza mgwirizano wakonzeka, tidzatumiza maukonde ndikutumiza mgwirizano.

Kutumiza kwa node

Chitani zochitika zapagulu komanso zachinsinsi pa blockchain ya JPMorgan Quorum pogwiritsa ntchito Web3

Kutumiza node kumatha kukhala kovutirapo ndipo njirayi ingasinthidwe ndikugwiritsa ntchito ntchito Chainstack.

Pansipa pali njira yotumizira maukonde a Quorum ndi mgwirizano wa Raft ndi mfundo zitatu.

Choyamba, tiyeni tipange pulojekiti ndikuyitcha Quorum Project:

Chitani zochitika zapagulu komanso zachinsinsi pa blockchain ya JPMorgan Quorum pogwiritsa ntchito Web3

Tiyeni tipange netiweki ya Quorum ndi mgwirizano wa Raft pa Google Cloud Platform:

Chitani zochitika zapagulu komanso zachinsinsi pa blockchain ya JPMorgan Quorum pogwiritsa ntchito Web3

Tiyeni tiwonjezere ma node ena awiri pamfundo yomwe idapangidwa kale:

Chitani zochitika zapagulu komanso zachinsinsi pa blockchain ya JPMorgan Quorum pogwiritsa ntchito Web3

Mitundu itatu yoyambira:

Chitani zochitika zapagulu komanso zachinsinsi pa blockchain ya JPMorgan Quorum pogwiritsa ntchito Web3

Tsamba latsatanetsatane la node likuwonetsa kumapeto kwa RPC, kiyi yapagulu, ndi zina.

Chitani zochitika zapagulu komanso zachinsinsi pa blockchain ya JPMorgan Quorum pogwiritsa ntchito Web3

Network imayikidwa. Tsopano tiyeni tigwiritse ntchito makontrakitala anzeru ndikuchita malonda pogwiritsa ntchito web3.js.

Zochita pagulu

Nkhani

Kutentha kwa nyumba yosungiramo katundu ndikofunikira kwambiri pakuchepetsa mtengo, makamaka kwa zinthu zomwe ziyenera kusungidwa pa kutentha kwa sub-zero.

Polola makampani kugawana kutentha kwakunja kwa malo awo munthawi yeniyeni ndikulemba m'mabuku osasinthika, omwe akuchita nawo ma network amachepetsa ndalama ndi nthawi.

Chitani zochitika zapagulu komanso zachinsinsi pa blockchain ya JPMorgan Quorum pogwiritsa ntchito Web3

Tichita ntchito zitatu, zomwe zikuwonetsedwa mu chithunzichi:

  1. Titumiza contract kudzera Mfundo 1:

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

  2. Khazikitsani kutentha kudzera Mfundo 2 pa 3 digiri:

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

  3. Mfundo 3 adzalandira zambiri kuchokera ku smart contract. Mgwirizanowu udzabwezera mtengo wa madigiri 3:

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

    Kenako, tiwona momwe tingachitire malonda pagulu la Quorum network web3.js.

Timayambitsa chitsanzo kudzera pa RPC pama node atatu:

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

Tiyeni titumize mgwirizano wanzeru:

// 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 imapereka njira ziwiri zolumikizirana ndi mgwirizano: call и send.

Tiyeni tisinthe kutentha kwa mgwirizano pochita set pogwiritsa ntchito njira ya 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;
  });
}

Kenako timagwiritsa ntchito njira ya web3 call kupeza kutentha kwa mgwirizano. Chonde dziwani kuti njira call imachitidwa pa node yakomweko ndipo kugulitsako sikungapangidwe pa 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);
}

Tsopano mutha kuthamanga public.js kuti mupeze zotsatira izi:

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

Kenako, titha kuwona zomwe zalembedwa mu Quorum explorer mu gulu la Chainstack, monga tawonera pansipa.

Ma node onse atatu adalumikizana ndipo zochitikazo zidasinthidwa:

  1. Woyamba adatumiza mgwirizano.
  2. Kugulitsa kwachiwiri kunakhazikitsa kutentha kwa mgwirizano kukhala madigiri atatu.
  3. Kutentha kumalandiridwa kudzera mu node yakomweko, kotero palibe kugulitsa komwe kumapangidwa.

Chitani zochitika zapagulu komanso zachinsinsi pa blockchain ya JPMorgan Quorum pogwiritsa ntchito Web3

Zochita zachinsinsi

Nkhani

Chofunikira chofala pamabungwe ndikuteteza deta. Mwachitsanzo, taganizirani zimene zinachitika Supamaketi amachita lendi malo osungiramo zinthu zosungiramo nsomba zam'madzi kuchokera kwina Wogulitsa:

  • Wogulitsa pogwiritsa ntchito masensa a IoT, amawerenga kutentha masekondi 30 aliwonse ndikutumiza Ku supermarket;
  • mfundo izi ziyenera kupezeka Kwa wogulitsa и Ku supermarket, yolumikizidwa ndi consortium.

Chitani zochitika zapagulu komanso zachinsinsi pa blockchain ya JPMorgan Quorum pogwiritsa ntchito Web3

Timaliza ntchito zinayi zomwe zawonetsedwa mu chithunzi pamwambapa.

  • Timagwiritsa ntchito ma nodi atatu omwewo kuchokera pazochitika zam'mbuyomu kuwonetsa zochitika zachinsinsi:
  • Supamaketi imatumiza mgwirizano wanzeru womwe ndi wachinsinsi Supamaketi и Wogulitsa.
  • Mbali yachitatu alibe ufulu wopeza mgwirizano wanzeru.

Tizitcha njira get и set m'malo mwa Supamaketi и Wogulitsa kuwonetsa zochitika zachinsinsi za Quorum.

  1. Titumiza mgwirizano wachinsinsi kwa omwe atenga nawo mbali Supamaketi и Wogulitsa kudzera mwa wophunzira Supamaketi:

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

  2. Tiyeni tiyike kutentha kuchokera Gulu lina (node ​​yakunja) ndikupeza mtengo wa kutentha:

    // 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. Tiyeni tiyike kutentha kuchokera Wogulitsa (node ​​yamkati) ndikupeza mtengo wa kutentha:

    Kutentha munkhaniyi kuyenera kubweza mtengo wa 12 kuchokera ku mgwirizano wanzeru. Chonde dziwani kuti Wogulitsa apa ali ndi mwayi wopeza mgwirizano wanzeru.

    // 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. Timapeza kutentha kuchokera Gulu lina (node ​​yakunja):

    Mu gawo 3 kutentha kunakhazikitsidwa ku 12, koma Mbali yachitatu alibe mwayi wopeza mgwirizano wanzeru. Chifukwa chake mtengo wobwerera uyenera kukhala wopanda pake.

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

    Kenako, tiyang'ana mwatsatanetsatane momwe mungapangire zochitika zapadera pa netiweki ya Quorum ndi web3.js. Popeza ma code ambiri ndi ofanana ndi zochitika zapagulu, tidzangowonetsa magawo omwe ali osiyana ndi zochitika zapadera.

Dziwani kuti mgwirizano womwe udakwezedwa pa netiweki ndi wosasinthika, chifukwa chake mwayi wololedwa uyenera kuperekedwa kumalo oyenerera ndikupangitsa mgwirizano wapagulu panthawi yomwe mgwirizanowo udatumizidwa, osati pambuyo pake.

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

Zochita zachinsinsi zimachitikanso chimodzimodzi - pophatikiza makiyi a anthu omwe akutenga nawo mbali pa nthawi yophedwa.

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

Tsopano tikhoza kuthamanga payekha.js ndi zotsatira zotsatirazi:

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

Wofufuza wa Quorum mu Chainstack awonetsa izi:

  • kutumizidwa kwa mgwirizano kuchokera kwa otenga nawo mbali Supamaketi;
  • Kuphedwa SetTemperature от Gulu lina;
  • Kuphedwa SetTemperature kuchokera kwa wophunzira Wogulitsa.

Chitani zochitika zapagulu komanso zachinsinsi pa blockchain ya JPMorgan Quorum pogwiritsa ntchito Web3

Monga mukuwonera, zochitika zonse ziwirizi zatha, koma kungochita kuchokera kwa omwe akutenga nawo mbali Wogulitsa zasintha kutentha mu mgwirizano. Choncho, zochitika zapadera zimapereka kusasinthika, koma nthawi yomweyo siziwulula deta kwa munthu wina.

Pomaliza

Tidayang'ana nkhani yogwiritsira ntchito malonda kuti Quorum ipereke chidziwitso cha kutentha kwanthawi yayitali m'nyumba yosungiramo katundu potumiza maukonde pakati pamagulu awiri - sitolo yayikulu ndi mwini nyumba yosungiramo zinthu.

Tidawonetsa momwe chidziwitso cha kutentha kwanthawi yayitali chingasungidwire kudzera muzochita zagulu ndi zachinsinsi.

Pakhoza kukhala zochitika zambiri zogwiritsira ntchito ndipo, monga mukuonera, sizovuta konse.

Yesani, yesani kukulitsa zolemba zanu. Kuphatikiza apo, msika waukadaulo wa blockchain zitha kukula pafupifupi kakhumi pofika 2024.

Source: www.habr.com

Kuwonjezera ndemanga