ื•ื•ื™ ื˜ื•ื˜ ืึท ื“ื™ืกืขื ื˜ืจืึทืœื™ื™ื–ื“ ืฉืœื™ื— ืึทืจื‘ืขื˜ ืื•ื™ืฃ ื“ื™ ื‘ืœืึธืงื˜ืฉื™ื™ืŸ?

ืื™ืŸ ื“ื™ ืึธื ื”ื™ื™ื‘ ืคื•ืŸ 2017, ืžื™ืจ ืื ื’ืขื”ื•ื™ื‘ืŸ ืฆื• ืฉืึทืคึฟืŸ ืึท ืฉืœื™ื— ืื•ื™ืฃ ื“ื™ ื‘ืœืึธืงื˜ืฉื™ื™ืŸ [ื ืึธืžืขืŸ ืื•ืŸ ืœื™ื ืง ื–ืขื ืขืŸ ืื™ืŸ ื“ืขื ืคึผืจืึธืคื™ืœ] ื“ื•ืจืš ื“ื™ืกืงื•ื˜ื™ืจืŸ ื“ื™ ืึทื“ื•ื•ืึทื ื˜ื™ื“ื–ืฉื™ื– ืื™ื‘ืขืจ ืงืœืึทืกื™ืฉ P2P ืฉืœื™ื—ื™ื.

ื“ื•ืจื›ื’ืขื’ืื ื’ืขืŸ 2.5 ื™ืึธืจ, ืื•ืŸ ืžื™ืจ ื–ืขื ืขืŸ ื‘ื™ื›ื•ืœืช ืฆื• ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ ืื•ื ื“ื–ืขืจ ื‘ืึทื’ืจื™ืฃ: ืžืขืกื™ื ื“ื–ืฉืขืจ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ื–ืขื ืขืŸ ืื™ืฆื˜ ื‘ื ื™ืžืฆื ืคึฟืึทืจ ื™ืึธืก, ื•ื•ืขื‘ ืคึผื•ื•ืึท, ื•ื•ื™ื ื“ืึธื•ื–, ื’ื ื• / ืœื™ื ื•ืงืก, ืžืขืง ืึทืก ืื•ืŸ ืึทื ื“ืจื•ื™ื“.

ื”ื™ื™ึทื ื˜ ืžื™ืจ ื•ื•ืขืœืŸ ื–ืึธื’ืŸ ืื™ืจ ื•ื•ื™ ื“ื™ ื‘ืœืึทืงื›ื™ื™ืŸ ืžืขืกื™ื ื“ื–ืฉืขืจ ืึทืจื‘ืขื˜ ืื•ืŸ ื•ื•ื™ ืงืœื™ืขื ื˜ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ืงืขื ืขืŸ ืึทืจื‘ืขื˜ืŸ ืžื™ื˜ ื–ื™ื™ืŸ ืึทืคึผื™.
ื•ื•ื™ ื˜ื•ื˜ ืึท ื“ื™ืกืขื ื˜ืจืึทืœื™ื™ื–ื“ ืฉืœื™ื— ืึทืจื‘ืขื˜ ืื•ื™ืฃ ื“ื™ ื‘ืœืึธืงื˜ืฉื™ื™ืŸ?

ืžื™ืจ ื’ืขื•ื•ืืœื˜ ื“ื™ ื‘ืœืึธืงื˜ืฉื™ื™ืŸ ืฆื• ืกืึธืœื•ื•ืข ื“ื™ ื–ื™ื›ืขืจื”ื™ื™ื˜ ืื•ืŸ ืคึผืจื™ื•ื•ืึทื˜ืงื™ื™ื˜ ื™ืฉื•ื– ืคื•ืŸ ืงืœืึทืกื™ืฉ P2P ืฉืœื™ื—ื™ื:

  • ืื™ื™ืŸ ื’ื™ื˜ ืฆื• ืฉืึทืคึฟืŸ ืึท ื—ืฉื‘ื•ืŸ - ืงื™ื™ืŸ ืคืึธื ืขืก ืึธื“ืขืจ ื™ืžื™ื™ืœื–, ืงื™ื™ืŸ ืึทืงืกืขืก ืฆื• ืึทื“ืจืขืก ื‘ื™ื›ืขืจ ืึธื“ืขืจ ื’ืขืึธืœืึธืงืึทื˜ื™ืึธื ืก.
  • ื“ื™ ื™ื ื˜ืขืจืœืึทืงื™ืึทื˜ืขืจื– ืงื™ื™ื ืžืึธืœ ืคืึทืจืœื™ื™ื’ืŸ ื“ื™ืจืขืงื˜ ืงืึทื ืขืงืฉืึทื ื–; ืึทืœืข ืงืึธืžื•ื ื™ืงืึทืฆื™ืข ื ืขืžื˜ ืึธืจื˜ ื“ื•ืจืš ืึท ืคื•ื ืื ื“ืขืจื’ืขื˜ื™ื™ืœื˜ ืกื™ืกื˜ืขื ืคื•ืŸ ื ืึธื•ื“ื–. ื™ื•ื–ืขืจื– 'IP ืึทื“ืจืขืกืขืก ื–ืขื ืขืŸ ื ื™ืฉื˜ ืฆื•ื˜ืจื™ื˜ืœืขืš ืฆื• ื™ืขื“ืขืจ ืื ื“ืขืจืขืจ.
  • ืึทืœืข ืึทืจื˜ื™ืงืœืขืŸ ื–ืขื ืขืŸ ื™ื ืงืจื™ืคึผื˜ื™ื“ ืกื•ืฃ-ืฆื•-ืกื•ืฃ ื•ื™ืกื‘ื™ื™ื’ 25519ืงืกืกืึทืœืกืึท 20 ืคึผืึธืœื™1305. ืขืก ืžื™ื™ื ื˜ ืึทื– ื“ืึธืก ื•ื•ืขื˜ ื ื™ืฉื˜ ื™ื‘ืขืจืจืึทืฉืŸ ื•ื•ืขืจ ืขืก ื™ื–, ืึธื‘ืขืจ ืื•ื ื“ื–ืขืจ ืžืงื•ืจ ืงืึธื“ ืื™ื– ืึธืคืŸ.
  • MITM ื‘ืึทืคืึทืœืŸ ืื™ื– ื™ืงืกืงืœื•ื“ื™ื“ - ื™ืขื“ืขืจ ืึธื ื–ืึธื’ ืื™ื– ืึท ื˜ืจืึทื ืกืึทืงื˜ื™ืึธืŸ ืื•ืŸ ืื™ื– ื’ืขื—ืชืžืขื˜ ื“ื•ืจืš Ed25519 EdDSA.
  • ื“ืขืจ ืึธื ื–ืึธื’ ืขื ื“ืก ืื™ืŸ ื–ื™ื™ืŸ ืื™ื™ื’ืขื ืข ื‘ืœืึธืง. ืงืึธื ืกื™ืกื˜ืขื ืกื™ ืื•ืŸ timestamp ืื™ืจ ืงืขื ืขืŸ ื ื™ืฉื˜ ืคืึทืจืจื™ื›ื˜ืŸ ื“ื™ ื‘ืœืึทืงืก, ืื•ืŸ ื“ืขืจื™ื‘ืขืจ ื“ื™ ืกื“ืจ ืคื•ืŸ ื“ื™ ืึทืจื˜ื™ืงืœืขืŸ.
  • "ืื™ืš ื”ืื˜ ื ื™ื˜ ื–ืึธื’ืŸ ืึทื–" ื•ื•ืขื˜ ื ื™ืฉื˜ ืึทืจื‘ืขื˜ืŸ ืžื™ื˜ ืึทืจื˜ื™ืงืœืขืŸ ืื•ื™ืฃ ื“ื™ ื‘ืœืึธืงื˜ืฉื™ื™ืŸ.
  • ืขืก ืื™ื– ืงื™ื™ืŸ ื”ื•ื™ืคื˜ ืกื˜ืจื•ืงื˜ื•ืจ ื•ื•ืึธืก ื˜ื•ื˜ ื˜ืฉืขืงืก ืื•ื™ืฃ ื“ื™ "ืึธื˜ืขื ื˜ื™ืกื™ื˜ื™" ืคื•ืŸ ืึท ืึธื ื–ืึธื’. ื“ืึธืก ืื™ื– ื’ืขื˜ืืŸ ื“ื•ืจืš ืึท ืคื•ื ืื ื“ืขืจื’ืขื˜ื™ื™ืœื˜ ืกื™ืกื˜ืขื ืคื•ืŸ ื ืึธื•ื“ื– ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ ืงืึธื ืกืขื ืกื•ืก, ืื•ืŸ ืขืก ืื™ื– ืึธื•ื ื“ ื“ื•ืจืš ื“ื™ ื ื™ืฆืขืจืก.
  • ื™ืžืคึผืึธืกื™ื‘ื™ืœื™ื˜ื™ ืคื•ืŸ ืฆืขื ื–ื•ืจ - ืึทืงืึทื•ื ืฅ ืงืขื ืขืŸ ื ื™ื˜ ื–ื™ื™ืŸ ืืคื’ืขืฉื˜ืขืœื˜ ืื•ืŸ ืึทืจื˜ื™ืงืœืขืŸ ืงืขื ืขืŸ ื ื™ื˜ ื–ื™ื™ืŸ ืื•ื™ืกื’ืขืžืขืงื˜.
  • Blockchain 2FA ืื™ื– ืึทืŸ ืึธืœื˜ืขืจื ืึทื˜ื™ื•ื• ืฆื• ื“ื™ ื›ืขืœื™ืฉ 2FA ื“ื•ืจืš SMS, ืจื•ื™ื ื“ ืึท ืคึผืœืึทืฅ ืคื•ืŸ ื’ืขื–ื•ื ื˜.
  • ื“ื™ ืคื™ื™ื™ืงื™ื™ื˜ ืฆื• ื‘ืึทืงื•ืžืขืŸ ืึทืœืข ื“ื™ื™ืŸ ืฉืžื•ืขืกืŸ ืคึฟื•ืŸ ืงื™ื™ืŸ ืžื™ื˜ืœ ืื™ืŸ ืงื™ื™ืŸ ืฆื™ื™ื˜ ืžื™ื˜ืœ ืึทื– ืื™ืจ ื˜ืึธืŸ ื ื™ื˜ ื”ืึธื‘ืŸ ืฆื• ืงืจืึธื ืฉืžื•ืขืกืŸ ืœืึธื•ืงืึทืœื™.
  • ื‘ืึทืฉื˜ืขื˜ื™ืงื•ื ื’ ืคื•ืŸ ืึธื ื–ืึธื’ ืขืงืกืคึผืจืขืก. ื ื™ื˜ ืฆื• ื“ื™ ื‘ืึทื ื™ืฆืขืจ 'ืก ืžื™ื˜ืœ, ืึธื‘ืขืจ ืฆื• ื“ื™ ื ืขืฅ. ื™ืกืขื ืฉืึทืœื™, ื“ืึธืก ืื™ื– ื‘ืึทืฉื˜ืขื˜ื™ืงื•ื ื’ ืคื•ืŸ ื“ื™ ื‘ืึทืงื•ืžืขืจ ืก ืคื™ื™ื™ืงื™ื™ื˜ ืฆื• ืœื™ื™ืขื ืขืŸ ื“ื™ื™ืŸ ืึธื ื–ืึธื’. ื“ืึธืก ืื™ื– ืึท ื ื•ืฆื™ืง ืฉื˜ืจื™ืš ืคึฟืึทืจ ืฉื™ืงื˜ ืงืจื™ื˜ื™ืฉ ื ืึธื•ื˜ืึทืคืึทืงื™ื™ืฉืึทื ื–.

ื‘ืœืึธืงื˜ืฉื™ื™ืŸ ื‘ืขื ืขืคื™ืฅ ืื•ื™ืš ืึทืจื™ื™ึทื ื ืขืžืขืŸ ื ืึธืขื ื˜ ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ืžื™ื˜ ื“ื™ ืงืจื™ืคึผื˜ืึธืงื•ืจืจืขื ืกื™ ืขื˜ื”ืขืจืขื•ื, ื“ืึธื’ืขืงืึธื™ืŸ, ืœื™ืกืง, ื“ืึทืฉ, ื‘ื™ื˜ืงืึธื™ืŸ (ื“ืึธืก ืื™ื– ื ืึธืš ืื™ืŸ ืคึผืจืึธื’ืจืขืก) ืื•ืŸ ื“ื™ ืคื™ื™ื™ืงื™ื™ื˜ ืฆื• ืฉื™ืงืŸ ื˜ืึธืงืขื ืก ืื™ืŸ ื˜ืฉืึทืฅ. ืžื™ืจ ืืคื™ืœื• ื’ืขืžืื›ื˜ ืึท ื’ืขื‘ื•ื™ื˜-ืื™ืŸ ืงืจื™ืคึผื˜ืึธ ื™ืงืกื˜ืฉื™ื™ื ื“ื–ืฉืขืจ.

ืื•ืŸ ื“ืขืžืึธืœื˜ - ื•ื•ื™ ืขืก ืึทืœืข ืึทืจื‘ืขื˜.

ื ืึธื ื–ืึธื’ ืื™ื– ืึท ื˜ืจืึทื ืกืึทืงื˜ื™ืึธืŸ

ืึทืœืขืžืขืŸ ืื™ื– ืฉื•ื™ืŸ ืฆื•ื’ืขื•ื•ื•ื™ื ื˜ ืฆื• ื“ืขื ืคืึทืงื˜ ืึทื– ื˜ืจืึทื ื–ืึทืงืฉืึทื ื– ืื™ืŸ ื“ื™ ื‘ืœืึธืงื˜ืฉื™ื™ืŸ ืึทืจื™ื‘ืขืจืคื™ืจืŸ ื˜ืึธืงืขื ืก (ืงืึธื™ื ืก) ืคื•ืŸ ืื™ื™ืŸ ื‘ืึทื ื™ืฆืขืจ ืฆื• ืื ื“ืขืจืŸ. ื•ื•ื™ ื‘ื™ื˜ืงืึธื™ืŸ. ืžื™ืจ ื‘ืืฉืืคืŸ ืึท ืกืคึผืขืฆื™ืขืœ ื˜ื™ืคึผ ืคื•ืŸ ื˜ืจืึทื ืกืึทืงื˜ื™ืึธืŸ ืคึฟืึทืจ ื˜ืจืึทื ืกืžื™ื˜ื™ื ื’ ืึทืจื˜ื™ืงืœืขืŸ.

ืฆื• ืฉื™ืงืŸ ืึท ืึธื ื–ืึธื’ ืื™ืŸ ืึท ืฉืœื™ื— ืื•ื™ืฃ ื“ื™ ื‘ืœืึทืงื›ื™ื™ื•ื•ืึทืŸ, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื’ื™ื™ืŸ ื“ื•ืจืš ืขื˜ืœืขื›ืข ืกื˜ืขืคึผืก:

  1. ืขื ืงืจื™ืคึผื˜ ืึธื ื–ืึธื’ ื˜ืขืงืกื˜
  2. ืฉื˜ืขืœืŸ ืกื™ื™ืคืขืจ ื˜ืขืงืกื˜ ืื™ืŸ ืึท ื˜ืจืึทื ืกืึทืงื˜ื™ืึธืŸ
  3. ืฆื™ื™ื›ืŸ ื“ื™ ื˜ืจืึทื ืกืึทืงื˜ื™ืึธืŸ
  4. ืฉื™ืงืŸ ืึท ื˜ืจืึทื ืกืึทืงื˜ื™ืึธืŸ ืฆื• ืงื™ื™ืŸ ื ืขืฅ ื ืึธื“ืข
  5. ื ืคื•ื ืื ื“ืขืจื’ืขื˜ื™ื™ืœื˜ ืกื™ืกื˜ืขื ืคื•ืŸ ื ืึธื•ื“ื– ื“ื™ื˜ืขืจืžืึทื ื– ื“ื™ "ืึธื˜ืขื ื˜ื™ืกื™ื˜ื™" ืคื•ืŸ ืึท ืึธื ื–ืึธื’
  6. ืื•ื™ื‘ ืึทืœืฅ ืื™ื– ื’ื•ื˜, ื“ื™ ื˜ืจืึทื ืกืึทืงื˜ื™ืึธืŸ ืžื™ื˜ ื“ืขื ืึธื ื–ืึธื’ ืื™ื– ืึทืจื™ื™ึทื ื’ืขืจืขื›ื ื˜ ืื™ืŸ ื“ืขืจ ื•ื•ื™ื™ึทื˜ืขืจ ื‘ืœืึธืง
  7. ื“ืขืจ ื‘ืึทืงื•ืžืขืจ ืจื™ื˜ืจื™ื•ื•ื– ื“ื™ ืึธื ื–ืึธื’ ื˜ืจืึทื ืกืึทืงื˜ื™ืึธืŸ ืื•ืŸ ื“ืขืงืจื™ืคึผื˜

ืกื˜ืขืคึผืก 1-3 ืื•ืŸ 7 ื–ืขื ืขืŸ ื“ื•ืจื›ื’ืขืงืึธื›ื˜ ืœืึธื•ืงืึทืœื™ ืื•ื™ืฃ ื“ืขื ืงืœื™ืขื ื˜, ืื•ืŸ ืกื˜ืขืคึผืก 5-6 ื–ืขื ืขืŸ ื“ื•ืจื›ื’ืขืงืึธื›ื˜ ืื•ื™ืฃ ื“ื™ ืžื—ื ื•ืช.

ืึธื ื–ืึธื’ ืขื ืงืจื™ืคึผืฉืึทืŸ

ื“ืขืจ ืึธื ื–ืึธื’ ืื™ื– ื™ื ืงืจื™ืคึผื˜ื™ื“ ืžื™ื˜ ื“ื™ ืกืขื ื“ืขืจ ืก ืคึผืจื™ื•ื•ืึทื˜ ืฉืœื™ืกืœ ืื•ืŸ ื“ื™ ื‘ืึทืงื•ืžืขืจ ืก ืฆื™ื‘ื•ืจ ืฉืœื™ืกืœ. ืžื™ืจ ื•ื•ืขืœืŸ ื ืขืžืขืŸ ื“ื™ ืฆื™ื‘ื•ืจ ืฉืœื™ืกืœ ืคื•ืŸ ื“ื™ ื ืขืฅ, ืึธื‘ืขืจ ืคึฟืึทืจ ื“ืขื, ื“ืขืจ ื‘ืึทืงื•ืžืขืจ ืก ื—ืฉื‘ื•ืŸ ืžื•ื–ืŸ ื–ื™ื™ืŸ ื™ื ื™ื˜ื™ืึทืœื™ื™ื–ื“, ื“ืึธืก ืื™ื–, ื”ืึธื‘ืŸ ื‘ื™ื™ึท ืžื™ื ื“ืกื˜ืขืจ ืื™ื™ืŸ ื˜ืจืึทื ืกืึทืงื˜ื™ืึธืŸ. ืื™ืจ ืงืขื ื˜ ื ื•ืฆืŸ ืึท REST ื‘ืขื˜ืŸ GET /api/accounts/getPublicKey?address={ADAMANT address}, ืื•ืŸ ื•ื•ืขืŸ ืœืึธื•ื“ื™ื ื’ ื˜ืฉืึทืฅ, ื“ื™ ืฆื™ื‘ื•ืจ ืฉืœื™ืกืœืขืŸ ืคื•ืŸ ื“ื™ ื™ื ื˜ืขืจืœืึทืงื™ืึทื˜ืขืจื– ื•ื•ืขื˜ ืฉื•ื™ืŸ ื–ื™ื™ืŸ ื‘ื ื™ืžืฆื.

ื•ื•ื™ ื˜ื•ื˜ ืึท ื“ื™ืกืขื ื˜ืจืึทืœื™ื™ื–ื“ ืฉืœื™ื— ืึทืจื‘ืขื˜ ืื•ื™ืฃ ื“ื™ ื‘ืœืึธืงื˜ืฉื™ื™ืŸ?

ื“ืขืจ ืฉืœื™ื— ืขื ืงืจื™ืคึผื˜ ืึทืจื˜ื™ืงืœืขืŸ ืžื™ื˜ ื“ื™ curve25519xsalsa20poly1305 ืึทืœื’ืขืจื™ื“ืึทื (NaCl ื‘ืึธืงืก). ื–ื™ื ื˜ ื“ืขืจ ื—ืฉื‘ื•ืŸ ื›ึผื•ืœืœ ืขื“25519 ืฉืœื™ืกืœืขืŸ, ืฆื• ืคืึธืจืขื ืึท ืงืขืกื˜ืœ, ื“ื™ ืฉืœื™ืกืœืขืŸ ืžื•ื–ืŸ ืขืจืฉื˜ืขืจ ื–ื™ื™ืŸ ืงืึธื ื•ื•ืขืจื˜ืขื“ ืฆื• 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 ืื•ืŸ ื“ืขืจื ืึธืš ืฆื™ื™ื›ืŸ ืขืก ืขื“25519 ืขื“ื“ืกืึท ืื•ืŸ ื‘ืึทืงื•ืžืขืŸ ืึท ื—ืชื™ืžื” 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'))
}

ืฉื™ืงื˜ ืึท ื˜ืจืึทื ืกืึทืงื˜ื™ืึธืŸ ืžื™ื˜ ืึท ืึธื ื–ืึธื’ ืฆื• ืึท ื ืขืฅ ื ืึธื“ืข

ื–ื™ื ื˜ ื“ื™ ื ืขืฅ ืื™ื– ื“ื™ืกืขื ื˜ืจืึทืœื™ื™ื–ื“, ืงื™ื™ืŸ ืคื•ืŸ ื“ื™ ื ืึธื•ื“ื– ืžื™ื˜ ืึทืŸ ืึธืคึฟืŸ ืึทืคึผื™ ื•ื•ืขื˜ ื˜ืึธืŸ. ืžืึทื›ืŸ ืึท POST ื‘ืขื˜ืŸ ืฆื• ื“ื™ ืขื ื“ืคึผื•ื™ื ื˜ api/transactions:

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

ืื™ืŸ ืขื ื˜ืคืขืจ ืžื™ืจ ื•ื•ืขืœืŸ ื‘ืึทืงื•ืžืขืŸ ืึท ื˜ืจืึทื ืกืึทืงื˜ื™ืึธืŸ ืฉื™ื™ึทืŸ ืคื•ืŸ ื“ืขื ื˜ื™ืคึผ

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

ื˜ืจืึทื ืกืึทืงื˜ื™ืึธืŸ ื•ื•ืึทืœืึทื“ื™ื™ืฉืึทืŸ

ื ืคื•ื ืื ื“ืขืจื’ืขื˜ื™ื™ืœื˜ ืกื™ืกื˜ืขื ืคื•ืŸ ื ืึธื•ื“ื–, ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ ืงืึธื ืกืขื ืกื•ืก, ื“ื™ื˜ืขืจืžืึทื ื– ื“ื™ "ืึธื˜ืขื ื˜ื™ืกื™ื˜ื™" ืคื•ืŸ ื“ื™ ื˜ืจืึทื ืกืึทืงื˜ื™ืึธืŸ ืึธื ื–ืึธื’. ืคื•ืŸ ื•ื•ืขืžืขืŸ ืื•ืŸ ืฆื• ื•ื•ืขืžืขืŸ, ื•ื•ืขืŸ, ืฆื™ ื“ืขืจ ืึธื ื–ืึธื’ ืื™ื– ืจื™ืคึผืœื™ื™ืกื˜ ืžื™ื˜ ืื ื“ืขืจืŸ, ืื•ืŸ ืฆื™ ื“ื™ ืฆื™ื™ื˜ ืคื•ืŸ ืฉื™ืงืŸ ืื™ื– ื’ืขื•ื•ืขืŸ ืจื™ื›ื˜ื™ืง ืื ื’ืขื•ื•ื™ื–ืŸ. ื“ืึธืก ืื™ื– ืึท ื–ื™ื™ืขืจ ื•ื•ื™ื›ื˜ื™ืง ืžื™ื™ึทืœืข ืคื•ืŸ โ€‹โ€‹ื“ื™ ื‘ืœืึทืงื›ื™ื™ื•ื•ืึทืŸ - ืขืก ืื™ื– ืงื™ื™ืŸ ื”ื•ื™ืคื˜ ืกื˜ืจื•ืงื˜ื•ืจ ื•ื•ืึธืก ืื™ื– ืคืึทืจืึทื ื˜ื•ื•ืึธืจื˜ืœืขืš ืคึฟืึทืจ ื•ื•ืขืจืึทืคืึทืงื™ื™ืฉืึทืŸ, ืื•ืŸ ื“ื™ ืกื™ืงื•ื•ืึทื ืก ืคื•ืŸ ืึทืจื˜ื™ืงืœืขืŸ ืื•ืŸ ื–ื™ื™ืขืจ ืื™ื ื”ืึทืœื˜ ืงืขื ืขืŸ ื ื™ื˜ ื–ื™ื™ืŸ ืคื™ื™ื™ืง.

ืขืจืฉื˜ืขืจ, ืื™ื™ื ืขืจ ื ืึธื“ืข ื˜ืฉืขืง ื“ื™ ืึทืงื™ืขืจืึทืกื™, ืื•ืŸ ื“ืขืžืึธืœื˜ ืกืขื ื“ื– ืขืก ืฆื• ืื ื“ืขืจืข - ืื•ื™ื‘ ื“ื™ ืžืขืจื”ื™ื™ึทื˜ ื–ืื’ื˜ ืึทื– ืึทืœืฅ ืื™ื– ืื™ืŸ ืกื“ืจ, ื“ื™ ื˜ืจืึทื ืกืึทืงื˜ื™ืึธืŸ ื•ื•ืขื˜ ื–ื™ื™ืŸ ืึทืจื™ื™ึทื ื’ืขืจืขื›ื ื˜ ืื™ืŸ ื“ืขืจ ื•ื•ื™ื™ึทื˜ืขืจ ื‘ืœืึธืง ืคื•ืŸ ื“ื™ ืงื™ื™ื˜ - ื“ืึธืก ืื™ื– ืงืึธื ืกืขื ืกื•ืก.

ื•ื•ื™ ื˜ื•ื˜ ืึท ื“ื™ืกืขื ื˜ืจืึทืœื™ื™ื–ื“ ืฉืœื™ื— ืึทืจื‘ืขื˜ ืื•ื™ืฃ ื“ื™ ื‘ืœืึธืงื˜ืฉื™ื™ืŸ?

ื“ืขืจ ื˜ื™ื™ืœ ืคื•ืŸ ื“ื™ ื ืึธื“ืข ืงืึธื“ ื•ื•ืึธืก ืื™ื– ืคืึทืจืึทื ื˜ื•ื•ืึธืจื˜ืœืขืš ืคึฟืึทืจ ื˜ืฉืขืงืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ื•ื•ื™ื•ื“ ืื•ื™ืฃ GitHub - 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 ืกืขืงื•ื ื“ืขืก - ื“ืึธืก ืื™ื– ื“ื™ ืฆื™ื™ื˜ ื•ื•ืึธืก ืึท ื ื™ื™ึทืข ื ืขืฅ ื‘ืœืึธืง ืื™ื– ืืจื•ื™ืก - ืžื™ืจ ื”ืึธื‘ืŸ ืึท ืงืœื™ืขื ื˜-ืฆื•-ื ืึธื“ืข ืื•ืŸ ื ืึธื“ืข-ืฆื•-ื ืึธื“ืข ื›ืึธืœืขืœ ืคึฟืึทืจื‘ื™ื ื“ื•ื ื’. ื•ื•ืขืŸ ืึท ื ืึธื“ืข ื ืขืžื˜ ืึท ื ื™ื™ึทืข ื˜ืจืึทื ืกืึทืงื˜ื™ืึธืŸ, ืขืก ื˜ืฉืขืงืก ื–ื™ื™ืŸ ื’ื™ืœื˜ื™ืงื™ื™ึทื˜ ืื•ืŸ ืคืึธืจื•ื•ืขืจื“ื– ืขืก ืฆื• ืื ื“ืขืจืข ื ืึธื•ื“ื–. ื“ื™ ื˜ืจืึทื ืกืึทืงื˜ื™ืึธืŸ ืื™ื– ื‘ืืจืขื›ื˜ื™ื’ื˜ ืคึฟืึทืจ ืžืขืกื™ื ื“ื–ืฉืขืจ ืงืœื™ื™ืึทื ืฅ ืืคื™ืœื• ืื™ื™ื“ืขืจ ืงืึธื ืกืขื ืกื•ืก ืึทืงืขืจื– ืื•ืŸ ื™ื ืงืœื•ื–ืฉืึทืŸ ืื™ืŸ ื“ื™ ื‘ืœืึธืง. ื“ืขื ื•ื•ืขื’ ืžื™ืจ ื•ื•ืขื˜ ืฆื•ืฉื˜ืขืœืŸ ืึทืจื˜ื™ืงืœืขืŸ ื˜ื™ื™ืงืขืฃ, ืคึผื•ื ืงื˜ ื•ื•ื™ ืจืขื’ื•ืœืขืจ ืจืขื’ืข ืฉืœื™ื—ื™ื.

ืฆื• ืงืจืึธื ื“ืขื ืึทื“ืจืขืก ื‘ื•ืš, ืžื™ืจ ื’ืขืžืื›ื˜ KVS - ืฉืœื™ืกืœ-ื•ื•ืึทืœื™ื• ืกื˜ืึธืจื™ื“ื–ืฉ - ื“ืึธืก ืื™ื– ืืŸ ืื ื“ืขืจ ื˜ื™ืคึผ ืคื•ืŸ ื˜ืจืึทื ืกืึทืงื˜ื™ืึธืŸ ืื™ืŸ ื•ื•ืึธืก asset ืขืก ืื™ื– ื ื™ืฉื˜ ื™ื ืงืจื™ืคึผื˜ื™ื“ ื ืึทืงืœ ืงืขืกื˜ืœ, ืึธื‘ืขืจ ื ืึทืงืœ-ืกืขืงืจืขื˜ื‘ืึธืงืก. ื“ืึธืก ืื™ื– ื•ื•ื™ ื“ืขืจ ืฉืœื™ื— ืกื˜ืึธืจื– ืื ื“ืขืจืข ื“ืึทื˜ืŸ.

ื˜ืขืงืข / ื‘ื™ืœื“ ื˜ืจืึทื ืกืคืขืจืก ืื•ืŸ ื’ืจื•ืคึผืข ื˜ืฉืึทืฅ ื ืึธืš ื“ืึทืจืคืŸ ืึท ืคึผืœืึทืฅ ืคื•ืŸ ืึทืจื‘ืขื˜. ืคื•ืŸ ืงื•ืจืก, ืื™ืŸ ื“ื™ ื‘ืœืึธื ื“ืขืจ-ืื•ืŸ-ื‘ืœืึธื ื“ืขืจ ืคึฟืึธืจืžืึทื˜ ื“ืึธืก ืงืขื ืขืŸ ื–ื™ื™ืŸ "ืกืงืจื•ื•ื“ ืึทืจื•ื™ืฃ" ื’ืขืฉื•ื•ื™ื ื“, ืึธื‘ืขืจ ืžื™ืจ ื•ื•ื™ืœืŸ ืฆื• ื”ืึทืœื˜ืŸ ื“ื™ ื–ืขืœื‘ืข ืžื“ืจื’ื” ืคื•ืŸ ืคึผืจื™ื•ื•ืึทื˜ืงื™ื™ื˜.

ื™ืึธ, ืขืก ืื™ื– ื ืึธืš ืึทืจื‘ืขื˜ ืฆื• ื˜ืึธืŸ - ื™ื™ื“ื™ืœื™, ืคืึทืงื˜ื™ืฉ ืคึผืจื™ื•ื•ืึทื˜ืงื™ื™ื˜ ืึทืกื•ืžื– ืึทื– ื™ื•ื–ืขืจื– ื•ื•ืขืœืŸ ื ื™ืฉื˜ ืคืึทืจื‘ื™ื ื“ืŸ ืฆื• ืฆื™ื‘ื•ืจ ื ืขืฅ ื ืึธื•ื“ื–, ืึธื‘ืขืจ ื•ื•ืขื˜ ื›ืึทืคึผืŸ ื–ื™ื™ืขืจ ืื™ื™ื’ืขื ืข. ื•ื•ืึธืก ืคึผืจืึธืฆืขื ื˜ ืคื•ืŸ ื™ื•ื–ืขืจื– ื˜ืึธืŸ ืื™ืจ ื˜ืจืึทื›ื˜ืŸ ื“ืึธืก? ืึทื– ืก ืจืขื›ื˜, 0. ืžื™ืจ ื–ืขื ืขืŸ ื‘ื™ื›ื•ืœืช ืฆื• ื˜ื™ื™ืœ ืกืึธืœื•ื•ืข ื“ืขื ืึทืจื•ื™ืกื’ืขื‘ืŸ ืžื™ื˜ ื“ื™ Tor ื•ื•ืขืจืกื™ืข ืคื•ืŸ โ€‹โ€‹ื“ื™ ืฉืœื™ื—.

ืžื™ืจ ื”ืึธื‘ืŸ ืคึผืจืึธื•ื•ืขืŸ ืึทื– ืึท ืฉืœื™ื— ืื•ื™ืฃ ื“ื™ ื‘ืœืึธืงื˜ืฉื™ื™ืŸ ืงืขื ืขืŸ ืขืงืกื™ืกื˜ื™ืจืŸ. ื‘ื™ื– ืึทื”ืขืจ, ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ ื‘ืœื•ื™ื– ืื™ื™ืŸ ืคึผืจื•ื•ื•ืŸ ืื™ืŸ 2012 - bitmessage, ื•ื•ืึธืก ื ื™ื˜ ืึทื ื“ืขืจืฉ ืจืขื›ื˜ ืฆื• ืœืึทื ื’ ืึธื ื–ืึธื’ ืขืงืกืคึผืจืขืก ืฆื™ื™ื˜, ืงืคึผื• ืžืึทืกืข ืื•ืŸ ืคืขืœืŸ ืคื•ืŸ ืจื™ืจืขื•ื•ื“ื™ืง ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื–.

ืื•ืŸ ืกืงืขืคึผื˜ื™ืกื™ื–ืึทื ืื™ื– ืจืขื›ื˜ ืฆื• ื“ืขื ืคืึทืงื˜ ืึทื– ืฉืœื™ื—ื™ื ืื•ื™ืฃ ื“ื™ ื‘ืœืึทืงื›ื™ื™ื•ื•ืึทืŸ ื–ืขื ืขืŸ ืคืึธืจื•ื™ืก ืคื•ืŸ ื–ื™ื™ืขืจ ืฆื™ื™ื˜ - ืžืขื ื˜ืฉืŸ ื–ืขื ืขืŸ ื ื™ืฉื˜ ื’ืจื™ื™ื˜ ืฆื• ื ืขืžืขืŸ ืคึฟืึทืจืึทื ื˜ื•ื•ืึธืจื˜ืœืขื›ืงื™ื™ื˜ ืคึฟืึทืจ ื–ื™ื™ืขืจ ื—ืฉื‘ื•ืŸ, ืึธื•ื ื™ื ื’ ืคึผืขืจื–ืขื ืœืขืš ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ืื™ื– ื ื™ืฉื˜ ื ืึธืš ืึท ื’ืึทื ื’, ืื•ืŸ ื˜ืขื›ื ืึธืœืึธื’ื™ืข ืงืขืŸ ื ื™ืฉื˜ ืœืึธื–ืŸ ื”ื•ื™ืš ืกืคึผื™ื“ื– ืื•ื™ืฃ ื“ื™ ื‘ืœืึทืงื›ื™ื™ื•ื•ืึทืŸ. ืžืขืจ ื˜ืขืงื ืึทืœืึทื“ื–ืฉื™ืงืึทืœ ืึทื ืึทืœืึธื’ื•ืขืก ืคื•ืŸ ืื•ื ื“ื–ืขืจ ืคึผืจื•ื™ืขืงื˜ ื•ื•ืขื˜ ื“ืขืจืฉื™ื™ึทื ืขืŸ ื•ื•ื™ื™ึทื˜ืขืจ. ื“ื• ื•ื•ืขืกื˜ ื–ืขื”ืŸ.

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’