เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐเปเบฅเบฐเป€เบญเบเบฐเบŠเบปเบ™เปƒเบ™ JPMorgan Quorum blockchain เป‚เบ”เบเปƒเบŠเป‰ Web3

เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐเปเบฅเบฐเป€เบญเบเบฐเบŠเบปเบ™เปƒเบ™ JPMorgan Quorum blockchain เป‚เบ”เบเปƒเบŠเป‰ Web3

เบเบธเปˆเบก เป€เบ›เบฑเบ™ blockchain เบ—เบตเปˆเบญเบตเบ‡เปƒเบชเปˆ Ethereum เบžเบฑเบ”เบ—เบฐเบ™เบฒเป‚เบ”เบ JPMorgan เปเบฅเบฐเบšเปเปˆเบ”เบปเบ™เบกเบฒเบ™เบตเป‰เป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เปเบžเบฅเบฐเบ•เบฐเบŸเบญเบกเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบเบฒเบ™เบ—เปเบฒเบญเบดเบ”เบ—เบตเปˆเปเบˆเบเบขเบฒเบเป‚เบ”เบ Microsoft Azure.

Quorum เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเป€เบญเบเบฐเบŠเบปเบ™เปเบฅเบฐเบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐเปเบฅเบฐเบกเบตเบเปเบฅเบฐเบ™เบตเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ—เบฒเบ‡เบเบฒเบ™เบ„เป‰เบฒเบซเบผเบฒเบ.

เปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบง - เบเบฒเบ™เปƒเบŠเป‰เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบเบฒเบ™เบ—เบตเปˆเปเบˆเบเบขเบฒเบเบฅเบฐเบซเบงเปˆเบฒเบ‡เบฎเป‰เบฒเบ™เบชเบฑเบšเบžเบฐเบชเบดเบ™เบ„เป‰เบฒเปเบฅเบฐเป€เบˆเบปเป‰เบฒเบ‚เบญเบ‡เบชเบฒเบ‡เป€เบžเบทเปˆเบญเปƒเบซเป‰เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบ—เบฑเบ™เบชเบฐเป„เบซเบกเบเปˆเบฝเบงเบเบฑเบšเบญเบธเบ™เบซเบฐเบžเบนเบกเบ‚เบญเบ‡เบชเบฒเบ‡.

เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเปƒเบŠเป‰เปƒเบ™เบเบฒเบ™เบชเบญเบ™เบ™เบตเป‰เปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™ repositories เปƒเบ™ GitHub.

เบšเบปเบ”เบ„เบงเบฒเบกเบเบงเบกเป€เบญเบปเบฒ:

  • เบเบฒเบ™เบชเป‰เบฒเบ‡เบชเบฑเบ™เบเบฒเบชเบฐเบซเบกเบฒเบ”;
  • เบเบฒเบ™เบ™เบณเปƒเบŠเป‰เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบ‚เบญเบ‡เบเบธเปˆเบกเป‚เบ„เบฃเบณเป‚เบ”เบเปƒเบŠเป‰ เบ•เปˆเบญเบ‡เป‚เบชเป‰;
  • เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐเบ‚เบญเบ‡เบเบธเปˆเบก;
  • เบ—เบธเบฅเบฐเบเบณเบชเปˆเบงเบ™เบ•เบปเบงเบ‚เบญเบ‡เบเบธเปˆเบก.

เป€เบžเบทเปˆเบญเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™, เบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบญเบธเบ™เบซเบฐเบžเบนเบกเปƒเบ™เบชเบฒเบ‡เบ‚เบญเบ‡เบชเบฐเบกเบฒเบŠเบดเบเบ‚เบญเบ‡เป€เบ„เบทเบญเบ‚เปˆเบฒเบ Quorum เบžเบฒเบเปƒเบ™เบญเบดเบ™เป€เบ•เบตเป€เบ™เบฑเบ”เบ‚เบญเบ‡เบชเบดเปˆเบ‡เบ•เปˆเบฒเบ‡เป† (IoT).

เบชเบฐเบžเบฒเบšเบเบฒเบ™

เบเบธเปˆเบกเบšเปเบฅเบดเบชเบฑเบ”เบชเบฒเบ‡เบชเบดเบ™เบ„เป‰เบฒเบเบณเบฅเบฑเบ‡เบฎเบงเบกเบ•เบปเบงเบเบฑเบ™เบขเบนเปˆเปƒเบ™เบเบธเปˆเบกเบšเปเบฅเบดเบชเบฑเบ”เป€เบžเบทเปˆเบญเบฎเปˆเบงเบกเบเบฑเบ™เป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™ เปเบฅเบฐเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เปƒเบ™ blockchain. เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เบตเป‰, เบšเปเบฅเบดเบชเบฑเบ”เป„เบ”เป‰เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเปƒเบŠเป‰ Quorum. เปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบเบงเบกเป€เบญเบปเบฒเบชเบญเบ‡เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™: เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐเปเบฅเบฐเบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบชเปˆเบงเบ™เบ•เบปเบง.

เบ—เบธเบฅเบฐเบเปเบฒเปเบกเปˆเบ™เบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เป‚เบ”เบเบœเบนเป‰เป€เบ‚เบปเป‰เบฒเบฎเปˆเบงเบกเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เป€เบžเบทเปˆเบญเบžเบปเบงเบžเบฑเบ™เบเบฑเบšเบเบธเปˆเบกเบ—เบตเปˆเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบ‚เบถเป‰เบ™เบเบฑเบš. เปเบ•เปˆเบฅเบฐเบ—เบธเบฅเบฐเบเปเบฒเบˆเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบชเบฑเบ™เบเบฒเบซเบผเบทเป‚เบ—เบซเบฒเบซเบ™เป‰เบฒเบ—เบตเปˆเปƒเบ™เบชเบฑเบ™เบเบฒเป€เบžเบทเปˆเบญเบญเบฑเบšเป‚เบซเบฅเบ”เบ‚เปเป‰เบกเบนเบ™เปƒเบชเปˆเป€เบ„เบทเบญเบ‚เปˆเบฒเบ. เบเบฒเบ™เบเบฐเบ—เบณเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบ–เบทเบเบˆเบณเบฅเบญเบ‡เบเบฑเบšเบ—เบธเบ nodes เปƒเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบ.

เบ—เบธเบฅเบฐเบเปเบฒเบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐเปเบกเปˆเบ™เบกเบตเปƒเบซเป‰เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบšเบดเปˆเบ‡เป‚เบ”เบเบœเบนเป‰เป€เบ‚เบปเป‰เบฒเบฎเปˆเบงเบกเบชเบฐเบกเบฒเบ„เบปเบกเบ—เบฑเบ‡เบซเบกเบปเบ”. เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบชเปˆเบงเบ™เบ•เบปเบงเป€เบžเบตเปˆเบกเบŠเบฑเป‰เบ™เบ‚เบญเบ‡เบ„เบงเบฒเบกเบฅเบฑเบšเปเบฅเบฐเบกเบตเปƒเบซเป‰เบžเบฝเบ‡เปเบ•เปˆเบœเบนเป‰เป€เบ‚เบปเป‰เบฒเบฎเปˆเบงเบกเบœเบนเป‰เบ—เบตเปˆเบกเบตเบชเบดเบ”เบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เปเบ™เบงเบ™เบฑเป‰เบ™.

เบชเปเบฒเบฅเบฑเบšเบ—เบฑเบ‡เบชเบญเบ‡เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™, เบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰เบชเบฑเบ™เบเบฒเบ”เบฝเบงเบเบฑเบ™เป€เบžเบทเปˆเบญเบ„เบงเบฒเบกเบŠเบฑเบ”เป€เบˆเบ™.

เบชเบฑเบ™เบเบฒเบชเบฐเบซเบกเบฒเบ”

เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰เปเบกเปˆเบ™เบชเบฑเบ™เบเบฒเบชเบฐเบซเบกเบฒเบ”เบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เบชเปเบฒเบฅเบฑเบšเบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ. เบกเบฑเบ™เบกเบตเบ•เบปเบงเปเบ›เบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐ 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 เปเบฅเบฐ bytecode. เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบซเบ™เป‰เบฒเบ—เบตเปˆ 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

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบชเบฑเบ™เบเบฒเปเบกเปˆเบ™เบเบฝเบกเบžเป‰เบญเบก, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ™เปเบฒเปƒเบŠเป‰เป€เบ„เบทเบญเบ‚เปˆเบฒเบเปเบฅเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบชเบฑเบ™เบเบฒ.

เบเบฒเบ™เบ™เบณเปƒเบŠเป‰เป‚เบ™เบ”

เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐเปเบฅเบฐเป€เบญเบเบฐเบŠเบปเบ™เปƒเบ™ JPMorgan Quorum blockchain เป‚เบ”เบเปƒเบŠเป‰ Web3

เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡ node เบชเบฒเบกเบฒเบ”เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เปƒเบŠเป‰เปเบฎเบ‡เบ‡เบฒเบ™เบซเบผเบฒเบเปเบฅเบฐเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ—เบปเบ”เปเบ—เบ™เป‚เบ”เบเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™ เบ•เปˆเบญเบ‡เป‚เบชเป‰.

เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰เปเบกเปˆเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เป€เบ„เบทเบญเบ‚เปˆเบฒเบ Quorum เบ—เบตเปˆเบกเบต Raft consensus เปเบฅเบฐเบชเบฒเบก nodes.

เบเปˆเบญเบ™เบญเบทเปˆเบ™, เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡เป‚เบ„เบ‡เบเบฒเบ™เปเบฅเบฐเป‚เบ—เบซเบฒเบกเบฑเบ™เป‚เบ„เบ‡เบเบฒเบ™ Quorum:

เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐเปเบฅเบฐเป€เบญเบเบฐเบŠเบปเบ™เปƒเบ™ JPMorgan Quorum blockchain เป‚เบ”เบเปƒเบŠเป‰ Web3

เบกเบฒเบชเป‰เบฒเบ‡เป€เบ„เบทเบญเบ‚เปˆเบฒเบ Quorum เบเบฑเบš Raft consensus เปƒเบ™ Google Cloud Platform:

เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐเปเบฅเบฐเป€เบญเบเบฐเบŠเบปเบ™เปƒเบ™ JPMorgan Quorum blockchain เป‚เบ”เบเปƒเบŠเป‰ Web3

เบ‚เปเปƒเบซเป‰เป€เบžเบตเปˆเบกเบชเบญเบ‡เป‚เบซเบ™เบ”เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเปƒเบชเปˆเป‚เบซเบ™เบ”เบ—เบตเปˆเบชเป‰เบฒเบ‡เปเบฅเป‰เบงเป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™:

เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐเปเบฅเบฐเป€เบญเบเบฐเบŠเบปเบ™เปƒเบ™ JPMorgan Quorum blockchain เป‚เบ”เบเปƒเบŠเป‰ Web3

เบชเบฒเบก nodes เปเบฅเปˆเบ™:

เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐเปเบฅเบฐเป€เบญเบเบฐเบŠเบปเบ™เปƒเบ™ JPMorgan Quorum blockchain เป‚เบ”เบเปƒเบŠเป‰ Web3

เบซเบ™เป‰เบฒเบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบ‚เบญเบ‡ node เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบˆเบธเบ”เบชเบดเป‰เบ™เบชเบธเบ” RPC, เบฅเบฐเบซเบฑเบ”เบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐ, เปเบฅเบฐเบญเบทเปˆเบ™เป†.

เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐเปเบฅเบฐเป€เบญเบเบฐเบŠเบปเบ™เปƒเบ™ JPMorgan Quorum blockchain เป‚เบ”เบเปƒเบŠเป‰ Web3

เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบ–เบทเบเบ™เบณเปƒเบŠเป‰. เบ•เบญเบ™เบ™เบตเป‰เปƒเบซเป‰เบ™เบณเปƒเบŠเป‰เบชเบฑเบ™เบเบฒเบชเบฐเบซเบกเบฒเบ” เปเบฅเบฐเป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเบณเป‚เบ”เบเปƒเบŠเป‰ web3.js.

เบ—เบธเบฅเบฐเบเปเบฒเบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐ

เบชเบฐเบžเบฒเบšเบเบฒเบ™

เบญเบธเบ™เบซเบฐเบžเบนเบกเปƒเบ™เบชเบฒเบ‡เปเบกเปˆเบ™เบกเบตเบ„เบงเบฒเบกเบชเปเบฒเบ„เบฑเบ™เบซเบผเบฒเบเปƒเบ™เบเบฒเบ™เบซเบผเบธเบ”เบœเปˆเบญเบ™เบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบ, เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐเปเบกเปˆเบ™เบœเบฐเบฅเบดเบ”เบ•เบฐเบžเบฑเบ™เบ—เบตเปˆเบกเบตเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เป€เบžเบทเปˆเบญเป€เบเบฑเบšเบฎเบฑเบเบชเบฒเป„เบงเป‰เปƒเบ™เบญเบธเบ™เบซเบฐเบžเบนเบกเบเปˆเบญเบเบชเบนเบ™.

เป‚เบ”เบเบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบšเปเบฅเบดเบชเบฑเบ”เปเบšเปˆเบ‡เบ›เบฑเบ™เบญเบธเบ™เบซเบฐเบžเบนเบกเบžเบฒเบเบ™เบญเบเบ‚เบญเบ‡เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ•เบฑเป‰เบ‡เบžเบนเบกเบชเบฒเบ”เบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡เปเบฅเบฐเบšเบฑเบ™เบ—เบถเบเบกเบฑเบ™เบขเบนเปˆเปƒเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบเบฒเบ™เบ—เบตเปˆเบšเปเปˆเบ›เปˆเบฝเบ™เปเบ›เบ‡เป„เบ”เป‰, เบœเบนเป‰เป€เบ‚เบปเป‰เบฒเบฎเปˆเบงเบกเป€เบ„เบทเบญเบ‚เปˆเบฒเบเบซเบผเบธเบ”เบœเปˆเบญเบ™เบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบเปเบฅเบฐเป€เบงเบฅเบฒ.

เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐเปเบฅเบฐเป€เบญเบเบฐเบŠเบปเบ™เปƒเบ™ JPMorgan Quorum blockchain เป‚เบ”เบเปƒเบŠเป‰ Web3

เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบงเบฝเบเบ‡เบฒเบ™เบชเบฒเบกเบขเปˆเบฒเบ‡, เบชเบฐเปเบ”เบ‡เบขเบนเปˆเปƒเบ™เปเบœเบ™เบงเบฒเบ”:

  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 เบชเปเบฒเบฅเบฑเบšเบชเบฒเบก nodes:

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 เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบขเบนเปˆเปƒเบ™ node เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เปเบฅเบฐเบ—เบธเบฅเบฐเบเปเบฒเบˆเบฐเบšเปเปˆเบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™เปƒเบ™ 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

เบ•เปเปˆเป„เบ›, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบšเบดเปˆเบ‡เบฅเบฒเบเบเบฒเบ™เปƒเบ™ Quorum explorer เปƒเบ™เบเบฐเบ”เบฒเบ™ Chainstack, เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบชเบฐเปเบ”เบ‡เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰.

เบ—เบฑเบ‡เบชเบฒเบก nodes เป‚เบ•เป‰เบ•เบญเบšเบเบฑเบ™เปเบฅเบฐเบ—เบธเบฅเบฐเบเปเบฒเป„เบ”เป‰เบ–เบทเบเบ›เบฑเบšเบ›เบธเบ‡:

  1. เบ—เบธเบฅเบฐเบเปเบฒเบ—เปเบฒเบญเบดเบ”เป„เบ”เป‰เบ™เปเบฒเปƒเบŠเป‰เบชเบฑเบ™เบเบฒ.
  2. เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบ—เบตเบชเบญเบ‡เบเปเบฒเบ™เบปเบ”เบญเบธเบ™เบซเบฐเบžเบนเบกเบชเบฑเบ™เบเบฒเป€เบ›เบฑเบ™ 3 เบญเบปเบ‡เบชเบฒ.
  3. เบญเบธเบ™เบซเบฐเบžเบนเบกเปเบกเปˆเบ™เป„เบ”เป‰เบฎเบฑเบšเป‚เบ”เบเบœเปˆเบฒเบ™ node เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบšเปเปˆเบกเบตเบเบฒเบ™เบชเป‰เบฒเบ‡เบ—เบธเบฅเบฐเบเปเบฒ.

เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐเปเบฅเบฐเป€เบญเบเบฐเบŠเบปเบ™เปƒเบ™ JPMorgan Quorum blockchain เป‚เบ”เบเปƒเบŠเป‰ Web3

เบ—เบธเบฅเบฐเบเปเบฒเบชเปˆเบงเบ™เบ•เบปเบง

เบชเบฐเบžเบฒเบšเบเบฒเบ™

เบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบปเปˆเบงเป„เบ›เบ‚เบญเบ‡เบญเบปเบ‡เบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เปเบกเปˆเบ™เบเบฒเบ™เบ›เบปเบเบ›เป‰เบญเบ‡เบ‚เปเป‰เบกเบนเบ™. เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡, เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เปƒเบ”เบซเบ™เบถเปˆเบ‡ เบชเบฑเบšเบžเบฐเบชเบดเบ™เบ„เป‰เบฒ เป€เบŠเบปเปˆเบฒเบžเบทเป‰เบ™เบ—เบตเปˆเบชเบฒเบ‡เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบญเบฒเบซเบฒเบ™เบ—เบฐเป€เบฅเบˆเบฒเบเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ เบœเบนเป‰เบ‚เบฒเบ:

  • เบœเบนเป‰เบ‚เบฒเบ เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เป€เบŠเบฑเบ™เป€เบŠเบต IoT, เบญเปˆเบฒเบ™เบ„เปˆเบฒเบญเบธเบ™เบซเบฐเบžเบนเบกเบ—เบธเบเป† 30 เบงเบดเบ™เบฒเบ—เบตเปเบฅเบฐเบชเบปเปˆเบ‡เบžเบงเบเบกเบฑเบ™ เป„เบ›เบชเบฑเบšเบžเบฐเบชเบดเบ™เบ„เป‰เบฒ;
  • เบ„เปˆเบฒเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบ„เบงเบ™เบˆเบฐเบกเบตเบขเบนเปˆเป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™ เบเบฑเบšเบœเบนเป‰เบ‚เบฒเบ ะธ เป„เบ›เบชเบฑเบšเบžเบฐเบชเบดเบ™เบ„เป‰เบฒ, เป€เบ„เบทเบญเบ‚เปˆเบฒเบเป‚เบ”เบเบชเบฐเบกเบฒเบ„เบปเบก.

เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐเปเบฅเบฐเป€เบญเบเบฐเบŠเบปเบ™เปƒเบ™ JPMorgan Quorum blockchain เป‚เบ”เบเปƒเบŠเป‰ Web3

เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบฎเบฑเบ”เบชเบณเป€เบฅเบฑเบ”เบชเบตเปˆเปœเป‰เบฒเบงเบฝเบเบ—เบตเปˆเป„เบ”เป‰เบชเบฐเปเบ”เบ‡เบขเบนเปˆเปƒเบ™เปเบœเบ™เบงเบฒเบ”เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡.

  • เบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰เบชเบฒเบกเป‚เบซเบ™เบ”เบ”เบฝเบงเบเบฑเบ™เบˆเบฒเบเบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒเป€เบžเบทเปˆเบญเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบชเปˆเบงเบ™เบ•เบปเบง:
  • เบชเบฑเบšเบžเบฐเบชเบดเบ™เบ„เป‰เบฒ เบ™เบณเปƒเบŠเป‰เบชเบฑเบ™เบเบฒเบญเบฑเบ”เบชเบฐเบฅเบดเบเบฐเบ—เบตเปˆเป€เบ›เบฑเบ™เบชเปˆเบงเบ™เบ•เบปเบง เบชเบฑเบšเบžเบฐเบชเบดเบ™เบ„เป‰เบฒ ะธ เบœเบนเป‰เบ‚เบฒเบ.
  • เบ”เป‰เบฒเบ™เบ—เบตเบชเบฒเบก เบšเปเปˆเบกเบตเบชเบดเบ”เบ—เบดเปƒเบ™เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบชเบฑเบ™เบเบฒเบชเบฐเบซเบกเบฒเบ”.

เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป‚เบ—เบซเบฒเบงเบดเบ—เบตเบเบฒเบ™ 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, เปเบ•เปˆ เบ”เป‰เบฒเบ™เบ—เบตเบชเบฒเบก เบšเปเปˆเบกเบตเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบชเบฑเบ™เบเบฒเบชเบฐเบซเบกเบฒเบ”. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ„เปˆเบฒเบเบฑเบšเบ„เบทเบ™เบ•เป‰เบญเบ‡เป€เบ›เบฑเบ™ null.

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

    เบ•เปเปˆเป„เบ›, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบขเปˆเบฒเบ‡เปƒเบเป‰เบŠเบดเบ”เปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบชเปˆเบงเบ™เบ•เบปเบงเปƒเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบ Quorum เบเบฑเบš web3.js. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบฅเบฐเบซเบฑเบ”เบชเปˆเบงเบ™เปƒเบซเบเปˆเปเบกเปˆเบ™เบ„เบทเบเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐ, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบ™เบฑเป‰เบ™เปƒเบชเปˆเบžเบฝเบ‡เปเบ•เปˆเบชเปˆเบงเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบชเปˆเบงเบ™เบ•เบปเบง.

เบˆเบปเปˆเบ‡เบˆเบทเปˆเป„เบงเป‰เบงเปˆเบฒเบชเบฑเบ™เบเบฒเบ—เบตเปˆเบญเบฑเบšเป‚เบซเบฅเบ”เป„เบ›เบเบฑเบ‡เป€เบ„เบทเบญเบ‚เปˆเบฒเบเปเบกเปˆเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เบ›เปˆเบฝเบ™เปเบ›เบ‡เป„เบ”เป‰, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”เบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบเบฑเบš nodes เบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเป‚เบ”เบเบเบฒเบ™เป€เบ›เบตเบ”เปƒเบŠเป‰เบชเบฑเบ™เบเบฒเบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบชเบฑเบ™เบเบฒเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰, เบšเปเปˆเปเบกเปˆเบ™เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™.

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

Quorum explorer เปƒเบ™ Chainstack เบˆเบฐเบชเบฐเปเบ”เบ‡เบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

  • เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบชเบฑเบ™เบเบฒเบˆเบฒเบเบœเบนเป‰เป€เบ‚เบปเป‰เบฒเบฎเปˆเบงเบก เบชเบฑเบšเบžเบฐเบชเบดเบ™เบ„เป‰เบฒ;
  • เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” SetTemperature เบˆเบฒเบ เบšเบธเบโ€‹เบ„เบปเบ™โ€‹เบ—เบตเปˆโ€‹เบชเบฒเบก;
  • เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” SetTemperature เบˆเบฒเบโ€‹เบœเบนเป‰โ€‹เป€เบ‚เบปเป‰เบฒโ€‹เบฎเปˆเบงเบก เบœเบนเป‰เบ‚เบฒเบ.

เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐเปเบฅเบฐเป€เบญเบเบฐเบŠเบปเบ™เปƒเบ™ JPMorgan Quorum blockchain เป‚เบ”เบเปƒเบŠเป‰ Web3

เบ”เบฑเปˆเบ‡เบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰, เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบ—เบฑเบ‡เบชเบญเบ‡เปเบกเปˆเบ™เบชเปเบฒเป€เบฅเบฑเบ”, เปเบ•เปˆเบงเปˆเบฒเบžเบฝเบ‡เปเบ•เปˆเบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบˆเบฒเบเบœเบนเป‰เป€เบ‚เบปเป‰เบฒเบฎเปˆเบงเบก เบœเบนเป‰เบ‚เบฒเบ เบ›เบฑเบšเบ›เบธเบ‡เบญเบธเบ™เบซเบฐเบžเบนเบกเปƒเบ™เบชเบฑเบ™เบเบฒ. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบชเปˆเบงเบ™เบ•เบปเบงเบชเบฐเบซเบ™เบญเบ‡เบ„เบงเบฒเบกเบšเปเปˆเบ›เปˆเบฝเบ™เปเบ›เบ‡, เปเบ•เปˆเปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™เบšเปเปˆเป„เบ”เป‰เป€เบ›เบตเบ”เป€เบœเบตเบเบ‚เปเป‰เบกเบนเบ™เปƒเบซเป‰เบเบฑเบšเบšเบธเบเบ„เบปเบ™เบ—เบตเบชเบฒเบก.

เบชเบฐเบซเบฅเบธเบš

เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบšเบดเปˆเบ‡เบเปเบฅเบฐเบ™เบตเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ—เบฒเบ‡เบเบฒเบ™เบ„เป‰เบฒเบชเปเบฒเบฅเบฑเบš Quorum เป€เบžเบทเปˆเบญเบชเบฐเบซเบ™เบญเบ‡เบ‚เปเป‰เบกเบนเบ™เบญเบธเบ™เบซเบฐเบžเบนเบกเบ—เบตเปˆเบ—เบฑเบ™เบชเบฐเป„เบซเบกเบขเบนเปˆเปƒเบ™เบชเบฒเบ‡เป‚เบ”เบเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบฅเบฐเบซเบงเปˆเบฒเบ‡เบชเบญเบ‡เบžเบฒเบเบชเปˆเบงเบ™ - เบชเบฑเบšเบžเบฐเบชเบดเบ™เบ„เป‰เบฒเปเบฅเบฐเป€เบˆเบปเป‰เบฒเบ‚เบญเบ‡เบชเบฒเบ‡.

เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบชเบฐเปเบ”เบ‡เบงเบดเบ—เบตเบเบฒเบ™เบฎเบฑเบเบชเบฒเบ‚เปเป‰เบกเบนเบ™เบญเบธเบ™เบซเบฐเบžเบนเบกเบ—เบตเปˆเบ—เบฑเบ™เบชเบฐ เป„เป เป‚เบ”เบเบœเปˆเบฒเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐ เบเบณ เบ—เบฑเบ‡เบžเบฒเบเบฅเบฑเบ”เปเบฅเบฐเป€เบญเบเบฐเบŠเบปเบ™.

เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เบกเบตเบซเบผเบฒเบเบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเปเบฅเบฐ, เบ•เบฒเบกเบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบšเบดเปˆเบ‡, เบกเบฑเบ™เบšเปเปˆเปเบกเปˆเบ™เบกเบตเบ„เบงเบฒเบกเบซเบเบธเป‰เบ‡เบเบฒเบเบ—เบฑเบ‡เบซเบกเบปเบ”.

เบ—เบปเบ”เบฅเบญเบ‡, เบžเบฐเบเบฒเบเบฒเบกเบ‚เบฐเบซเบเบฒเบ script เบ‚เบญเบ‡เบ—เปˆเบฒเบ™. เบเบดเปˆเบ‡เป„เบ›เบเบงเปˆเบฒเบ™เบฑเป‰เบ™, เบญเบธเบ”เบชเบฒเบซเบฐเบเปเบฒเป€เบ—เบเป‚เบ™เป‚เบฅเบเบต blockchain เบญเบฒเบ”โ€‹เบˆเบฐโ€‹เป€เบžเบตเปˆเบกโ€‹เบ‚เบถเป‰เบ™โ€‹เป€เบเบทเบญเบšโ€‹เบชเบดเบšโ€‹เป€เบ—เบปเปˆเบฒโ€‹เปƒเบ™โ€‹เบ›เบต 2024.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™