Mahia nga whakawhitiwhitinga a te iwi me te tangata takitahi i runga i te poraka JPMorgan Quorum ma te whakamahi i te Web3

Mahia nga whakawhitiwhitinga a te iwi me te tangata takitahi i runga i te poraka JPMorgan Quorum ma te whakamahi i te Web3

Pŭpŭ he poraka-a-Ethereum i hangaia e JPMorgan, a, no na tata tonu nei ka tu hei papaaa pukapuka tuatahi kua tohatohahia e Microsoft Azure.

Ka tautokohia e te Koorum nga whakawhitinga takitahi me te iwi whanui me te maha o nga keehi hokohoko.

I roto i tenei tuhinga, ka tirohia e matou tetahi o nga ahuatanga penei - te horahanga o te kupenga pukapuka pukapuka kua tohatohahia i waenga i te hokomaha me tetahi rangatira whare putunga hei tuku korero hou mo te mahana o te whare putunga.

Ko te waehere i whakamahia i tenei akoranga kei roto putunga i runga i GitHub.

Kei roto i te tuhinga:

  • te hanga kirimana atamai;
  • te horahanga o te kupenga Koorum ma te whakamahi Chainstack;
  • Nga whakawhitiwhitinga a te iwi;
  • Ko nga whakawhitinga takitahi a te Koorum.

Hei whakatauira, ka whakamahia e matou he ahuatanga mo te aro turuki i te pāmahana i roto i nga whare putunga o nga mema o te Koorum i roto i te Ipurangi o nga Mea (IoT).

Horopaki

Ko tetahi roopu o nga kamupene whare putunga kei te whakakotahi ki te roopu ki te penapena ngatahi korero me te whakahaere aunoa i nga mahi i runga i te poraka. Mo tenei, i whakatau nga kamupene ki te whakamahi i te Quorum. I roto i tenei tuhinga ka hipokina e matou nga ahuatanga e rua: nga whakawhitinga a te iwi me nga whakawhitinga takitahi.

Ko nga tauwhitinga he mea hanga e nga kaiuru rereke ki te mahi tahi me te roopuu no ratou. Ko ia tauwhitinga ka tukuna he kirimana, ka karanga ranei i tetahi mahi i roto i te kirimana ki te tuku raraunga ki te whatunga. Ka tukuna enei mahi ki nga pona katoa o te whatunga.

E waatea ana nga tauwhitinga a-iwi mo te maataki e nga kaiuru katoa. Ko nga tauwhitinga motuhake ka taapirihia he paparanga muna, ka waatea noa ki nga kaiuru e whai mana ana ki te pera.

Mo nga ahuatanga e rua, ka whakamahia e matou te kirimana kotahi mo te maarama.

kirimana atamai

Kei raro nei he kirimana maamaa ngawari i hangaia mo taatau ahuatanga. He taurangi tūmatanui temperature, ka taea te whakarereke ma te whakamahi set me te whiwhi ma te tikanga 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;
  }
}

Kia mahi tahi ai te kirimana tukutuku3.js, me whakamaori ki te whakatakotoranga ABI me te bytecode. Te whakamahi i te mahi formatContractkei raro kohia te kirimana ma te whakamahi solc-js.

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

Ko te ahua o te kirimana kua oti te ahua penei:

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

Inaianei kua rite te kirimana, ka tohatohahia e matou te whatunga me te tuku i te kirimana.

Te horahanga node

Mahia nga whakawhitiwhitinga a te iwi me te tangata takitahi i runga i te poraka JPMorgan Quorum ma te whakamahi i te Web3

Ko te tuku i te node he tino uaua te mahi, ka taea te whakakapi i tenei mahi ma te whakamahi i tetahi ratonga Chainstack.

Kei raro nei te tukanga mo te tuku i te whatunga Koorum me te whakaaetanga Raft me nga pona e toru.

Tuatahi, me hanga he kaupapa me te karanga ko te Quorum Project:

Mahia nga whakawhitiwhitinga a te iwi me te tangata takitahi i runga i te poraka JPMorgan Quorum ma te whakamahi i te Web3

Me hanga he whatunga Koorum me te whakaae Raft i runga i te Google Cloud Platform:

Mahia nga whakawhitiwhitinga a te iwi me te tangata takitahi i runga i te poraka JPMorgan Quorum ma te whakamahi i te Web3

Me taapiri kia rua ano nga pona ki te pona kua oti te hanga ma te taunoa:

Mahia nga whakawhitiwhitinga a te iwi me te tangata takitahi i runga i te poraka JPMorgan Quorum ma te whakamahi i te Web3

E toru nga pona e rere ana:

Mahia nga whakawhitiwhitinga a te iwi me te tangata takitahi i runga i te poraka JPMorgan Quorum ma te whakamahi i te Web3

Ko te wharangi taipitopito node e whakaatu ana i te pito mutunga RPC, te taviri a te iwi, aha atu.

Mahia nga whakawhitiwhitinga a te iwi me te tangata takitahi i runga i te poraka JPMorgan Quorum ma te whakamahi i te Web3

Ka tohatohahia te whatunga. Inaianei me tuku kirimana maatau me te mahi i nga whakawhitinga ma te whakamahi tukutuku3.js.

Nga tauhokohoko a te iwi

Horopaki

He mea nui te mahana o te whare putunga hei whakaiti i nga utu, ina koa mo nga hua e kiia ana kia rongoa ki nga pāmahana iti-kore.

Ma te tuku i nga kamupene ki te tiri i te pāmahana o waho o te waahi matawhenua i roto i te waa tuuturu me te tuhi i roto i te pukapuka pukapuka kore huri, ka whakaitihia e nga kaiuru whatunga nga utu me te wa.

Mahia nga whakawhitiwhitinga a te iwi me te tangata takitahi i runga i te poraka JPMorgan Quorum ma te whakamahi i te Web3

Ka mahia e matou nga mahi e toru, e whakaatuhia ana i te hoahoa:

  1. Ka tukuna e matou te kirimana ma Node 1:

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

  2. Tautuhi te pāmahana mā Node 2 mā te 3 nekehanga:

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

  3. Node 3 ka whiwhi korero mai i te kirimana atamai. Ka whakahokia e te kirimana te uara 3 nga nekehanga:

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

    I muri mai, ka titiro tatou me pehea te whakahaere i tetahi tauwhitinga a te iwi i runga i te whatunga Quorum ma te whakamahi tukutuku3.js.

Ka timatahia he tauira ma te RPC mo nga waahanga e toru:

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

Kia horahia te kirimana atamai:

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

tukutuku3.js E rua nga tikanga mo te taunekeneke me te kirimana: call и send.

Kia whakahōuhia te pāmahana kirimana mā te mahi set whakamahi tikanga 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;
  });
}

I muri mai ka whakamahia e matou te tikanga web3 call ki te whiwhi i te pāmahana kirimana. Kia mahara ko te tikanga call ka mahia i runga i te node o te rohe, a, kaore e hangaia te tauwhitinga i runga i te poraka.

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

Inaianei ka taea e koe te oma tūmatanui.js ki te whiwhi i te hua e whai ake nei:

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

I muri iho, e nehenehe tatou e mataitai i te mau tapura i roto i te Quorum explorer i roto i te papaa Chainstack, mai tei faaitehia i raro nei.

I taunekeneke nga pona e toru, ka whakahouhia nga whakawhitinga:

  1. Ko te whakawhitinga tuatahi i tukuna te kirimana.
  2. Ko te tauwhitinga tuarua ka tautuhi i te pāmahana kirimana ki te 3 nga nekehanga.
  3. Ka whakawhiwhia te pāmahana ma roto i te node rohe, no reira karekau he tauwhitinga i hangaia.

Mahia nga whakawhitiwhitinga a te iwi me te tangata takitahi i runga i te poraka JPMorgan Quorum ma te whakamahi i te Web3

Nga tauwhitinga motuhake

Horopaki

Ko te whakaritenga noa o nga whakahaere ko te tiaki raraunga. Hei tauira, whakaarohia tetahi ahuatanga Hokohoko ka reti he waahi putunga mo te penapena kaimoana mai i tetahi waahi motuhake Kaihoko:

  • Kaihoko ma te whakamahi i nga pukoro IoT, ka panui i nga uara pāmahana ia 30 hēkona ka tukuna Ki te hokomaha;
  • me waatea noa enei uara Ki te kaihoko и Ki te hokomaha, i whakahonohia e tetahi huinga.

Mahia nga whakawhitiwhitinga a te iwi me te tangata takitahi i runga i te poraka JPMorgan Quorum ma te whakamahi i te Web3

Ka whakaotihia e matou nga mahi e wha e whakaatuhia ana i te hoahoa i runga ake nei.

  • Ka whakamahia e matou nga waahanga e toru mai i te ahuatanga o mua hei whakaatu i nga tauwhitinga motuhake:
  • Hokohoko ka tukuna he kirimana atamai e noho motuhake ana Hokohoko и Kaihoko.
  • Ko te taha tuatoru kaore e whai mana ki te uru atu ki te kirimana atamai.

Ka karangahia e matou nga tikanga get и set mo te Hokohoko и Kaihoko ki te whakaatu i tetahi tauwhitinga a te Koorama.

  1. Ka tukuna e matou he kirimana motuhake mo nga kaiuru Hokohoko и Kaihoko mā te kaiuru Hokohoko:

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

  2. Me whakarite te pāmahana mai Tuatoru (node ​​waho) ka whiwhi i te uara pāmahana:

    // 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. Me whakarite te pāmahana mai Kaihoko (node ​​roto) ka tiki i te uara pāmahana:

    Ko te pāmahana i roto i tenei ahuatanga me whakahoki te uara 12 mai i te kirimana atamai. Kia mahara mai Kaihoko i konei kua whakamanahia te uru ki te kirimana atamai.

    // 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. Ka whiwhi tatou i te pāmahana mai Tuatoru (node ​​waho):

    I te taahiraa 3 i whakaritea te pāmahana ki te 12, engari Ko te taha tuatoru kaore e whai waahi ki te kirimana atamai. Na reira me kore te uara whakahoki.

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

    I muri mai, ka ata titiro tatou ki te mahi i nga whakawhitiwhitinga motuhake i runga i te whatunga Koorum me tukutuku3.js. I te mea he rite tonu te nuinga o te waehere mo nga tauwhitinga a te iwi, ka tohua e matou nga waahanga rerekee mo nga whakawhitinga takitahi.

Kia mahara ko te kirimana i tukuna ki te whatunga he kore e taea te whakarereke, no reira me tuku te urunga whakaaetanga ki nga pona e tika ana ma te whakamana i te kirimana a te iwi i te wa i tukuna ai te kirimana, kaua i muri.

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

He rite tonu te mahi o nga whakawhitiwhitinga motuhake - ma te whakauru i te kii a te iwi o nga kaiuru i te wa e mahia ana.

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

Inaianei ka taea e tatou te oma tūmataiti.js me nga hua e whai ake nei:

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

Na te Koorama kaitoro i Chainstack e whakaatu i enei e whai ake nei:

  • te tukunga o te kirimana mai i te kaiuru Hokohoko;
  • Mahi SetTemperature i Tuatoru;
  • Mahi SetTemperature mai i tetahi kaiuru Kaihoko.

Mahia nga whakawhitiwhitinga a te iwi me te tangata takitahi i runga i te poraka JPMorgan Quorum ma te whakamahi i te Web3

Ka taea e koe te kite, kua oti nga whakawhitinga e rua, engari ko te whakawhitinga mai i te kaiuru anake Kaihoko whakahoutia te pāmahana i roto i te kirimana. Na, ko nga whakawhitiwhitinga takitahi e whakarato ana i te kore whakarereke, engari i te wa ano kaore e whakaatu nga raraunga ki tetahi atu tuatoru.

mutunga

I titiro matou ki tetahi take arumoni mo te Quorum ki te tuku korero hou mo te pāmahana i roto i te whare putunga ma te tuku whatunga i waenga i nga roopu e rua - he hokomaha me tetahi rangatira whare putunga.

I whakaaturia e matou me pehea e taea ai te pupuri i nga korero pāmahana hou ma roto i nga whakawhitinga a te iwi me te tangata takitahi.

He maha nga ahuatanga o te tono, a, ka kite koe, ehara i te mea uaua.

Whakamātauhia, ngana ki te whakawhānui i to tuhinga. Ano, ko te ahumahi hangarau poraka tata ki te tekau nga wa ka tipu ake hei te tau 2024.

Source: will.com

Tāpiri i te kōrero