Бо истифода аз Web3 амалиёти ҷамъиятӣ ва хусусиро дар blockchain JPMorgan Quorum иҷро кунед

Бо истифода аз Web3 амалиёти ҷамъиятӣ ва хусусиро дар blockchain JPMorgan Quorum иҷро кунед

Quorum як блокчейни бар Ethereum асосёфта мебошад, ки аз ҷониби JPMorgan таҳия шудааст ва ба наздикӣ аввалин платформаи паҳншудаи китобҳо мебошад, ки аз ҷониби Microsoft Azure пешниҳод шудааст.

Кворум амалиёти хусусӣ ва ҷамъиятиро дастгирӣ мекунад ва ҳолатҳои зиёди истифодаи тиҷоратӣ дорад.

Дар ин мақола, мо як чунин сенарияро баррасӣ хоҳем кард - ҷойгиркунии шабакаи тақсимшудаи китоб дар байни супермаркет ва соҳиби анбор барои пешниҳоди маълумоти муосир дар бораи ҳарорати анбор.

Рамзи дар ин дастур истифодашуда дар анборҳо дар GitHub.

Мақола дар бар мегирад:

  • эҷоди шартномаи интеллектуалӣ;
  • густариши шабакаи Quorum бо истифода аз Chainstack;
  • Кворум амалиёти ҷамъиятӣ;
  • Муомилоти хусусии кворум.

Барои нишон додан, мо сенарияи мониторинги ҳароратро дар анборҳои аъзои шабакаи Кворум дар доираи Интернети чизҳо (IoT) истифода мебарем.

Мавзӯъ

Як гурӯҳи ширкатҳои анборӣ дар консорсиум муттаҳид мешаванд, то иттилоотро якҷоя нигоҳ доранд ва равандҳоро дар блокчейн автоматӣ кунанд. Барои ин ширкатҳо тасмим гирифтанд, ки Кворумро истифода баранд. Дар ин мақола мо ду сенарияро баррасӣ хоҳем кард: муомилоти давлатӣ ва амалиёти хусусӣ.

Муомилот аз ҷониби иштирокчиёни гуногун барои ҳамкорӣ бо консорсиум, ки ба он тааллуқ доранд, эҷод карда мешаванд. Ҳар як транзаксия шартномаро ҷойгир мекунад ё функсияро дар шартнома барои бор кардани маълумот ба шабака даъват мекунад. Ин амалҳо ба ҳама гиреҳҳои шабака такрор карда мешаванд.

Амалиётҳои ҷамъиятӣ барои дидани ҳамаи иштирокчиёни консорсиум дастрасанд. Амалиётҳои хусусӣ як қабати махфиятро илова мекунанд ва танҳо ба иштирокчиёне дастрасанд, ки ҳуқуқи ин корро доранд.

Барои ҳарду сенария, мо як шартномаро барои возеҳият истифода мебарем.

Шартномаи оқилона

Дар зер як шартномаи оддии интеллектуалӣ барои сенарияи мо сохта шудааст. Он як тағирёбандаи ҷамъиятӣ дорад temperature, ки бо истифода аз он тағир додан мумкин аст set ва бо усули кабул 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;
  }
}

Барои он ки шартнома бо он кор кунад web3.js, он бояд ба формати ABI ва байт-код тарҷума карда шавад. Истифодаи функсия formatContractдар зер шартномаро истифода мебарад solc-js.

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

Шартномаи анҷомёфта чунин менамояд:

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

Акнун, ки шартнома омода аст, мо шабакаро ҷойгир мекунем ва шартномаро ҷойгир мекунем.

Ҷойгиркунии гиреҳ

Бо истифода аз Web3 амалиёти ҷамъиятӣ ва хусусиро дар blockchain JPMorgan Quorum иҷро кунед

Ҷойгиркунии гиреҳ метавонад хеле меҳнатталаб бошад ва ин равандро бо истифода аз хидмат иваз кардан мумкин аст Chainstack.

Дар зер раванди ҷойгиркунии шабакаи Кворум бо консенсуси Raft ва се гиреҳ оварда шудааст.

Аввалан, биёед лоиҳа эҷод кунем ва онро лоиҳаи Кворум меномем:

Бо истифода аз Web3 амалиёти ҷамъиятӣ ва хусусиро дар blockchain JPMorgan Quorum иҷро кунед

Биёед як шабакаи Кворумро бо консенсуси Raft дар Google Cloud Platform эҷод кунем:

Бо истифода аз Web3 амалиёти ҷамъиятӣ ва хусусиро дар blockchain JPMorgan Quorum иҷро кунед

Биёед ду гиреҳи дигарро ба гиреҳе, ки аллакай бо нобаёнӣ сохта шудааст, илова кунем:

Бо истифода аз Web3 амалиёти ҷамъиятӣ ва хусусиро дар blockchain JPMorgan Quorum иҷро кунед

Се гиреҳи ҷорӣ:

Бо истифода аз Web3 амалиёти ҷамъиятӣ ва хусусиро дар blockchain JPMorgan Quorum иҷро кунед

Саҳифаи тафсилоти гиреҳ нуқтаи ниҳоии RPC, калиди оммавӣ ва ғайраро нишон медиҳад.

Бо истифода аз Web3 амалиёти ҷамъиятӣ ва хусусиро дар blockchain JPMorgan Quorum иҷро кунед

Шабака ҷойгир карда шудааст. Акнун биёед шартномаҳои оқилонаро ҷойгир кунем ва транзаксияҳоро бо истифода аз он иҷро кунем web3.js.

Амалиётҳои ҷамъиятӣ

Мавзӯъ

Ҳарорати анбор барои кам кардани хароҷот, махсусан барои маҳсулоте, ки дар ҳарорати зери сифр нигоҳ дошта мешаванд, аҳамияти калон дорад.

Ба ширкатҳо имкон медиҳад, ки ҳарорати берунии макони ҷуғрофии худро дар вақти воқеӣ мубодила кунанд ва онро дар дафтари тағирнопазир сабт кунанд, иштирокчиёни шабака хароҷот ва вақтро кам мекунанд.

Бо истифода аз Web3 амалиёти ҷамъиятӣ ва хусусиро дар blockchain JPMorgan Quorum иҷро кунед

Мо се вазифаро иҷро мекунем, ки дар диаграмма нишон дода шудаанд:

  1. Мо шартномаро тавассути Node 1:

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

  2. Ҳароратро тавассути Node 2 бо 3 дараҷа:

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

  3. Node 3 аз шартномаи интеллектуалӣ маълумот мегиранд. Шартнома арзиши 3 дараҷаро бармегардонад:

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

    Минбаъд, мо дида мебароем, ки чӣ гуна амалиёти оммавӣ дар шабакаи Quorum бо истифода аз он анҷом дода мешавад web3.js.

Мо як мисолро тавассути RPC барои се гиреҳ оғоз мекунем:

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

Биёед шартномаи интеллектуалиро ҷойгир кунем:

// 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 ду усули ҳамкорӣ бо шартномаро пешниҳод мекунад: call и send.

Биёед ҳарорати шартномаро тавассути иҷро навсозӣ кунем set бо истифода аз усули 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;
  });
}

Минбаъд мо усули web3-ро истифода мебарем call барои гирифтани харорати шартнома. Лутфан қайд кунед, ки усули call дар гиреҳи маҳаллӣ иҷро карда мешавад ва транзаксия дар 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);
}

Акнун шумо метавонед давед public.js барои ба даст овардани натиҷаи зерин:

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

Минбаъд, мо метавонем сабтҳоро дар Explorer Quorum дар панели Chainstack, тавре ки дар зер нишон дода шудааст, бубинем.

Ҳар се гиреҳ мутақобила карданд ва транзаксияҳо нав карда шуданд:

  1. Муомилоти аввал шартномаро ҷойгир кард.
  2. Муомилоти дуюм ҳарорати шартномаро то 3 дараҷа муқаррар кард.
  3. Ҳарорат тавассути гиреҳи маҳаллӣ қабул карда мешавад, бинобар ин ягон транзаксия эҷод намешавад.

Бо истифода аз Web3 амалиёти ҷамъиятӣ ва хусусиро дар blockchain JPMorgan Quorum иҷро кунед

Амалиётҳои хусусӣ

Мавзӯъ

Талаботи умумии ташкилотҳо ҳифзи маълумот мебошад. Ҳамчун мисол, як сенарияеро дида мебароем, ки дар он Супермаркет як анборро барои нигоҳ доштани маҳсулоти баҳрӣ аз як анбор ба иҷора мегирад Фурӯшанда:

  • Фурӯшанда бо истифода аз сенсорҳои IoT, ҳар 30 сония арзишҳои ҳароратро мехонад ва онҳоро интиқол медиҳад Ба супермаркет;
  • ин арзишҳо бояд танҳо дастрас бошанд Ба фурӯшанда и Ба супермаркет, аз ҷониби консорсиум шабакавӣ.

Бо истифода аз Web3 амалиёти ҷамъиятӣ ва хусусиро дар blockchain JPMorgan Quorum иҷро кунед

Мо чор вазифаеро, ки дар диаграммаи боло нишон дода шудаанд, иҷро мекунем.

  • Мо ҳамон се гиреҳро аз сенарияи қаблӣ барои нишон додани муомилоти хусусӣ истифода мебарем:
  • Супермаркет як шартномаи интеллектуалиро ҷойгир мекунад, ки ба он хусусӣ аст Супермаркет и Фурӯшанда.
  • Тарафи сеюм ҳуқуқи дастрасӣ ба шартномаи интеллектуалиро надорад.

Мо усулҳоро даъват мекунем get и set аз номи Супермаркет и Фурӯшанда барои намоиш додани муомилоти хусусии Кворум.

  1. Мо барои иштирокчиён шартномаи хусусиро ҷорӣ хоҳем кард Супермаркет и Фурӯшанда тавассути иштирокчӣ Супермаркет:

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

  2. Биёед ҳароратро аз Тарафи сеюм (гиреҳи беруна) ва арзиши ҳароратро гиред:

    // 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. Биёед ҳароратро аз Фурӯшанда (гиреҳи дохилӣ) ва арзиши ҳароратро гиред:

    Ҳарорат дар ин сенария бояд арзиши 12-ро аз шартномаи интеллектуалӣ баргардонад. Лутфан қайд кунед, ки Фурӯшанда дар ин ҷо дастрасии ваколатдор ба шартномаи интеллектуалӣ дорад.

    // 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. Мо ҳароратро аз он мегирем Тарафи сеюм (гиреҳи беруна):

    Дар қадами 3 ҳарорат ба 12 муқаррар карда шуд, аммо Тарафи сеюм ба шартномаи интеллектуалӣ дастрасӣ надорад. Аз ин рӯ, арзиши баргардонидан бояд нул бошад.

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

    Минбаъд, мо ба иҷрои амалиёти хусусӣ дар шабакаи Quorum бодиққат назар хоҳем кард web3.js. Азбаски аксари рамзҳо барои муомилоти давлатӣ якхелаанд, мо танҳо он қисмҳоеро, ки барои муомилоти хусусӣ фарқ мекунанд, таъкид мекунем.

Аҳамият диҳед, ки шартномаи ба шабака боршуда тағйирнопазир аст, бинобар ин дастрасии иҷозатдодашуда бояд ба гиреҳҳои мувофиқ тавассути фаъол кардани шартномаи ҷамъиятӣ дар лаҳзаи ҷойгиркунии шартнома дода шавад, на баъд.

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

Амалиётҳои хусусӣ ба ҳамин тариқ - бо ворид намудани калиди кушодаи иштирокчиён дар вақти иҷро анҷом дода мешаванд.

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

Акнун мо метавонем давида тавонем private.js бо натиҷаҳои зерин:

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

Таҳқиқгари Кворум дар Chainstack инҳоро нишон медиҳад:

  • додани шартнома аз иштироккунанда Супермаркет;
  • Иҷрои SetTemperature аз он Тарафи сеюм;
  • Иҷрои SetTemperature аз иштироккунанда Фурӯшанда.

Бо истифода аз Web3 амалиёти ҷамъиятӣ ва хусусиро дар blockchain JPMorgan Quorum иҷро кунед

Тавре ки шумо мебинед, ҳарду транзаксия анҷом дода мешаванд, аммо танҳо транзаксия аз иштирокчӣ Фурӯшанда хароратро дар шартнома нав кард. Ҳамин тариқ, муомилоти хусусӣ тағирнопазириро таъмин мекунанд, аммо дар айни замон маълумотро ба шахси сеюм ошкор намекунанд.

хулоса

Мо як парвандаи истифодаи тиҷоратии Кворумро дида баромадем, то маълумоти ҳароратро дар анбор тавассути густариши шабака байни ду тараф - супермаркет ва соҳиби анбор таъмин кунад.

Мо нишон додем, ки чӣ гуна маълумоти муосирро дар бораи ҳарорат тавассути муомилоти давлатӣ ва хусусӣ нигоҳ доштан мумкин аст.

Бисёр сенарияҳои барнома вуҷуд доранд ва чунон ки шумо мебинед, ин тамоман душвор нест.

Таҷриба кунед, кӯшиш кунед, ки скрипти худро васеъ кунед. Ғайр аз он, саноати технологияи blockchain то соли 2024 метавонад тақрибан даҳ баробар афзоиш ёбад.

Манбаъ: will.com

Илова Эзоҳ