Laksanakeun transaksi umum sareng swasta dina blockchain JPMorgan Quorum nganggo Web3

Laksanakeun transaksi umum sareng swasta dina blockchain JPMorgan Quorum nganggo Web3

Quorum mangrupa blockchain basis Ethereum dikembangkeun ku JPMorgan sarta panganyarna jadi platform ledger disebarkeun munggaran ditawarkeun ku Microsoft Azure.

Kuorum ngadukung transaksi pribadi sareng umum sareng seueur kasus panggunaan komérsial.

Dina artikel ieu, urang bakal nalungtik hiji skenario sapertos - panyebaran jaringan ledger disebarkeun antara supermarket jeung nu boga gudang nyadiakeun informasi up-to-date ngeunaan suhu gudang.

Kode anu digunakeun dina tutorial ieu aya dina repositories on GitHub.

Artikel nyertakeun:

  • nyiptakeun kontrak pinter;
  • deployment tina jaringan Quorum ngagunakeun Chainstack;
  • Transaksi publik kuorum;
  • Transaksi swasta kuorum.

Pikeun ngagambarkeun, kami nganggo skenario pikeun ngawas suhu di gudang anggota jaringan Quorum dina Internet of Things (IoT).

Kontéks

Sakelompok perusahaan gudang ngahiji dina konsorsium pikeun babarengan nyimpen inpormasi sareng ngajadikeun otomatis prosés dina blockchain. Pikeun ieu, pausahaan mutuskeun pikeun ngagunakeun Quorum. Dina artikel ieu kami bakal nutupan dua skenario: transaksi publik jeung transaksi swasta.

Transaksi diciptakeun ku pamilon anu béda pikeun berinteraksi sareng konsorsium anu aranjeunna milik. Unggal urus boh deploys kontrak atawa nelepon fungsi dina kontrak pikeun unggah data ka jaringan. Tindakan ieu ditiru ka sadaya titik dina jaringan.

Transaksi umum sayogi pikeun ditingali ku sadaya pamilon konsorsium. Transaksi pribadi nambihan lapisan karusiahan sareng ngan sayogi pikeun pamilon anu ngagaduhan hak pikeun ngalakukeunana.

Pikeun duanana skénario, kami nganggo kontrak anu sami pikeun kajelasan.

Kontrak pinter

Di handap ieu kontrak pinter basajan dijieun pikeun skenario urang. Cai mibanda variabel publik temperature, nu bisa dirobah ngagunakeun set jeung narima ku métode 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;
  }
}

Supados kontrak tiasa dianggo sareng web3.js, eta kudu ditarjamahkeun kana format ABI jeung bytecode. Ngagunakeun fungsi formatContracthandap compiles kontrak ngagunakeun solc-js.

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

Kontrak réngsé sapertos kieu:

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

Ayeuna kontrak parantos siap, urang bakal nyebarkeun jaringan sareng nyebarkeun kontrak.

Panyebaran titik

Laksanakeun transaksi umum sareng swasta dina blockchain JPMorgan Quorum nganggo Web3

Nyebarkeun titik tiasa rada padat karya sareng prosés ieu tiasa diganti ku ngagunakeun jasa Chainstack.

Di handap ieu prosés pikeun nyebarkeun jaringan Quorum sareng konsensus Rakit sareng tilu titik.

Kahiji, hayu urang nyieun proyék jeung nelepon eta Quorum Project:

Laksanakeun transaksi umum sareng swasta dina blockchain JPMorgan Quorum nganggo Web3

Hayu urang ngadamel jaringan Kuorum sareng konsensus Raft dina Google Cloud Platform:

Laksanakeun transaksi umum sareng swasta dina blockchain JPMorgan Quorum nganggo Web3

Hayu urang tambahkeun dua titik deui kana titik anu parantos didamel sacara standar:

Laksanakeun transaksi umum sareng swasta dina blockchain JPMorgan Quorum nganggo Web3

Tilu titik ngajalankeun:

Laksanakeun transaksi umum sareng swasta dina blockchain JPMorgan Quorum nganggo Web3

Kaca detil titik nunjukkeun titik akhir RPC, konci umum, jsb.

Laksanakeun transaksi umum sareng swasta dina blockchain JPMorgan Quorum nganggo Web3

jaringan ieu deployed. Ayeuna hayu urang nyebarkeun kontrak pinter jeung ngalakukeun transaksi ngagunakeun web3.js.

Transaksi umum

Kontéks

Suhu gudang penting pisan pikeun ngirangan biaya, khususna pikeun produk anu dimaksud pikeun disimpen dina suhu sub-enol.

Ku ngamungkinkeun perusahaan ngabagi suhu luar lokasi geografisna sacara real waktos sareng ngarékam dina buku ageung anu teu tiasa dirobih, pamilon jaringan ngirangan biaya sareng waktos.

Laksanakeun transaksi umum sareng swasta dina blockchain JPMorgan Quorum nganggo Web3

Urang bakal ngalakukeun tilu tugas, digambarkeun dina diagram:

  1. Urang bakal nyebarkeun kontrak via Titik 1:

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

  2. Setel suhu via Titik 2 ku 3 derajat:

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

  3. Titik 3 bakal nampi inpormasi ti kontrak pinter. Kontrak bakal ngabalikeun nilai 3 derajat:

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

    Salajengna, urang bakal ningali kumaha ngaéksekusi transaksi umum dina jaringan Quorum nganggo web3.js.

Urang ngamimitian hiji conto via RPC pikeun tilu titik:

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

Hayu urang nyebarkeun kontrak pinter:

// 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 nyadiakeun dua cara pikeun interaksi jeung kontrak: call и send.

Hayu urang ngamutahirkeun suhu kontrak ku executing set ngagunakeun métode 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;
  });
}

Salajengna urang ngagunakeun métode web3 call pikeun meunangkeun suhu kontrak. Perhatikeun yén métode call dieksekusi dina titik lokal jeung transaksi moal dijieun dina blockchain nu.

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

Ayeuna anjeun tiasa ngajalankeun publik.js pikeun meunangkeun hasil di handap ieu:

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

Salajengna, urang tiasa ningali éntri dina Quorum explorer dina panel Chainstack, sapertos anu dipidangkeun di handap.

Katiluna titik berinteraksi sareng transaksi parantos diropéa:

  1. Transaksi munggaran nyebarkeun kontrak.
  2. Transaksi kadua nyetél suhu kontrak ka 3 derajat.
  3. Suhu ditampi ngalangkungan titik lokal, janten teu aya transaksi anu didamel.

Laksanakeun transaksi umum sareng swasta dina blockchain JPMorgan Quorum nganggo Web3

Transaksi swasta

Kontéks

Sarat umum organisasi nyaéta panyalindungan data. Salaku conto, mertimbangkeun skenario di mana Supermarkét nyéwa rohangan gudang pikeun nyimpen kadaharan ti laut ti misah Ngajual:

  • Ngajual ngagunakeun sensor IoT, maca nilai suhu unggal 30 detik sarta ngirimkeunana Ka supermarket;
  • nilai ieu ngan kudu sadia Ka nu ngajual и Ka supermarket, dijaring ku konsorsium.

Laksanakeun transaksi umum sareng swasta dina blockchain JPMorgan Quorum nganggo Web3

Urang bakal ngalengkepan opat pancén digambarkeun dina diagram di luhur.

  • Kami nganggo tilu titik anu sami tina skenario sateuacana pikeun nunjukkeun transaksi pribadi:
  • Supermarkét deploys kontrak pinter nu swasta pikeun Supermarkét и Ngajual.
  • Sisi katilu teu boga hak pikeun ngakses kontrak pinter.

Urang bakal nelepon métode get и set atas nami Supermarkét и Ngajual pikeun nunjukkeun transaksi Kuorum pribadi.

  1. Urang bakal nyebarkeun kontrak swasta pikeun pamilon Supermarkét и Ngajual ngaliwatan pamilon Supermarkét:

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

  2. Hayu urang nyetel suhu ti Pihak katilu (titik éksternal) sareng kéngingkeun nilai suhu:

    // 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. Hayu urang nyetel suhu ti Ngajual (titik internal) sareng kéngingkeun nilai suhu:

    Suhu dina skenario ieu kedah ngabalikeun nilai 12 tina kontrak pinter. Perhatikeun éta Ngajual didieu geus otorisasi aksés ka kontrak pinter.

    // 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. Urang meunang suhu ti Pihak katilu (titik éksternal):

    Dina hambalan 3 suhu disetel ka 12, tapi Sisi katilu teu boga aksés ka kontrak pinter. Kituna nilai balik kudu null.

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

    Salajengna, urang bakal nyandak katingal ngadeukeutan dina ngajalankeun transaksi swasta dina jaringan Quorum kalawan web3.js. Kusabab sabagéan ageung kodeu sami pikeun transaksi umum, kami bakal nyorot ngan ukur bagian-bagian anu béda pikeun transaksi pribadi.

Catet yén kontrak anu diunggah kana jaringan teu tiasa dirobih, janten aksés anu diidinan kedah dipasihkeun ka titik anu saluyu ku ngaktifkeun kontrak umum dina waktos kontrak dikaluarkeun, sanés saatosna.

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

Transaksi swasta dilakukeun dina cara anu sami - ku ngalebetkeun konci umum pamilon dina waktos palaksanaan.

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

Ayeuna urang tiasa ngajalankeun swasta.js kalayan hasil di handap ieu:

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

Penjelajah Kuorum dina Chainstack bakal nunjukkeun ieu:

  • deployment tina kontrak ti pamilon Supermarkét;
  • Kinerja SetTemperature от Pihak katilu;
  • Kinerja SetTemperature ti pamilon Ngajual.

Laksanakeun transaksi umum sareng swasta dina blockchain JPMorgan Quorum nganggo Web3

Sakumaha anjeun tiasa tingali, duanana transaksi réngsé, tapi ngan urus ti pamilon Ngajual diropéa suhu dina kontrak. Ku kituna, transaksi swasta nyadiakeun immutability, tapi dina waktos anu sareng teu nembongkeun data ka pihak katilu.

kacindekan

Urang nempo kasus pamakéan komérsial pikeun Quorum nyadiakeun up-to-date informasi suhu di gudang ku deploying jaringan antara dua pihak - supermarket jeung boga gudang.

Kami nunjukkeun kumaha inpormasi suhu anu up-to-date tiasa dijaga ngaliwatan transaksi umum sareng swasta.

Aya tiasa seueur skenario aplikasi sareng, sakumaha anu anjeun tingali, éta henteu sesah.

Percobaan, coba rék dilegakeun naskah anjeun. Leuwih ti éta, industri téhnologi blockchain bisa tumuwuh ampir sapuluh kali lipat ku 2024.

sumber: www.habr.com

Tambahkeun komentar