Fanya miamala ya umma na ya kibinafsi kwenye blockchain ya Akidi ya JPMorgan kwa kutumia Web3

Fanya miamala ya umma na ya kibinafsi kwenye blockchain ya Akidi ya JPMorgan kwa kutumia Web3

Quorum ni mnyororo wa msingi wa Ethereum uliotengenezwa na JPMorgan na hivi karibuni ukawa jukwaa la kwanza la leja kusambazwa kutolewa na Microsoft Azure.

Akidi inasaidia shughuli za kibinafsi na za umma na ina kesi nyingi za matumizi ya kibiashara.

Katika makala haya, tutachunguza hali moja kama hii - kupelekwa kwa mtandao wa leja iliyosambazwa kati ya duka kubwa na mmiliki wa ghala ili kutoa habari za kisasa kuhusu halijoto ya ghala.

Msimbo uliotumika katika mafunzo haya upo hazina kwenye GitHub.

Makala hiyo inashughulikia:

  • kuunda mkataba wa busara;
  • kusambaza mtandao wa Akidi kwa kutumia Chainstack;
  • Akidi ya shughuli za umma;
  • Akidi ya shughuli za kibinafsi.

Kwa mfano, tunatumia hali ya kufuatilia halijoto katika ghala za wanachama wa mtandao wa Akidi ndani ya Mtandao wa Mambo (IoT).

Muktadha

Kundi la makampuni ya ghala linaungana katika muungano ili kuhifadhi kwa pamoja taarifa na kufanyia kazi michakato otomatiki kwenye blockchain. Kwa hili, makampuni yaliamua kutumia Akidi. Katika makala hii tutashughulikia matukio mawili: shughuli za umma na shughuli za kibinafsi.

Shughuli za malipo zinaundwa na washiriki tofauti ili kuingiliana na muungano ambao wanahusika. Kila muamala unatumia mkataba au kuita kazi katika mkataba ili kupakia data kwenye mtandao. Vitendo hivi vinaigwa kwa nodi zote kwenye mtandao.

Shughuli za umma zinapatikana kwa kutazamwa na washiriki wote wa muungano. Shughuli za kibinafsi huongeza safu ya usiri na zinapatikana tu kwa washiriki ambao wana haki ya kufanya hivyo.

Kwa hali zote mbili, tunatumia mkataba sawa kwa uwazi.

Mkataba wa busara

Ifuatayo ni mkataba rahisi mahiri ulioundwa kwa ajili ya hali yetu. Ina tofauti ya umma temperature, ambayo inaweza kubadilishwa kwa kutumia set na kupokea kwa mbinu 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;
  }
}

Ili mkataba ufanye kazi nao mtandao3.js, lazima itafsiriwe katika umbizo la ABI na bytecode. Kwa kutumia kipengele formatContracthapa chini inakusanya mkataba kwa kutumia Solc-js.

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

Mkataba uliokamilika unaonekana kama hii:

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

Sasa kwa kuwa mkataba uko tayari, tutasambaza mtandao na kupeleka mkataba.

Usambazaji wa nodi

Fanya miamala ya umma na ya kibinafsi kwenye blockchain ya Akidi ya JPMorgan kwa kutumia Web3

Kupeleka nodi inaweza kuwa kazi kubwa sana na mchakato huu unaweza kubadilishwa kwa kutumia huduma Chainstack.

Ifuatayo ni mchakato wa kupeleka mtandao wa Akidi kwa makubaliano ya Raft na nodi tatu.

Kwanza, hebu tuunde mradi na tuuite Mradi wa Akidi:

Fanya miamala ya umma na ya kibinafsi kwenye blockchain ya Akidi ya JPMorgan kwa kutumia Web3

Hebu tuunde mtandao wa Akidi kwa makubaliano ya Raft kwenye Google Cloud Platform:

Fanya miamala ya umma na ya kibinafsi kwenye blockchain ya Akidi ya JPMorgan kwa kutumia Web3

Wacha tuongeze nodi mbili zaidi kwenye nodi ambayo tayari imeundwa na chaguo-msingi:

Fanya miamala ya umma na ya kibinafsi kwenye blockchain ya Akidi ya JPMorgan kwa kutumia Web3

Nodi tatu zinazoendesha:

Fanya miamala ya umma na ya kibinafsi kwenye blockchain ya Akidi ya JPMorgan kwa kutumia Web3

Ukurasa wa maelezo ya nodi unaonyesha mwisho wa RPC, ufunguo wa umma, nk.

Fanya miamala ya umma na ya kibinafsi kwenye blockchain ya Akidi ya JPMorgan kwa kutumia Web3

Mtandao umewekwa. Sasa hebu tupeleke mikataba mahiri na tufanye miamala kwa kutumia mtandao3.js.

Shughuli za umma

Muktadha

Joto la ghala ni la umuhimu mkubwa katika kupunguza gharama, hasa kwa bidhaa zinazokusudiwa kuhifadhiwa katika halijoto ya chini ya sufuri.

Kwa kuruhusu makampuni kushiriki halijoto ya nje ya eneo lao la kijiografia kwa wakati halisi na kurekodi katika daftari isiyoweza kubadilika, washiriki wa mtandao hupunguza gharama na wakati.

Fanya miamala ya umma na ya kibinafsi kwenye blockchain ya Akidi ya JPMorgan kwa kutumia Web3

Tutafanya kazi tatu, zilizoonyeshwa kwenye mchoro:

  1. Tutapeleka mkataba kupitia Node 1:

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

  2. Weka hali ya joto kupitia Node 2 kwa digrii 3:

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

  3. Node 3 atapokea taarifa kutoka kwa mkataba wa smart. Mkataba utarudisha thamani ya digrii 3:

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

    Ifuatayo, tutaangalia jinsi ya kutekeleza shughuli ya umma kwenye mtandao wa Akidi kwa kutumia mtandao3.js.

Tunaanzisha mfano kupitia RPC kwa nodi tatu:

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

Wacha tutumie mkataba mzuri:

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

mtandao3.js hutoa njia mbili za kuingiliana na mkataba: call ΠΈ send.

Wacha tusasishe halijoto ya mkataba kwa kutekeleza set kwa kutumia njia 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;
  });
}

Ifuatayo tunatumia njia ya web3 call kupata joto la mkataba. Tafadhali kumbuka kuwa mbinu call inatekelezwa kwenye nodi ya ndani na shughuli haitaundwa kwenye 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);
}

Sasa unaweza kukimbia public.js kupata matokeo yafuatayo:

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

Kisha, tunaweza kutazama maingizo katika Kichunguzi cha Akidi kwenye paneli ya Chainstack, kama inavyoonyeshwa hapa chini.

Nodi zote tatu ziliingiliana na shughuli zilisasishwa:

  1. Shughuli ya kwanza ilipeleka mkataba.
  2. Shughuli ya pili iliweka joto la mkataba hadi digrii 3.
  3. Joto hupokelewa kupitia nodi ya ndani, kwa hivyo hakuna shughuli inayoundwa.

Fanya miamala ya umma na ya kibinafsi kwenye blockchain ya Akidi ya JPMorgan kwa kutumia Web3

Shughuli za kibinafsi

Muktadha

Mahitaji ya kawaida ya mashirika ni ulinzi wa data. Kwa mfano, fikiria kisa ambacho Maduka makubwa inakodisha nafasi ya ghala kwa ajili ya kuhifadhi dagaa kutoka sehemu tofauti Mchuuzi:

  • Mchuuzi kwa kutumia sensorer za IoT, husoma viwango vya joto kila sekunde 30 na kuzisambaza Kwa maduka makubwa;
  • maadili haya yanapaswa kupatikana tu Kwa muuzaji ΠΈ Kwa maduka makubwa, mtandao na muungano.

Fanya miamala ya umma na ya kibinafsi kwenye blockchain ya Akidi ya JPMorgan kwa kutumia Web3

Tutakamilisha kazi nne zilizoonyeshwa kwenye mchoro hapo juu.

  • Tunatumia nodi tatu sawa kutoka kwa hali ya awali ili kuonyesha shughuli za kibinafsi:
  • Duka kubwa hutoa mkataba mzuri ambao ni wa faragha Maduka makubwa ΠΈ Mchuuzi.
  • Upande wa tatu hana haki ya kufikia mkataba wa busara.

Tutaita njia get ΠΈ set Kwa niaba ya Maduka makubwa ΠΈ Mchuuzi ili kuonyesha shughuli ya Akidi ya kibinafsi.

  1. Tutapeleka mkataba wa kibinafsi kwa washiriki Duka kubwa ΠΈ Mchuuzi kupitia kwa mshiriki Duka kubwa:

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

  2. Wacha tuweke joto kutoka Mhusika wa tatu (nodi ya nje) na upate thamani ya joto:

    // 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. Wacha tuweke joto kutoka Mchuuzi (nodi ya ndani) na upate thamani ya joto:

    Halijoto katika hali hii inapaswa kurudisha thamani 12 kutoka kwa mkataba mahiri. Tafadhali kumbuka hilo Mchuuzi hapa ina idhini ya ufikiaji wa mkataba mzuri.

    // 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. Tunapata joto kutoka Mhusika wa tatu (nodi ya nje):

    Katika hatua ya 3 joto liliwekwa hadi 12, lakini Upande wa tatu hana ufikiaji wa mkataba mzuri. Kwa hivyo thamani ya kurudi lazima iwe batili.

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

    Kisha, tutaangalia kwa karibu zaidi kufanya miamala ya kibinafsi kwenye mtandao wa Akidi na mtandao3.js. Kwa kuwa nambari nyingi za kuthibitisha ni sawa kwa miamala ya umma, tutaangazia sehemu zile tu ambazo ni tofauti kwa shughuli za kibinafsi.

Kumbuka kuwa mkataba uliopakiwa kwenye mtandao hauwezi kubadilika, kwa hivyo ufikiaji ulioidhinishwa lazima utolewe kwa nodi zinazofaa kwa kuwezesha mkataba wa umma wakati mkataba umewekwa, sio baada.

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

Shughuli za kibinafsi zinafanywa kwa njia sawa - kwa kujumuisha ufunguo wa umma wa washiriki wakati wa utekelezaji.

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

Sasa tunaweza kukimbia private.js na matokeo yafuatayo:

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

Mgunduzi wa Akidi katika Chainstack ataonyesha yafuatayo:

  • kupelekwa kwa mkataba kutoka kwa mshiriki Duka kubwa;
  • Utimilifu SetTemperature kutoka Mhusika wa tatu;
  • Utimilifu SetTemperature kutoka kwa mshiriki Mchuuzi.

Fanya miamala ya umma na ya kibinafsi kwenye blockchain ya Akidi ya JPMorgan kwa kutumia Web3

Kama unaweza kuona, shughuli zote mbili zimekamilika, lakini ni shughuli tu kutoka kwa mshiriki Mchuuzi ilisasisha halijoto katika mkataba. Kwa hivyo, shughuli za kibinafsi hutoa kutoweza kubadilika, lakini wakati huo huo usifunulie data kwa mtu wa tatu.

Hitimisho

Tuliangalia kesi ya matumizi ya kibiashara kwa Quorum kutoa taarifa ya hali ya joto ya kisasa katika ghala kwa kusambaza mtandao kati ya pande mbili - duka kuu na mmiliki wa ghala.

Tulionyesha jinsi maelezo ya halijoto ya kisasa yanaweza kudumishwa kupitia shughuli za umma na za kibinafsi.

Kunaweza kuwa na hali nyingi za maombi na, kama unaweza kuona, sio ngumu hata kidogo.

Jaribio, jaribu kupanua hati yako. Aidha, sekta ya teknolojia ya blockchain inaweza kukua karibu mara kumi kufikia 2024.

Chanzo: mapenzi.com

Kuongeza maoni