āĻŦā§āĻ˛āĻ•āĻšā§‡āĻ‡āĻ¨ā§‡ āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻ•ā§‡āĻ¨ā§āĻĻā§āĻ°ā§€āĻ­ā§‚āĻ¤ āĻŽā§‡āĻ¸ā§‡āĻžā§āĻœāĻžāĻ° āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡?

2017 āĻāĻ° āĻļā§āĻ°ā§āĻ¤ā§‡, āĻ†āĻŽāĻ°āĻž āĻ•ā§āĻ˛āĻžāĻ¸āĻŋāĻ• P2P āĻŽā§‡āĻ¸ā§‡āĻžā§āĻœāĻžāĻ°āĻ—ā§āĻ˛āĻŋāĻ° āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻ—ā§āĻ˛āĻŋ āĻ¨āĻŋāĻ¯āĻŧā§‡ āĻ†āĻ˛ā§‹āĻšāĻ¨āĻž āĻ•āĻ°ā§‡ āĻŦā§āĻ˛āĻ•āĻšā§‡āĻ‡āĻ¨ā§‡ āĻāĻ•āĻŸāĻŋ āĻŽā§‡āĻ¸ā§‡āĻžā§āĻœāĻžāĻ° āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž āĻļā§āĻ°ā§ āĻ•āĻ°ā§‡āĻ›āĻŋ [āĻ¨āĻžāĻŽ āĻāĻŦāĻ‚ āĻ˛āĻŋāĻ™ā§āĻ• āĻĒā§āĻ°ā§‹āĻĢāĻžāĻ‡āĻ˛ā§‡ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡]āĨ¤

āĻ¸āĻ°ā§āĻŦāĻ¸ā§āĻŦāĻžāĻ¨ā§āĻ¤ 2.5 āĻŦāĻ›āĻ°, āĻāĻŦāĻ‚ āĻ†āĻŽāĻ°āĻž āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ§āĻžāĻ°āĻŖāĻž āĻ¨āĻŋāĻļā§āĻšāĻŋāĻ¤ āĻ•āĻ°āĻ¤ā§‡ āĻ¸āĻ•ā§āĻˇāĻŽ āĻšāĻ¯āĻŧā§‡āĻ›āĻŋ: āĻŽā§‡āĻ¸ā§‡āĻžā§āĻœāĻžāĻ° āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨āĻ—ā§āĻ˛āĻŋ āĻāĻ–āĻ¨ iOS, Web PWA, Windows, GNU/Linux, Mac OS āĻāĻŦāĻ‚ Android āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻ‰āĻĒāĻ˛āĻŦā§āĻ§āĨ¤

āĻ†āĻœ āĻ†āĻŽāĻ°āĻž āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻŦāĻ˛āĻŦ āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻŦā§āĻ˛āĻ•āĻšā§‡āĻ‡āĻ¨ āĻŽā§‡āĻ¸ā§‡āĻžā§āĻœāĻžāĻ° āĻ•āĻžāĻœ āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻāĻ° API āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤
āĻŦā§āĻ˛āĻ•āĻšā§‡āĻ‡āĻ¨ā§‡ āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻ•ā§‡āĻ¨ā§āĻĻā§āĻ°ā§€āĻ­ā§‚āĻ¤ āĻŽā§‡āĻ¸ā§‡āĻžā§āĻœāĻžāĻ° āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡?

āĻ†āĻŽāĻ°āĻž āĻ•ā§āĻ˛āĻžāĻ¸āĻŋāĻ• P2P āĻŽā§‡āĻ¸ā§‡āĻžā§āĻœāĻžāĻ°āĻĻā§‡āĻ° āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻž āĻāĻŦāĻ‚ āĻ—ā§‹āĻĒāĻ¨ā§€āĻ¯āĻŧāĻ¤āĻžāĻ° āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻŦā§āĻ˛āĻ•āĻšā§‡āĻ¨ āĻšā§‡āĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛āĻžāĻŽ:

  • āĻāĻ•āĻŸāĻŋ āĻ…ā§āĻ¯āĻžāĻ•āĻžāĻ‰āĻ¨ā§āĻŸ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡ āĻāĻ• āĻ•ā§āĻ˛āĻŋāĻ•ā§‡ - āĻ•ā§‹āĻ¨āĻ“ āĻĢā§‹āĻ¨ āĻŦāĻž āĻ‡āĻŽā§‡āĻ˛ āĻ¨ā§‡āĻ‡, āĻ āĻŋāĻ•āĻžāĻ¨āĻž āĻŦāĻ‡ āĻŦāĻž āĻœāĻŋāĻ“āĻ˛ā§‹āĻ•ā§‡āĻļāĻ¨āĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ āĻ¨ā§‡āĻ‡ā§ˇ
  • āĻ•āĻĨā§‹āĻĒāĻ•āĻĨāĻ¨āĻ•āĻžāĻ°ā§€āĻ°āĻž āĻ•āĻ–āĻ¨āĻ‡ āĻ¸āĻ°āĻžāĻ¸āĻ°āĻŋ āĻ¸āĻ‚āĻ¯ā§‹āĻ— āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°ā§‡ āĻ¨āĻž; āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¯ā§‹āĻ—āĻžāĻ¯ā§‹āĻ— āĻ¨ā§‹āĻĄāĻ—ā§āĻ˛āĻŋāĻ° āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻ¤āĻ°āĻŖ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻ¸āĻžā§āĻšāĻžāĻ˛āĻŋāĻ¤ āĻšāĻ¯āĻŧāĨ¤ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻĻā§‡āĻ° āĻ†āĻ‡āĻĒāĻŋ āĻ āĻŋāĻ•āĻžāĻ¨āĻž āĻāĻ•ā§‡ āĻ…āĻĒāĻ°ā§‡āĻ° āĻ•āĻžāĻ›ā§‡ āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸āĻ¯ā§‹āĻ—ā§āĻ¯ āĻ¨āĻ¯āĻŧāĨ¤
  • āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻāĻ¨ā§āĻĄ-āĻŸā§-āĻāĻ¨ā§āĻĄ āĻ•āĻžāĻ°ā§āĻ­25519xsalsa20poly1305 āĻāĻ¨āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻŽāĻ¨ā§‡ āĻšāĻšā§āĻ›ā§‡ āĻāĻŸāĻŋ āĻ•āĻžāĻ‰āĻ•ā§‡ āĻ…āĻŦāĻžāĻ• āĻ•āĻ°āĻŦā§‡ āĻ¨āĻž, āĻ¤āĻŦā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ¸ā§‹āĻ°ā§āĻ¸ āĻ•ā§‹āĻĄ āĻ–ā§‹āĻ˛āĻž āĻ†āĻ›ā§‡āĨ¤
  • MITM āĻ†āĻ•ā§āĻ°āĻŽāĻŖ āĻŦāĻžāĻĻ āĻĻā§‡āĻ“āĻ¯āĻŧāĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ - āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻāĻ•āĻŸāĻŋ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ āĻāĻŦāĻ‚ Ed25519 EdDSA āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¸ā§āĻŦāĻžāĻ•ā§āĻˇāĻ°āĻŋāĻ¤āĨ¤
  • āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻŸāĻŋ āĻ¤āĻžāĻ° āĻ¨āĻŋāĻœāĻ¸ā§āĻŦ āĻŦā§āĻ˛āĻ•ā§‡ āĻļā§‡āĻˇ āĻšāĻ¯āĻŧāĨ¤ āĻ§āĻžāĻ°āĻžāĻŦāĻžāĻšāĻŋāĻ•āĻ¤āĻž āĻāĻŦāĻ‚ timestamp āĻ†āĻĒāĻ¨āĻŋ āĻŦā§āĻ˛āĻ• āĻ āĻŋāĻ• āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŦā§‡āĻ¨ āĻ¨āĻž, āĻāĻŦāĻ‚ āĻ¸ā§‡āĻ‡āĻœāĻ¨ā§āĻ¯ āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻ° āĻ•ā§āĻ°āĻŽāĨ¤
  • "āĻ†āĻŽāĻŋ āĻŦāĻ˛āĻŋāĻ¨āĻŋ āĻ¯ā§‡" āĻŦā§āĻ˛āĻ•āĻšā§‡āĻ‡āĻ¨ā§‡āĻ° āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻ—ā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻŦā§‡ āĻ¨āĻžāĨ¤
  • āĻ•ā§‹āĻ¨āĻ“ āĻ•ā§‡āĻ¨ā§āĻĻā§āĻ°ā§€āĻ¯āĻŧ āĻ•āĻžāĻ āĻžāĻŽā§‹ āĻ¨ā§‡āĻ‡ āĻ¯āĻž āĻāĻ•āĻŸāĻŋ āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻ° "āĻ¸āĻ¤ā§āĻ¯āĻ¤āĻž" āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°ā§‡āĨ¤ āĻāĻŸāĻŋ āĻāĻ•ā§āĻ¯āĻŽāĻ¤ā§āĻ¯ā§‡āĻ° āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋāĻ¤ā§‡ āĻ¨ā§‹āĻĄāĻ—ā§āĻ˛āĻŋāĻ° āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻ¤āĻ°āĻŖ āĻ•āĻ°āĻž āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻĻā§āĻŦāĻžāĻ°āĻž āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻĻā§‡āĻ° āĻŽāĻžāĻ˛āĻŋāĻ•āĻžāĻ¨āĻžāĻ§ā§€āĻ¨āĨ¤
  • āĻ¸ā§‡āĻ¨ā§āĻ¸āĻ°āĻļāĻŋāĻĒā§‡āĻ° āĻ…āĻ¸āĻŽā§āĻ­āĻŦāĻ¤āĻž - āĻ…ā§āĻ¯āĻžāĻ•āĻžāĻ‰āĻ¨ā§āĻŸāĻ—ā§āĻ˛āĻŋ āĻŦā§āĻ˛āĻ• āĻ•āĻ°āĻž āĻ¯āĻžāĻŦā§‡ āĻ¨āĻž āĻāĻŦāĻ‚ āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻ—ā§āĻ˛āĻŋ āĻŽā§āĻ›ā§‡ āĻĢā§‡āĻ˛āĻž āĻ¯āĻžāĻŦā§‡ āĻ¨āĻžāĨ¤
  • āĻŦā§āĻ˛āĻ•āĻšā§‡āĻ‡āĻ¨ 2FA āĻšāĻ˛ SMS āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻ¨āĻžāĻ°āĻ•ā§€āĻ¯āĻŧ 2FA āĻāĻ° āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ, āĻ…āĻ¨ā§‡āĻ• āĻ¸ā§āĻŦāĻžāĻ¸ā§āĻĨā§āĻ¯ āĻ¨āĻˇā§āĻŸ āĻ•āĻ°ā§‡āĻ›ā§‡āĨ¤
  • āĻ¯ā§‡āĻ•ā§‹āĻ¨ā§‹ āĻ¸āĻŽāĻ¯āĻŧ āĻ¯ā§‡āĻ•ā§‹āĻ¨ā§‹ āĻĄāĻŋāĻ­āĻžāĻ‡āĻ¸ āĻĨā§‡āĻ•ā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ•āĻĨā§‹āĻĒāĻ•āĻĨāĻ¨ āĻĒāĻžāĻ“āĻ¯āĻŧāĻžāĻ° āĻ•ā§āĻˇāĻŽāĻ¤āĻžāĻ° āĻ…āĻ°ā§āĻĨ āĻšāĻ˛ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ¸ā§āĻĨāĻžāĻ¨ā§€āĻ¯āĻŧāĻ­āĻžāĻŦā§‡ āĻ•āĻĨā§‹āĻĒāĻ•āĻĨāĻ¨ āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ āĻ¨āĻžāĨ¤
  • āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻŦāĻŋāĻ¤āĻ°āĻŖ āĻ¨āĻŋāĻļā§āĻšāĻŋāĻ¤āĻ•āĻ°āĻŖ. āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ° āĻĄāĻŋāĻ­āĻžāĻ‡āĻ¸ā§‡ āĻ¨āĻ¯āĻŧ, āĻ¨ā§‡āĻŸāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ•ā§‡āĨ¤ āĻŽā§‚āĻ˛āĻ¤, āĻāĻŸāĻŋ āĻ†āĻĒāĻ¨āĻžāĻ° āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻĒāĻĄāĻŧāĻžāĻ° āĻĒā§āĻ°āĻžāĻĒāĻ•ā§‡āĻ° āĻ•ā§āĻˇāĻŽāĻ¤āĻžāĻ° āĻ¨āĻŋāĻļā§āĻšāĻŋāĻ¤āĻ•āĻ°āĻŖāĨ¤ āĻāĻŸāĻŋ āĻ¸āĻŽāĻžāĻ˛ā§‹āĻšāĻ¨āĻžāĻŽā§‚āĻ˛āĻ• āĻŦāĻŋāĻœā§āĻžāĻĒā§āĻ¤āĻŋ āĻĒāĻžāĻ āĻžāĻ¨ā§‹āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻĻāĻ°āĻ•āĻžāĻ°ā§€ āĻŦā§ˆāĻļāĻŋāĻˇā§āĻŸā§āĻ¯āĨ¤

āĻŦā§āĻ˛āĻ•āĻšā§‡āĻ‡āĻ¨ āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸā§‹āĻ•āĻžāĻ°ā§‡āĻ¨ā§āĻ¸āĻŋ Ethereum, Dogecoin, Lisk, Dash, Bitcoin (āĻāĻŸāĻŋ āĻāĻ–āĻ¨āĻ“ āĻšāĻ˛āĻ›ā§‡) āĻāĻŦāĻ‚ āĻšā§āĻ¯āĻžāĻŸā§‡ āĻŸā§‹āĻ•ā§‡āĻ¨ āĻĒāĻžāĻ āĻžāĻ¨ā§‹āĻ° āĻ•ā§āĻˇāĻŽāĻ¤āĻžāĻ° āĻ¸āĻžāĻĨā§‡ āĻ˜āĻ¨āĻŋāĻˇā§āĻ  āĻāĻ•ā§€āĻ•āĻ°āĻŖāĨ¤ āĻāĻŽāĻ¨āĻ•āĻŋ āĻ†āĻŽāĻ°āĻž āĻāĻ•āĻŸāĻŋ āĻ…āĻ¨ā§āĻ¤āĻ°ā§āĻ¨āĻŋāĻ°ā§āĻŽāĻŋāĻ¤ āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸā§‹ āĻāĻ•ā§āĻ¸āĻšā§‡āĻžā§āĻœāĻžāĻ° āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§‡āĻ›āĻŋāĨ¤

āĻāĻŦāĻ‚ āĻ¤āĻžāĻ°āĻĒāĻ° - āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻāĻŸāĻŋ āĻ¸āĻŦ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡āĨ¤

āĻāĻ•āĻŸāĻŋ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻāĻ•āĻŸāĻŋ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨

āĻŦā§āĻ˛āĻ•āĻšā§‡āĻ‡āĻ¨ āĻŸā§āĻ°āĻžāĻ¨ā§āĻ¸āĻĢāĻžāĻ° āĻŸā§‹āĻ•ā§‡āĻ¨ (āĻ•āĻ¯āĻŧā§‡āĻ¨) āĻāĻ• āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ° āĻ•āĻžāĻ› āĻĨā§‡āĻ•ā§‡ āĻ…āĻ¨ā§āĻ¯ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ° āĻ•āĻžāĻ›ā§‡ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻ¸āĻŦāĻžāĻ‡ āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡āĻ‡ āĻ…āĻ­ā§āĻ¯āĻ¸ā§āĻ¤āĨ¤ āĻŦāĻŋāĻŸāĻ•āĻ¯āĻŧā§‡āĻ¨ā§‡āĻ° āĻŽāĻ¤ā§‹āĨ¤ āĻ†āĻŽāĻ°āĻž āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻĒā§āĻ°ā§‡āĻ°āĻŖā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻļā§‡āĻˇ āĻ§āĻ°āĻ¨ā§‡āĻ° āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§‡āĻ›āĻŋāĨ¤

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

  1. āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻĒāĻžāĻ ā§āĻ¯ āĻāĻ¨āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻ•āĻ°ā§āĻ¨
  2. āĻāĻ•āĻŸāĻŋ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ā§‡ āĻ¸āĻžāĻ‡āĻĢāĻžāĻ°āĻŸā§‡āĻ•ā§āĻ¸āĻŸ āĻ°āĻžāĻ–ā§āĻ¨
  3. āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ āĻ¸ā§āĻŦāĻžāĻ•ā§āĻˇāĻ° āĻ•āĻ°ā§āĻ¨
  4. āĻ¯ā§‡āĻ•ā§‹āĻ¨ā§‹ āĻ¨ā§‡āĻŸāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ• āĻ¨ā§‹āĻĄā§‡ āĻāĻ•āĻŸāĻŋ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ āĻĒāĻžāĻ āĻžāĻ¨
  5. āĻ¨ā§‹āĻĄāĻ—ā§āĻ˛āĻŋāĻ° āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻ¤āĻ°āĻŖ āĻ•āĻ°āĻž āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻāĻ•āĻŸāĻŋ āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻ° "āĻ¸āĻ¤ā§āĻ¯āĻ¤āĻž" āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŖ āĻ•āĻ°ā§‡
  6. āĻ¸āĻŦāĻ•āĻŋāĻ›ā§ āĻ āĻŋāĻ• āĻĨāĻžāĻ•āĻ˛ā§‡, āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻ° āĻ¸āĻžāĻĨā§‡ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§€ āĻŦā§āĻ˛āĻ•ā§‡ āĻ…āĻ¨ā§āĻ¤āĻ°ā§āĻ­ā§āĻ•ā§āĻ¤ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ
  7. āĻĒā§āĻ°āĻžāĻĒāĻ• āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ āĻĒā§āĻ¨āĻ°ā§āĻĻā§āĻ§āĻžāĻ° āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ āĻĄāĻŋāĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻ•āĻ°ā§‡

āĻ§āĻžāĻĒ 1-3 āĻāĻŦāĻ‚ 7 āĻ¸ā§āĻĨāĻžāĻ¨ā§€āĻ¯āĻŧāĻ­āĻžāĻŦā§‡ āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸā§‡āĻ° āĻ‰āĻĒāĻ° āĻ¸āĻžā§āĻšāĻžāĻ˛āĻŋāĻ¤ āĻšāĻ¯āĻŧ, āĻāĻŦāĻ‚ āĻĒāĻĻāĻ•ā§āĻˇā§‡āĻĒ 5-6 āĻšā§‹āĻ¸ā§āĻŸā§‡ āĻ¸āĻžā§āĻšāĻžāĻ˛āĻŋāĻ¤ āĻšāĻ¯āĻŧāĨ¤

āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻāĻ¨āĻ•ā§āĻ°āĻŋāĻĒāĻļāĻ¨

āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻŸāĻŋ āĻĒā§āĻ°ā§‡āĻ°āĻ•ā§‡āĻ° āĻŦā§āĻ¯āĻ•ā§āĻ¤āĻŋāĻ—āĻ¤ āĻ•ā§€ āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻžāĻĒāĻ•ā§‡āĻ° āĻ¸āĻ°ā§āĻŦāĻœāĻ¨ā§€āĻ¨ āĻ•ā§€ āĻĻāĻŋāĻ¯āĻŧā§‡ āĻāĻ¨āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻ†āĻŽāĻ°āĻž āĻ¨ā§‡āĻŸāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ• āĻĨā§‡āĻ•ā§‡ āĻ¸āĻ°ā§āĻŦāĻœāĻ¨ā§€āĻ¨ āĻ•ā§€ āĻ¨ā§‡āĻŦ, āĻ¤āĻŦā§‡ āĻāĻ° āĻœāĻ¨ā§āĻ¯, āĻĒā§āĻ°āĻžāĻĒāĻ•ā§‡āĻ° āĻ…ā§āĻ¯āĻžāĻ•āĻžāĻ‰āĻ¨ā§āĻŸāĻŸāĻŋ āĻ…āĻŦāĻļā§āĻ¯āĻ‡ āĻļā§āĻ°ā§ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡, āĻ…āĻ°ā§āĻĨāĻžā§Ž āĻ•āĻŽāĻĒāĻ•ā§āĻˇā§‡ āĻāĻ•āĻŸāĻŋ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤ āĻ†āĻĒāĻ¨āĻŋ āĻāĻ•āĻŸāĻŋ REST āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ GET /api/accounts/getPublicKey?address={ADAMANT address}, āĻāĻŦāĻ‚ āĻšā§āĻ¯āĻžāĻŸ āĻ˛ā§‹āĻĄ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻ•āĻĨā§‹āĻĒāĻ•āĻĨāĻ¨āĻ•āĻžāĻ°ā§€āĻĻā§‡āĻ° āĻ¸āĻ°ā§āĻŦāĻœāĻ¨ā§€āĻ¨ āĻ•ā§€āĻ—ā§āĻ˛āĻŋ āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡āĻ‡ āĻ‰āĻĒāĻ˛āĻŦā§āĻ§ āĻĨāĻžāĻ•āĻŦā§‡ā§ˇ

āĻŦā§āĻ˛āĻ•āĻšā§‡āĻ‡āĻ¨ā§‡ āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻ•ā§‡āĻ¨ā§āĻĻā§āĻ°ā§€āĻ­ā§‚āĻ¤ āĻŽā§‡āĻ¸ā§‡āĻžā§āĻœāĻžāĻ° āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡?

āĻŽā§‡āĻ¸ā§‡āĻžā§āĻœāĻžāĻ° curve25519xsalsa20poly1305 āĻ…ā§āĻ¯āĻžāĻ˛āĻ—āĻ°āĻŋāĻĻāĻŽ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻāĻ¨āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻ•āĻ°ā§‡ (NaCl āĻŦāĻ•ā§āĻ¸) āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻ…ā§āĻ¯āĻžāĻ•āĻžāĻ‰āĻ¨ā§āĻŸā§‡ Ed25519 āĻ•ā§€ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡, āĻāĻ•āĻŸāĻŋ āĻŦāĻžāĻ•ā§āĻ¸ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡, āĻ•ā§€āĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻĒā§āĻ°āĻĨāĻŽā§‡ Curve25519 Diffie-Hellman-āĻ āĻ°ā§‚āĻĒāĻžāĻ¨ā§āĻ¤āĻ° āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤

āĻāĻ–āĻžāĻ¨ā§‡ āĻœāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ:

/**
 * Encodes a text message for sending to ADM
 * @param {string} msg message to encode
 * @param {*} recipientPublicKey recipient's public key
 * @param {*} privateKey our private key
 * @returns {{message: string, nonce: string}}
 */
adamant.encodeMessage = function (msg, recipientPublicKey, privateKey) {
  const nonce = Buffer.allocUnsafe(24)
  sodium.randombytes(nonce)

  if (typeof recipientPublicKey === 'string') {
    recipientPublicKey = hexToBytes(recipientPublicKey)
  }

  const plainText = Buffer.from(msg)
  const DHPublicKey = ed2curve.convertPublicKey(recipientPublicKey)
  const DHSecretKey = ed2curve.convertSecretKey(privateKey)

  const encrypted = nacl.box(plainText, nonce, DHPublicKey, DHSecretKey)

  return {
    message: bytesToHex(encrypted),
    nonce: bytesToHex(nonce)
  }
}

āĻāĻ•āĻŸāĻŋ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻĻāĻŋāĻ¯āĻŧā§‡ āĻāĻ•āĻŸāĻŋ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ āĻ—āĻ āĻ¨

āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ā§‡āĻ° āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻ•āĻžāĻ āĻžāĻŽā§‹ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡:

{
  "id": "15161295239237781653",
  "height": 7585271,
  "blockId": "16391508373936326027",
  "type": 8,
  "block_timestamp": 45182260,
  "timestamp": 45182254,
  "senderPublicKey": "bd39cc708499ae91b937083463fce5e0668c2b37e78df28f69d132fce51d49ed",
  "senderId": "U16023712506749300952",
  "recipientId": "U17653312780572073341",
  "recipientPublicKey": "23d27f616e304ef2046a60b762683b8dabebe0d8fc26e5ecdb1d5f3d291dbe21",
  "amount": 204921300000000,
  "fee": 50000000,
  "signature": "3c8e551f60fedb81e52835c69e8b158eb1b8b3c89a04d3df5adc0d99017ffbcb06a7b16ad76d519f80df019c930960317a67e8d18ab1e85e575c9470000cf607",
  "signatures": [],
  "confirmations": 3660548,
  "asset": {}
}

āĻāĻ•āĻŸāĻŋ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯, āĻ¸āĻŦāĻšā§‡āĻ¯āĻŧā§‡ āĻ—ā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āĻœāĻŋāĻ¨āĻŋāĻ¸ asset - āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡ āĻāĻ•āĻŸāĻŋ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻ°āĻžāĻ–āĻ¤ā§‡ āĻšāĻŦā§‡ chat āĻ—āĻ āĻ¨ āĻ¸āĻš:

  • message - āĻāĻ¨āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻ•āĻ°āĻž āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°ā§āĻ¨
  • own_message - āĻ¨āĻž
  • type - āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻ° āĻ§āĻ°āĻ¨

āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻ—ā§āĻ˛āĻŋāĻ“ āĻĒā§āĻ°āĻ•āĻžāĻ°āĻ­ā§‡āĻĻā§‡ āĻŦāĻŋāĻ­āĻ•ā§āĻ¤āĨ¤ āĻŽā§‚āĻ˛āĻ¤, āĻĒāĻ°āĻžāĻŽāĻŋāĻ¤āĻŋ type āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻŦā§āĻāĻ¤ā§‡ āĻšāĻ¯āĻŧ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻŦāĻ˛ā§‡ message. āĻ†āĻĒāĻ¨āĻŋ āĻ•ā§‡āĻŦāĻ˛ āĻāĻ•āĻŸāĻŋ āĻĒāĻžāĻ ā§āĻ¯ āĻĒāĻžāĻ āĻžāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨, āĻ…āĻĨāĻŦāĻž āĻ†āĻĒāĻ¨āĻŋ āĻ­āĻŋāĻ¤āĻ°ā§‡ āĻ†āĻ•āĻ°ā§āĻˇāĻŖā§€āĻ¯āĻŧ āĻœāĻŋāĻ¨āĻŋāĻ¸ āĻ¸āĻš āĻāĻ•āĻŸāĻŋ āĻŦāĻ¸ā§āĻ¤ā§ āĻĒāĻžāĻ āĻžāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ - āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻāĻ‡āĻ­āĻžāĻŦā§‡ āĻŽā§‡āĻ¸ā§‡āĻžā§āĻœāĻžāĻ° āĻšā§āĻ¯āĻžāĻŸā§‡ āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸā§‹āĻ•āĻžāĻ°ā§‡āĻ¨ā§āĻ¸āĻŋ āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ¨ā§āĻ¤āĻ° āĻ•āĻ°ā§‡āĨ¤

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

{
  "transaction": {
    "type": 8,
    "amount": 0,
    "senderId": "U12499126640447739963",
    "senderPublicKey": "e9cafb1e7b403c4cf247c94f73ee4cada367fcc130cb3888219a0ba0633230b6",
    "asset": {
      "chat": {
        "message": "cb682accceef92d7cddaaddb787d1184ab5428",
        "own_message": "e7d8f90ddf7d70efe359c3e4ecfb5ed3802297b248eacbd6",
        "type": 1
      }
    },
    "recipientId": "U15677078342684640219",
    "timestamp": 63228087,
    "signature": "Ņ‚ŅƒŅ‚ ĐąŅƒĐ´ĐĩŅ‚ ĐŋОдĐŋиŅŅŒ"
  }
}

āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ā§‡āĻ° āĻ¸ā§āĻŦāĻžāĻ•ā§āĻˇāĻ°

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

āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ¸ā§āĻŦāĻžāĻ•ā§āĻˇāĻ° āĻ¨āĻŋāĻœā§‡āĻ‡ āĻŦā§āĻ¯āĻ•ā§āĻ¤āĻŋāĻ—āĻ¤ āĻ•ā§€ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ¸āĻžā§āĻšāĻžāĻ˛āĻŋāĻ¤ āĻšāĻ¯āĻŧ:

āĻŦā§āĻ˛āĻ•āĻšā§‡āĻ‡āĻ¨ā§‡ āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻ•ā§‡āĻ¨ā§āĻĻā§āĻ°ā§€āĻ­ā§‚āĻ¤ āĻŽā§‡āĻ¸ā§‡āĻžā§āĻœāĻžāĻ° āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡?

āĻšāĻŋāĻ¤ā§āĻ°āĻŸāĻŋ āĻĻā§‡āĻ–āĻžāĻ¯āĻŧ āĻ¯ā§‡ āĻ†āĻŽāĻ°āĻž āĻĒā§āĻ°āĻĨāĻŽā§‡ SHA-256 āĻĻāĻŋāĻ¯āĻŧā§‡ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨āĻŸāĻŋ āĻšā§āĻ¯āĻžāĻļ āĻ•āĻ°āĻŋ āĻāĻŦāĻ‚ āĻ¤āĻžāĻ°āĻĒāĻ°ā§‡ āĻ¸ā§āĻŦāĻžāĻ•ā§āĻˇāĻ° āĻ•āĻ°āĻŋ Ed25519 EdDSA āĻāĻŦāĻ‚ āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻŦāĻžāĻ•ā§āĻˇāĻ° āĻĒāĻžāĻ¨ signature, āĻāĻŦāĻ‚ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ āĻ†āĻ‡āĻĄāĻŋ SHA-256 āĻšā§āĻ¯āĻžāĻļā§‡āĻ° āĻ…āĻ‚āĻļāĨ¤

āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨:

1 - āĻāĻ•āĻŸāĻŋ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻ¸āĻš āĻāĻ•āĻŸāĻŋ āĻĄā§‡āĻŸāĻž āĻŦā§āĻ˛āĻ• āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§āĻ¨

/**
 * Calls `getBytes` based on transaction type
 * @see privateTypes
 * @implements {ByteBuffer}
 * @param {transaction} trs
 * @param {boolean} skipSignature
 * @param {boolean} skipSecondSignature
 * @return {!Array} Contents as an ArrayBuffer.
 * @throws {error} If buffer fails.
 */

adamant.getBytes = function (transaction) {

  ...

  switch (transaction.type) {
    case constants.Transactions.SEND:
      break
    case constants.Transactions.CHAT_MESSAGE:
      assetBytes = this.chatGetBytes(transaction)
      assetSize = assetBytes.length
      break

â€Ļ

    default:
      alert('Not supported yet')
  }

  var bb = new ByteBuffer(1 + 4 + 32 + 8 + 8 + 64 + 64 + assetSize, true)

  bb.writeByte(transaction.type)
  bb.writeInt(transaction.timestamp)

  ...

  bb.flip()
  var arrayBuffer = new Uint8Array(bb.toArrayBuffer())
  var buffer = []

  for (var i = 0; i < arrayBuffer.length; i++) {
    buffer[i] = arrayBuffer[i]
  }

  return Buffer.from(buffer)
}

2 - āĻĄā§‡āĻŸāĻž āĻŦā§āĻ˛āĻ• āĻĨā§‡āĻ•ā§‡ SHA-256 āĻ—āĻŖāĻ¨āĻž āĻ•āĻ°ā§āĻ¨

/**
 * Creates hash based on transaction bytes.
 * @implements {getBytes}
 * @implements {crypto.createHash}
 * @param {transaction} trs
 * @return {hash} sha256 crypto hash
 */
adamant.getHash = function (trs) {
  return crypto.createHash('sha256').update(this.getBytes(trs)).digest()
}

3 - āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ āĻ¸ā§āĻŦāĻžāĻ•ā§āĻˇāĻ° āĻ•āĻ°ā§āĻ¨

adamant.transactionSign = function (trs, keypair) {
  var hash = this.getHash(trs)
  return this.sign(hash, keypair).toString('hex')
}

/**
 * Creates a signature based on a hash and a keypair.
 * @implements {sodium}
 * @param {hash} hash
 * @param {keypair} keypair
 * @return {signature} signature
 */
adamant.sign = function (hash, keypair) {
  return sodium.crypto_sign_detached(hash, Buffer.from(keypair.privateKey, 'hex'))
}

āĻāĻ•āĻŸāĻŋ āĻ¨ā§‡āĻŸāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ• āĻ¨ā§‹āĻĄā§‡ āĻāĻ•āĻŸāĻŋ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻ¸āĻš āĻāĻ•āĻŸāĻŋ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ āĻĒāĻžāĻ āĻžāĻ¨ā§‹

āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻ¨ā§‡āĻŸāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻŸāĻŋ āĻŦāĻŋāĻ•ā§‡āĻ¨ā§āĻĻā§āĻ°ā§€āĻ•ā§ƒāĻ¤, āĻāĻ•āĻŸāĻŋ āĻ–ā§‹āĻ˛āĻž API āĻ¸āĻš āĻ¨ā§‹āĻĄāĻ—ā§āĻ˛āĻŋāĻ° āĻ¯ā§‡āĻ•ā§‹āĻ¨āĻ“ āĻ•āĻžāĻœ āĻ•āĻ°āĻŦā§‡āĨ¤ āĻļā§‡āĻˇ āĻĒāĻ¯āĻŧā§‡āĻ¨ā§āĻŸā§‡ āĻāĻ•āĻŸāĻŋ POST āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡ api/transactions:

curl 'api/transactions' -X POST 
  -d 'TX_DATA'

āĻ‰āĻ¤ā§āĻ¤āĻ°ā§‡ āĻ†āĻŽāĻ°āĻž āĻŸāĻžāĻ‡āĻĒā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ āĻ†āĻ‡āĻĄāĻŋ āĻĒāĻžāĻŦ

{
    "success": true,
    "nodeTimestamp": 63228852,
    "transactionId": "6146865104403680934"
}

āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ā§‡āĻ° āĻŦā§ˆāĻ§āĻ¤āĻž

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

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

āĻŦā§āĻ˛āĻ•āĻšā§‡āĻ‡āĻ¨ā§‡ āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻ•ā§‡āĻ¨ā§āĻĻā§āĻ°ā§€āĻ­ā§‚āĻ¤ āĻŽā§‡āĻ¸ā§‡āĻžā§āĻœāĻžāĻ° āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡?

āĻšā§‡āĻ•ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĻāĻžāĻ¯āĻŧā§€ āĻ¨ā§‹āĻĄ āĻ•ā§‹āĻĄā§‡āĻ° āĻ…āĻ‚āĻļāĻŸāĻŋ āĻ—āĻŋāĻŸāĻšāĻžāĻŦā§‡ āĻĻā§‡āĻ–āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ - validator.js и verify.js. āĻšā§āĻ¯āĻžāĻ, āĻ¨ā§‹āĻĄ Node.js āĻ āĻšāĻ˛ā§‡āĨ¤

āĻāĻ•āĻŸāĻŋ āĻŦā§āĻ˛āĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻ¸āĻš āĻāĻ•āĻŸāĻŋ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ āĻ¸āĻš

āĻ¯āĻĻāĻŋ āĻāĻ•āĻŽāĻ¤ā§āĻ¯ āĻĒā§ŒāĻāĻ›ā§‡ āĻ¯āĻžāĻ¯āĻŧ, āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻ° āĻ¸āĻžāĻĨā§‡ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨āĻŸāĻŋ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻŦā§ˆāĻ§ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§€ āĻŦā§āĻ˛āĻ•ā§‡ āĻ…āĻ¨ā§āĻ¤āĻ°ā§āĻ­ā§āĻ•ā§āĻ¤ āĻ•āĻ°āĻž āĻšāĻŦā§‡āĨ¤

āĻŦā§āĻ˛āĻ•āĻ—ā§āĻ˛āĻŋāĻ° āĻāĻ•āĻŸāĻŋ āĻ•āĻ ā§‹āĻ° āĻ•ā§āĻ°āĻŽ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§€ āĻŦā§āĻ˛āĻ•āĻ—ā§āĻ˛āĻŋ āĻĒā§‚āĻ°ā§āĻŦāĻŦāĻ°ā§āĻ¤ā§€ āĻŦā§āĻ˛āĻ•āĻ—ā§āĻ˛āĻŋāĻ° āĻšā§āĻ¯āĻžāĻļāĻ—ā§āĻ˛āĻŋāĻ° āĻ‰āĻĒāĻ° āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋ āĻ•āĻ°ā§‡ āĻ—āĻ āĻŋāĻ¤ āĻšāĻ¯āĻŧāĨ¤

āĻŦā§āĻ˛āĻ•āĻšā§‡āĻ‡āĻ¨ā§‡ āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻ•ā§‡āĻ¨ā§āĻĻā§āĻ°ā§€āĻ­ā§‚āĻ¤ āĻŽā§‡āĻ¸ā§‡āĻžā§āĻœāĻžāĻ° āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡?

āĻŦāĻŋāĻ¨ā§āĻĻā§ āĻšāĻ˛ āĻ¯ā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻŸāĻŋāĻ“ āĻāĻ‡ āĻ•ā§āĻ°āĻŽāĻŸāĻŋāĻ¤ā§‡ āĻ…āĻ¨ā§āĻ¤āĻ°ā§āĻ­ā§āĻ•ā§āĻ¤ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻāĻŦāĻ‚ "āĻĒā§āĻ¨āĻ°ā§āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸" āĻ•āĻ°āĻž āĻ¯āĻžāĻŦā§‡ āĻ¨āĻžāĨ¤ āĻ¯āĻĻāĻŋ āĻŦā§‡āĻļ āĻ•āĻ¯āĻŧā§‡āĻ•āĻŸāĻŋ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻāĻ•āĻŸāĻŋ āĻŦā§āĻ˛āĻ•ā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻĒāĻĄāĻŧā§‡ āĻ¤āĻŦā§‡ āĻ¤āĻžāĻĻā§‡āĻ° āĻ…āĻ°ā§āĻĄāĻžāĻ° āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŋāĻ¤ āĻšāĻŦā§‡ timestamp āĻŦāĻžāĻ°ā§āĻ¤āĻž

āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻĒāĻĄāĻŧāĻž

āĻŽā§‡āĻ¸ā§‡āĻžā§āĻœāĻžāĻ° āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻŦā§āĻ˛āĻ•āĻšā§‡āĻ‡āĻ¨ āĻĨā§‡āĻ•ā§‡ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ āĻĒā§āĻ¨āĻ°ā§āĻĻā§āĻ§āĻžāĻ° āĻ•āĻ°ā§‡ āĻ¯āĻž āĻĒā§āĻ°āĻžāĻĒāĻ•ā§‡āĻ° āĻ•āĻžāĻ›ā§‡ āĻĒāĻžāĻ āĻžāĻ¨ā§‹ āĻšāĻ¯āĻŧāĨ¤ āĻāĻ‡ āĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻ°āĻž āĻāĻ•āĻŸāĻŋ āĻļā§‡āĻˇ āĻĒāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻ¤ā§ˆāĻ°āĻŋ api/chatrooms.

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

**
 * Decodes the incoming message
 * @param {any} msg encoded message
 * @param {string} senderPublicKey sender public key
 * @param {string} privateKey our private key
 * @param {any} nonce nonce
 * @returns {string}
 */
adamant.decodeMessage = function (msg, senderPublicKey, privateKey, nonce) {
  if (typeof msg === 'string') {
    msg = hexToBytes(msg)
  }

  if (typeof nonce === 'string') {
    nonce = hexToBytes(nonce)
  }

  if (typeof senderPublicKey === 'string') {
    senderPublicKey = hexToBytes(senderPublicKey)
  }

  if (typeof privateKey === 'string') {
    privateKey = hexToBytes(privateKey)
  }

  const DHPublicKey = ed2curve.convertPublicKey(senderPublicKey)
  const DHSecretKey = ed2curve.convertSecretKey(privateKey)
  const decrypted = nacl.box.open(msg, nonce, DHPublicKey, DHSecretKey)

  return decrypted ? decode(decrypted) : ''
}

āĻ†āĻ° āĻ•āĻŋ?

āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻ—ā§āĻ˛āĻŋ āĻĒā§āĻ°āĻžāĻ¯āĻŧ 5 āĻ¸ā§‡āĻ•ā§‡āĻ¨ā§āĻĄā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻāĻ‡āĻ­āĻžāĻŦā§‡ āĻŦāĻŋāĻ¤āĻ°āĻŖ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ - āĻāĻ‡ āĻ¸āĻŽāĻ¯āĻŧ āĻāĻ•āĻŸāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻ¨ā§‡āĻŸāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ• āĻŦā§āĻ˛āĻ• āĻ‰āĻĒāĻ¸ā§āĻĨāĻŋāĻ¤ āĻšāĻ¯āĻŧ - āĻ†āĻŽāĻ°āĻž āĻāĻ•āĻŸāĻŋ āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ-āĻŸā§-āĻ¨ā§‹āĻĄ āĻāĻŦāĻ‚ āĻ¨ā§‹āĻĄ-āĻŸā§-āĻ¨ā§‹āĻĄ āĻ¸āĻ•ā§‡āĻŸ āĻ¸āĻ‚āĻ¯ā§‹āĻ— āĻ¨āĻŋāĻ¯āĻŧā§‡ āĻāĻ¸ā§‡āĻ›āĻŋāĨ¤ āĻ¯āĻ–āĻ¨ āĻāĻ•āĻŸāĻŋ āĻ¨ā§‹āĻĄ āĻāĻ•āĻŸāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ āĻĒāĻžāĻ¯āĻŧ, āĻ¤āĻ–āĻ¨ āĻāĻŸāĻŋ āĻ¤āĻžāĻ° āĻŦā§ˆāĻ§āĻ¤āĻž āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ āĻāĻŸāĻŋāĻ•ā§‡ āĻ…āĻ¨ā§āĻ¯ āĻ¨ā§‹āĻĄāĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻĢāĻ°ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻĄ āĻ•āĻ°ā§‡āĨ¤ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨āĻŸāĻŋ āĻŽā§‡āĻ¸ā§‡āĻžā§āĻœāĻžāĻ° āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸāĻĻā§‡āĻ° āĻ•āĻžāĻ›ā§‡ āĻ‰āĻĒāĻ˛āĻ­ā§āĻ¯ āĻšāĻ¯āĻŧ āĻāĻŽāĻ¨āĻ•āĻŋ āĻāĻ•ā§āĻ¯āĻŽāĻ¤ āĻšāĻ“āĻ¯āĻŧāĻž āĻāĻŦāĻ‚ āĻŦā§āĻ˛āĻ•ā§‡ āĻ…āĻ¨ā§āĻ¤āĻ°ā§āĻ­ā§āĻ•ā§āĻ¤āĻŋāĻ° āĻ†āĻ—ā§‡āĨ¤ āĻāĻ‡āĻ­āĻžāĻŦā§‡ āĻ†āĻŽāĻ°āĻž āĻ¨āĻŋāĻ¯āĻŧāĻŽāĻŋāĻ¤ āĻ‡āĻ¨āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ¨ā§āĻŸ āĻŽā§‡āĻ¸ā§‡āĻžā§āĻœāĻžāĻ°āĻĻā§‡āĻ° āĻŽāĻ¤ā§‹āĻ‡ āĻ¤āĻžā§ŽāĻ•ā§āĻˇāĻŖāĻŋāĻ•āĻ­āĻžāĻŦā§‡ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻĒā§ŒāĻāĻ›ā§‡ āĻĻā§‡āĻŦāĨ¤

āĻ āĻŋāĻ•āĻžāĻ¨āĻž āĻŦāĻ‡ āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻŽāĻ°āĻž āĻ•ā§‡āĻ­āĻŋāĻāĻ¸ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§‡āĻ›āĻŋ - āĻ•ā§€-āĻ­ā§āĻ¯āĻžāĻ˛ā§ āĻ¸ā§āĻŸā§‹āĻ°ā§‡āĻœ - āĻāĻŸāĻŋ āĻ…āĻ¨ā§āĻ¯ āĻ§āĻ°āĻ¨ā§‡āĻ° āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ āĻ¯āĻžāĻ¤ā§‡ asset āĻāĻŸāĻŋ āĻāĻ¨āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻ•āĻ°āĻž NaCl-āĻŦāĻ•ā§āĻ¸ āĻ¨āĻ¯āĻŧ, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ NaCl-āĻ¸āĻŋāĻ•ā§āĻ°ā§‡āĻŸāĻŦāĻ•ā§āĻ¸. āĻāĻ‡āĻ­āĻžāĻŦā§‡ āĻŽā§‡āĻ¸ā§‡āĻžā§āĻœāĻžāĻ° āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻĄā§‡āĻŸāĻž āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°ā§‡āĨ¤

āĻĢāĻžāĻ‡āĻ˛/āĻ›āĻŦāĻŋ āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ¨ā§āĻ¤āĻ° āĻāĻŦāĻ‚ āĻ—ā§āĻ°ā§āĻĒ āĻšā§āĻ¯āĻžāĻŸ āĻāĻ–āĻ¨āĻ“ āĻ…āĻ¨ā§‡āĻ• āĻ•āĻžāĻœ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨. āĻ…āĻŦāĻļā§āĻ¯āĻ‡, āĻŦā§āĻ˛āĻ¨ā§āĻĄāĻžāĻ°-āĻāĻ¨ā§āĻĄ-āĻŦā§āĻ˛āĻ¨ā§āĻĄāĻžāĻ° āĻĢāĻ°ā§āĻŽā§āĻ¯āĻžāĻŸā§‡ āĻāĻŸāĻŋ āĻĻā§āĻ°ā§āĻ¤ "āĻ¸ā§āĻ•ā§āĻ°ā§ āĻ†āĻĒ" āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡, āĻ¤āĻŦā§‡ āĻ†āĻŽāĻ°āĻž āĻāĻ•āĻ‡ āĻ¸ā§āĻ¤āĻ°ā§‡āĻ° āĻ—ā§‹āĻĒāĻ¨ā§€āĻ¯āĻŧāĻ¤āĻž āĻŦāĻœāĻžāĻ¯āĻŧ āĻ°āĻžāĻ–āĻ¤ā§‡ āĻšāĻžāĻ‡āĨ¤

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

āĻ†āĻŽāĻ°āĻž āĻĒā§āĻ°āĻŽāĻžāĻŖ āĻ•āĻ°ā§‡āĻ›āĻŋ āĻ¯ā§‡ āĻŦā§āĻ˛āĻ•āĻšā§‡āĻ‡āĻ¨ā§‡ āĻāĻ•āĻœāĻ¨ āĻŽā§‡āĻ¸ā§‡āĻžā§āĻœāĻžāĻ° āĻĨāĻžāĻ•āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻĒā§‚āĻ°ā§āĻŦā§‡, 2012 āĻ¸āĻžāĻ˛ā§‡ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻšā§‡āĻˇā§āĻŸāĻž āĻ›āĻŋāĻ˛ - āĻŦāĻŋāĻŸāĻŽā§‡āĻ¸ā§‡āĻœ, āĻ¯āĻž āĻĻā§€āĻ°ā§āĻ˜ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻŦāĻŋāĻ¤āĻ°āĻŖā§‡āĻ° āĻ¸āĻŽāĻ¯āĻŧ, CPU āĻ˛ā§‹āĻĄ āĻāĻŦāĻ‚ āĻŽā§‹āĻŦāĻžāĻ‡āĻ˛ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ā§‡āĻ° āĻ…āĻ­āĻžāĻŦā§‡āĻ° āĻ•āĻžāĻ°āĻŖā§‡ āĻŦā§āĻ¯āĻ°ā§āĻĨ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ā§ˇ

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

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

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