Manaova fifampiraharaham-bahoaka sy tsy miankina amin'ny JPMorgan Quorum blockchain amin'ny fampiasana Web3

Manaova fifampiraharaham-bahoaka sy tsy miankina amin'ny JPMorgan Quorum blockchain amin'ny fampiasana Web3

kôlejy dia blockchain miorina amin'ny Ethereum novolavolain'i JPMorgan ary vao haingana no lasa sehatra ledger nozaraina voalohany natolotry ny Microsoft Azure.

Ny Kôrum dia manohana ny fifampiraharahana manokana sy ampahibemaso ary manana tranga fampiasana ara-barotra maro.

Ato amin'ity lahatsoratra ity dia handinika toe-javatra iray toy izany isika - ny fametrahana tambajotram-pitantanam-bola zaraina eo amin'ny toeram-pivarotana lehibe iray sy ny tompon'ny trano fanatobiana entana mba hanomezana vaovao farany momba ny mari-pana ao amin'ny trano fanatobiana entana.

Ny code ampiasaina amin'ity lesona ity dia ao repository ao amin'ny GitHub.

Ny lahatsoratra dia mirakitra:

  • famoronana fifanarahana marani-tsaina;
  • fametrahana ny tambajotra Kôlejy mampiasa Chainstack;
  • Fifampiraharaham-bahoaka amin'ny kôlejy;
  • Transakta tsy miankina amin'ny kôlejy.

Ohatra, mampiasa scenario izahay amin'ny fanaraha-maso ny mari-pana ao amin'ny trano fitehirizan'ny mpikambana ao amin'ny tambajotra Kôlejy ao anatin'ny Internet of Things (IoT).

teny manodidina

Vondrona orinasa trano fanatobiana entana no mivondrona ao amin'ny consortium mba hiara-hitahiry vaovao sy automatique ny fizotran'ny blockchain. Noho izany, nanapa-kevitra ny hampiasa ny Quorum ny orinasa. Ato amin'ity lahatsoratra ity isika dia hiresaka toe-javatra roa: ny raharaham-bahoaka sy ny tsy miankina.

Ny fifampiraharahana dia noforonin'ny mpandray anjara samihafa hifaneraserana amin'ny consortium misy azy ireo. Ny fifampiraharahana tsirairay dia na mametraka fifanarahana na miantso asa iray ao amin'ny fifanarahana mba hampakatra angona amin'ny tambajotra. Ireo hetsika ireo dia averina amin'ny nodes rehetra amin'ny tambajotra.

Ny fifampiraharahana ampahibemaso dia azo jerena amin'ny mpandray anjara rehetra amin'ny consortium. Ny fifampiraharahana manokana dia manampy sosona tsiambaratelo ary tsy misy afa-tsy ireo mpandray anjara manana zo hanao izany.

Ho an'ireo toe-javatra roa ireo, fifanarahana iray ihany no ampiasanay mba hanazavana.

Smart fifanarahana

Ity ambany ity ny fifanarahana marani-tsaina tsotra noforonina ho an'ny scenario. Manana fari-piadidiana ho an'ny daholobe izy io temperature, izay azo ovaina amin'ny fampiasana set ary mandray amin'ny fomba 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;
  }
}

Mba hahafahan'ny fifanarahana miasa web3.js, tsy maintsy adika amin'ny endrika ABI sy bytecode. Mampiasa ny asa formatContracteto ambany dia manangona ny fifanarahana mampiasa solc-js.

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

Toy izao ny fifanarahana vita:

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

Rehefa vonona ny fifanarahana dia hametraka ny tambajotra izahay ary hametraka ny fifanarahana.

Fametrahana node

Manaova fifampiraharaham-bahoaka sy tsy miankina amin'ny JPMorgan Quorum blockchain amin'ny fampiasana Web3

Ny fametrahana node dia mety ho asa be dia be ary io dingana io dia azo soloina amin'ny fampiasana serivisy Chainstack.

Ity ambany ity ny dingana amin'ny fametrahana ny tambajotra Kôlejy miaraka amin'ny marimaritra iraisana Raft sy node telo.

Voalohany, andao hamorona tetikasa ary hiantso azy io ny Quorum Project:

Manaova fifampiraharaham-bahoaka sy tsy miankina amin'ny JPMorgan Quorum blockchain amin'ny fampiasana Web3

Andao hamorona tambajotra Kôrum miaraka amin'ny marimaritra iraisana Raft ao amin'ny Google Cloud Platform:

Manaova fifampiraharaham-bahoaka sy tsy miankina amin'ny JPMorgan Quorum blockchain amin'ny fampiasana Web3

Andeha isika hanampy node roa hafa amin'ny node efa noforonina ho default:

Manaova fifampiraharaham-bahoaka sy tsy miankina amin'ny JPMorgan Quorum blockchain amin'ny fampiasana Web3

Nodes telo mandeha:

Manaova fifampiraharaham-bahoaka sy tsy miankina amin'ny JPMorgan Quorum blockchain amin'ny fampiasana Web3

Ny pejy antsipirian'ny node dia mampiseho ny teboka farany RPC, fanalahidin'ny daholobe, sns.

Manaova fifampiraharaham-bahoaka sy tsy miankina amin'ny JPMorgan Quorum blockchain amin'ny fampiasana Web3

Apetraka ny tambajotra. Andeha isika hametraka fifanarahana marani-tsaina ary hanao fifampiraharahana amin'ny fampiasana web3.js.

Transakta ampahibemaso

teny manodidina

Ny mari-pana ao amin'ny trano fanatobiana entana dia manan-danja lehibe amin'ny fampihenana ny fandaniana, indrindra ho an'ny vokatra natao hotehirizina amin'ny mari-pana ambany aotra.

Amin'ny alàlan'ny famelana ireo orinasa hizara ny mari-pana ivelan'ny toerana ara-jeografika azy amin'ny fotoana tena izy ary handrakitra izany ao amin'ny bokikely tsy azo ovaina, mampihena ny fandaniana sy ny fotoana ny mpandray anjara amin'ny tambajotra.

Manaova fifampiraharaham-bahoaka sy tsy miankina amin'ny JPMorgan Quorum blockchain amin'ny fampiasana Web3

Hanatanteraka asa telo isika, aseho amin'ny kisary:

  1. Hametraka ny fifanarahana amin'ny alalan'ny Nody 1:

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

  2. Mametraha ny maripana amin'ny alalan'ny Nody 2 amin'ny 3 degre:

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

  3. Nody 3 hahazo vaovao avy amin'ny fifanarahana smart. Ny fifanarahana dia hamerina ny sanda 3 degre:

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

    Manaraka izany, hojerentsika ny fomba hanatanterahana ny fifampiraharaham-bahoaka amin'ny tambajotran'ny Kôrum mampiasa web3.js.

Manomboka ohatra amin'ny alàlan'ny RPC izahay ho an'ny node telo:

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

Andao hametraka ny fifanarahana marani-tsaina:

// 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 manome fomba roa hifaneraserana amin'ny fifanarahana: call и send.

Andao hanavao ny mari-pana amin'ny fifanarahana amin'ny fanatanterahana set mampiasa fomba 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;
  });
}

Avy eo dia mampiasa ny fomba web3 izahay call mba hahazoana ny mari-pana fifanarahana. Mariho fa ny fomba call dia tanterahina amin'ny node eo an-toerana ary ny fifanakalozana dia tsy ho noforonina amin'ny 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);
}

Afaka mihazakazaka ianao izao public.js mba hahazoana izao vokatra manaraka izao:

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

Manaraka izany dia afaka mijery ireo lahatsoratra ao amin’ny Kôlejy mpikaroka ao amin’ny tontolon’ny Chainstack isika, araka ny aseho etsy ambany.

Nifandray daholo ny node telo ary nohavaozina ny fifanakalozana:

  1. Ny fifanarahana voalohany dia nametraka ny fifanarahana.
  2. Ny fifanakalozana faharoa dia nametraka ny mari-pana amin'ny fifanarahana ho 3 degre.
  3. Ny mari-pana dia raisina amin'ny alàlan'ny node eo an-toerana, ka tsy misy fifampiraharahana noforonina.

Manaova fifampiraharaham-bahoaka sy tsy miankina amin'ny JPMorgan Quorum blockchain amin'ny fampiasana Web3

Transakta manokana

teny manodidina

Ny fepetra iraisan'ny fikambanana dia ny fiarovana ny angona. Diniho, ohatra, ny scenario iray Sipermarse manofa trano fanatobiana entana hitehirizana hazan-dranomasina amin'ny toerana mitokana Mpivarotra:

  • Mpivarotra mampiasa sensor IoT, mamaky ny mari-pana isaky ny 30 segondra ary mampita azy ireo Ho any amin'ny toeram-pivarotana lehibe;
  • ireo soatoavina ireo ihany no tokony ho hita Ho an'ny mpivarotra и Ho any amin'ny toeram-pivarotana lehibe, tambazotran'ny consortium.

Manaova fifampiraharaham-bahoaka sy tsy miankina amin'ny JPMorgan Quorum blockchain amin'ny fampiasana Web3

Hovitaintsika ireo asa efatra aseho amin'ny kisary etsy ambony.

  • Mampiasa ireo node telo mitovy amin'ny scenario teo aloha izahay mba hanehoana ny fifampiraharahana manokana:
  • Sipermarse mametraka fifanarahana marani-tsaina izay manokana ho an'ny Sipermarse и Mpivarotra.
  • Ny lafiny fahatelo tsy manana zo hiditra amin'ny fifanarahana marani-tsaina.

Hantsoinay ny fomba get и set amin'ny anaran'ny Sipermarse и Mpivarotra mba hanehoana fifampiraharahana manokana ao amin'ny Kôlejy.

  1. Hametraka fifanarahana manokana ho an'ny mpandray anjara izahay Sipermarse и Mpivarotra amin'ny alalan'ny mpandray anjara Sipermarse:

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

  2. Andeha isika hametraka ny mari-pana avy Ankolafy fahatelo (node ​​ivelany) ary alao ny sandan'ny mari-pana:

    // 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. Andeha isika hametraka ny mari-pana avy Mpivarotra (node ​​anatiny) ary alao ny sandan'ny mari-pana:

    Ny mari-pana amin'ity tranga ity dia tokony hamerina ny sanda 12 avy amin'ny fifanarahana marani-tsaina. Mariho fa Mpivarotra eto dia nanome alalana ny fidirana amin'ny fifanarahana marani-tsaina.

    // 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. Mahazo ny mari-pana avy amin'ny Ankolafy fahatelo (node ​​ivelany):

    Ao amin'ny dingana 3 ny mari-pana dia napetraka ho 12, fa Ny lafiny fahatelo tsy manana fidirana amin'ny fifanarahana marani-tsaina. Noho izany dia tsy maintsy null ny sanda miverina.

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

    Manaraka izany dia hojerentsika akaiky ny fanaovana fifampiraharahana manokana ao amin'ny tambajotra Kôlejy miaraka amin'ny web3.js. Satria ny ankamaroan'ny kaody dia mitovy amin'ny fifampiraharahana ho an'ny daholobe, ireo ampahany izay tsy mitovy amin'ny fifampiraharahana manokana ihany no hasongadinay.

Mariho fa ny fifanarahana nampidirina tao amin'ny tambajotra dia tsy azo ovaina, noho izany dia tsy maintsy omena alalana ny fidirana amin'ireo node mety amin'ny alàlan'ny fampandehanana ny fifanarahana ho an'ny daholobe amin'ny fotoana ametrahana ny fifanarahana, fa tsy aorian'izany.

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

Ny fifampiraharahana manokana dia atao amin'ny fomba mitovy - amin'ny fampidirana ny fanalahidin'ny daholobe amin'ny mpandray anjara amin'ny fotoana famonoana.

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

Afaka mihazakazaka isika izao private.js miaraka amin'ireto valiny manaraka ireto:

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

Ny mpikaroka Kôlejy ao amin'ny Chainstack dia hampiseho izao manaraka izao:

  • fametrahana ny fifanarahana avy amin'ny mpandray anjara Sipermarse;
  • famonoana SetTemperature от Ankolafy fahatelo;
  • famonoana SetTemperature avy amin'ny mpandray anjara Mpivarotra.

Manaova fifampiraharaham-bahoaka sy tsy miankina amin'ny JPMorgan Quorum blockchain amin'ny fampiasana Web3

Araka ny hitanao dia vita ny fifampiraharahana roa, fa ny fifampiraharahana avy amin'ny mpandray anjara ihany Mpivarotra fanavaozana ny mari-pana ao amin'ny fifanarahana. Noho izany, ny fifampiraharahana manokana dia manome ny tsy fiovaovana, fa miaraka amin'izay koa dia tsy manambara angon-drakitra amin'ny antoko fahatelo.

famaranana

Nijery tranga fampiasàna ara-barotra ho an'ny Kôrum izahay mba hanomezana vaovao momba ny mari-pana amin'ny trano fanatobiana entana amin'ny alàlan'ny fametrahana tambajotra eo amin'ny antoko roa - toeram-pivarotana lehibe sy tompona trano fanatobiana entana.

Nasehonay ny fomba fitazomana ny vaovao momba ny mari-pana amin'ny alàlan'ny fifampiraharaham-bahoaka sy tsy miankina.

Mety misy sehatra fampiharana be dia be ary, araka ny hitanao, dia tsy sarotra mihitsy izany.

Manandrama, miezaha hanitatra ny scripto. Ankoatra izany, ny indostrian'ny teknolojia blockchain dia mety hitombo efa ho avo folo heny amin'ny 2024.

Source: www.habr.com

Add a comment