Web3 เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ JPMorgan Quorum เชฌเซเชฒเซ‹เช•เชšเซ‡เชจ เชชเชฐ เชœเชพเชนเซ‡เชฐ เช…เชจเซ‡ เช–เชพเชจเช—เซ€ เชตเซเชฏเชตเชนเชพเชฐเซ‹ เช•เชฐเซ‹

Web3 เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ JPMorgan Quorum เชฌเซเชฒเซ‹เช•เชšเซ‡เชจ เชชเชฐ เชœเชพเชนเซ‡เชฐ เช…เชจเซ‡ เช–เชพเชจเช—เซ€ เชตเซเชฏเชตเชนเชพเชฐเซ‹ เช•เชฐเซ‹

เช•เซ‹เชฐเชฎ เชœเซ‡เชชเซ€เชฎเซ‹เชฐเซเช—เชจ เชฆเซเชตเชพเชฐเชพ เชตเชฟเช•เชธเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡เชฒ เช‡เชฅเซ‡เชฐเชฟเชฏเชฎ-เช†เชงเชพเชฐเชฟเชค เชฌเซเชฒเซ‹เช•เชšเซ‡เชจ เช›เซ‡ เช…เชจเซ‡ เชคเชพเชœเซ‡เชคเชฐเชฎเชพเช‚ เชฎเชพเช‡เช•เซเชฐเซ‹เชธเซ‹เชซเซเชŸ เชเชเซเชฏเซเชฐ เชฆเซเชตเชพเชฐเชพ เช“เชซเชฐ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชคเซเช‚ เชชเซเชฐเชฅเชฎ เชตเชฟเชคเชฐเชฟเชค เชฒเซ‡เชœเชฐ เชชเซเชฒเซ‡เชŸเชซเซ‹เชฐเซเชฎ เชฌเชจเซเชฏเซเช‚ เช›เซ‡.

เช•เซ‹เชฐเชฎ เช–เชพเชจเช—เซ€ เช…เชจเซ‡ เชœเชพเชนเซ‡เชฐ เชตเซเชฏเชตเชนเชพเชฐเซ‹เชจเซ‡ เชธเชฎเชฐเซเชฅเชจ เช†เชชเซ‡ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชฎเชพเช‚ เช˜เชฃเชพ เชตเซเชฏเชตเชธเชพเชฏเชฟเช• เช‰เชชเชฏเซ‹เช—เชจเชพ เช•เซ‡เชธ เช›เซ‡.

เช† เชฒเซ‡เช–เชฎเชพเช‚, เช…เชฎเซ‡ เช†เชตเชพ เชเช• เชฆเซƒเชถเซเชฏเชจเซ€ เชคเชชเชพเชธ เช•เชฐเซ€เชถเซเช‚ - เชตเซ‡เชฐเชนเชพเช‰เชธเชจเชพ เชคเชพเชชเชฎเชพเชจ เชตเชฟเชถเซ‡ เช…เชช-เชŸเซ‚-เชกเซ‡เชŸ เชฎเชพเชนเชฟเชคเซ€ เชชเซเชฐเชฆเชพเชจ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชธเซเชชเชฐเชฎเชพเชฐเซเช•เซ‡เชŸ เช…เชจเซ‡ เชตเซ‡เชฐเชนเชพเช‰เชธ เชฎเชพเชฒเชฟเช• เชตเชšเซเชšเซ‡ เชตเชฟเชคเชฐเชฟเชค เช–เชพเชคเชพเชตเชนเซ€ เชจเซ‡เชŸเชตเชฐเซเช•เชจเซ€ เชœเชฎเชพเชตเชŸ.

เช† เชŸเซเชฏเซเชŸเซ‹เชฐเซ€เชฏเชฒเชฎเชพเช‚ เชตเชชเชฐเชพเชฏเซ‡เชฒ เช•เซ‹เชก เช›เซ‡ 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, เชคเซ‡ ABI เชซเซ‹เชฐเซเชฎเซ‡เชŸ เช…เชจเซ‡ เชฌเชพเช‡เชŸเช•เซ‹เชกเชฎเชพเช‚ เช…เชจเซเชตเชพเชฆเชฟเชค เชนเซ‹เชตเซเช‚ เช†เชตเชถเซเชฏเช• เช›เซ‡. เชซเช‚เช•เซเชถเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ 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 เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ JPMorgan Quorum เชฌเซเชฒเซ‹เช•เชšเซ‡เชจ เชชเชฐ เชœเชพเชนเซ‡เชฐ เช…เชจเซ‡ เช–เชพเชจเช—เซ€ เชตเซเชฏเชตเชนเชพเชฐเซ‹ เช•เชฐเซ‹

เชจเซ‹เชกเชจเซ‡ เชœเชฎเชพเชตเชตเซเช‚ เช–เซ‚เชฌ เชถเซเชฐเชฎ-เชธเช˜เชจ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡ เช…เชจเซ‡ เช† เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ‡ เชธเซ‡เชตเชพเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชฌเชฆเชฒเซ€ เชถเช•เชพเชฏ เช›เซ‡ เชšเซ‡เช‡เชจเชธเซเชŸเซ‡เช•.

เชจเซ€เชšเซ‡ เชฐเชพเชซเซเชŸ เชธเชฐเซเชตเชธเช‚เชฎเชคเชฟ เช…เชจเซ‡ เชคเซเชฐเชฃ เช—เชพเช‚เช เซ‹ เชธเชพเชฅเซ‡ เช•เซ‹เชฐเชฎ เชจเซ‡เชŸเชตเชฐเซเช• เชœเชฎเชพเชตเชตเชพเชจเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช›เซ‡.

เชชเซเชฐเชฅเชฎ, เชšเชพเชฒเซ‹ เชเช• เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฌเชจเชพเชตเซ€เช เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เช•เซ‹เชฐเชฎ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เช•เชนเซ€เช:

Web3 เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ JPMorgan Quorum เชฌเซเชฒเซ‹เช•เชšเซ‡เชจ เชชเชฐ เชœเชพเชนเซ‡เชฐ เช…เชจเซ‡ เช–เชพเชจเช—เซ€ เชตเซเชฏเชตเชนเชพเชฐเซ‹ เช•เชฐเซ‹

เชšเชพเชฒเซ‹ Google เช•เซเชฒเชพเช‰เชก เชชเซเชฒเซ‡เชŸเชซเซ‹เชฐเซเชฎ เชชเชฐ เชฐเชพเชซเซเชŸ เชธเชฐเซเชตเชธเช‚เชฎเชคเชฟ เชธเชพเชฅเซ‡ เช•เซ‹เชฐเชฎ เชจเซ‡เชŸเชตเชฐเซเช• เชฌเชจเชพเชตเซ€เช:

Web3 เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ JPMorgan Quorum เชฌเซเชฒเซ‹เช•เชšเซ‡เชจ เชชเชฐ เชœเชพเชนเซ‡เชฐ เช…เชจเซ‡ เช–เชพเชจเช—เซ€ เชตเซเชฏเชตเชนเชพเชฐเซ‹ เช•เชฐเซ‹

เชšเชพเชฒเซ‹ เชชเชนเซ‡เชฒเชพเชฅเซ€ เชœ เชฎเซ‚เชณเชญเซ‚เชค เชฐเซ€เชคเซ‡ เชฌเชจเชพเชตเซ‡เชฒ เชจเซ‹เชกเชฎเชพเช‚ เชตเชงเซ เชฌเซ‡ เชจเซ‹เชก เช‰เชฎเซ‡เชฐเซ€เช:

Web3 เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ JPMorgan Quorum เชฌเซเชฒเซ‹เช•เชšเซ‡เชจ เชชเชฐ เชœเชพเชนเซ‡เชฐ เช…เชจเซ‡ เช–เชพเชจเช—เซ€ เชตเซเชฏเชตเชนเชพเชฐเซ‹ เช•เชฐเซ‹

เชคเซเชฐเชฃ เชšเชพเชฒเซ€ เชฐเชนเซ‡เชฒ เช—เชพเช‚เช เซ‹:

Web3 เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ JPMorgan Quorum เชฌเซเชฒเซ‹เช•เชšเซ‡เชจ เชชเชฐ เชœเชพเชนเซ‡เชฐ เช…เชจเซ‡ เช–เชพเชจเช—เซ€ เชตเซเชฏเชตเชนเชพเชฐเซ‹ เช•เชฐเซ‹

เชจเซ‹เชก เชตเชฟเช—เชคเซ‹ เชชเซƒเชทเซเช  RPC เชเชจเซเชกเชชเซ‹เช‡เชจเซเชŸ, เชธเชพเชฐเซเชตเชœเชจเชฟเช• เช•เซ€, เชตเช—เซ‡เชฐเซ‡ เชฌเชคเชพเชตเซ‡ เช›เซ‡.

Web3 เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ JPMorgan Quorum เชฌเซเชฒเซ‹เช•เชšเซ‡เชจ เชชเชฐ เชœเชพเชนเซ‡เชฐ เช…เชจเซ‡ เช–เชพเชจเช—เซ€ เชตเซเชฏเชตเชนเชพเชฐเซ‹ เช•เชฐเซ‹

เชจเซ‡เชŸเชตเชฐเซเช• เชคเซˆเชจเชพเชค เช›เซ‡. เชนเชตเซ‡ เชšเชพเชฒเซ‹ เชธเซเชฎเชพเชฐเซเชŸ เช•เซ‹เชจเซเชŸเซเชฐเชพเช•เซเชŸเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เช เช…เชจเซ‡ เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชตเซเชฏเชตเชนเชพเชฐเซ‹ เช•เชฐเซ€เช web3.js.

เชœเชพเชนเซ‡เชฐ เชตเซเชฏเชตเชนเชพเชฐเซ‹

เชธเช‚เชฆเชฐเซเชญ

เช–เชฐเซเชš เช˜เชŸเชพเชกเชตเชพ เชฎเชพเชŸเซ‡ เชตเซ‡เชฐเชนเชพเช‰เชธเชจเซเช‚ เชคเชพเชชเชฎเชพเชจ เช–เซ‚เชฌ เชฎเชนเชคเซเชต เชงเชฐเชพเชตเซ‡ เช›เซ‡, เช–เชพเชธ เช•เชฐเซ€เชจเซ‡ เช‰เชช-เชถเซ‚เชจเซเชฏ เชคเชพเชชเชฎเชพเชจเซ‡ เชธเช‚เช—เซเชฐเชนเชฟเชค เช•เชฐเชตเชพเชจเชพ เชนเซ‡เชคเซเชตเชพเชณเชพ เช‰เชคเซเชชเชพเชฆเชจเซ‹ เชฎเชพเชŸเซ‡.

เช•เช‚เชชเชจเซ€เช“เชจเซ‡ เชคเซ‡เชฎเชจเชพ เชญเซŒเช—เซ‹เชฒเชฟเช• เชธเซเชฅเชพเชจเชจเชพ เชฌเชนเชพเชฐเชจเชพ เชคเชพเชชเชฎเชพเชจเชจเซ‡ เชตเชพเชธเซเชคเชตเชฟเช• เชธเชฎเชฏเชฎเชพเช‚ เชถเซ‡เชฐ เช•เชฐเชตเชพเชจเซ€ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เช…เชชเชฐเชฟเชตเชฐเซเชคเชจเชถเซ€เชฒ เช–เชพเชคเชพเชตเชนเซ€เชฎเชพเช‚ เชฐเซ‡เช•เซ‹เชฐเซเชก เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ€เชจเซ‡, เชจเซ‡เชŸเชตเชฐเซเช• เชธเชนเชญเชพเช—เซ€เช“ เช–เชฐเซเชš เช…เชจเซ‡ เชธเชฎเชฏ เช˜เชŸเชพเชกเซ‡ เช›เซ‡.

Web3 เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ JPMorgan 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 เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ JPMorgan Quorum เชฌเซเชฒเซ‹เช•เชšเซ‡เชจ เชชเชฐ เชœเชพเชนเซ‡เชฐ เช…เชจเซ‡ เช–เชพเชจเช—เซ€ เชตเซเชฏเชตเชนเชพเชฐเซ‹ เช•เชฐเซ‹

เช–เชพเชจเช—เซ€ เชตเซเชฏเชตเชนเชพเชฐเซ‹

เชธเช‚เชฆเชฐเซเชญ

เชธเช‚เชธเซเชฅเชพเช“เชจเซ€ เชธเชพเชฎเชพเชจเซเชฏ เชœเชฐเซ‚เชฐเชฟเชฏเชพเชค เชกเซ‡เชŸเชพ เชธเซเชฐเช•เซเชทเชพ เช›เซ‡. เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชเช• เชฆเซƒเชถเซเชฏ เชงเซเชฏเชพเชจเชฎเชพเช‚ เชฒเซ‹ เชœเซ‡เชฎเชพเช‚ เชธเซเชชเชฐเชฎเชพเชฐเซเช•เซ‡เชŸ เช…เชฒเช—เชฅเซ€ เชธเซ€เชซเซ‚เชก เชธเซเชŸเซ‹เชฐ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชตเซ‡เชฐเชนเชพเช‰เชธ เชœเช—เซเชฏเชพ เชญเชพเชกเซ‡ เช†เชชเซ‡ เช›เซ‡ เชตเชฟเช•เซเชฐเซ‡เชคเชพ:

  • เชตเชฟเช•เซเชฐเซ‡เชคเชพ IoT เชธเซ‡เชจเซเชธเชฐเซเชธเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡, เชฆเชฐ 30 เชธเซ‡เช•เชจเซเชกเซ‡ เชคเชพเชชเชฎเชพเชจเชจเชพ เชฎเซ‚เชฒเซเชฏเซ‹ เชตเชพเช‚เชšเซ‡ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชชเซเชฐเชธเชพเชฐเชฟเชค เช•เชฐเซ‡ เช›เซ‡ เชธเซเชชเชฐเชฎเชพเชฐเซเช•เซ‡เชŸ เชฎเชพเชŸเซ‡;
  • เช† เชฎเซ‚เชฒเซเชฏเซ‹ เชซเช•เซเชค เช‰เชชเชฒเชฌเซเชง เชนเซ‹เชตเชพ เชœเซ‹เชˆเช เชตเชฟเช•เซเชฐเซ‡เชคเชพเชจเซ‡ ะธ เชธเซเชชเชฐเชฎเชพเชฐเซเช•เซ‡เชŸ เชฎเชพเชŸเซ‡, เชเช• เช•เชจเซเชธเซ‹เชฐเซเชŸเชฟเชฏเชฎ เชฆเซเชตเชพเชฐเชพ เชจเซ‡เชŸเชตเชฐเซเช•.

Web3 เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ JPMorgan 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;
  });
}

เชนเชตเซ‡ เช†เชชเชฃเซ‡ เชฆเซ‹เชกเซ€ เชถเช•เซ€เช เช›เซ€เช เช–เชพเชจเช—เซ€.เชœเซ‡เชเชธ เชจเซ€เชšเซ‡เชจเชพ เชชเชฐเชฟเชฃเชพเชฎเซ‹ เชธเชพเชฅเซ‡:

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 เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ JPMorgan Quorum เชฌเซเชฒเซ‹เช•เชšเซ‡เชจ เชชเชฐ เชœเชพเชนเซ‡เชฐ เช…เชจเซ‡ เช–เชพเชจเช—เซ€ เชตเซเชฏเชตเชนเชพเชฐเซ‹ เช•เชฐเซ‹

เชœเซ‡เชฎ เชคเชฎเซ‡ เชœเซ‹เชˆ เชถเช•เซ‹ เช›เซ‹, เชฌเช‚เชจเซ‡ เชตเซเชฏเชตเชนเชพเชฐเซ‹ เชชเซ‚เชฐเซเชฃ เชฅเชฏเชพ เช›เซ‡, เชชเชฐเช‚เชคเซ เชซเช•เซเชค เชธเชนเชญเชพเช—เซ€ เชชเชพเชธเซ‡เชฅเซ€ เชตเซเชฏเชตเชนเชพเชฐ เชตเชฟเช•เซเชฐเซ‡เชคเชพ เช•เชฐเชพเชฐเชฎเชพเช‚ เชคเชพเชชเชฎเชพเชจ เช…เชชเชกเซ‡เชŸ เช•เชฐเซเชฏเซเช‚. เช†เชฎ, เช–เชพเชจเช—เซ€ เชตเซเชฏเชตเชนเชพเชฐเซ‹ เช…เชชเชฐเชฟเชตเชฐเซเชคเชจเชถเซ€เชฒเชคเชพ เชชเซเชฐเชฆเชพเชจ เช•เชฐเซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เชคเซ‡ เชœ เชธเชฎเชฏเซ‡ เชคเซƒเชคเซ€เชฏ เชชเช•เซเชทเชจเซ‡ เชกเซ‡เชŸเชพ เชœเชพเชนเซ‡เชฐ เช•เชฐเชคเชพ เชจเชฅเซ€.

เชจเชฟเชทเซเช•เชฐเซเชท

เช…เชฎเซ‡ เชฌเซ‡ เชชเช•เซเชทเซ‹ - เชเช• เชธเซเชชเชฐเชฎเชพเชฐเซเช•เซ‡เชŸ เช…เชจเซ‡ เชตเซ‡เชฐเชนเชพเช‰เชธ เชฎเชพเชฒเชฟเช• เชตเชšเซเชšเซ‡ เชจเซ‡เชŸเชตเชฐเซเช• เชœเชฎเชพเชตเซ€เชจเซ‡ เชตเซ‡เชฐเชนเชพเช‰เชธเชฎเชพเช‚ เชคเชพเชชเชฎเชพเชจเชจเซ€ เช…เชฆเซเชฏเชคเชจ เชฎเชพเชนเชฟเชคเซ€ เชชเซเชฐเชฆเชพเชจ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช•เซ‹เชฐเชฎ เชฎเชพเชŸเซ‡ เช•เซ‹เชฎเชฐเซเชถเชฟเชฏเชฒ เช‰เชชเชฏเซ‹เช—เชจเซ‹ เช•เซ‡เชธ เชœเซ‹เชฏเซ‹.

เช…เชฎเซ‡ เชฌเชคเชพเชตเซเชฏเซเช‚ เช•เซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช…เชฆเซเชฏเชคเชจ เชคเชพเชชเชฎเชพเชจ เชฎเชพเชนเชฟเชคเซ€ เชœเชพเชนเซ‡เชฐ เช…เชจเซ‡ เช–เชพเชจเช—เซ€ เชฌเช‚เชจเซ‡ เชตเซเชฏเชตเชนเชพเชฐเซ‹ เชฆเซเชตเชพเชฐเชพ เชœเชพเชณเชตเซ€ เชถเช•เชพเชฏ เช›เซ‡.

เชคเซเชฏเชพเช‚ เช˜เชฃเชพ เชฌเชงเชพ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฆเซƒเชถเซเชฏเซ‹ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡ เช…เชจเซ‡, เชœเซ‡เชฎ เชคเชฎเซ‡ เชœเซ‹เชˆ เชถเช•เซ‹ เช›เซ‹, เชคเซ‡ เชฌเชฟเชฒเช•เซเชฒ เชฎเซเชถเซเช•เซ‡เชฒ เชจเชฅเซ€.

เชชเซเชฐเชฏเซ‹เช— เช•เชฐเซ‹, เชคเชฎเชพเชฐเซ€ เชธเซเช•เซเชฐเชฟเชชเซเชŸเชจเซ‡ เชตเชฟเชธเซเชคเซƒเชค เช•เชฐเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซ‹. เชตเชงเซเชฎเชพเช‚, เชฌเซเชฒเซ‹เช•เชšเซ‡เชจ เชŸเซ‡เช•เชจเซ‹เชฒเซ‹เชœเซ€ เช‰เชฆเซเชฏเซ‹เช— 2024 เชธเซเชงเซ€เชฎเชพเช‚ เชฒเช—เชญเช— เชฆเชธ เช—เชฃเซ‹ เชตเซƒเชฆเซเชงเชฟ เชฅเชˆ เชถเช•เซ‡ เช›เซ‡.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹