Yi ma'amaloli na jama'a da masu zaman kansu akan blockchain Quorum JPMorgan ta amfani da Web3

Yi ma'amaloli na jama'a da masu zaman kansu akan blockchain Quorum JPMorgan ta amfani da Web3

cikasa wakilcin shi ne blockchain na tushen Ethereum wanda JPMorgan ya haɓaka kuma kwanan nan ya zama dandamalin leda na farko wanda Microsoft Azure ke bayarwa.

Quorum yana goyan bayan ma'amaloli masu zaman kansu da na jama'a kuma yana da shari'o'in amfanin kasuwanci da yawa.

A cikin wannan labarin, za mu bincika ɗayan irin wannan yanayin - ƙaddamar da hanyar sadarwa mai rarrabawa tsakanin babban kanti da mai sito don samar da bayanai na zamani game da zafin jiki na sito.

Lambar da aka yi amfani da ita a cikin wannan koyawa tana cikin wuraren ajiya akan GitHub.

Labarin ya kunshi:

  • ƙirƙirar kwangila mai wayo;
  • tura cibiyar sadarwar Quorum ta amfani da Chainstack;
  • Ma'amalar jama'a na quorum;
  • Quorum ma'amaloli masu zaman kansu.

Don misalta, muna amfani da yanayi don saka idanu zafin jiki a cikin ɗakunan ajiya na membobin cibiyar sadarwar Quorum a cikin Intanet na Abubuwa (IoT).

Ka'ida

Rukunin kamfanonin sito suna haɗuwa cikin haɗin gwiwa don adana bayanai tare da sarrafa matakai akan toshewar. Don wannan, kamfanoni sun yanke shawarar amfani da Quorum. A cikin wannan labarin za mu rufe al'amura guda biyu: hada-hadar jama'a da ma'amaloli masu zaman kansu.

Mahalarta daban-daban suna ƙirƙira ma'amala don yin hulɗa tare da ƙungiyar da suke cikinta. Kowace ma'amala ko dai tana tura kwangila ko kuma ta kira aiki a cikin kwangilar don loda bayanai zuwa cibiyar sadarwa. Ana maimaita waɗannan ayyukan zuwa duk nodes akan hanyar sadarwa.

Ana samun ma'amalar jama'a don dubawa ta duk mahalarta haɗin gwiwa. Ma'amaloli masu zaman kansu suna ƙara bayanin sirri kuma suna samuwa ga mahalarta waɗanda ke da haƙƙin yin haka kawai.

Ga al'amuran biyu, muna amfani da kwangila iri ɗaya don tsabta.

Kwangilar wayo

A ƙasa akwai kwangila mai wayo mai sauƙi da aka ƙirƙira don yanayin mu. Yana da canjin jama'a temperature, wanda za a iya canza ta amfani da set kuma karba ta hanya 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;
  }
}

Domin kwangila ya yi aiki tare gizo 3.js, dole ne a fassara shi zuwa tsarin ABI da bytecode. Amfani da aikin formatContracta kasa yana tattara kwangilar ta amfani da wuta-js.

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

Kwangilar da aka kammala tayi kama da haka:

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

Yanzu da kwangilar ta shirya, za mu tura hanyar sadarwa kuma mu tura kwangilar.

tura node

Yi ma'amaloli na jama'a da masu zaman kansu akan blockchain Quorum JPMorgan ta amfani da Web3

Aiwatar da kumburi na iya zama mai tsananin aiki kuma ana iya maye gurbin wannan tsari ta amfani da sabis Chainstack.

A ƙasa akwai tsari don tura cibiyar sadarwar Quorum tare da raɗaɗin raɗaɗi da nodes uku.

Da farko, bari mu ƙirƙiri aiki kuma mu kira shi Aikin Quorum:

Yi ma'amaloli na jama'a da masu zaman kansu akan blockchain Quorum JPMorgan ta amfani da Web3

Bari mu ƙirƙiri hanyar sadarwa ta Quorum tare da Raft yarjejeniya akan Dandalin Google Cloud:

Yi ma'amaloli na jama'a da masu zaman kansu akan blockchain Quorum JPMorgan ta amfani da Web3

Bari mu ƙara ƙarin nodes biyu zuwa kumburin da aka riga aka ƙirƙira ta tsohuwa:

Yi ma'amaloli na jama'a da masu zaman kansu akan blockchain Quorum JPMorgan ta amfani da Web3

Ƙuyoyin gudu guda uku:

Yi ma'amaloli na jama'a da masu zaman kansu akan blockchain Quorum JPMorgan ta amfani da Web3

Shafin cikakkun bayanai na kumburi yana nuna ƙarshen RPC, maɓallin jama'a, da sauransu.

Yi ma'amaloli na jama'a da masu zaman kansu akan blockchain Quorum JPMorgan ta amfani da Web3

Ana tura hanyar sadarwa. Yanzu bari mu tura smart kwangila da yin ma'amaloli ta amfani da gizo 3.js.

Ma'amaloli na jama'a

Ka'ida

Zazzabi na ma'aji yana da matuƙar mahimmanci wajen rage farashi, musamman ga samfuran da aka yi niyyar adanawa a yanayin zafi ƙasa da sifili.

Ta ƙyale kamfanoni su raba yanayin zafin waje na wurin su a cikin ainihin lokaci kuma su yi rikodin shi a cikin littatafan da ba za a iya canzawa ba, mahalarta cibiyar sadarwa suna rage farashi da lokaci.

Yi ma'amaloli na jama'a da masu zaman kansu akan blockchain Quorum JPMorgan ta amfani da Web3

Za mu yi ayyuka uku, wanda aka kwatanta a cikin zane:

  1. Za mu tura kwangilar ta hanyar Node 1:

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

  2. Saita yanayin zafi ta hanyar Node 2 da digiri 3:

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

  3. Node 3 zai karɓi bayanai daga kwangilar wayo. Kwangilar za ta dawo da darajar digiri 3:

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

    Na gaba, za mu kalli yadda ake aiwatar da ma'amala ta jama'a akan hanyar sadarwar Quorum ta amfani da gizo 3.js.

Mun fara misali ta hanyar RPC don nodes uku:

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

Bari mu tura kwangilar wayo:

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

gizo 3.js yana ba da hanyoyi guda biyu don hulɗa tare da kwangila: call и send.

Bari mu sabunta yanayin kwangilar ta aiwatarwa set ta amfani da hanyar yanar gizo3 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;
  });
}

Na gaba muna amfani da hanyar yanar gizo3 call don samun zafin kwangila. Lura cewa hanyar call an kashe shi akan kumburin gida kuma ba za a ƙirƙiri ma'amala akan blockchain ba.

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

Yanzu za ku iya gudu jama'a.js don samun sakamako mai zuwa:

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

Na gaba, za mu iya duba shigarwar a cikin Quorum explorer a cikin Chainstack panel, kamar yadda aka nuna a ƙasa.

Duk nodes guda uku sun yi hulɗa kuma an sabunta ma'amalolin:

  1. Ma'amala ta farko ta tura kwangilar.
  2. Ma'amala ta biyu ta saita zafin kwangilar zuwa digiri 3.
  3. Ana karɓar zafin jiki ta kumburin gida, don haka ba a ƙirƙiri wani ma'amala ba.

Yi ma'amaloli na jama'a da masu zaman kansu akan blockchain Quorum JPMorgan ta amfani da Web3

Ma'amaloli masu zaman kansu

Ka'ida

Abinda ake bukata na ƙungiyoyi shine kariyar bayanai. A matsayin misali, la'akari da wani labari a cikinsa Babban kanti yayi hayan wurin ajiya don adana abincin teku daga wani dabam Mai sayarwa:

  • Mai sayarwa ta amfani da na'urori masu auna firikwensin IoT, karanta ƙimar zafin jiki kowane sakan 30 kuma yana watsa su Zuwa babban kanti;
  • waɗannan dabi'un yakamata su kasance kawai Zuwa ga mai siyarwa и Zuwa babban kanti, hanyar sadarwa ta hanyar haɗin gwiwa.

Yi ma'amaloli na jama'a da masu zaman kansu akan blockchain Quorum JPMorgan ta amfani da Web3

Za mu kammala ayyuka huɗu da aka kwatanta a cikin zanen da ke sama.

  • Muna amfani da nodes guda uku iri ɗaya daga yanayin da ya gabata don nuna ma'amaloli masu zaman kansu:
  • Babban kanti ƙaddamar da kwangila mai wayo wanda ke sirri ga Babban kanti и Mai sayarwa.
  • Bangaren na uku ba shi da damar samun dama ga kwangila mai wayo.

Za mu kira hanyoyin get и set a madadin Babban kanti и Mai sayarwa don nuna ma'amalar Quorum mai zaman kansa.

  1. Za mu tura kwangilar sirri don mahalarta Babban kanti и Mai sayarwa ta hanyar ɗan takara Babban kanti:

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

  2. Bari mu saita zafin jiki daga Bangare na uku (kumburi na waje) kuma sami ƙimar zafin jiki:

    // 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. Bari mu saita zafin jiki daga Mai sayarwa (kumburi na ciki) kuma sami ƙimar zafin jiki:

    Zazzabi a cikin wannan yanayin yakamata ya dawo da ƙimar 12 daga kwangilar wayo. Lura cewa Mai sayarwa Anan ya ba da izinin samun dama ga kwangilar wayo.

    // 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. Muna samun zafin jiki daga Bangare na uku (kumburi na waje):

    A mataki na 3 an saita zafin jiki zuwa 12, amma Bangaren na uku ba shi da damar yin amfani da kwangilar wayo. Don haka ƙimar dawowar dole ne ta zama banza.

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

    Na gaba, za mu yi nazari sosai kan yin ma'amaloli masu zaman kansu akan hanyar sadarwar Quorum tare da gizo 3.js. Tun da yawancin lambar daidai yake don ma'amaloli na jama'a, za mu haskaka kawai waɗancan sassan da suka bambanta don ma'amaloli masu zaman kansu.

Lura cewa kwangilar da aka ɗora zuwa cibiyar sadarwar ba ta canzawa, don haka dole ne a ba da izinin izini ga nodes ɗin da suka dace ta hanyar ba da damar kwangilar jama'a a lokacin da aka tura kwangilar, ba bayan haka ba.

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

Ana yin ma'amaloli masu zaman kansu ta irin wannan hanya - ta hanyar haɗa maɓallin jama'a na mahalarta a lokacin aiwatarwa.

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

Yanzu za mu iya gudu masu zaman kansu.js tare da sakamako masu zuwa:

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

Mai binciken Quorum a Chainstack zai nuna masu zuwa:

  • ƙaddamar da kwangila daga ɗan takara Babban kanti;
  • Ayyuka SetTemperature daga Bangare na uku;
  • Ayyuka SetTemperature daga dan takara Mai sayarwa.

Yi ma'amaloli na jama'a da masu zaman kansu akan blockchain Quorum JPMorgan ta amfani da Web3

Kamar yadda kake gani, duka ma'amaloli sun ƙare, amma kawai ma'amala daga mahalarta Mai sayarwa sabunta yanayin zafi a cikin kwangilar. Don haka, ma'amaloli masu zaman kansu suna ba da rashin canzawa, amma a lokaci guda ba sa bayyana bayanai ga wani ɓangare na uku.

ƙarshe

Mun kalli shari'ar amfani da kasuwanci don Quorum don samar da bayanan zafin jiki na zamani a cikin ma'ajin ta hanyar tura hanyar sadarwa tsakanin ɓangarori biyu - babban kanti da mai sito.

Mun nuna yadda za a iya kiyaye bayanan zafin zamani ta hanyar hada-hadar jama'a da masu zaman kansu.

Ana iya samun yanayin aikace-aikacen da yawa kuma, kamar yadda kuke gani, ba shi da wahala ko kaɗan.

Gwaji, gwada faɗaɗa rubutun ku. Haka kuma, masana'antar fasahar blockchain zai iya girma kusan sau goma nan da 2024.

source: www.habr.com

Add a comment