เดเตเดฑเด เดธเตเดตเดเดพเดฐเตเดฏเดตเตเด เดชเตเดคเตเดตเตเดฎเดพเดฏ เดเดเดชเดพเดเตเดเดณเต เดชเดฟเดจเตเดคเตเดฃเดฏเตเดเตเดเตเดจเตเดจเต เดเตเดเดพเดคเต เดจเดฟเดฐเดตเดงเดฟ เดตเดพเดฃเดฟเดเตเดฏ เดเดชเดฏเตเด เดเตเดธเตเดเดณเตเดฎเตเดฃเตเดเต.
เด เดฒเตเดเดจเดคเตเดคเดฟเตฝ, เด เดคเตเดคเดฐเดคเตเดคเดฟเดฒเตเดณเตเดณ เดเดฐเต เดธเดพเดนเดเดฐเตเดฏเด เดเดเตเดเตพ เดชเดฐเดฟเดถเตเดงเดฟเดเตเดเตเด - เดเดฐเต เดธเตเดชเตเดชเตผเดฎเดพเตผเดเตเดเดฑเตเดฑเดฟเดจเตเด เดตเตเดฏเตผเดนเตเดธเต เดเดเดฎเดฏเตเดเตเดเตเด เดเดเดฏเดฟเตฝ เดตเดฟเดคเดฐเดฃเด เดเตเดฏเตเดค เดฒเตเดกเตเดเตผ เดจเตเดฑเตเดฑเตโเดตเตผเดเตเดเดฟเดจเตเดฑเต เดตเดฟเดจเตเดฏเดพเดธเด, เดตเตเดฏเตผเดนเตเดธเดฟเดจเตเดฑเต เดคเดพเดชเดจเดฟเดฒเดฏเตเดเตเดเตเดฑเดฟเดเตเดเตเดณเตเดณ เดเดพเดฒเดฟเดเดฎเดพเดฏ เดตเดฟเดตเดฐเดเตเดเตพ เดจเตฝเดเตเดจเตเดจเดคเดฟเดจเต.
เด เดเตเดฏเตเดเตเดเตเดฑเดฟเดฏเดฒเดฟเตฝ เดเดชเดฏเตเดเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจ เดเตเดกเต เดเดฃเต
เดฒเตเดเดจเด เดเตพเดเตเดเตเดณเตเดณเตเดจเตเดจเต:
- เดเดฐเต เดธเตเดฎเดพเตผเดเตเดเต เดเดฐเดพเตผ เดธเตเดทเตเดเดฟเดเตเดเตฝ;
- เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจ เดเตเดฑเด เดจเตเดฑเตเดฑเตโเดตเตผเดเตเดเดฟเดจเตเดฑเต เดตเดฟเดจเตเดฏเดพเดธเด
เดเตเดฏเดฟเตปเดธเตเดฑเตเดฑเดพเดเตเดเต ; - เดเตเดฑเด เดชเตเดคเต เดเดเดชเดพเดเตเดเตพ;
- เดเตเดตเดพเดฑเด เดธเตเดตเดเดพเดฐเตเดฏ เดเดเดชเดพเดเตเดเตพ.
เดฆเตเดทเตเดเดพเดจเตเดคเตเดเดฐเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเต, เดเดจเตเดฑเตผเดจเตเดฑเตเดฑเต เดเดซเต เดคเดฟเดเดเตโเดธเดฟเดฒเต (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;
}
}
เดเตเดฒเดฟ เดเตเดฏเตเดฏเดพเดจเตเดณเตเดณ เดเดฐเดพเดฑเดฟเดจเต เดตเตเดฃเตเดเดฟ formatContract
เดเดชเดฏเตเดเดฟเดเตเดเต เดเดฐเดพเตผ เดธเดฎเดพเดนเดฐเดฟเดเตเดเตเดจเตเดจเต
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
เดเดชเตเดชเตเตพ เดเดฐเดพเตผ เดคเดฏเตเดฏเดพเดฑเดพเดฃเต, เดเดเตเดเตพ เดจเตเดฑเตเดฑเตโเดตเตผเดเตเดเต เดตเดฟเดจเตเดฏเดธเดฟเดเตเดเตเดเดฏเตเด เดเดฐเดพเตผ เดตเดฟเดจเตเดฏเดธเดฟเดเตเดเตเดเดฏเตเด เดเตเดฏเตเดฏเตเด.
เดจเตเดกเต เดตเดฟเดจเตเดฏเดพเดธเด
เดเดฐเต เดจเตเดกเต เดตเดฟเดจเตเดฏเดธเดฟเดเตเดเตเดจเตเดจเดคเต เดคเดฟเดเดเตเดเตเด เด
เดงเตเดตเดพเดจเดฎเดพเดฃเต, เดเดฐเต เดธเตเดตเดจเด เดเดชเดฏเตเดเดฟเดเตเดเต เด เดชเตเดฐเดเตเดฐเดฟเดฏ เดฎเดพเดฑเตเดฑเดฟเดธเตเดฅเดพเดชเดฟเดเตเดเดพเดจเดพเดเตเด
เดฑเดพเดซเตเดฑเตเดฑเต เดธเดฎเดตเดพเดฏเดตเตเด เดฎเตเดจเตเดจเต เดจเตเดกเตเดเดณเตเด เดเดชเดฏเตเดเดฟเดเตเดเต เดเตเดฑเด เดจเตเดฑเตเดฑเตโเดตเตผเดเตเดเต เดตเดฟเดจเตเดฏเดธเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดชเตเดฐเดเตเดฐเดฟเดฏ เดเตเดตเดเตเดฏเตเดฃเตเดเต.
เดเดฆเตเดฏเด, เดจเดฎเตเดเตเดเต เดเดฐเต เดชเตเดฐเตเดเดเตเดฑเตเดฑเต เดธเตเดทเตเดเดฟเดเตเดเต เด เดคเดฟเดจเต เดเตเดฑเด เดชเตเดฐเตเดเดเตเดฑเตเดฑเต เดเดจเตเดจเต เดตเดฟเดณเดฟเดเตเดเดพเด:
เดเตเดเดฟเตพ เดเตเดฒเตเดกเต เดชเตเดฒเดพเดฑเตเดฑเตโเดซเตเดฎเดฟเตฝ เดฑเดพเดซเตเดฑเตเดฑเต เดธเดฎเดตเดพเดฏเดคเตเดคเตเดเต เดจเดฎเตเดเตเดเต เดเดฐเต เดเตเดตเดพเดฑเด เดจเตเดฑเตเดฑเตโเดตเตผเดเตเดเต เดธเตเดทเตโเดเดฟเดเตเดเดพเด:
เดธเตเดฅเดฟเดฐเดธเตเดฅเดฟเดคเดฟเดฏเดพเดฏเดฟ เดเดคเดฟเดจเดเด เดธเตเดทเตเดเดฟเดเตเด เดจเตเดกเดฟเดฒเตเดเตเดเต เดฐเดฃเตเดเต เดจเตเดกเตเดเตพ เดเตเดเดฟ เดเตเตผเดเตเดเดพเด:
เดฎเตเดจเตเดจเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจ เดจเตเดกเตเดเตพ:
เดจเตเดกเต เดตเดฟเดถเดฆเดพเดเดถเดเตเดเดณเตเดเต เดชเตเดเต RPC เดเตปเดกเต เดชเตเดฏเดฟเดจเตเดฑเต, เดชเดฌเตเดฒเดฟเดเต เดเต เดฎเตเดคเดฒเดพเดฏเดต เดเดพเดฃเดฟเดเตเดเตเดจเตเดจเต.
เดจเตเดฑเตเดฑเตโเดตเตผเดเตเดเต เดตเดฟเดจเตเดฏเดธเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต. เดเดชเตเดชเตเตพ เดจเดฎเตเดเตเดเต เดธเตโเดฎเดพเตผเดเตเดเต เดเดฐเดพเดฑเตเดเตพ เดตเดฟเดจเตเดฏเดธเดฟเดเตเดเตเดเดฏเตเด เดเดชเดฏเตเดเดฟเดเตเดเต เดเดเดชเดพเดเตเดเตพ เดจเดเดคเตเดคเตเดเดฏเตเด เดเตเดฏเตเดฏเดพเด
เดชเตเดคเต เดเดเดชเดพเดเตเดเตพ
เดธเดจเตเดฆเตผเดญเด
เดตเตเดฏเตผเดนเตเดธเต เดคเดพเดชเดจเดฟเดฒ เดเตเดฒเดตเต เดเตเดฑเดฏเตเดเตเดเตเดจเตเดจเดคเดฟเตฝ เดตเดฒเดฟเดฏ เดชเตเดฐเดพเดงเดพเดจเตเดฏเดฎเตเดณเตเดณเดคเดพเดฃเต, เดชเตเดฐเดคเตเดฏเตเดเดฟเดเตเดเต เดเดช-เดชเตเดเตเดฏเด เดคเดพเดชเดจเดฟเดฒเดฏเดฟเตฝ เดธเตเดเตเดทเดฟเดเตเดเดพเตป เดเดฆเตเดฆเตเดถเดฟเดเตเดเตเดจเตเดจ เดเตฝเดชเตเดชเดจเตเดจเดเตเดเตพเดเตเดเต.
เดเดฎเตเดชเดจเดฟเดเดณเต เด เดตเดฐเตเดเต เดญเตเดฎเดฟเดถเดพเดธเตเดคเตเดฐเดชเดฐเดฎเดพเดฏ เดธเตเดฅเดพเดจเดคเตเดคเดฟเดจเตเดฑเต เดชเตเดฑเดคเตเดคเต เดคเดพเดชเดจเดฟเดฒ เดคเดคเตเดธเดฎเดฏเด เดชเดเตเดเดฟเดเดพเดจเตเด เดฎเดพเดฑเตเดฑเดฎเดฟเดฒเตเดฒเดพเดคเตเดค เดฒเตเดกเตเดเดฑเดฟเตฝ เดฐเตเดเดชเตเดชเตเดเตเดคเตเดคเดพเดจเตเด เด เดจเตเดตเดฆเดฟเดเตเดเตเดจเตเดจเดคเดฟเดฒเตเดเต, เดจเตเดฑเตเดฑเตโเดตเตผเดเตเดเต เดชเดเตเดเดพเดณเดฟเดเตพ เดเตเดฒเดตเตเด เดธเดฎเดฏเดตเตเด เดเตเดฑเดฏเตเดเตเดเตเดจเตเดจเต.
เดกเดฏเดเตเดฐเดพเดฎเดฟเตฝ เดเดฟเดคเตเดฐเตเดเดฐเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจ เดฎเตเดจเตเดจเต เดเตเดฒเดฟเดเตพ เดเดเตเดเตพ เดจเดฟเตผเดตเดนเดฟเดเตเดเตเด:
-
เดตเดดเดฟ เดเดเตเดเตพ เดเดฐเดพเตผ เดตเดฟเดจเตเดฏเดธเดฟเดเตเดเตเด เดจเตเดกเต 1:
const contractAddress = await deployContract(raft1Node); console.log(`Contract address after deployment: ${contractAddress}`);
-
เดตเดดเดฟ เดคเดพเดชเดจเดฟเดฒ เดธเดเตเดเดฎเดพเดเตเดเตเด เดจเตเดกเต 2 3 เดกเดฟเดเตเดฐเดฟเดฏเดฟเตฝ:
const status = await setTemperature(raft2Node, contractAddress, 3); console.log(`Transaction status: ${status}`);
-
เดจเตเดกเต 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;
});
}
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);
}
เดเดชเตเดชเตเตพ เดจเดฟเดเตเดเตพเดเตเดเต เดเดเดพเด
// Execute public script
node public.js
Contract address after deployment: 0xf46141Ac7D6D6E986eFb2321756b5d1e8a25008F
Transaction status: true
Retrieved contract Temperature 3
เด เดเตเดคเตเดคเดคเดพเดฏเดฟ, เดคเดพเดดเต เดเดพเดฃเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเดคเตเดชเตเดฒเต เดเตเดฏเดฟเตปเดธเตเดฑเตเดฑเดพเดเตเดเต เดชเดพเดจเดฒเดฟเดฒเต เดเตเดฑเด เดเดเตเดธเตเดชเตเดฒเตเดฑเดฑเดฟเดฒเต เดเตปเดเตเดฐเดฟเดเตพ เดจเดฎเตเดเตเดเต เดเดพเดฃเดพเตป เดเดดเดฟเดฏเตเด.
เดฎเตเดจเตเดจเต เดจเตเดกเตเดเดณเตเด เดธเดเดตเดฆเดฟเดเตเดเตเดเดฏเตเด เดเดเดชเดพเดเตเดเตพ เด เดชเตโเดกเตเดฑเตเดฑเต เดเตเดฏเตเดฏเตเดเดฏเตเด เดเตเดฏเตเดคเต:
- เดเดฆเตเดฏ เดเดเดชเดพเดเต เดเดฐเดพเตผ เดตเดฟเดจเตเดฏเดธเดฟเดเตเดเต.
- เดฐเดฃเตเดเดพเดฎเดคเตเดคเต เดเดเดชเดพเดเต เดเดฐเดพเตผ เดคเดพเดชเดจเดฟเดฒ 3 เดกเดฟเดเตเดฐเดฟเดฏเดพเดฏเดฟ เดธเดเตเดเดฎเดพเดเตเดเดฟ.
- เดเดฐเต เดฒเตเดเตเดเตฝ เดจเตเดกเดฟเดฒเตเดเตเดฏเดพเดฃเต เดคเดพเดชเดจเดฟเดฒ เดฒเดญเดฟเดเตเดเตเดจเตเดจเดคเต, เด เดคเดฟเดจเดพเตฝ เดเดเดชเดพเดเตเดเดณเตเดจเตเดจเตเด เดธเตเดทเตเดเดฟเดเตเดเดชเตเดชเตเดเตเดจเตเดจเดฟเดฒเตเดฒ.
เดธเตเดตเดเดพเดฐเตเดฏ เดเดเดชเดพเดเตเดเตพ
เดธเดจเตเดฆเตผเดญเด
เดเตผเดเดจเตเดธเตเดทเดจเตเดฑเต เดชเตเดคเตเดตเดพเดฏ เดเดตเดถเตเดฏเดเดค เดกเดพเดฑเตเดฑ เดชเดฐเดฟเดฐเดเตเดทเดฏเดพเดฃเต. เดเดฆเดพเดนเดฐเดฃเดฎเดพเดฏเดฟ, เดเดฐเต เดธเดพเดนเดเดฐเตเดฏเด เดชเดฐเดฟเดเดฃเดฟเดเตเดเตเด เดธเตเดชเตเดชเตผเดฎเดพเตผเดเตเดเดฑเตเดฑเต เดตเตเดฑเดฟเดเตเด เดเดเตฝ เดตเดฟเดญเดตเดเตเดเตพ เดธเดเดญเดฐเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเต เดเดฐเต เดตเตเดฏเตผเดนเตเดธเต เดธเตเดฅเดฒเด เดตเดพเดเดเดฏเตโเดเตเดเตเดเตเดเตเดเตเดจเตเดจเต เดตเตเดฃเตเดเตผ:
- เดตเตเดฃเตเดเตผ IoT เดธเตเตปเดธเดฑเตเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเต, เดเดฐเต 30 เดธเตเดเตเดเตปเดกเดฟเดฒเตเด เดคเดพเดชเดจเดฟเดฒ เดฎเตเดฒเตเดฏเดเตเดเตพ เดตเดพเดฏเดฟเดเตเดเตเดเดฏเตเด เด เดต เดเตเดฎเดพเดฑเตเดเดฏเตเด เดเตเดฏเตเดฏเตเดจเตเดจเต เดธเตเดชเตเดชเตผเดฎเดพเตผเดเตเดเดฑเตเดฑเดฟเดฒเตเดเตเดเต;
- เด เดฎเตเดฒเตเดฏเดเตเดเตพ เดฎเดพเดคเตเดฐเดฎเต เดฒเดญเตเดฏเดฎเดพเดเต เดเดเตเดเดตเดเดเตเดเดพเดฐเดจเต ะธ เดธเตเดชเตเดชเตผเดฎเดพเตผเดเตเดเดฑเตเดฑเดฟเดฒเตเดเตเดเต, เดเดฐเต เดเตบเดธเตเตผเดทเตเดฏเด เดจเตเดฑเตเดฑเตโเดตเตผเดเตเดเต เดเตเดฏเตโเดคเต.
เดฎเตเดเดณเดฟเดฒเตเดณเตเดณ เดกเดฏเดเตเดฐเดพเดฎเดฟเตฝ เดเดฟเดคเตเดฐเตเดเดฐเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจ เดจเดพเดฒเต เดเตเดฒเดฟเดเตพ เดเดเตเดเตพ เดชเตเตผเดคเตเดคเดฟเดฏเดพเดเตเดเตเด.
- เดธเตเดตเดเดพเดฐเตเดฏ เดเดเดชเดพเดเตเดเตพ เดชเตเดฐเดฆเตผเดถเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเต เดฎเตเดฎเตเดชเดคเตเดคเต เดธเดพเดนเดเดฐเตเดฏเดคเตเดคเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เด เดคเต เดฎเตเดจเตเดจเต เดจเตเดกเตเดเตพ เดเดเตเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเต:
- เดธเตเดชเตเดชเตผเดฎเดพเตผเดเตเดเดฑเตเดฑเต เดธเตเดตเดเดพเดฐเตเดฏเดฎเดพเดฏ เดเดฐเต เดธเตเดฎเดพเตผเดเตเดเต เดเดฐเดพเตผ เดตเดฟเดจเตเดฏเดธเดฟเดเตเดเตเดจเตเดจเต เดธเตเดชเตเดชเตผเดฎเดพเตผเดเตเดเดฑเตเดฑเต ะธ เดตเตเดฃเตเดเตผ.
- เดฎเตเดจเตเดจเดพเดฎเดคเตเดคเต เดตเดถเด เดธเตโเดฎเดพเตผเดเตเดเต เดเดฐเดพเตผ เดเดเตโเดธเดธเต เดเตเดฏเตเดฏเดพเตป เด เดตเดเดพเดถเดฎเดฟเดฒเตเดฒ.
เดเดเตเดเตพ เดฐเตเดคเดฟเดเตพ เดตเดฟเดณเดฟเดเตเดเตเด get
ะธ set
เดเดคเดฟเดจเตเดฑเต เดชเตเดฐเดฟเตฝ เดธเตเดชเตเดชเตผเดฎเดพเตผเดเตเดเดฑเตเดฑเต ะธ เดตเตเดฃเตเดเตผ เดเดฐเต เดธเตเดตเดเดพเดฐเตเดฏ เดเตเดฑเด เดเดเดชเดพเดเต เดเดพเดฃเดฟเดเตเดเดพเตป.
-
เดชเดเตเดเตเดเตเดเตเดเตเดจเตเดจเดตเตผเดเตเดเดพเดฏเดฟ เดเดเตเดเตพ เดเดฐเต เดธเตเดตเดเดพเดฐเตเดฏ เดเดฐเดพเตผ เดตเดฟเดจเตเดฏเดธเดฟเดเตเดเตเด เดธเตเดชเตเดชเตผเดฎเดพเตผเดเตเดเดฑเตเดฑเต ะธ เดตเตเดฃเตเดเตผ เดเดฐเต เดชเดเตเดเดพเดณเดฟเดฏเดฟเดฒเตเดเต เดธเตเดชเตเดชเตผเดฎเดพเตผเดเตเดเดฑเตเดฑเต:
const contractAddress = await deployContract( raft1Node, process.env.PK2, ); console.log(`Contract address after deployment: ${contractAddress}`);
-
เดจเดฟเดจเตเดจเต เดคเดพเดชเดจเดฟเดฒ เดธเดเตเดเดฎเดพเดเตเดเดพเด เดฎเตเดจเตเดจเดพเด เดชเดพเตผเดเตเดเดฟ (เดฌเดพเดนเตเดฏ เดจเตเดกเต) เดเตเดเดพเดคเต เดคเดพเดชเดจเดฟเดฒ เดฎเตเดฒเตเดฏเด เดจเตเดเตเด:
// 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}`);
-
เดจเดฟเดจเตเดจเต เดคเดพเดชเดจเดฟเดฒ เดธเดเตเดเดฎเดพเดเตเดเดพเด เดตเตเดฃเตเดเตผ (เดเดจเตเดคเดฐเดฟเด เดจเตเดกเต) เดเตเดเดพเดคเต เดคเดพเดชเดจเดฟเดฒ เดฎเตเดฒเตเดฏเด เดจเตเดเตเด:
เด เดธเดพเดนเดเดฐเตเดฏเดคเตเดคเดฟเดฒเต เดคเดพเดชเดจเดฟเดฒ เดธเตโเดฎเดพเตผเดเตเดเต เดเดฐเดพเดฑเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดฎเตเดฒเตเดฏเด 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}`);
-
เดจเดฎเตเดเตเดเต เดคเดพเดชเดจเดฟเดฒ เดฒเดญเดฟเดเตเดเตเดจเตเดจเดคเต เดฎเตเดจเตเดจเดพเด เดชเดพเตผเดเตเดเดฟ (เดฌเดพเดนเตเดฏ เดจเตเดกเต):
เดเดเตเดเด 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
เดเดฐเต เดชเดเตเดเดพเดณเดฟเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเตเดฃเตเดเตผ.
เดจเดฟเดเตเดเตพเดเตเดเต เดเดพเดฃเดพเดจเดพเดเตเดจเตเดจเดคเตเดชเตเดฒเต, เดฐเดฃเตเดเต เดเดเดชเดพเดเตเดเดณเตเด เดชเตเตผเดคเตเดคเดฟเดฏเดพเดฏเดฟ, เดชเดเตเดทเต เดชเดเตเดเดพเดณเดฟเดฏเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดเดเดชเดพเดเต เดฎเดพเดคเตเดฐเด เดตเตเดฃเตเดเตผ เดเดฐเดพเดฑเดฟเดฒเต เดคเดพเดชเดจเดฟเดฒ เดชเตเดคเตเดเตเดเดฟ. เด เดเตเดเดจเต, เดธเตเดตเดเดพเดฐเตเดฏ เดเดเดชเดพเดเตเดเตพ เดฎเดพเดฑเตเดฑเดฎเดฟเดฒเตเดฒเดพเดคเตเดคเดคเต เดจเตฝเดเตเดจเตเดจเต, เดเดจเตเดจเดพเตฝ เด เดคเต เดธเดฎเดฏเด เดเดฐเต เดฎเตเดจเตเดจเดพเด เดเดเตเดทเดฟเดเตเดเต เดกเดพเดฑเตเดฑ เดตเตเดณเดฟเดชเตเดชเตเดเตเดคเตเดคเดฐเตเดคเต.
เดคเตเดฐเตเดฎเดพเดจเด
เดเดฐเต เดธเตเดชเตเดชเตผเดฎเดพเตผเดเตเดเดฑเตเดฑเตเด เดตเตเดฏเตผเดนเตเดธเต เดเดเดฎเดฏเตเด - เดฐเดฃเตเดเต เดเดเตเดทเดฟเดเตพเดเตเดเดฟเดเดฏเดฟเตฝ เดเดฐเต เดถเตเดเดเดฒ เดตเดฟเดจเตเดฏเดธเดฟเดเตเดเตเดเตเดฃเตเดเต เดเดฐเต เดตเตเดฏเตผเดนเตเดธเดฟเตฝ เดเดพเดฒเดฟเดเดฎเดพเดฏ เดคเดพเดชเดจเดฟเดฒ เดตเดฟเดตเดฐเดเตเดเตพ เดจเตฝเดเตเดจเตเดจเดคเดฟเดจเต Quorum-เดจเตเดฑเต เดเดฐเต เดตเดพเดฃเดฟเดเตเดฏ เดเดชเดฏเตเด เดเตเดธเต เดเดเตเดเตพ เดชเดฐเดฟเดถเตเดงเดฟเดเตเดเต.
เดชเตเดคเต-เดธเตเดตเดเดพเดฐเตเดฏ เดเดเดชเดพเดเตเดเดณเดฟเดฒเตเดเต เดคเดพเดชเดจเดฟเดฒ เดตเดฟเดตเดฐเดเตเดเตพ เดเดเตเดเดจเต เดจเดฟเดฒเดจเดฟเตผเดคเตเดคเดพเดฎเตเดจเตเดจเต เดเดเตเดเตพ เดเดพเดฃเดฟเดเตเดเตเดคเดจเตเดจเต.
เดงเดพเดฐเดพเดณเด เดเดชเตเดฒเดฟเดเตเดเตเดทเตป เดธเดพเดนเดเดฐเตเดฏเดเตเดเตพ เดเดฃเตเดเดพเดเดพเด, เดจเดฟเดเตเดเตพเดเตเดเต เดเดพเดฃเดพเดจเดพเดเตเดจเตเดจเดคเตเดชเตเดฒเต, เดเดคเต เดเดเตเดเตเด เดฌเตเดฆเตเดงเดฟเดฎเตเดเตเดเตเดณเตเดณ เดเดพเดฐเตเดฏเดฎเดฒเตเดฒ.
เดชเดฐเตเดเตเดทเดฃเด, เดจเดฟเดเตเดเดณเตเดเต เดธเตเดเตเดฐเดฟเดชเตเดฑเตเดฑเต เดตเดฟเดเดธเดฟเดชเตเดชเดฟเดเตเดเดพเตป เดถเตเดฐเดฎเดฟเดเตเดเตเด. เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ, เดฌเตเดฒเตเดเตเดเตเดเตเดฏเดฟเตป เดธเดพเดเตเดเตเดคเดฟเด เดตเตเดฏเดตเดธเดพเดฏเด
เด เดตเดฒเดเดฌเด: www.habr.com