Web3 เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต JP Morgan Quorum เดฌเตเดฒเต‹เด•เตเด•เตเดšเต†เดฏเดฟเดจเดฟเตฝ เดชเตŠเดคเต, เดธเตเดตเด•เดพเดฐเตเดฏ เด‡เดŸเดชเดพเดŸเตเด•เตพ เดจเดŸเดคเตเดคเตเด•

Web3 เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต JP Morgan Quorum เดฌเตเดฒเต‹เด•เตเด•เตเดšเต†เดฏเดฟเดจเดฟเตฝ เดชเตŠเดคเต, เดธเตเดตเด•เดพเดฐเตเดฏ เด‡เดŸเดชเดพเดŸเตเด•เตพ เดจเดŸเดคเตเดคเตเด•

Quorum เดœเต†เดชเดฟ เดฎเต‹เตผเด—เตป เดตเดฟเด•เดธเดฟเดชเตเดชเดฟเดšเตเดš Ethereum เด…เดงเดฟเดทเตโ€Œเด เดฟเดค เดฌเตเดฒเต‹เด•เตเด•เตโ€Œเดšเต†เดฏเดฟเตป เด†เดฃเต, เด…เดŸเตเดคเตเดคเดฟเดŸเต† เดฎเตˆเด•เตเดฐเต‹เดธเต‹เดซเตเดฑเตเดฑเต เด…เดธเต‚เตผ เดตเดพเด—เตเดฆเดพเดจเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจ เด†เดฆเตเดฏเดคเตเดคเต† เดตเดฟเดคเดฐเดฃเด‚ เดšเต†เดฏเตเดค เดฒเต†เดกเตเดœเตผ เดชเตเดฒเดพเดฑเตเดฑเตโ€Œเดซเต‹เดฎเดพเดฏเดฟ เดฎเดพเดฑเดฟ.

เด•เต‹เดฑเด‚ เดธเตเดตเด•เดพเดฐเตเดฏเดตเตเด‚ เดชเตŠเดคเตเดตเตเดฎเดพเดฏ เด‡เดŸเดชเดพเดŸเตเด•เดณเต† เดชเดฟเดจเตเดคเตเดฃเดฏเตเด•เตเด•เตเดจเตเดจเต เด•เต‚เดŸเดพเดคเต† เดจเดฟเดฐเดตเดงเดฟ เดตเดพเดฃเดฟเดœเตเดฏ เด‰เดชเดฏเต‹เด— เด•เต‡เดธเตเด•เดณเตเดฎเตเดฃเตเดŸเต.

เดˆ เดฒเต‡เด–เดจเดคเตเดคเดฟเตฝ, เด…เดคเตเดคเดฐเดคเตเดคเดฟเดฒเตเดณเตเดณ เด’เดฐเต เดธเดพเดนเดšเดฐเตเดฏเด‚ เดžเด™เตเด™เตพ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเด‚ - เด’เดฐเต เดธเต‚เดชเตเดชเตผเดฎเดพเตผเด•เตเด•เดฑเตเดฑเดฟเดจเตเด‚ เดตเต†เดฏเตผเดนเต—เดธเต เด‰เดŸเดฎเดฏเตเด•เตเด•เตเด‚ เด‡เดŸเดฏเดฟเตฝ เดตเดฟเดคเดฐเดฃเด‚ เดšเต†เดฏเตเดค เดฒเต†เดกเตเดœเตผ เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เดฟเดจเตเดฑเต† เดตเดฟเดจเตเดฏเดพเดธเด‚, เดตเต†เดฏเตผเดนเต—เดธเดฟเดจเตเดฑเต† เดคเดพเดชเดจเดฟเดฒเดฏเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เด•เดพเดฒเดฟเด•เดฎเดพเดฏ เดตเดฟเดตเดฐเด™เตเด™เตพ เดจเตฝเด•เตเดจเตเดจเดคเดฟเดจเต.

เดˆ เดŸเตเดฏเต‚เดŸเตเดŸเต‹เดฑเดฟเดฏเดฒเดฟเตฝ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เด•เต‹เดกเต เด†เดฃเต GitHub-เดฒเต† เดฑเดฟเดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟเด•เตพ.

เดฒเต‡เด–เดจเด‚ เด‰เตพเด•เตเด•เตŠเดณเตเดณเตเดจเตเดจเต:

  • เด’เดฐเต เดธเตเดฎเดพเตผเดŸเตเดŸเต เด•เดฐเดพเตผ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตฝ;
  • เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจ เด•เต‹เดฑเด‚ เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เดฟเดจเตเดฑเต† เดตเดฟเดจเตเดฏเดพเดธเด‚ เดšเต†เดฏเดฟเตปเดธเตเดฑเตเดฑเดพเด•เตเด•เต;
  • เด•เต‹เดฑเด‚ เดชเตŠเดคเต เด‡เดŸเดชเดพเดŸเตเด•เตพ;
  • เด•เตเดตเดพเดฑเด‚ เดธเตเดตเด•เดพเดฐเตเดฏ เด‡เดŸเดชเดพเดŸเตเด•เตพ.

เดฆเตƒเดทเตเดŸเดพเดจเตเดคเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เด‡เดจเตเดฑเตผเดจเต†เดฑเตเดฑเต เด“เดซเต เดคเดฟเด‚เด—เตโ€Œเดธเดฟเดฒเต† (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, เด‡เดคเต เดŽเดฌเดฟเด เดซเต‹เตผเดฎเดพเดฑเตเดฑเดฟเดฒเต‡เด•เตเด•เตเด‚ เดฌเตˆเดฑเตเดฑเตเด•เต‹เดกเดฟเดฒเต‡เด•เตเด•เตเด‚ เดตเดฟเดตเตผเดคเตเดคเดจเด‚ เดšเต†เดฏเตเดฏเดฃเด‚. เดซเด‚เด—เตเดทเตป เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต 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 เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต JP Morgan Quorum เดฌเตเดฒเต‹เด•เตเด•เตเดšเต†เดฏเดฟเดจเดฟเตฝ เดชเตŠเดคเต, เดธเตเดตเด•เดพเดฐเตเดฏ เด‡เดŸเดชเดพเดŸเตเด•เตพ เดจเดŸเดคเตเดคเตเด•

เด’เดฐเต เดจเต‹เดกเต เดตเดฟเดจเตเดฏเดธเดฟเด•เตเด•เตเดจเตเดจเดคเต เดคเดฟเด•เดšเตเดšเตเด‚ เด…เดงเตเดตเดพเดจเดฎเดพเดฃเต, เด’เดฐเต เดธเต‡เดตเดจเด‚ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดˆ เดชเตเดฐเด•เตเดฐเดฟเดฏ เดฎเดพเดฑเตเดฑเดฟเดธเตเดฅเดพเดชเดฟเด•เตเด•เดพเดจเดพเด•เตเด‚ เดšเต†เดฏเดฟเตปเดธเตเดฑเตเดฑเดพเด•เตเด•เต.

เดฑเดพเดซเตเดฑเตเดฑเต เดธเดฎเดตเดพเดฏเดตเตเด‚ เดฎเต‚เดจเตเดจเต เดจเต‹เดกเตเด•เดณเตเด‚ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด•เต‹เดฑเด‚ เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เต เดตเดฟเดจเตเดฏเดธเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดชเตเดฐเด•เตเดฐเดฟเดฏ เดšเตเดตเดŸเต†เดฏเตเดฃเตเดŸเต.

เด†เดฆเตเดฏเด‚, เดจเดฎเตเด•เตเด•เต เด’เดฐเต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดธเตƒเดทเตเดŸเดฟเดšเตเดšเต เด…เดคเดฟเดจเต† เด•เต‹เดฑเด‚ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดŽเดจเตเดจเต เดตเดฟเดณเดฟเด•เตเด•เดพเด‚:

Web3 เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต JP Morgan Quorum เดฌเตเดฒเต‹เด•เตเด•เตเดšเต†เดฏเดฟเดจเดฟเตฝ เดชเตŠเดคเต, เดธเตเดตเด•เดพเดฐเตเดฏ เด‡เดŸเดชเดพเดŸเตเด•เตพ เดจเดŸเดคเตเดคเตเด•

เด—เต‚เด—เดฟเตพ เด•เตเดฒเต—เดกเต เดชเตเดฒเดพเดฑเตเดฑเตโ€Œเดซเต‹เดฎเดฟเตฝ เดฑเดพเดซเตเดฑเตเดฑเต เดธเดฎเดตเดพเดฏเดคเตเดคเต‹เดŸเต† เดจเดฎเตเด•เตเด•เต เด’เดฐเต เด•เตเดตเดพเดฑเด‚ เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เต เดธเตƒเดทเตโ€ŒเดŸเดฟเด•เตเด•เดพเด‚:

Web3 เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต JP Morgan Quorum เดฌเตเดฒเต‹เด•เตเด•เตเดšเต†เดฏเดฟเดจเดฟเตฝ เดชเตŠเดคเต, เดธเตเดตเด•เดพเดฐเตเดฏ เด‡เดŸเดชเดพเดŸเตเด•เตพ เดจเดŸเดคเตเดคเตเด•

เดธเตเดฅเดฟเดฐเดธเตเดฅเดฟเดคเดฟเดฏเดพเดฏเดฟ เด‡เดคเดฟเดจเด•เด‚ เดธเตƒเดทเตเดŸเดฟเดšเตเดš เดจเต‹เดกเดฟเดฒเต‡เด•เตเด•เต เดฐเดฃเตเดŸเต เดจเต‹เดกเตเด•เตพ เด•เต‚เดŸเดฟ เดšเต‡เตผเด•เตเด•เดพเด‚:

Web3 เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต JP Morgan Quorum เดฌเตเดฒเต‹เด•เตเด•เตเดšเต†เดฏเดฟเดจเดฟเตฝ เดชเตŠเดคเต, เดธเตเดตเด•เดพเดฐเตเดฏ เด‡เดŸเดชเดพเดŸเตเด•เตพ เดจเดŸเดคเตเดคเตเด•

เดฎเต‚เดจเตเดจเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจ เดจเต‹เดกเตเด•เตพ:

Web3 เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต JP Morgan Quorum เดฌเตเดฒเต‹เด•เตเด•เตเดšเต†เดฏเดฟเดจเดฟเตฝ เดชเตŠเดคเต, เดธเตเดตเด•เดพเดฐเตเดฏ เด‡เดŸเดชเดพเดŸเตเด•เตพ เดจเดŸเดคเตเดคเตเด•

เดจเต‹เดกเต เดตเดฟเดถเดฆเดพเด‚เดถเด™เตเด™เดณเตเดŸเต† เดชเต‡เดœเต RPC เดŽเตปเดกเต เดชเต‹เดฏเดฟเดจเตเดฑเต, เดชเดฌเตเดฒเดฟเด•เต เด•เต€ เดฎเตเดคเดฒเดพเดฏเดต เด•เดพเดฃเดฟเด•เตเด•เตเดจเตเดจเต.

Web3 เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต JP Morgan Quorum เดฌเตเดฒเต‹เด•เตเด•เตเดšเต†เดฏเดฟเดจเดฟเตฝ เดชเตŠเดคเต, เดธเตเดตเด•เดพเดฐเตเดฏ เด‡เดŸเดชเดพเดŸเตเด•เตพ เดจเดŸเดคเตเดคเตเด•

เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เต เดตเดฟเดจเตเดฏเดธเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เด‡เดชเตเดชเต‹เตพ เดจเดฎเตเด•เตเด•เต เดธเตโ€ŒเดฎเดพเตผเดŸเตเดŸเต เด•เดฐเดพเดฑเตเด•เตพ เดตเดฟเดจเตเดฏเดธเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด‡เดŸเดชเดพเดŸเตเด•เตพ เดจเดŸเดคเตเดคเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเดพเด‚ web3.js.

เดชเตŠเดคเต เด‡เดŸเดชเดพเดŸเตเด•เตพ

เดธเดจเตเดฆเตผเดญเด‚

เดตเต†เดฏเตผเดนเต—เดธเต เดคเดพเดชเดจเดฟเดฒ เดšเต†เดฒเดตเต เด•เตเดฑเดฏเตเด•เตเด•เตเดจเตเดจเดคเดฟเตฝ เดตเดฒเดฟเดฏ เดชเตเดฐเดพเดงเดพเดจเตเดฏเดฎเตเดณเตเดณเดคเดพเดฃเต, เดชเตเดฐเดคเตเดฏเต‡เด•เดฟเดšเตเดšเต เด‰เดช-เดชเต‚เดœเตเดฏเด‚ เดคเดพเดชเดจเดฟเดฒเดฏเดฟเตฝ เดธเต‚เด•เตเดทเดฟเด•เตเด•เดพเตป เด‰เดฆเตเดฆเต‡เดถเดฟเด•เตเด•เตเดจเตเดจ เด‰เตฝเดชเตเดชเดจเตเดจเด™เตเด™เตพเด•เตเด•เต.

เด•เดฎเตเดชเดจเดฟเด•เดณเต† เด…เดตเดฐเตเดŸเต† เดญเต‚เดฎเดฟเดถเดพเดธเตเดคเตเดฐเดชเดฐเดฎเดพเดฏ เดธเตเดฅเดพเดจเดคเตเดคเดฟเดจเตเดฑเต† เดชเตเดฑเดคเตเดคเต† เดคเดพเดชเดจเดฟเดฒ เดคเดคเตเดธเดฎเดฏเด‚ เดชเด™เตเด•เดฟเดŸเดพเดจเตเด‚ เดฎเดพเดฑเตเดฑเดฎเดฟเดฒเตเดฒเดพเดคเตเดค เดฒเต†เดกเตเดœเดฑเดฟเตฝ เดฐเต‡เด–เดชเตเดชเต†เดŸเตเดคเตเดคเดพเดจเตเด‚ เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดฒเต‚เดŸเต†, เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เต เดชเด™เตเด•เดพเดณเดฟเด•เตพ เดšเต†เดฒเดตเตเด‚ เดธเดฎเดฏเดตเตเด‚ เด•เตเดฑเดฏเตเด•เตเด•เตเดจเตเดจเต.

Web3 เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต JP Morgan Quorum เดฌเตเดฒเต‹เด•เตเด•เตเดšเต†เดฏเดฟเดจเดฟเตฝ เดชเตŠเดคเต, เดธเตเดตเด•เดพเดฐเตเดฏ เด‡เดŸเดชเดพเดŸเตเด•เตพ เดจเดŸเดคเตเดคเตเด•

เดกเดฏเด—เตเดฐเดพเดฎเดฟเตฝ เดšเดฟเดคเตเดฐเต€เด•เดฐเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เดฎเต‚เดจเตเดจเต เดœเต‹เดฒเดฟเด•เตพ เดžเด™เตเด™เตพ เดจเดฟเตผเดตเดนเดฟเด•เตเด•เตเด‚:

  1. เดตเดดเดฟ เดžเด™เตเด™เตพ เด•เดฐเดพเตผ เดตเดฟเดจเตเดฏเดธเดฟเด•เตเด•เตเด‚ เดจเต‹เดกเต 1:

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

  2. เดตเดดเดฟ เดคเดพเดชเดจเดฟเดฒ เดธเดœเตเดœเดฎเดพเด•เตเด•เตเด• เดจเต‹เดกเต 2 3 เดกเดฟเด—เตเดฐเดฟเดฏเดฟเตฝ:

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

  3. เดจเต‹เดกเต 3 เดธเตเดฎเดพเตผเดŸเตเดŸเต เด•เดฐเดพเดฑเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเดฟเดตเดฐเด™เตเด™เตพ เดฒเดญเดฟเด•เตเด•เตเด‚. เด•เดฐเดพเตผ เดฎเต‚เดฒเตเดฏเด‚ 3 เดกเดฟเด—เตเดฐเดฟ เดจเตฝเด•เตเด‚:

    const temp = await getTemperature(raft3Node, contractAddress);
    console.log(โ€˜Retrieved contract Temperatureโ€™, temp);

    เด…เดŸเตเดคเตเดคเดคเดพเดฏเดฟ, เด•เต‹เดฑเด‚ เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เดฟเตฝ เด’เดฐเต เดชเตŠเดคเต เด‡เดŸเดชเดพเดŸเต เดŽเด™เตเด™เดจเต† เดจเดŸเดคเตเดคเดพเดฎเต†เดจเตเดจเต เดžเด™เตเด™เตพ เดจเต‹เด•เตเด•เดพเด‚ 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 เด’เดฐเต เดฒเต‹เด•เตเด•เตฝ เดจเต‹เดกเดฟเตฝ เดŽเด•เตเดธเดฟเด•เตเดฏเต‚เดŸเตเดŸเต เดšเต†เดฏเตเดฏเตเดจเตเดจเต, เด‡เดŸเดชเดพเดŸเต เดฌเตเดฒเต‹เด•เตเด•เตเดšเต†เดฏเดฟเดจเดฟเตฝ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดชเตเดชเต†เดŸเดฟเดฒเตเดฒ.

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

เด…เดŸเตเดคเตเดคเดคเดพเดฏเดฟ, เดคเดพเดดเต† เด•เดพเดฃเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเตเดชเต‹เดฒเต† เดšเต†เดฏเดฟเตปเดธเตเดฑเตเดฑเดพเด•เตเด•เต เดชเดพเดจเดฒเดฟเดฒเต† เด•เต‹เดฑเด‚ เดŽเด•เตเดธเตเดชเตเดฒเต‹เดฑเดฑเดฟเดฒเต† เดŽเตปเดŸเตเดฐเดฟเด•เตพ เดจเดฎเตเด•เตเด•เต เด•เดพเดฃเดพเตป เด•เดดเดฟเดฏเตเด‚.

เดฎเต‚เดจเตเดจเต เดจเต‹เดกเตเด•เดณเตเด‚ เดธเด‚เดตเดฆเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด‡เดŸเดชเดพเดŸเตเด•เตพ เด…เดชเตโ€Œเดกเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดคเต:

  1. เด†เดฆเตเดฏ เด‡เดŸเดชเดพเดŸเต เด•เดฐเดพเตผ เดตเดฟเดจเตเดฏเดธเดฟเดšเตเดšเต.
  2. เดฐเดฃเตเดŸเดพเดฎเดคเตเดคเต† เด‡เดŸเดชเดพเดŸเต เด•เดฐเดพเตผ เดคเดพเดชเดจเดฟเดฒ 3 เดกเดฟเด—เตเดฐเดฟเดฏเดพเดฏเดฟ เดธเดœเตเดœเดฎเดพเด•เตเด•เดฟ.
  3. เด’เดฐเต เดฒเต‹เด•เตเด•เตฝ เดจเต‹เดกเดฟเดฒเต‚เดŸเต†เดฏเดพเดฃเต เดคเดพเดชเดจเดฟเดฒ เดฒเดญเดฟเด•เตเด•เตเดจเตเดจเดคเต, เด…เดคเดฟเดจเดพเตฝ เด‡เดŸเดชเดพเดŸเตเด•เดณเตŠเดจเตเดจเตเด‚ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเดจเตเดจเดฟเดฒเตเดฒ.

Web3 เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต JP Morgan Quorum เดฌเตเดฒเต‹เด•เตเด•เตเดšเต†เดฏเดฟเดจเดฟเตฝ เดชเตŠเดคเต, เดธเตเดตเด•เดพเดฐเตเดฏ เด‡เดŸเดชเดพเดŸเตเด•เตพ เดจเดŸเดคเตเดคเตเด•

เดธเตเดตเด•เดพเดฐเตเดฏ เด‡เดŸเดชเดพเดŸเตเด•เตพ

เดธเดจเตเดฆเตผเดญเด‚

เด“เตผเด—เดจเตˆเดธเต‡เดทเดจเตเดฑเต† เดชเตŠเดคเตเดตเดพเดฏ เด†เดตเดถเตเดฏเด•เดค เดกเดพเดฑเตเดฑ เดชเดฐเดฟเดฐเด•เตเดทเดฏเดพเดฃเต. เด‰เดฆเดพเดนเดฐเดฃเดฎเดพเดฏเดฟ, เด’เดฐเต เดธเดพเดนเดšเดฐเตเดฏเด‚ เดชเดฐเดฟเด—เดฃเดฟเด•เตเด•เตเด• เดธเต‚เดชเตเดชเตผเดฎเดพเตผเด•เตเด•เดฑเตเดฑเต เดตเต‡เดฑเดฟเดŸเตเดŸ เด•เดŸเตฝ เดตเดฟเดญเดตเด™เตเด™เตพ เดธเด‚เดญเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เด’เดฐเต เดตเต†เดฏเตผเดนเต—เดธเต เดธเตเดฅเดฒเด‚ เดตเดพเดŸเด•เดฏเตโ€Œเด•เตเด•เต†เดŸเตเด•เตเด•เตเดจเตเดจเต เดตเต†เดฃเตเดŸเตผ:

  • เดตเต†เดฃเตเดŸเตผ IoT เดธเต†เตปเดธเดฑเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต, เด“เดฐเต‹ 30 เดธเต†เด•เตเด•เตปเดกเดฟเดฒเตเด‚ เดคเดพเดชเดจเดฟเดฒ เดฎเต‚เดฒเตเดฏเด™เตเด™เตพ เดตเดพเดฏเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด…เดต เด•เตˆเดฎเดพเดฑเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต เดธเต‚เดชเตเดชเตผเดฎเดพเตผเด•เตเด•เดฑเตเดฑเดฟเดฒเต‡เด•เตเด•เต;
  • เดˆ เดฎเต‚เดฒเตเดฏเด™เตเด™เตพ เดฎเดพเดคเตเดฐเดฎเต‡ เดฒเดญเตเดฏเดฎเดพเด•เต‚ เด•เดšเตเดšเดตเดŸเด•เตเด•เดพเดฐเดจเต ะธ เดธเต‚เดชเตเดชเตผเดฎเดพเตผเด•เตเด•เดฑเตเดฑเดฟเดฒเต‡เด•เตเด•เต, เด’เดฐเต เด•เตบเดธเต‹เตผเดทเตเดฏเด‚ เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เต เดšเต†เดฏเตโ€Œเดคเต.

Web3 เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต JP Morgan 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}`);

    เด…เดŸเตเดคเตเดคเดคเดพเดฏเดฟ, เด•เต‹เดฑเด‚ เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เดฟเตฝ เดธเตเดตเด•เดพเดฐเตเดฏ เด‡เดŸเดชเดพเดŸเตเด•เตพ เดจเดŸเดคเตเดคเตเดจเตเดจเดคเต เดžเด™เตเด™เตพ เดธเต‚เด•เตเดทเตเดฎเดฎเดพเดฏเดฟ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเด‚ 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

เดšเต†เดฏเดฟเตปเดธเตเดฑเตเดฑเดพเด•เตเด•เดฟเดฒเต† เด•เต‹เดฑเด‚ เดŽเด•เตเดธเตเดชเตเดฒเต‹เดฑเตผ เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจเดต เด•เดพเดฃเดฟเด•เตเด•เตเด‚:

  • เดชเด™เตเด•เดพเดณเดฟเดฏเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เด•เดฐเดพเดฑเดฟเดจเตเดฑเต† เดตเดฟเดจเตเดฏเดพเดธเด‚ เดธเต‚เดชเตเดชเตผเดฎเดพเตผเด•เตเด•เดฑเตเดฑเต;
  • เดจเดฟเดตเตƒเดคเตเดคเดฟ SetTemperature ะพั‚ เดฎเต‚เดจเตเดจเดพเด‚ เดชเดพเตผเดŸเตเดŸเดฟ;
  • เดจเดฟเดตเตƒเดคเตเดคเดฟ SetTemperature เด’เดฐเต เดชเด™เตเด•เดพเดณเดฟเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเต†เดฃเตเดŸเตผ.

Web3 เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต JP Morgan Quorum เดฌเตเดฒเต‹เด•เตเด•เตเดšเต†เดฏเดฟเดจเดฟเตฝ เดชเตŠเดคเต, เดธเตเดตเด•เดพเดฐเตเดฏ เด‡เดŸเดชเดพเดŸเตเด•เตพ เดจเดŸเดคเตเดคเตเด•

เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด•เดพเดฃเดพเดจเดพเด•เตเดจเตเดจเดคเตเดชเต‹เดฒเต†, เดฐเดฃเตเดŸเต เด‡เดŸเดชเดพเดŸเตเด•เดณเตเด‚ เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเดฏเดฟ, เดชเด•เตเดทเต‡ เดชเด™เตเด•เดพเดณเดฟเดฏเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เด‡เดŸเดชเดพเดŸเต เดฎเดพเดคเตเดฐเด‚ เดตเต†เดฃเตเดŸเตผ เด•เดฐเดพเดฑเดฟเดฒเต† เดคเดพเดชเดจเดฟเดฒ เดชเตเดคเตเด•เตเด•เดฟ. เด…เด™เตเด™เดจเต†, เดธเตเดตเด•เดพเดฐเตเดฏ เด‡เดŸเดชเดพเดŸเตเด•เตพ เดฎเดพเดฑเตเดฑเดฎเดฟเดฒเตเดฒเดพเดคเตเดคเดคเต เดจเตฝเด•เตเดจเตเดจเต, เดŽเดจเตเดจเดพเตฝ เด…เดคเต‡ เดธเดฎเดฏเด‚ เด’เดฐเต เดฎเต‚เดจเตเดจเดพเด‚ เด•เด•เตเดทเดฟเด•เตเด•เต เดกเดพเดฑเตเดฑ เดตเต†เดณเดฟเดชเตเดชเต†เดŸเตเดคเตเดคเดฐเตเดคเต.

เดคเต€เดฐเตเดฎเดพเดจเด‚

เด’เดฐเต เดธเต‚เดชเตเดชเตผเดฎเดพเตผเด•เตเด•เดฑเตเดฑเตเด‚ เดตเต†เดฏเตผเดนเต—เดธเต เด‰เดŸเดฎเดฏเตเด‚ - เดฐเดฃเตเดŸเต เด•เด•เตเดทเดฟเด•เตพเด•เตเด•เดฟเดŸเดฏเดฟเตฝ เด’เดฐเต เดถเตƒเด‚เด–เดฒ เดตเดฟเดจเตเดฏเดธเดฟเดšเตเดšเตเด•เตŠเดฃเตเดŸเต เด’เดฐเต เดตเต†เดฏเตผเดนเต—เดธเดฟเตฝ เด•เดพเดฒเดฟเด•เดฎเดพเดฏ เดคเดพเดชเดจเดฟเดฒ เดตเดฟเดตเดฐเด™เตเด™เตพ เดจเตฝเด•เตเดจเตเดจเดคเดฟเดจเต Quorum-เดจเตเดฑเต† เด’เดฐเต เดตเดพเดฃเดฟเดœเตเดฏ เด‰เดชเดฏเต‹เด— เด•เต‡เดธเต เดžเด™เตเด™เตพ เดชเดฐเดฟเดถเต‹เดงเดฟเดšเตเดšเต.

เดชเตŠเดคเต-เดธเตเดตเด•เดพเดฐเตเดฏ เด‡เดŸเดชเดพเดŸเตเด•เดณเดฟเดฒเต‚เดŸเต† เดคเดพเดชเดจเดฟเดฒ เดตเดฟเดตเดฐเด™เตเด™เตพ เดŽเด™เตเด™เดจเต† เดจเดฟเดฒเดจเดฟเตผเดคเตเดคเดพเดฎเต†เดจเตเดจเต เดžเด™เตเด™เตพ เด•เดพเดฃเดฟเดšเตเดšเตเดคเดจเตเดจเต.

เดงเดพเดฐเดพเดณเด‚ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดธเดพเดนเดšเดฐเตเดฏเด™เตเด™เตพ เด‰เดฃเตเดŸเดพเด•เดพเด‚, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด•เดพเดฃเดพเดจเดพเด•เตเดจเตเดจเดคเตเดชเต‹เดฒเต†, เด‡เดคเต เด’เดŸเตเดŸเตเด‚ เดฌเตเดฆเตเดงเดฟเดฎเตเดŸเตเดŸเตเดณเตเดณ เด•เดพเดฐเตเดฏเดฎเดฒเตเดฒ.

เดชเดฐเต€เด•เตเดทเดฃเด‚, เดจเดฟเด™เตเด™เดณเตเดŸเต† เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เดตเดฟเด•เดธเดฟเดชเตเดชเดฟเด•เตเด•เดพเตป เดถเตเดฐเดฎเดฟเด•เตเด•เตเด•. เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ, เดฌเตเดฒเต‹เด•เตเด•เตเดšเต†เดฏเดฟเตป เดธเดพเด™เตเด•เต‡เดคเดฟเด• เดตเตเดฏเดตเดธเดพเดฏเด‚ 2024 เด†เด•เตเดฎเตเดชเต‹เดดเต‡เด•เตเด•เตเด‚ เดเด•เดฆเต‡เดถเด‚ เดชเดคเตเดคเดฟเดฐเดŸเตเดŸเดฟ เดตเดณเดฐเตเด‚.

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•