Fa'atino fefa'ataua'iga fa'alaua'itele ma tuma'oti ile poloka poloka poloka a le JPMorgan Quorum ile Web3

Fa'atino fefa'ataua'iga fa'alaua'itele ma tuma'oti ile poloka poloka poloka a le JPMorgan Quorum ile Web3

korama o se Ethereum-fa'avae poloka poloka na atia'e e JPMorgan ma talu ai nei na avea ma ulua'i fa'asoa fa'asoa fa'asalalauga e ofoina mai e Microsoft Azure.

E lagolagoina e le Korama fefaʻatauaiga tumaoti ma faʻasalalauga lautele ma e tele mataupu faʻaoga faʻapisinisi.

I totonu o lenei tusiga, o le a tatou iloiloina se tasi o ia faʻataʻitaʻiga - o le faʻapipiʻiina o se fesoʻotaʻiga faʻasalalau tufatufaina i le va o se supamaketi ma se fale teu oloa e tuʻuina atu faʻamatalaga lata mai e uiga i le vevela o le faleteuoloa.

O le code faʻaaogaina i lenei aʻoaʻoga o loʻo i totonu fale teu oloa ile GitHub.

O le tusiga e aofia ai:

  • faia o se konekarate atamai;
  • fa'aogaina o feso'ota'iga a le Korama e fa'aaoga Chainstack;
  • Fefaatauaiga faalauaitele a le korama;
  • Fefaatauaiga tumaoti a le korama.

Mo se faʻataʻitaʻiga, matou te faʻaogaina se faʻataʻitaʻiga mo le mataʻituina o le vevela i fale teu oloa a sui o le Korama fesoʻotaʻiga i totonu o le Initaneti o Mea (IoT).

Anotusi

O se vaega o kamupani faleteuoloa o loʻo tuʻufaʻatasia i se consortium e faʻapipiʻi faʻatasi faʻamatalaga ma faʻautometi faiga i luga o le poloka poloka. Mo lenei mea, na filifili kamupani e faʻaaoga le Korama. I totonu o lenei tusiga o le a tatou aofia ai ni faʻaaliga se lua: fefaʻatauaiga lautele ma fefaʻatauaiga tumaoti.

O fefa'atauaiga e faia e sui auai eseese e fegalegaleai ma le consortium o lo'o latou auai. O fefaʻatauaʻiga taʻitasi pe faʻapipiʻi se konekarate pe valaʻau se galuega i totonu o le konekarate e faʻapipiʻi ai faʻamaumauga i luga ole fesoʻotaʻiga. O nei gaioiga o loʻo faʻatusalia i nodes uma i luga o le upega tafailagi.

O fefa'ataua'iga fa'alaua'itele e avanoa mo le maimoaina e tagata uma o lo'o auai. O fefa'ataua'iga fa'apitoa e fa'aopoopoina ai se vaega o le agatapuia ma e avanoa mo na'o i latou o lo'o auai e iai aia tatau e faia ai.

Mo fa'aaliga uma e lua, matou te fa'aogaina le konekarate tutusa mo le manino.

Konekarate atamai

O lo'o i lalo se konekarate atamai faigofie na faia mo la tatou fa'aaliga. E i ai se fesuiaiga lautele temperature, lea e mafai ona suia i le faʻaaogaina set ma maua i le auala 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;
  }
}

Ina ia mafai ona galulue faatasi le konekarate web3.js, e tatau ona faaliliuina i le ABI format ma bytecode. Fa'aaogaina o le galuega formatContracto loʻo i lalo o loʻo tuʻufaʻatasia le konekarate faʻaaogaina solc-js.

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

O le konekarate ua mae'a e pei o lenei:

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

O lea la ua sauni le konekarate, o le a matou faʻapipiʻiina le fesoʻotaʻiga ma faʻapipiʻi le konekarate.

Node fa'apipi'iina

Fa'atino fefa'ataua'iga fa'alaua'itele ma tuma'oti ile poloka poloka poloka a le JPMorgan Quorum ile Web3

O le tu'uina atu o se node e mafai ona fai si faigata tele ma e mafai ona suia lenei faiga i le fa'aogaina o se auaunaga Chainstack.

O loʻo i lalo le faʻagasologa mo le faʻaogaina o fesoʻotaʻiga a le Korama ma le Raft consensus ma tolu nodes.

Muamua, sei o tatou faia se galuega faatino ma faaigoa o le Korama Project:

Fa'atino fefa'ataua'iga fa'alaua'itele ma tuma'oti ile poloka poloka poloka a le JPMorgan Quorum ile Web3

Se'i o tatou faia se feso'ota'iga a le Korama fa'atasi ai ma Raft consensus ile Google Cloud Platform:

Fa'atino fefa'ataua'iga fa'alaua'itele ma tuma'oti ile poloka poloka poloka a le JPMorgan Quorum ile Web3

Se'i o tatou fa'aopoopo nisi node se lua i le node ua uma ona fai e ala i le faaletonu:

Fa'atino fefa'ataua'iga fa'alaua'itele ma tuma'oti ile poloka poloka poloka a le JPMorgan Quorum ile Web3

E tolu nodes tamo'e:

Fa'atino fefa'ataua'iga fa'alaua'itele ma tuma'oti ile poloka poloka poloka a le JPMorgan Quorum ile Web3

O le itulau faʻamatalaga o le node o loʻo faʻaalia ai le RPC endpoint, lautele lautele, ma isi.

Fa'atino fefa'ataua'iga fa'alaua'itele ma tuma'oti ile poloka poloka poloka a le JPMorgan Quorum ile Web3

Ua fa'apipi'i le feso'ota'iga. Se'i o tatou fa'apipi'i konekarate atamai ma fa'atino fefa'ataua'iga fa'aaoga web3.js.

Fefaatauaiga lautele

Anotusi

O le vevela o fale teu oloa e taua tele i le faʻaitiitia o tau, aemaise lava mo oloa e faʻamoemoe e teu i lalo ole vevela vevela.

E ala i le fa'atagaina o kamupani e fa'asoa le vevela i fafo o lo latou nofoaga fa'afanua i le taimi moni ma fa'amaumau i totonu o se tusi e le mafai ona suia, e fa'aitiitia ai le tau ma le taimi e sui auai i feso'otaiga.

Fa'atino fefa'ataua'iga fa'alaua'itele ma tuma'oti ile poloka poloka poloka a le JPMorgan Quorum ile Web3

O le a matou faia ni galuega se tolu, o loʻo faʻaalia i le ata:

  1. O le a matou faʻapipiʻi le konekarate e ala i Node 1:

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

  2. Seti le vevela e ala i Node 2 e 3 tikeri:

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

  3. Node 3 o le a maua faʻamatalaga mai le konekarate atamai. O le konekarate o le a toe faafoi le tau 3 tikeri:

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

    O le isi, o le a tatou vaʻavaʻai pe faʻapefea ona faʻatino se fefaʻatauaiga lautele i luga o le fesoʻotaʻiga a le Korama e faʻaaoga ai web3.js.

Matou te amataina se faʻataʻitaʻiga e ala i le RPC mo nodes e tolu:

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

Sei o tatou fa'aogaina le konekarate atamai:

// 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 e maua ai auala e lua mo le fegalegaleai ma le konekarate: call и send.

Tatou fa'afouina le vevela fa'akonekarate e ala i le fa'atinoina set fa'aaoga auala 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;
  });
}

Le isi matou te faʻaogaina le web3 metotia call ia maua le vevela konekarate. Faamolemole ia matau le auala call o loʻo faʻatinoina i luga o se node i le lotoifale ma o le a le faia le fefaʻatauaiga i luga o le poloka poloka.

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

O lea ua mafai ona e tamoe public.js ina ia maua le taunuuga lea:

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

O le isi, e mafai ona tatou matamata i faamaumauga i le Korama explorer i le Chainstack panel, e pei ona faaalia i lalo.

Na fegalegaleai uma nodes e tolu ma toe faʻafouina fefaʻatauaiga:

  1. O le fefaʻatauaiga muamua na faʻapipiʻiina le konekarate.
  2. O le fefaʻatauaʻiga lona lua na faʻatulaga ai le vevela konekarate i le 3 tikeri.
  3. E maua le vevela e ala i se node i le lotoifale, o lea e leai se fefaʻatauaiga e faia.

Fa'atino fefa'ataua'iga fa'alaua'itele ma tuma'oti ile poloka poloka poloka a le JPMorgan Quorum ile Web3

Fefaatauaiga tumaoti

Anotusi

Ole mana'oga masani a fa'alapotopotoga ole puipuiga o fa'amaumauga. Mo se faʻataʻitaʻiga, mafaufau i se faʻataʻitaʻiga lea Supermarket mautotogi se fale teu oloa mo le teuina o i'a mai se isi Fa'atau:

  • Fa'atau faʻaogaina le IoT sensors, faitau tau vevela i 30 sekone ma faʻasalalau atu I le supamaketi;
  • o nei tau e tatau ona na'o avanoa I le tagata fa'atau и I le supamaketi, feso'ota'i e se consortium.

Fa'atino fefa'ataua'iga fa'alaua'itele ma tuma'oti ile poloka poloka poloka a le JPMorgan Quorum ile Web3

O le a matou fa'amae'aina galuega e fa o lo'o fa'aalia i le ata i luga.

  • Matou te faʻaogaina le tolu pona mai le faʻataʻitaʻiga muamua e faʻaalia ai fefaʻatauaiga tumaoti:
  • Supamaketi fa'apipi'i se konekarate atamai e fa'apitoa i Supermarket и Fa'atau.
  • O le itu lona tolu e leai se aia e maua ai le konekarate atamai.

O le a matou taʻua metotia get и set e fai ma sui Supermarket и Fa'atau e fa'aalia ai se fefa'atauaiga patino a le Korama.

  1. O le a matou faʻapipiʻiina se konekarate tumaoti mo tagata auai Supamaketi и Fa'atau e ala i se tagata auai Supamaketi:

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

  2. Tatou seti le vevela mai Vaega lona tolu (node ​​fafo) ma maua le tau o le vevela:

    // 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. Tatou seti le vevela mai Fa'atau (node ​​totonu) ma maua le tau o le vevela:

    O le vevela i lenei fa'aaliga e tatau ona toe fa'afo'i le tau 12 mai le konekarate atamai. Fa'amolemole ia matau lena mea Fa'atau iinei ua faatagaina avanoa i le konekarate atamai.

    // 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. Matou te maua le vevela mai Vaega lona tolu (node ​​fafo):

    I le Laasaga 3 na setiina le vevela i le 12, ae O le itu lona tolu e le maua le avanoa i le konekarate atamai. O le mea lea e tatau ona null le tau toe faafoi.

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

    Le isi, o le a tatou vaʻavaʻai totoʻa i le faʻatinoina o fefaʻatauaiga tumaoti i luga o fesoʻotaʻiga a le Korama ma web3.js. Talu ai o le tele o le code e tutusa mo fefaʻatauaiga lautele, o le a matou faʻamaonia naʻo vaega na e ese mo fefaʻatauaiga tumaoti.

Manatua o le konekarate na lafoina i luga o fesoʻotaʻiga e le mafai ona suia, o lea e tatau ona tuʻuina atu avanoa faʻatagaina i nodes talafeagai e ala i le faʻatagaina o le konekarate lautele i le taimi e faʻapipiʻi ai le konekarate, ae le o le maeʻa.

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

O fefaʻatauaʻiga faʻapitoa e faʻatinoina i se auala talitutusa - e ala i le faʻaofiina o le ki faʻasalalau a tagata auai i le taimi o le faʻatinoga.

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

O lea ua mafai ona tatou taufetuli private.js fa'atasi ai ma fa'ai'uga nei:

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

O le tagata suʻesuʻe o le Korama i Chainstack o le a faʻaalia mea nei:

  • fa'apipi'iina o le konekarate mai le sui auai Supamaketi;
  • Faatinoga SetTemperature от Vaega lona tolu;
  • Faatinoga SetTemperature mai se tagata auai Fa'atau.

Fa'atino fefa'ataua'iga fa'alaua'itele ma tuma'oti ile poloka poloka poloka a le JPMorgan Quorum ile Web3

E pei ona e vaʻaia, ua maeʻa uma fefaʻatauaiga, ae naʻo le fefaʻatauaiga mai le tagata auai Fa'atau faafou le vevela i totonu o le konekarate. O le mea lea, o fefaʻatauaiga tumaoti e maua ai le le mafai ona suia, ae i le taimi lava e tasi e le faʻaalia ai faʻamatalaga i se isi vaega.

iʻuga

Sa matou va'ava'ai i se fa'aoga fa'apisinisi mo le Korama e tu'uina atu ai fa'amatalaga fou o le vevela i totonu o se faleteuoloa e ala i le fa'aogaina o se feso'ota'iga i le va o itu e lua - o se supamaketi ma se fale teu oloa.

Na matou fa'aalia pe fa'afefea ona fa'atumauina fa'amatalaga fou o le vevela e ala i fefa'ataua'iga fa'alaua'itele ma tagata tumaoti.

E mafai ona i ai le tele o faʻataʻitaʻiga faʻataʻitaʻiga ma, e pei ona e vaʻaia, e le faigata lava.

Fa'ata'ita'i, taumafai e fa'alautele lau tusitusiga. E le gata i lea, o le pisinisi tekonolosi poloka poloka e mafai ona tuputupu aʻe toetoe faʻasefulu i le 2024.

puna: www.habr.com

Faaopoopo i ai se faamatalaga