Web3 āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ JPMorgan āĻ•ā§‹āĻ°āĻžāĻŽ āĻŦā§āĻ˛āĻ•āĻšā§‡āĻ‡āĻ¨ā§‡ āĻĒāĻžāĻŦāĻ˛āĻŋāĻ• āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻžāĻ‡āĻ­ā§‡āĻŸ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ āĻ•āĻ°ā§āĻ¨

Web3 āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ JPMorgan āĻ•ā§‹āĻ°āĻžāĻŽ āĻŦā§āĻ˛āĻ•āĻšā§‡āĻ‡āĻ¨ā§‡ āĻĒāĻžāĻŦāĻ˛āĻŋāĻ• āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻžāĻ‡āĻ­ā§‡āĻŸ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ āĻ•āĻ°ā§āĻ¨

āĻ•ā§‹āĻ°āĻžāĻŽ āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻ‡āĻĨā§‡āĻ°āĻŋāĻ¯āĻŧāĻžāĻŽ-āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋāĻ• āĻŦā§āĻ˛āĻ•āĻšā§‡āĻ‡āĻ¨ āĻ¯āĻž JPMorgan āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻāĻŦāĻ‚ āĻ…āĻ¤āĻŋ āĻ¸āĻŽā§āĻĒā§āĻ°āĻ¤āĻŋ Microsoft Azure āĻĻā§āĻŦāĻžāĻ°āĻž āĻ…āĻĢāĻžāĻ° āĻ•āĻ°āĻž āĻĒā§āĻ°āĻĨāĻŽ āĻŦāĻŋāĻ¤āĻ°āĻŖ āĻ•āĻ°āĻž āĻ˛ā§‡āĻœāĻžāĻ° āĻĒā§āĻ˛ā§āĻ¯āĻžāĻŸāĻĢāĻ°ā§āĻŽ āĻšāĻ¯āĻŧā§‡ āĻ‰āĻ ā§‡āĻ›ā§‡āĨ¤

āĻ•ā§‹āĻ°āĻžāĻŽ āĻŦā§āĻ¯āĻ•ā§āĻ¤āĻŋāĻ—āĻ¤ āĻāĻŦāĻ‚ āĻĒāĻžāĻŦāĻ˛āĻŋāĻ• āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ āĻ…āĻ¨ā§‡āĻ• āĻŦāĻžāĻŖāĻŋāĻœā§āĻ¯āĻŋāĻ• āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°ā§‡āĻ° āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤

āĻāĻ‡ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§‡, āĻ†āĻŽāĻ°āĻž āĻāĻŽāĻ¨ āĻāĻ•āĻŸāĻŋ āĻĻā§ƒāĻļā§āĻ¯āĻ•āĻ˛ā§āĻĒ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻŦ - āĻ—ā§āĻĻāĻžāĻŽā§‡āĻ° āĻ¤āĻžāĻĒāĻŽāĻžāĻ¤ā§āĻ°āĻž āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ†āĻĒ-āĻŸā§-āĻĄā§‡āĻŸ āĻ¤āĻĨā§āĻ¯ āĻ¸āĻ°āĻŦāĻ°āĻžāĻš āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻĒāĻžāĻ°āĻŽāĻžāĻ°ā§āĻ•ā§‡āĻŸ āĻāĻŦāĻ‚ āĻāĻ•āĻŸāĻŋ āĻ—ā§āĻĻāĻžāĻŽ āĻŽāĻžāĻ˛āĻŋāĻ•ā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻ¤āĻ°āĻŖ āĻ•āĻ°āĻž āĻ˛ā§‡āĻœāĻžāĻ° āĻ¨ā§‡āĻŸāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ• āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĨ¤

āĻāĻ‡ āĻŸāĻŋāĻ‰āĻŸā§‹āĻ°āĻŋāĻ¯āĻŧāĻžāĻ˛ā§‡ āĻŦā§āĻ¯āĻŦāĻšā§ƒāĻ¤ āĻ•ā§‹āĻĄāĻŸāĻŋ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ 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 āĻ•ā§‹āĻ°āĻžāĻŽ āĻŦā§āĻ˛āĻ•āĻšā§‡āĻ‡āĻ¨ā§‡ āĻĒāĻžāĻŦāĻ˛āĻŋāĻ• āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻžāĻ‡āĻ­ā§‡āĻŸ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ āĻ•āĻ°ā§āĻ¨

āĻāĻ•āĻŸāĻŋ āĻ¨ā§‹āĻĄ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻž āĻŦā§‡āĻļ āĻļā§āĻ°āĻŽ-āĻ¨āĻŋāĻŦāĻŋāĻĄāĻŧ āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻāĻŦāĻ‚ āĻāĻ‡ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻĒā§āĻ°āĻ¤āĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻšā§‡āĻ‡āĻ¨āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ•.

āĻ¨ā§€āĻšā§‡ āĻ°āĻžāĻĢā§āĻŸ āĻāĻ•ā§āĻ¯āĻŽāĻ¤ āĻāĻŦāĻ‚ āĻ¤āĻŋāĻ¨āĻŸāĻŋ āĻ¨ā§‹āĻĄ āĻ¸āĻš āĻ•ā§‹āĻ°āĻžāĻŽ āĻ¨ā§‡āĻŸāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ• āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ā§‡āĻ° āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤

āĻĒā§āĻ°āĻĨāĻŽā§‡, āĻ†āĻ¸ā§āĻ¨ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻŋ āĻāĻŦāĻ‚ āĻāĻŸāĻŋāĻ•ā§‡ āĻ•ā§‹āĻ°āĻžāĻŽ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒ āĻŦāĻ˛āĻŋ:

Web3 āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ JPMorgan āĻ•ā§‹āĻ°āĻžāĻŽ āĻŦā§āĻ˛āĻ•āĻšā§‡āĻ‡āĻ¨ā§‡ āĻĒāĻžāĻŦāĻ˛āĻŋāĻ• āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻžāĻ‡āĻ­ā§‡āĻŸ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ āĻ•āĻ°ā§āĻ¨

āĻšāĻ˛ā§āĻ¨ Google āĻ•ā§āĻ˛āĻžāĻ‰āĻĄ āĻĒā§āĻ˛ā§āĻ¯āĻžāĻŸāĻĢāĻ°ā§āĻŽā§‡ āĻ°āĻžāĻĢā§āĻŸ āĻ¸āĻŽā§āĻŽāĻ¤āĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻāĻ•āĻŸāĻŋ āĻ•ā§‹āĻ°āĻžāĻŽ āĻ¨ā§‡āĻŸāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ• āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻŋ:

Web3 āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ JPMorgan āĻ•ā§‹āĻ°āĻžāĻŽ āĻŦā§āĻ˛āĻ•āĻšā§‡āĻ‡āĻ¨ā§‡ āĻĒāĻžāĻŦāĻ˛āĻŋāĻ• āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻžāĻ‡āĻ­ā§‡āĻŸ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ āĻ•āĻ°ā§āĻ¨

āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡ āĻĄāĻŋāĻĢāĻ˛ā§āĻŸāĻ°ā§‚āĻĒā§‡ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž āĻ¨ā§‹āĻĄā§‡ āĻ†āĻ°āĻ“ āĻĻā§āĻŸāĻŋ āĻ¨ā§‹āĻĄ āĻ¯ā§‹āĻ— āĻ•āĻ°āĻž āĻ¯āĻžāĻ•:

Web3 āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ JPMorgan āĻ•ā§‹āĻ°āĻžāĻŽ āĻŦā§āĻ˛āĻ•āĻšā§‡āĻ‡āĻ¨ā§‡ āĻĒāĻžāĻŦāĻ˛āĻŋāĻ• āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻžāĻ‡āĻ­ā§‡āĻŸ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ āĻ•āĻ°ā§āĻ¨

āĻ¤āĻŋāĻ¨āĻŸāĻŋ āĻšāĻ˛āĻŽāĻžāĻ¨ āĻ¨ā§‹āĻĄ:

Web3 āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ JPMorgan āĻ•ā§‹āĻ°āĻžāĻŽ āĻŦā§āĻ˛āĻ•āĻšā§‡āĻ‡āĻ¨ā§‡ āĻĒāĻžāĻŦāĻ˛āĻŋāĻ• āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻžāĻ‡āĻ­ā§‡āĻŸ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ āĻ•āĻ°ā§āĻ¨

āĻ¨ā§‹āĻĄā§‡āĻ° āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤ āĻĒā§ƒāĻˇā§āĻ āĻžāĻŸāĻŋ RPC āĻāĻ¨ā§āĻĄāĻĒāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ, āĻĒāĻžāĻŦāĻ˛āĻŋāĻ• āĻ•ā§€ āĻ‡āĻ¤ā§āĻ¯āĻžāĻĻāĻŋ āĻĻā§‡āĻ–āĻžāĻ¯āĻŧāĨ¤

Web3 āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ JPMorgan āĻ•ā§‹āĻ°āĻžāĻŽ āĻŦā§āĻ˛āĻ•āĻšā§‡āĻ‡āĻ¨ā§‡ āĻĒāĻžāĻŦāĻ˛āĻŋāĻ• āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻžāĻ‡āĻ­ā§‡āĻŸ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ āĻ•āĻ°ā§āĻ¨

āĻ¨ā§‡āĻŸāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ• āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ. āĻāĻ–āĻ¨ āĻ¸ā§āĻŽāĻžāĻ°ā§āĻŸ āĻšā§āĻ•ā§āĻ¤āĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻž āĻ¯āĻžāĻ• āĻāĻŦāĻ‚ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ āĻ¸āĻžā§āĻšāĻžāĻ˛āĻ¨ āĻ•āĻ°āĻž āĻ¯āĻžāĻ• web3.js.

āĻĒāĻžāĻŦāĻ˛āĻŋāĻ• āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨

āĻĒā§āĻ°āĻ¸āĻ™ā§āĻ—

āĻ–āĻ°āĻš āĻ•āĻŽāĻžāĻ¤ā§‡ āĻ—ā§āĻĻāĻžāĻŽā§‡āĻ° āĻ¤āĻžāĻĒāĻŽāĻžāĻ¤ā§āĻ°āĻž āĻ…āĻ¤ā§āĻ¯āĻ¨ā§āĻ¤ āĻ—ā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ, āĻŦāĻŋāĻļā§‡āĻˇ āĻ•āĻ°ā§‡ āĻ‰āĻĒ-āĻļā§‚āĻ¨ā§āĻ¯ āĻ¤āĻžāĻĒāĻŽāĻžāĻ¤ā§āĻ°āĻžāĻ¯āĻŧ āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°āĻžāĻ° āĻ‰āĻĻā§āĻĻā§‡āĻļā§āĻ¯ā§‡ āĻĒāĻŖā§āĻ¯āĻ—ā§āĻ˛āĻŋāĻ° āĻœāĻ¨ā§āĻ¯āĨ¤

āĻ•ā§‹āĻŽā§āĻĒāĻžāĻ¨āĻŋāĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻ¤āĻžāĻĻā§‡āĻ° āĻ­ā§ŒāĻ—āĻ˛āĻŋāĻ• āĻ…āĻŦāĻ¸ā§āĻĨāĻžāĻ¨ā§‡āĻ° āĻŦāĻžāĻ‡āĻ°ā§‡āĻ° āĻ¤āĻžāĻĒāĻŽāĻžāĻ¤ā§āĻ°āĻž āĻ°āĻŋāĻ¯āĻŧā§‡āĻ˛ āĻŸāĻžāĻ‡āĻŽā§‡ āĻļā§‡āĻ¯āĻŧāĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻāĻŦāĻ‚ āĻāĻ•āĻŸāĻŋ āĻ…āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ā§€āĻ¯āĻŧ āĻ˛ā§‡āĻœāĻžāĻ°ā§‡ āĻ°ā§‡āĻ•āĻ°ā§āĻĄ āĻ•āĻ°āĻžāĻ° āĻ…āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻāĻŋāĻ¯āĻŧā§‡, āĻ¨ā§‡āĻŸāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ• āĻ…āĻ‚āĻļāĻ—ā§āĻ°āĻšāĻŖāĻ•āĻžāĻ°ā§€āĻ°āĻž āĻ–āĻ°āĻš āĻāĻŦāĻ‚ āĻ¸āĻŽāĻ¯āĻŧ āĻ•āĻŽāĻŋāĻ¯āĻŧā§‡ āĻĻā§‡āĻ¯āĻŧāĨ¤

Web3 āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ JPMorgan āĻ•ā§‹āĻ°āĻžāĻŽ āĻŦā§āĻ˛āĻ•āĻšā§‡āĻ‡āĻ¨ā§‡ āĻĒāĻžāĻŦāĻ˛āĻŋāĻ• āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻžāĻ‡āĻ­ā§‡āĻŸ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ āĻ•āĻ°ā§āĻ¨

āĻ†āĻŽāĻ°āĻž āĻ¤āĻŋāĻ¨āĻŸāĻŋ āĻ•āĻžāĻœ āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨ āĻ•āĻ°āĻŦ, āĻĄāĻžāĻ¯āĻŧāĻžāĻ—ā§āĻ°āĻžāĻŽā§‡ āĻšāĻŋāĻ¤ā§āĻ°āĻŋāĻ¤:

  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 āĻ•ā§‹āĻ°āĻžāĻŽ āĻŦā§āĻ˛āĻ•āĻšā§‡āĻ‡āĻ¨ā§‡ āĻĒāĻžāĻŦāĻ˛āĻŋāĻ• āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻžāĻ‡āĻ­ā§‡āĻŸ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ āĻ•āĻ°ā§āĻ¨

āĻŦā§āĻ¯āĻ•ā§āĻ¤āĻŋāĻ—āĻ¤ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨

āĻĒā§āĻ°āĻ¸āĻ™ā§āĻ—

āĻ¸āĻ‚āĻ¸ā§āĻĨāĻžāĻ—ā§āĻ˛āĻŋāĻ° āĻāĻ•āĻŸāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧāĻ¤āĻž āĻš'āĻ˛ āĻĄā§‡āĻŸāĻž āĻ¸ā§āĻ°āĻ•ā§āĻˇāĻžāĨ¤ āĻāĻ•āĻŸāĻŋ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻšāĻŋāĻ¸āĻžāĻŦā§‡, āĻāĻ•āĻŸāĻŋ āĻĻā§ƒāĻļā§āĻ¯āĻ•āĻ˛ā§āĻĒ āĻŦāĻŋāĻŦā§‡āĻšāĻ¨āĻž āĻ•āĻ°ā§āĻ¨ āĻ¯āĻž āĻ¸ā§āĻĒāĻžāĻ° āĻŽāĻžāĻ°ā§āĻ•ā§‡āĻŸ āĻāĻ•āĻŸāĻŋ āĻĒā§ƒāĻĨāĻ• āĻĨā§‡āĻ•ā§‡ āĻ¸āĻžāĻŽā§āĻĻā§āĻ°āĻŋāĻ• āĻ–āĻžāĻŦāĻžāĻ° āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ—ā§āĻĻāĻžāĻŽ āĻ¸ā§āĻĨāĻžāĻ¨ āĻ­āĻžāĻĄāĻŧāĻž āĻŦāĻŋāĻ•ā§āĻ°ā§‡āĻ¤āĻž:

  • āĻŦāĻŋāĻ•ā§āĻ°ā§‡āĻ¤āĻž IoT āĻ¸ā§‡āĻ¨ā§āĻ¸āĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡, āĻĒā§āĻ°āĻ¤āĻŋ 30 āĻ¸ā§‡āĻ•ā§‡āĻ¨ā§āĻĄā§‡ āĻ¤āĻžāĻĒāĻŽāĻžāĻ¤ā§āĻ°āĻžāĻ° āĻŽāĻžāĻ¨ āĻĒāĻĄāĻŧā§‡ āĻāĻŦāĻ‚ āĻ¸ā§‡āĻ—ā§āĻ˛āĻŋ āĻĒā§āĻ°ā§‡āĻ°āĻŖ āĻ•āĻ°ā§‡ āĻ¸ā§āĻĒāĻžāĻ° āĻŽāĻžāĻ°ā§āĻ•ā§‡āĻŸ āĻ;
  • āĻāĻ‡ āĻŽāĻžāĻ¨ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ‰āĻĒāĻ˛āĻŦā§āĻ§ āĻ•āĻ°āĻž āĻ‰āĻšāĻŋāĻ¤ āĻŦāĻŋāĻ•ā§āĻ°ā§‡āĻ¤āĻžāĻ° āĻ•āĻžāĻ›ā§‡ и āĻ¸ā§āĻĒāĻžāĻ° āĻŽāĻžāĻ°ā§āĻ•ā§‡āĻŸ āĻ, āĻāĻ•āĻŸāĻŋ āĻ•āĻ¨āĻ¸ā§‹āĻ°ā§āĻŸāĻŋāĻ¯āĻŧāĻžāĻŽ āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¨ā§‡āĻŸāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ•.

Web3 āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ JPMorgan āĻ•ā§‹āĻ°āĻžāĻŽ āĻŦā§āĻ˛āĻ•āĻšā§‡āĻ‡āĻ¨ā§‡ āĻĒāĻžāĻŦāĻ˛āĻŋāĻ• āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻžāĻ‡āĻ­ā§‡āĻŸ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ āĻ•āĻ°ā§āĻ¨

āĻ†āĻŽāĻ°āĻž āĻ‰āĻĒāĻ°ā§‡āĻ° āĻšāĻŋāĻ¤ā§āĻ°ā§‡ āĻšāĻŋāĻ¤ā§āĻ°āĻŋāĻ¤ āĻšāĻžāĻ°āĻŸāĻŋ āĻ•āĻžāĻœ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ•āĻ°āĻŦāĨ¤

  • āĻ†āĻŽāĻ°āĻž āĻŦā§āĻ¯āĻ•ā§āĻ¤āĻŋāĻ—āĻ¤ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻĒā§‚āĻ°ā§āĻŦāĻŦāĻ°ā§āĻ¤ā§€ āĻĻā§ƒāĻļā§āĻ¯ āĻĨā§‡āĻ•ā§‡ āĻāĻ•āĻ‡ āĻ¤āĻŋāĻ¨āĻŸāĻŋ āĻ¨ā§‹āĻĄ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻŋ:
  • āĻ¸ā§āĻĒāĻžāĻ° āĻŽāĻžāĻ°ā§āĻ•ā§‡āĻŸ āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻŽāĻžāĻ°ā§āĻŸ āĻšā§āĻ•ā§āĻ¤āĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°ā§‡ āĻ¯āĻž āĻŦā§āĻ¯āĻ•ā§āĻ¤āĻŋāĻ—āĻ¤ āĻ¸ā§āĻĒāĻžāĻ° āĻŽāĻžāĻ°ā§āĻ•ā§‡āĻŸ и āĻŦāĻŋāĻ•ā§āĻ°ā§‡āĻ¤āĻž.
  • āĻ¤ā§ƒāĻ¤ā§€āĻ¯āĻŧ āĻĒāĻ•ā§āĻˇ āĻ¸ā§āĻŽāĻžāĻ°ā§āĻŸ āĻšā§āĻ•ā§āĻ¤āĻŋ āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ āĻ•āĻ°āĻžāĻ° āĻ…āĻ§āĻŋāĻ•āĻžāĻ° āĻ¨ā§‡āĻ‡.

āĻ†āĻŽāĻ°āĻž āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻ•āĻ˛ āĻ•āĻ°āĻŦ 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 āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ JPMorgan āĻ•ā§‹āĻ°āĻžāĻŽ āĻŦā§āĻ˛āĻ•āĻšā§‡āĻ‡āĻ¨ā§‡ āĻĒāĻžāĻŦāĻ˛āĻŋāĻ• āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻžāĻ‡āĻ­ā§‡āĻŸ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ āĻ•āĻ°ā§āĻ¨

āĻ†āĻĒāĻ¨āĻŋ āĻĻā§‡āĻ–āĻ¤ā§‡ āĻĒāĻžāĻšā§āĻ›ā§‡āĻ¨, āĻ‰āĻ­āĻ¯āĻŧ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ āĻ¸āĻŽā§āĻĒāĻ¨ā§āĻ¨ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡, āĻ¤āĻŦā§‡ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ…āĻ‚āĻļāĻ—ā§āĻ°āĻšāĻŖāĻ•āĻžāĻ°ā§€āĻ° āĻ•āĻžāĻ› āĻĨā§‡āĻ•ā§‡ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ āĻŦāĻŋāĻ•ā§āĻ°ā§‡āĻ¤āĻž āĻšā§āĻ•ā§āĻ¤āĻŋāĻ¤ā§‡ āĻ¤āĻžāĻĒāĻŽāĻžāĻ¤ā§āĻ°āĻž āĻ†āĻĒāĻĄā§‡āĻŸ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻāĻ‡āĻ­āĻžāĻŦā§‡, āĻŦā§āĻ¯āĻ•ā§āĻ¤āĻŋāĻ—āĻ¤ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ āĻ…āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ā§€āĻ¯āĻŧāĻ¤āĻž āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§‡, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻāĻ•āĻ‡ āĻ¸āĻŽāĻ¯āĻŧā§‡ āĻ¤ā§ƒāĻ¤ā§€āĻ¯āĻŧ āĻĒāĻ•ā§āĻˇā§‡āĻ° āĻ•āĻžāĻ›ā§‡ āĻĄā§‡āĻŸāĻž āĻĒā§āĻ°āĻ•āĻžāĻļ āĻ•āĻ°ā§‡ āĻ¨āĻžāĨ¤

āĻ‰āĻĒāĻ¸āĻ‚āĻšāĻžāĻ°

āĻ†āĻŽāĻ°āĻž āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻĒāĻžāĻ°āĻŽāĻžāĻ°ā§āĻ•ā§‡āĻŸ āĻāĻŦāĻ‚ āĻāĻ•āĻŸāĻŋ āĻ—ā§āĻĻāĻžāĻŽ āĻŽāĻžāĻ˛āĻŋāĻ• - āĻĻā§āĻŸāĻŋ āĻĒāĻ•ā§āĻˇā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻāĻ•āĻŸāĻŋ āĻ¨ā§‡āĻŸāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ• āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°ā§‡ āĻāĻ•āĻŸāĻŋ āĻ—ā§āĻĻāĻžāĻŽā§‡ āĻ†āĻĒ-āĻŸā§-āĻĄā§‡āĻŸ āĻ¤āĻžāĻĒāĻŽāĻžāĻ¤ā§āĻ°āĻžāĻ° āĻ¤āĻĨā§āĻ¯ āĻ¸āĻ°āĻŦāĻ°āĻžāĻš āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ•ā§‹āĻ°āĻžāĻŽā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻŦāĻžāĻŖāĻŋāĻœā§āĻ¯āĻŋāĻ• āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°ā§‡āĻ° āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ āĻĻā§‡āĻ–ā§‡āĻ›āĻŋāĨ¤

āĻ†āĻŽāĻ°āĻž āĻĻā§‡āĻ–āĻŋāĻ¯āĻŧā§‡āĻ›āĻŋ āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻ†āĻĒ-āĻŸā§-āĻĄā§‡āĻŸ āĻ¤āĻžāĻĒāĻŽāĻžāĻ¤ā§āĻ°āĻžāĻ° āĻ¤āĻĨā§āĻ¯ āĻ¸āĻ°āĻ•āĻžāĻ°ā§€ āĻāĻŦāĻ‚ āĻŦā§āĻ¯āĻ•ā§āĻ¤āĻŋāĻ—āĻ¤ āĻ‰āĻ­āĻ¯āĻŧ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻŦāĻœāĻžāĻ¯āĻŧ āĻ°āĻžāĻ–āĻž āĻ¯āĻžāĻ¯āĻŧāĨ¤

āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻĒāĻ°āĻŋāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋāĻ¤ā§‡ āĻ…āĻ¨ā§‡āĻ• āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻāĻŦāĻ‚, āĻ†āĻĒāĻ¨āĻŋ āĻĻā§‡āĻ–āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨, āĻāĻŸāĻž āĻŽā§‹āĻŸā§‡āĻ“ āĻ•āĻ āĻŋāĻ¨ āĻ¨āĻ¯āĻŧāĨ¤

āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž, āĻ†āĻĒāĻ¨āĻžāĻ° āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻĒā§āĻ°āĻ¸āĻžāĻ°āĻŋāĻ¤ āĻ•āĻ°āĻžāĻ° āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°ā§āĻ¨. āĻ¤āĻžāĻ›āĻžāĻĄāĻŧāĻž āĻŦā§āĻ˛āĻ•āĻšā§‡āĻ‡āĻ¨ āĻĒā§āĻ°āĻ¯ā§āĻ•ā§āĻ¤āĻŋ āĻļāĻŋāĻ˛ā§āĻĒ 2024 āĻ¸āĻžāĻ˛ā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻĒā§āĻ°āĻžāĻ¯āĻŧ āĻĻāĻļāĻ—ā§āĻŖ āĻŦā§ƒāĻĻā§āĻ§āĻŋ āĻĒā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡.

āĻ‰āĻ¤ā§āĻ¸: www.habr.com

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨