Framkvæmdu opinber og einkaviðskipti á JPMorgan Quorum blockchain með því að nota Web3

Framkvæmdu opinber og einkaviðskipti á JPMorgan Quorum blockchain með því að nota Web3

Sveitarstjórn er Ethereum-undirstaða blockchain þróuð af JPMorgan og varð nú síðast fyrsti dreifði höfuðbókarvettvangurinn sem Microsoft Azure býður upp á.

Quorum styður einkaviðskipti og opinber viðskipti og hefur mörg viðskiptaleg tilvik.

Í þessari grein munum við skoða eina slíka atburðarás - dreifingu á dreifðu höfuðbókarneti milli stórmarkaðar og vöruhúsaeiganda til að veita uppfærðar upplýsingar um hitastig vöruhússins.

Kóðinn sem notaður er í þessari kennslu er í geymslur á GitHub.

Greinin fjallar um:

  • stofnun snjallsamnings;
  • dreifing á Quorum netinu með því að nota Keðjuháði;
  • Opinber viðskipti sveitarfélags;
  • Quorum einkaviðskipti.

Til að sýna fram á það notum við atburðarás til að fylgjast með hitastigi í vöruhúsum meðlima Quorum netsins innan hlutanna Internets (IoT).

Samhengi

Hópur vöruhúsafyrirtækja er að sameinast í hópi til að geyma saman upplýsingar og gera sjálfvirkan ferla á blockchain. Fyrir þetta ákváðu fyrirtæki að nota Quorum. Í þessari grein munum við fjalla um tvær aðstæður: opinber viðskipti og einkaviðskipti.

Viðskipti eru búin til af mismunandi þátttakendum til að hafa samskipti við hópinn sem þeir tilheyra. Hver viðskipti nota annað hvort samning eða kallar á aðgerð í samningnum til að hlaða upp gögnum á netið. Þessar aðgerðir eru endurteknar á alla hnúta á netinu.

Opinber viðskipti eru aðgengileg fyrir alla þátttakendur samsteypunnar. Einkaviðskipti bæta við trúnaðarlagi og eru aðeins í boði fyrir þá þátttakendur sem hafa réttindi til þess.

Fyrir báðar aðstæður notum við sama samning til skýrleika.

Snjall samningur

Hér að neðan er einfaldur snjallsamningur búinn til fyrir atburðarás okkar. Það hefur opinbera breytu temperature, sem hægt er að breyta með því að nota set og fá með aðferð 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;
  }
}

Til þess að samningurinn vinni með web3.js, það verður að þýða á ABI sniði og bækikóða. Að nota aðgerðina formatContracthér að neðan tekur saman samninginn með því að nota solc-js.

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

Fullgerður samningur lítur svona út:

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

Nú þegar samningurinn er tilbúinn munum við setja upp netið og dreifa samningnum.

Uppsetning hnúta

Framkvæmdu opinber og einkaviðskipti á JPMorgan Quorum blockchain með því að nota Web3

Það getur verið ansi vinnufrekt að dreifa hnút og hægt er að skipta út þessu ferli með því að nota þjónustu Keðjuháði.

Hér að neðan er ferlið við að dreifa Quorum netinu með Raft samstöðu og þremur hnútum.

Fyrst skulum við búa til verkefni og kalla það Quorum Project:

Framkvæmdu opinber og einkaviðskipti á JPMorgan Quorum blockchain með því að nota Web3

Búum til Quorum net með Raft samstöðu á Google Cloud Platform:

Framkvæmdu opinber og einkaviðskipti á JPMorgan Quorum blockchain með því að nota Web3

Við skulum bæta tveimur hnútum í viðbót við hnútinn sem þegar er búinn til sjálfgefið:

Framkvæmdu opinber og einkaviðskipti á JPMorgan Quorum blockchain með því að nota Web3

Þrír hlaupandi hnútar:

Framkvæmdu opinber og einkaviðskipti á JPMorgan Quorum blockchain með því að nota Web3

Upplýsingasíðan um hnút sýnir RPC endapunkt, opinberan lykil osfrv.

Framkvæmdu opinber og einkaviðskipti á JPMorgan Quorum blockchain með því að nota Web3

Netið er sett upp. Nú skulum við dreifa snjöllum samningum og framkvæma viðskipti með því að nota web3.js.

Opinber viðskipti

Samhengi

Hitastig vöruhúss skiptir miklu máli til að lækka kostnað, sérstaklega fyrir vörur sem ætlað er að geyma við frostmark.

Með því að leyfa fyrirtækjum að deila útihitastigi landfræðilegrar staðsetningar sinnar í rauntíma og skrá það í óbreytanlegt höfuðbók draga þátttakendur netkerfisins úr kostnaði og tíma.

Framkvæmdu opinber og einkaviðskipti á JPMorgan Quorum blockchain með því að nota Web3

Við munum framkvæma þrjú verkefni, sýnd á skýringarmyndinni:

  1. Við munum dreifa samningnum í gegnum Hnútur 1:

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

  2. Stilltu hitastigið í gegnum Hnútur 2 um 3 gráður:

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

  3. Hnútur 3 mun fá upplýsingar frá snjallsamningnum. Samningurinn mun skila gildinu 3 gráður:

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

    Næst munum við skoða hvernig á að framkvæma opinber viðskipti á Quorum netinu með því að nota web3.js.

Við setjum af stað tilvik í gegnum RPC fyrir þrjá hnú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,
 },
);

Við skulum nota snjallsamninginn:

// 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 býður upp á tvær aðferðir til að hafa samskipti við samninginn: call и send.

Við skulum uppfæra samningshitastigið með því að framkvæma set með web3 aðferð 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;
  });
}

Næst notum við web3 aðferðina call til að fá samningshitastigið. Vinsamlegast athugaðu að aðferðin call er keyrt á staðbundnum hnút og viðskiptin verða ekki búin til á 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);
}

Nú geturðu hlaupið public.js til að fá eftirfarandi niðurstöðu:

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

Næst getum við skoðað færslurnar í Quorum Explorer í Chainstack spjaldinu, eins og sýnt er hér að neðan.

Allir þrír hnútarnir höfðu samskipti og viðskiptin voru uppfærð:

  1. Fyrstu viðskiptin dreifðu samningnum.
  2. Önnur viðskiptin settu samningshitastigið í 3 gráður.
  3. Hitastigið er móttekið í gegnum staðbundinn hnút, þannig að engin viðskipti verða til.

Framkvæmdu opinber og einkaviðskipti á JPMorgan Quorum blockchain með því að nota Web3

Einkaviðskipti

Samhengi

Algeng krafa stofnana er gagnavernd. Sem dæmi, skoðaðu atburðarás þar sem Stórmarkaður leigir lagerrými til að geyma sjávarfang úr sér Seljandi:

  • Seljandi notar IoT skynjara, les hitastigsgildi á 30 sekúndna fresti og sendir þau Til stórmarkaðarins;
  • þessi gildi ættu aðeins að vera tiltæk Til seljanda и Til stórmarkaðarins, tengt samsteypu.

Framkvæmdu opinber og einkaviðskipti á JPMorgan Quorum blockchain með því að nota Web3

Við munum klára þau fjögur verkefni sem sýnd eru á skýringarmyndinni hér að ofan.

  • Við notum sömu þrjá hnúta frá fyrri atburðarás til að sýna fram á einkaviðskipti:
  • Stórmarkaður setur út snjallsamning sem er einkamál Stórmarkaður и Seljandi.
  • Þriðja hliðin hefur ekki rétt á aðgangi að snjallsamningnum.

Við munum kalla aðferðirnar get и set fyrir hönd Stórmarkaður и Seljandi til að sýna fram á einkaviðskipti í Quorum.

  1. Við munum dreifa einkasamningi fyrir þátttakendur Stórmarkaður и Seljandi í gegnum þátttakanda Stórmarkaður:

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

  2. Stillum hitastigið frá Þriðji aðili (ytri hnút) og fáðu hitastigið:

    // 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. Stillum hitastigið frá Seljandi (innri hnút) og fáðu hitastigið:

    Hitastigið í þessari atburðarás ætti að skila gildinu 12 frá snjallsamningnum. Vinsamlegast athugaðu það Seljandi hér hefur heimilað aðgang að snjallsamningnum.

    // 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. Við fáum hitastigið frá Þriðji aðili (ytri hnútur):

    Í þrepi 3 var hitastigið stillt á 12, en Þriðja hliðin hefur ekki aðgang að snjallsamningnum. Þess vegna verður skilagildið að vera núll.

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

    Næst munum við skoða nánar að framkvæma einkaviðskipti á Quorum netinu með web3.js. Þar sem mestur kóðinn er sá sami fyrir opinber viðskipti, munum við auðkenna aðeins þá hluta sem eru öðruvísi fyrir einkaviðskipti.

Athugaðu að samningurinn sem hlaðið er upp á netið er óbreytanlegur, þannig að heimilaður aðgangur verður að vera veittur að viðeigandi hnútum með því að virkja opinbera samninginn á þeim tíma sem samningurinn er settur á, ekki eftir.

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

Einkaviðskipti eru framkvæmd á svipaðan hátt - með því að láta opinberan lykil þátttakenda fylgja með við framkvæmd.

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

Nú getum við hlaupið private.js með eftirfarandi niðurstöðum:

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

Quorum landkönnuðurinn í Chainstack mun sýna eftirfarandi:

  • dreifing samnings frá þátttakanda Stórmarkaður;
  • Frammistaða SetTemperature frá Þriðji aðili;
  • Frammistaða SetTemperature frá þátttakanda Seljandi.

Framkvæmdu opinber og einkaviðskipti á JPMorgan Quorum blockchain með því að nota Web3

Eins og þú sérð er báðum viðskiptum lokið, en aðeins viðskipti frá þátttakanda Seljandi uppfærði hitastigið í samningnum. Þannig veita einkaviðskipti óbreytanleika, en á sama tíma afhjúpa þau ekki gögn til þriðja aðila.

Ályktun

Við skoðuðum viðskiptalega notkun fyrir Quorum til að veita uppfærðar upplýsingar um hitastig í vöruhúsi með því að dreifa neti milli tveggja aðila - stórmarkaðar og vöruhúsaeiganda.

Við sýndum hvernig hægt er að viðhalda uppfærðum hitaupplýsingum með bæði opinberum og einkaviðskiptum.

Það getur verið mikið af umsóknaratburðarás og eins og þú sérð er það alls ekki erfitt.

Gerðu tilraunir, reyndu að stækka handritið þitt. Þar að auki, blockchain tækniiðnaðurinn gæti næstum tífaldast árið 2024.

Heimild: www.habr.com

Bæta við athugasemd