Yenza imisebenzi yomphakathi neyimfihlo ku-JPMorgan Quorum blockchain usebenzisa i-Web3

Yenza imisebenzi yomphakathi neyimfihlo ku-JPMorgan Quorum blockchain usebenzisa i-Web3

I-Quorum iyi-blockchain esekwe ku-Ethereum eyakhiwe yi-JPMorgan futhi muva nje ibe inkundla yeleja esakazwayo yokuqala ukunikezwa iMicrosoft Azure.

Ikhoramu isekela okwenziwayo okuyimfihlo nesesidlangalaleni futhi inezimo eziningi zokusebenzisa ezentengiso.

Kulesi sihloko, sizohlola isimo esisodwa esinjalo - ukuthunyelwa kwenethiwekhi yeleja esabalalisiwe phakathi kwesitolo esikhulu kanye nomnikazi wendawo yokugcina impahla ukuze kunikezwe ulwazi lwakamuva mayelana nezinga lokushisa lendlu yokugcina impahla.

Ikhodi esetshenziswe kulesi sifundo iku amakhosombe ku-GitHub.

Isihloko sihlanganisa:

  • ukwakhiwa kwenkontileka ehlakaniphile;
  • ukusatshalaliswa kwenethiwekhi yeQuorum kusetshenziswa I-chainstack;
  • Ikhoramu yemisebenzi yomphakathi;
  • Izinkokhelo eziyimfihlo zekhoramu.

Ukufanekisa, sisebenzisa isimo sokuqapha izinga lokushisa ezindaweni zokugcina izimpahla zamalungu enethiwekhi ye-Quorum ngaphakathi kwe-inthanethi Yezinto (IoT).

Umongo

Iqembu lezinkampani ze-warehouse lihlangana ndawonye ukuze ligcine ngokuhlanganyela ulwazi kanye nezinqubo ezizenzakalelayo ku-blockchain. Ngalokhu, izinkampani zanquma ukusebenzisa Ikhoramu. Kulesi sihloko sizofaka izimo ezimbili: ukuthengiselana komphakathi kanye nokuthengiselana okuyimfihlo.

Ukuthengiselana kudalwe abahlanganyeli abahlukene ukuze basebenzisane ne-consortium abakuyo. Okwenziwayo ngakunye kusebenzisa inkontileka noma kubiza umsebenzi kunkontileka ukuze kulayishwe idatha kunethiwekhi. Lezi zenzo ziphindaphindwa kuwo wonke ama-node kunethiwekhi.

Imisebenzi yomphakathi iyatholakala ukuze ibukwe yibo bonke ababambiqhaza be-consortium. Imisebenzi yangasese yengeza isendlalelo sobumfihlo futhi itholakala kuphela kulabo ababambiqhaza abanamalungelo okwenza kanjalo.

Kuzo zombili izimo, sisebenzisa inkontileka efanayo ukuze sicacise.

Inkontileka ehlakaniphile

Ngezansi kunenkontileka elula ehlakaniphile edalelwe isimo sethu. Inoguquko olusesidlangalaleni temperature, engashintshwa kusetshenziswa set futhi wamukele ngendlela 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;
  }
}

Ukuze inkontileka isebenze nayo iwebhu3.js, kufanele ihunyushelwe kufomethi ye-ABI ne-bytecode. Ukusebenzisa umsebenzi formatContractngezansi uhlanganisa inkontileka esebenzisa i-solc-js.

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

Inkontileka eqediwe ibukeka kanje:

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

Manje njengoba inkontileka isilungile, sizokhipha inethiwekhi futhi sikhiphe inkontileka.

Ukuthunyelwa kwenodi

Yenza imisebenzi yomphakathi neyimfihlo ku-JPMorgan Quorum blockchain usebenzisa i-Web3

Ukukhipha i-node kungaba nzima kakhulu futhi le nqubo ingashintshwa ngokusebenzisa isevisi I-chainstack.

Ngezansi inqubo yokukhipha inethiwekhi yeQuorum ngokuvumelana kweRaft namanodi amathathu.

Okokuqala, masidale iphrojekthi futhi siyibize Iphrojekthi Yekhoramu:

Yenza imisebenzi yomphakathi neyimfihlo ku-JPMorgan Quorum blockchain usebenzisa i-Web3

Masidale inethiwekhi ye-Quorum ngokuvumelana kwe-Raft ku-Google Cloud Platform:

Yenza imisebenzi yomphakathi neyimfihlo ku-JPMorgan Quorum blockchain usebenzisa i-Web3

Ake sengeze amanye ama-node amabili ku-node eseyakhiwe ngokuzenzakalelayo:

Yenza imisebenzi yomphakathi neyimfihlo ku-JPMorgan Quorum blockchain usebenzisa i-Web3

Ama-node amathathu asebenzayo:

Yenza imisebenzi yomphakathi neyimfihlo ku-JPMorgan Quorum blockchain usebenzisa i-Web3

Ikhasi lemininingwane yenodi libonisa indawo yokugcina ye-RPC, ukhiye womphakathi, njll.

Yenza imisebenzi yomphakathi neyimfihlo ku-JPMorgan Quorum blockchain usebenzisa i-Web3

Inethiwekhi isetshenzisiwe. Manje ake sikhiphe izinkontileka ezihlakaniphile futhi senze ukuthengiselana sisebenzisa iwebhu3.js.

Okwenziwayo esidlangalaleni

Umongo

Izinga lokushisa le-warehouse libaluleke kakhulu ekwehliseni izindleko, ikakhulukazi emikhiqizweni ehloselwe ukugcinwa emazingeni okushisa angaphansi kweqanda.

Ngokuvumela izinkampani ukuthi zabelane ngezinga lokushisa langaphandle lendawo yazo ngesikhathi sangempela futhi zirekhode ebhukwini elingaguquleki, ababambiqhaza benethiwekhi banciphisa izindleko nesikhathi.

Yenza imisebenzi yomphakathi neyimfihlo ku-JPMorgan Quorum blockchain usebenzisa i-Web3

Sizokwenza imisebenzi emithathu, ekhonjiswe kumdwebo:

  1. Sizothumela inkontileka nge Ikhodi ye-1:

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

  2. Setha izinga lokushisa nge Ikhodi ye-2 ngo-3 degrees:

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

  3. Ikhodi ye-3 uzothola ulwazi kwinkontileka ehlakaniphile. Inkontileka izobuyisela inani elingu-3 degrees:

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

    Okulandelayo, sizobheka ukuthi kwenziwa kanjani ukuthengiselana komphakathi kunethiwekhi ye-Quorum kusetshenziswa iwebhu3.js.

Siqala isibonelo nge-RPC kumanodi amathathu:

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

Masisebenzise inkontileka ehlakaniphile:

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

iwebhu3.js inikeza izindlela ezimbili zokusebenzelana nenkontileka: call и send.

Masibuyekeze izinga lokushisa lenkontileka ngokwenza set usebenzisa indlela ye-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;
  });
}

Okulandelayo sisebenzisa indlela ye-web3 call ukuthola izinga lokushisa lenkontileka. Sicela uqaphele ukuthi indlela call senziwa endaweni yendawo futhi ukuthengiselana ngeke kudalwe ku-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);
}

Manje ungagijima umphakathi.js ukuze uthole umphumela olandelayo:

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

Okulandelayo, singabuka okufakiwe Kumhloli Wekhoramu kuphaneli ye-Chainstack, njengoba kukhonjisiwe ngezansi.

Womathathu ama-node ahlanganyele futhi ukuthengiselana kwabuyekezwa:

  1. Umsebenzi wokuqala ukhiphe inkontileka.
  2. Umsebenzi wesibili usethe izinga lokushisa lenkontileka libe ngamadigri ama-3.
  3. Izinga lokushisa litholwa nge-node yendawo, ngakho-ke akukho kuthenga okwenziwayo.

Yenza imisebenzi yomphakathi neyimfihlo ku-JPMorgan Quorum blockchain usebenzisa i-Web3

Ukuthengiselana okuyimfihlo

Umongo

Imfuneko evamile yezinhlangano ukuvikela idatha. Ngokwesibonelo, cabangela isimo lapho Isuphamakethe uqasha indawo yokugcina impahla yokugcina ukudla kwasolwandle endaweni ehlukile Umthengisi:

  • Umthengisi usebenzisa izinzwa ze-IoT, ifunda amanani okushisa njalo ngemizuzwana engama-30 futhi iwadlulise Esitolo esikhulu;
  • lawa manani kufanele atholakale kuphela Kumthengisi и Esitolo esikhulu, ixhunywe yi-consortium.

Yenza imisebenzi yomphakathi neyimfihlo ku-JPMorgan Quorum blockchain usebenzisa i-Web3

Sizoqedela imisebenzi emine ekhonjiswe kumdwebo ongenhla.

  • Sisebenzisa amanodi amathathu afanayo esimeni sangaphambilini ukuze sibonise imisebenzi eyimfihlo:
  • Isuphamakethe isebenzisa inkontileka ehlakaniphile eyimfihlo kuyo Isuphamakethe и Umthengisi.
  • Uhlangothi lwesithathu akanalo ilungelo lokufinyelela inkontileka ehlakaniphile.

Sizobiza izindlela get и set esikhundleni sika Isuphamakethe и Umthengisi ukukhombisa ukwenzeka kweKhoramu yangasese.

  1. Sizothumela inkontileka yangasese yabahlanganyeli Isuphamakethe и Umthengisi ngomhlanganyeli Isuphamakethe:

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

  2. Asisethe izinga lokushisa ukusuka Ilungu langaphandle (i-node yangaphandle) futhi uthole inani lokushisa:

    // 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. Asisethe izinga lokushisa ukusuka Umthengisi (i-node yangaphakathi) futhi uthole inani lokushisa:

    Izinga lokushisa kulesi simo kufanele libuyisele inani elingu-12 kusukela kunkontileka ehlakaniphile. Sicela uqaphele lokho Umthengisi lapha unokufinyelela okugunyaziwe kunkontileka ehlakaniphile.

    // 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. Sithola izinga lokushisa Ilungu langaphandle (inodi yangaphandle):

    Esinyathelweni sesi-3 izinga lokushisa lalibekwe ku-12, kodwa Uhlangothi lwesithathu akanakho ukufinyelela kunkontileka ehlakaniphile. Ngakho-ke inani lokubuyisela kufanele libe yize.

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

    Okulandelayo, sizobhekisisa ukwenza imisebenzi yangasese kunethiwekhi ye-Quorum nge iwebhu3.js. Njengoba iningi lekhodi lifana nemisebenzi yomphakathi, sizogqamisa kuphela lezo zingxenye ezihlukile emisebenzini yangasese.

Qaphela ukuthi inkontileka elayishwe kunethiwekhi ayinakuguqulwa, ngakho ukufinyelela okuvunyelwe kufanele kunikezwe ezindaweni ezifanele ngokunika amandla inkontileka yomphakathi ngesikhathi kukhishwa inkontileka, hhayi ngemva kwalokho.

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

Ukuthengiselana okuyimfihlo kwenziwa ngendlela efanayo - ngokufaka ukhiye wasesidlangalaleni wabahlanganyeli ngesikhathi sokubulawa.

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

Manje sesingagijima okuyimfihlo.js nemiphumela elandelayo:

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

Umhloli weKhoramu ku-Chainstack uzobonisa okulandelayo:

  • ukuthunyelwa kwenkontileka kubahlanganyeli Isuphamakethe;
  • Ukugcwaliseka SetTemperature kusukela Ilungu langaphandle;
  • Ukugcwaliseka SetTemperature kusuka kumhlanganyeli Umthengisi.

Yenza imisebenzi yomphakathi neyimfihlo ku-JPMorgan Quorum blockchain usebenzisa i-Web3

Njengoba ubona, kokubili ukuthengiselana kuqediwe, kodwa kuphela ukuthengiselana okuvela kumhlanganyeli Umthengisi ibuyekeze izinga lokushisa kunkontileka. Ngakho, ukuthengiselana okuyimfihlo kunikeza ukungaguquki, kodwa ngesikhathi esifanayo akuvezi idatha kumuntu wesithathu.

isiphetho

Sibheke isimo sokusetshenziswa kwezentengiselwano se-Quorum ukuze sinikeze ulwazi lwakamuva lokushisa endaweni yokugcina impahla ngokukhipha inethiwekhi phakathi kwezinhlangothi ezimbili - isuphamakethe kanye nomnikazi wendawo yokugcina impahla.

Sibonise ukuthi ulwazi lwakamuva lwezinga lokushisa lungagcinwa kanjani kukho kokubili okwenziwa esidlangalaleni nokuyimfihlo.

Kungaba nezimo eziningi zohlelo lokusebenza futhi, njengoba ubona, akunzima neze.

Linga, zama ukunweba umbhalo wakho. Ngaphezu kwalokho, imboni yezobuchwepheshe ye-blockchain ingakhula cishe ngokuphindwe kashumi ngo-2024.

Source: www.habr.com

Engeza amazwana