āĻā§āĻ°āĻžāĻŽ āĻŦā§āĻ¯āĻā§āĻ¤āĻŋāĻāĻ¤ āĻāĻŦāĻ āĻĒāĻžāĻŦāĻ˛āĻŋāĻ āĻ˛ā§āĻ¨āĻĻā§āĻ¨ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻāĻ°ā§ āĻāĻŦāĻ āĻ āĻ¨ā§āĻ āĻŦāĻžāĻŖāĻŋāĻā§āĻ¯āĻŋāĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°ā§āĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻ°āĻ¯āĻŧā§āĻā§āĨ¤
āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§, āĻāĻŽāĻ°āĻž āĻāĻŽāĻ¨ āĻāĻāĻāĻŋ āĻĻā§āĻļā§āĻ¯āĻāĻ˛ā§āĻĒ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻŦ - āĻā§āĻĻāĻžāĻŽā§āĻ° āĻ¤āĻžāĻĒāĻŽāĻžāĻ¤ā§āĻ°āĻž āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻĒ-āĻā§-āĻĄā§āĻ āĻ¤āĻĨā§āĻ¯ āĻ¸āĻ°āĻŦāĻ°āĻžāĻš āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻ¸ā§āĻĒāĻžāĻ°āĻŽāĻžāĻ°ā§āĻā§āĻ āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻā§āĻĻāĻžāĻŽ āĻŽāĻžāĻ˛āĻŋāĻā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻāĻāĻāĻŋ āĻŦāĻŋāĻ¤āĻ°āĻŖ āĻāĻ°āĻž āĻ˛ā§āĻāĻžāĻ° āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĨ¤
āĻāĻ āĻāĻŋāĻāĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ˛ā§ āĻŦā§āĻ¯āĻŦāĻšā§āĻ¤ āĻā§āĻĄāĻāĻŋ āĻ°āĻ¯āĻŧā§āĻā§
āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻāĻŋ āĻāĻāĻžāĻ° āĻāĻ°ā§:
- āĻāĻāĻāĻŋ āĻ¸ā§āĻŽāĻžāĻ°ā§āĻ āĻā§āĻā§āĻ¤āĻŋ āĻ¤ā§āĻ°āĻŋ;
- āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻā§āĻ°āĻžāĻŽ āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨
āĻā§āĻāĻ¨āĻ¸ā§āĻā§āĻ¯āĻžāĻ ; - āĻā§āĻ°āĻžāĻŽ āĻĒāĻžāĻŦāĻ˛āĻŋāĻ āĻ˛ā§āĻ¨āĻĻā§āĻ¨;
- āĻā§āĻ°āĻžāĻŽ āĻŦā§āĻ¯āĻā§āĻ¤āĻŋāĻāĻ¤ āĻ˛ā§āĻ¨āĻĻā§āĻ¨.
āĻŦā§āĻ¯āĻžāĻā§āĻ¯āĻž āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻŽāĻ°āĻž āĻāĻ¨ā§āĻāĻžāĻ°āĻ¨ā§āĻ āĻ āĻĢ āĻĨāĻŋāĻāĻ¸ (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
āĻāĻāĻ¨ āĻā§āĻā§āĻ¤āĻŋ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤, āĻāĻŽāĻ°āĻž āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻŦāĻ āĻā§āĻā§āĻ¤āĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻž āĻšāĻŦā§.
āĻ¨ā§āĻĄ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž
āĻāĻāĻāĻŋ āĻ¨ā§āĻĄ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻž āĻŦā§āĻļ āĻļā§āĻ°āĻŽ-āĻ¨āĻŋāĻŦāĻŋāĻĄāĻŧ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§ āĻāĻŦāĻ āĻāĻ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻāĻŋ āĻāĻāĻāĻŋ āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻĒā§āĻ°āĻ¤āĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§
āĻ¨ā§āĻā§ āĻ°āĻžāĻĢā§āĻ āĻāĻā§āĻ¯āĻŽāĻ¤ āĻāĻŦāĻ āĻ¤āĻŋāĻ¨āĻāĻŋ āĻ¨ā§āĻĄ āĻ¸āĻš āĻā§āĻ°āĻžāĻŽ āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ā§āĻ° āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ°āĻ¯āĻŧā§āĻā§āĨ¤
āĻĒā§āĻ°āĻĨāĻŽā§, āĻāĻ¸ā§āĻ¨ āĻāĻāĻāĻŋ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻŋ āĻāĻŦāĻ āĻāĻāĻŋāĻā§ āĻā§āĻ°āĻžāĻŽ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒ āĻŦāĻ˛āĻŋ:
āĻāĻ˛ā§āĻ¨ Google āĻā§āĻ˛āĻžāĻāĻĄ āĻĒā§āĻ˛ā§āĻ¯āĻžāĻāĻĢāĻ°ā§āĻŽā§ āĻ°āĻžāĻĢā§āĻ āĻ¸āĻŽā§āĻŽāĻ¤āĻŋāĻ° āĻ¸āĻžāĻĨā§ āĻāĻāĻāĻŋ āĻā§āĻ°āĻžāĻŽ āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻŋ:
āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ āĻĄāĻŋāĻĢāĻ˛ā§āĻāĻ°ā§āĻĒā§ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻ¨ā§āĻĄā§ āĻāĻ°āĻ āĻĻā§āĻāĻŋ āĻ¨ā§āĻĄ āĻ¯ā§āĻ āĻāĻ°āĻž āĻ¯āĻžāĻ:
āĻ¤āĻŋāĻ¨āĻāĻŋ āĻāĻ˛āĻŽāĻžāĻ¨ āĻ¨ā§āĻĄ:
āĻ¨ā§āĻĄā§āĻ° āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤ āĻĒā§āĻˇā§āĻ āĻžāĻāĻŋ 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
āĻāĻāĻāĻ¨ āĻ āĻāĻļāĻā§āĻ°āĻšāĻŖāĻāĻžāĻ°ā§āĻ° āĻāĻžāĻ āĻĨā§āĻā§ āĻŦāĻŋāĻā§āĻ°ā§āĻ¤āĻž.
āĻāĻĒāĻ¨āĻŋ āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻā§āĻā§āĻ¨, āĻāĻāĻ¯āĻŧ āĻ˛ā§āĻ¨āĻĻā§āĻ¨ āĻ¸āĻŽā§āĻĒāĻ¨ā§āĻ¨ āĻšāĻ¯āĻŧā§āĻā§, āĻ¤āĻŦā§ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ āĻāĻļāĻā§āĻ°āĻšāĻŖāĻāĻžāĻ°ā§āĻ° āĻāĻžāĻ āĻĨā§āĻā§ āĻ˛ā§āĻ¨āĻĻā§āĻ¨ āĻŦāĻŋāĻā§āĻ°ā§āĻ¤āĻž āĻā§āĻā§āĻ¤āĻŋāĻ¤ā§ āĻ¤āĻžāĻĒāĻŽāĻžāĻ¤ā§āĻ°āĻž āĻāĻĒāĻĄā§āĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§āĨ¤ āĻāĻāĻāĻžāĻŦā§, āĻŦā§āĻ¯āĻā§āĻ¤āĻŋāĻāĻ¤ āĻ˛ā§āĻ¨āĻĻā§āĻ¨ āĻ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ā§āĻ¯āĻŧāĻ¤āĻž āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°ā§, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻāĻ āĻ¸āĻŽāĻ¯āĻŧā§ āĻ¤ā§āĻ¤ā§āĻ¯āĻŧ āĻĒāĻā§āĻˇā§āĻ° āĻāĻžāĻā§ āĻĄā§āĻāĻž āĻĒā§āĻ°āĻāĻžāĻļ āĻāĻ°ā§ āĻ¨āĻžāĨ¤
āĻāĻĒāĻ¸āĻāĻšāĻžāĻ°
āĻāĻŽāĻ°āĻž āĻāĻāĻāĻŋ āĻ¸ā§āĻĒāĻžāĻ°āĻŽāĻžāĻ°ā§āĻā§āĻ āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻā§āĻĻāĻžāĻŽ āĻŽāĻžāĻ˛āĻŋāĻ - āĻĻā§āĻāĻŋ āĻĒāĻā§āĻˇā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻāĻāĻāĻŋ āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°ā§ āĻāĻāĻāĻŋ āĻā§āĻĻāĻžāĻŽā§ āĻāĻĒ-āĻā§-āĻĄā§āĻ āĻ¤āĻžāĻĒāĻŽāĻžāĻ¤ā§āĻ°āĻžāĻ° āĻ¤āĻĨā§āĻ¯ āĻ¸āĻ°āĻŦāĻ°āĻžāĻš āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻā§āĻ°āĻžāĻŽā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻŦāĻžāĻŖāĻŋāĻā§āĻ¯āĻŋāĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°ā§āĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻĻā§āĻā§āĻāĻŋāĨ¤
āĻāĻŽāĻ°āĻž āĻĻā§āĻāĻŋāĻ¯āĻŧā§āĻāĻŋ āĻāĻŋāĻāĻžāĻŦā§ āĻāĻĒ-āĻā§-āĻĄā§āĻ āĻ¤āĻžāĻĒāĻŽāĻžāĻ¤ā§āĻ°āĻžāĻ° āĻ¤āĻĨā§āĻ¯ āĻ¸āĻ°āĻāĻžāĻ°ā§ āĻāĻŦāĻ āĻŦā§āĻ¯āĻā§āĻ¤āĻŋāĻāĻ¤ āĻāĻāĻ¯āĻŧ āĻ˛ā§āĻ¨āĻĻā§āĻ¨ā§āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻŦāĻāĻžāĻ¯āĻŧ āĻ°āĻžāĻāĻž āĻ¯āĻžāĻ¯āĻŧāĨ¤
āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ āĻĒāĻ°āĻŋāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋāĻ¤ā§ āĻ āĻ¨ā§āĻ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§ āĻāĻŦāĻ, āĻāĻĒāĻ¨āĻŋ āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨, āĻāĻāĻž āĻŽā§āĻā§āĻ āĻāĻ āĻŋāĻ¨ āĻ¨āĻ¯āĻŧāĨ¤
āĻĒāĻ°ā§āĻā§āĻˇāĻž, āĻāĻĒāĻ¨āĻžāĻ° āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻĒā§āĻ°āĻ¸āĻžāĻ°āĻŋāĻ¤ āĻāĻ°āĻžāĻ° āĻā§āĻˇā§āĻāĻž āĻāĻ°ā§āĻ¨. āĻ¤āĻžāĻāĻžāĻĄāĻŧāĻž āĻŦā§āĻ˛āĻāĻā§āĻāĻ¨ āĻĒā§āĻ°āĻ¯ā§āĻā§āĻ¤āĻŋ āĻļāĻŋāĻ˛ā§āĻĒ
āĻāĻ¤ā§āĻ¸: www.habr.com