Ku samee macaamil ganacsi guud iyo mid gaar ah oo ku saabsan blockchain Quorum JPMorgan adoo isticmaalaya Web3

Ku samee macaamil ganacsi guud iyo mid gaar ah oo ku saabsan blockchain Quorum JPMorgan adoo isticmaalaya Web3

Quorum waa blockchain ku salaysan Ethereum oo ay samaysay JPMorgan oo dhawaanahan noqotay madal ledgeerkii ugu horeeyay ee la qaybiyo oo ay bixiso Microsoft Azure.

Kooramku waxa uu taageeraa macaamilada gaarka ah iyo kuwa guud waxana uu leeyahay kiisas ganacsi oo badan.

Maqaalkan, waxaan ku baari doonaa mid ka mid ah xaaladaha noocaas ah - dirida shabakad ledgeer qaybsan oo u dhaxaysa supermarket-ka iyo mulkiilaha bakhaarka si loo bixiyo macluumaad cusub oo ku saabsan heerkulka bakhaarka.

Koodhka loo isticmaalay casharkan ayaa ku jira kaydka GitHub.

Maqaalku wuxuu daboolayaa:

  • abuurista qandaraas caqli-gal ah;
  • dirida shabakada Quorum iyadoo la isticmaalayo Silsilad;
  • Kooramka wax kala iibsiga dadweynaha;
  • Koorum macaamil ganacsi oo gaar ah

Si loo qeexo, waxaan u isticmaalnaa xaalad la socodka heerkulka bakhaarrada xubnaha Shabakadda Quorum ee Internetka Waxyaabaha (IoT).

Dulucda

Koox ka mid ah shirkadaha bakhaarrada ayaa ku midoobaya isbahaysi si ay si wadajir ah u kaydiyaan macluumaadka oo ay u habeeyaan hababka blockchain. Taas awgeed, shirkaduhu waxay go'aansadeen inay isticmaalaan Koorum. Maqaalkan waxaan ku dabooli doonaa laba xaaladood: wax kala iibsiga dadweynaha iyo wax kala iibsiga gaarka ah.

Macaamilada waxaa abuura ka qaybgalayaal kala duwan si ay ula falgalaan daladda ay ka tirsan yihiin. Wax kala iibsi kastaa waxa uu geeyaa qandaraas ama waxa uu wacaa shaqada qandaraaska si loogu shubo xogta shabakada. Ficiladan waxaa lagu celceliyaa dhammaan noodyada shabakadda.

Wax kala iibsiga dadweynaha ayaa diyaar u ah daawashada dhammaan ka qaybgalayaasha isbahaysiga. Wax kala iibsiga gaarka ah wuxuu ku daraa lakabka sirta ah oo ay heli karaan kaliya ka qaybgalayaasha xaqa u leh inay sidaas sameeyaan.

Labada xaaladoodba, waxaanu isticmaalnaa qandaraas isku mid ah si aan u caddayno.

qandaraas smart

Hoos waxaa ku yaal qandaraas fudud oo caqli badan oo loo abuuray muuqaalkeenna. Waxay leedahay doorsoome dadweyne temperature, kaas oo lagu beddeli karo iyadoo la isticmaalayo set oo hab lagu helo 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;
  }
}

Si uu qandaraasku ula shaqeeyo web3.js, waa in loo tarjumaa qaabka ABI iyo bytecode. Isticmaalka shaqada formatContractHoos waxa uu ururiyaa qandaraaska isagoo isticmaalaya solc-js.

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

Qandaraaska la dhammaystiray ayaa u eg sidan:

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

Hadda oo qandaraasku diyaar yahay, waxaanu geyn doonaa shabakada oo aan geyn doonaa qandaraaska.

Meesha node

Ku samee macaamil ganacsi guud iyo mid gaar ah oo ku saabsan blockchain Quorum JPMorgan adoo isticmaalaya Web3

Gelida noode waxay noqon kartaa mid aad u xoog badan waxaana habkan lagu bedeli karaa adeeg Silsilad.

Hoos waxaa ah habka loo daabulayo shabakadda Quorum oo leh Raft consensus iyo saddex noodood.

Marka hore, aynu abuurno mashruuc oo aynu ugu yeedhno Mashruuca Quorum:

Ku samee macaamil ganacsi guud iyo mid gaar ah oo ku saabsan blockchain Quorum JPMorgan adoo isticmaalaya Web3

Aan abuurno shabakad Quorum ah oo leh Raft consensus ee Google Cloud Platform:

Ku samee macaamil ganacsi guud iyo mid gaar ah oo ku saabsan blockchain Quorum JPMorgan adoo isticmaalaya Web3

Aynu ku darno laba nood oo dheeraad ah noodhka horeba loo abuuray:

Ku samee macaamil ganacsi guud iyo mid gaar ah oo ku saabsan blockchain Quorum JPMorgan adoo isticmaalaya Web3

Saddex qanjidhada socda:

Ku samee macaamil ganacsi guud iyo mid gaar ah oo ku saabsan blockchain Quorum JPMorgan adoo isticmaalaya Web3

Bogga faahfaahinta noodhka ayaa muujinaya barta dhamaadka RPC, furaha dadweynaha, iwm.

Ku samee macaamil ganacsi guud iyo mid gaar ah oo ku saabsan blockchain Quorum JPMorgan adoo isticmaalaya Web3

Shabakadda waa la geeyey Hadda aynu geyno qandaraasyo caqli-gal ah oo aan sameyno macaamil ganacsi annagoo isticmaalna web3.js.

Wax kala iibsiga dadweynaha

Dulucda

Heerkulka bakhaarku wuxuu muhiimad weyn u leeyahay dhimista kharashaadka, gaar ahaan alaabta loogu talagalay in lagu kaydiyo heerkul-hoosaadka eber.

Adigoo u oggolaanaya shirkadaha inay wadaagaan heerkulka ka baxsan goobtooda juqraafi ahaan wakhtiga dhabta ah oo ay ku qoraan buug aan la bedeli karin, ka qaybgalayaasha shabakadu waxay yareeyaan kharashyada iyo waqtiga.

Ku samee macaamil ganacsi guud iyo mid gaar ah oo ku saabsan blockchain Quorum JPMorgan adoo isticmaalaya Web3

Waxaan qaban doonaa saddex hawlood, oo lagu muujiyey jaantuska:

  1. Waxaanu ku geyn doonaa qandaraaska Node 1:

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

  2. Deji heerkulka iyada oo loo marayo Node 2 ilaa 3 darajo:

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

  3. Node 3 waxay heli doontaa macluumaadka qandaraaska smart. Qandaraasku wuxuu soo celin doonaa qiimaha 3 darajo:

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

    Marka xigta, waxaan eegi doonaa sida loo fuliyo macaamil ganacsi oo dadweyne shabakada Quorum iyadoo la adeegsanayo web3.js.

Waxaan tusaale ahaan ku bilownay RPC saddex nood:

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

Aynu geyno qandaraaska caqliga leh:

// 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 waxay bixisaa laba hab oo loola macaamilo heshiiska: call и send.

Aynu cusboonaysiino heerkulka heshiiska anagoo fulinayna set iyadoo la isticmaalayo habka 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;
  });
}

Marka xigta waxaan isticmaalnaa habka web3 call si loo helo heerkulka heshiiska. Fadlan la soco in habka call waxaa lagu fuliyaa meel maxalli ah oo wax kala iibsiga laguma abuuri doono 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);
}

Hadda waad carari kartaa dadweynaha.js si loo helo natiijada soo socota:

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

Marka xigta, waxaan arki karnaa gelida sahamiyaha Koorum ee ku jira guddiga Chainstack, sida hoos ku cad.

Dhammaan saddexda nood ayaa is-dhexgalay oo wax kala iibsiga waa la cusboonaysiiyay:

  1. Wax kala iibsigii ugu horeeyay waxa uu geeyay heshiiska.
  2. Xawaaladda labaad waxay dejisay heerkulka heshiiska ilaa 3 darajo.
  3. Heerkulka waxaa lagu helaa qanjidhada maxalliga ah, markaa wax macaamil ah lama abuurin.

Ku samee macaamil ganacsi guud iyo mid gaar ah oo ku saabsan blockchain Quorum JPMorgan adoo isticmaalaya Web3

Wax kala iibsiga gaarka ah

Dulucda

Shuruudaha guud ee ururadu waa ilaalinta xogta. Tusaale ahaan, ka fiirso xaalad ku jirta Suuq weyn kiraystay meel bakhaar ah oo lagu kaydiyo cuntada badda meel gooni ah Iibiyaha:

  • Iibiyaha Adigoo isticmaalaya dareemayaasha IoT, waxay akhriyaan qiyamka heerkulka 30-kii ilbiriqsi kasta oo ay gudbiyaan Dukaamada waaweyn;
  • qiyamkan waa in la helaa oo kaliya Ku socota iibiyaha и Dukaamada waaweyn, oo ay isku xidhxidheen dalad.

Ku samee macaamil ganacsi guud iyo mid gaar ah oo ku saabsan blockchain Quorum JPMorgan adoo isticmaalaya Web3

Waxaan dhamaystiri doonaa afarta hawlood ee lagu muujiyey jaantuska sare.

  • Waxaan isticmaalnaa isla saddexda noode ee dhacdadii hore si aan u muujino wax kala iibsiga gaarka ah:
  • Suuq weyn waxay dejisaa qandaraas caqli-gal ah oo gaar u ah Suuq weyn и Iibiyaha.
  • Dhinaca saddexaad xaq uma laha inuu galo qandaraaska smart.

Waxaan wici doonaa hababka get и set anigoo ka wakiil ah Suuq weyn и Iibiyaha si loo muujiyo macaamil ganacsi oo gaar ah

  1. Waxaan u diri doonaa qandaraas gaar ah ka qaybgalayaasha Suuq weyn и Iibiyaha iyada oo loo marayo ka qaybgale Suuq weyn:

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

  2. Aynu ka dhigno heerkulka Qolada saddexaad (node ​​dibadda ah) oo hel qiimaha heerkulka:

    // 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. Aynu ka dhigno heerkulka Iibiyaha (node ​​gudaha) oo hel qiimaha heerkulka:

    Heerkulka muuqaalkan waa inuu ka soo celiyaa qiimihii 12 ee qandaraaska smart. Fadlan ogow taas Iibiyaha halkan ayaa oggolaaday gelitaanka qandaraaska smart.

    // 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. Waxaan ka helnaa heerkulka Qolada saddexaad (node ​​dibadda):

    Talaabada 3-aad heerkulka waxaa loo dejiyay 12, laakiin Dhinaca saddexaad ma heli karo qandaraaska smart. Sidaa darteed qiimuhu waa inuu noqdaa mid aan waxba ka jirin.

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

    Marka xigta, waxaanu si dhow u eegi doonaa samaynta macaamilada gaarka ah ee shabakada Koorumka web3.js. Maadaama inta badan koodka ay isku mid yihiin macaamilka dadweynaha, waxaanu muujin doonaa oo kaliya qaybaha ka duwan ganacsiga gaarka ah.

Ogsoonow in qandaraaska la soo galiyay shabakadu uu yahay mid aan isbedeli karin, sidaas darteed gelitaanka ogolaanshaha waa in la siiyaa noodhadhka ku habboon iyada oo awood u siinaysa qandaraaska dadweynaha wakhtiga qandaraaska la dirayo, maaha ka dib.

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

Wax kala iibsiga gaarka ah waxaa loo sameeyaa si la mid ah - iyadoo lagu daro furaha dadweynaha ee ka qaybgalayaasha wakhtiga fulinta.

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

Hadda waan ordi karnaa gaar ah.js oo leh natiijooyinka soo socda:

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

Sahamiyaha Quorum ee Chainstack wuxuu tusi doonaa kuwa soo socda:

  • keenista qandaraaska ka qaybqaataha Suuq weyn;
  • Waxqabadka SetTemperature ka Qolada saddexaad;
  • Waxqabadka SetTemperature ka qaybgale Iibiyaha.

Ku samee macaamil ganacsi guud iyo mid gaar ah oo ku saabsan blockchain Quorum JPMorgan adoo isticmaalaya Web3

Sida aad arki karto, labada macaamil ganacsi waa la dhammeeyaa, laakiin kaliya macaamilka ka qaybgalaha Iibiyaha cusboonaysiiyey heerkulka heshiiska. Sidaa darteed, macaamil ganacsiyada gaarka ah waxay bixiyaan isbeddel la'aan, laakiin isla mar ahaantaana ma muujin xogta cid saddexaad.

gunaanad

Waxaan u eegnay kiis adeegsi ganacsi oo loogu talagalay Quorum si ay u bixiso macluumaadka heerkulka ugu dambeeyay ee bakhaarka anagoo geynayna shabakad u dhexeysa laba dhinac - dukaan weyn iyo mulkiilaha bakhaarka.

Waxaan tusnay sida xogta heerkulka cusub loogu hayn karo iyada oo loo marayo macaamil ganacsi dadweyne iyo mid gaar ah labadaba.

Waxaa jiri kara xaalado badan oo codsi ah, sida aad arki karto, ma aha wax adag innaba.

Tijaabi, isku day inaad balaadhiso qoraalkaaga. Intaa waxaa dheer, warshadaha tignoolajiyada ee blockchain wuxuu kori karaa ku dhawaad ​​toban laab marka la gaaro 2024.

Source: www.habr.com

Add a comment