Како Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π° Π΄Π΅Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈΠΎΡ‚ гласник Π½Π° Π±Π»ΠΎΠΊΡ‡Π΅Ρ˜Π½?

На ΠΏΠΎΡ‡Π΅Ρ‚ΠΎΠΊΠΎΡ‚ Π½Π° 2017 Π³ΠΎΠ΄ΠΈΠ½Π°, ΠΏΠΎΡ‡Π½Π°Π²ΠΌΠ΅ Π΄Π° создавамС гласник Π½Π° Π±Π»ΠΎΠΊΡ‡Π΅Ρ˜Π½ [ΠΈΠΌΠ΅Ρ‚ΠΎ ΠΈ врската сС Π²ΠΎ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΎΡ‚] со Π΄ΠΈΡΠΊΡƒΡ‚ΠΈΡ€Π°ΡšΠ΅ Π·Π° прСдноститС Π²ΠΎ однос Π½Π° класичнитС P2P гласници.

Помина 2.5 Π³ΠΎΠ΄ΠΈΠ½Π°, ΠΈ ΠΌΠΎΠΆΠ΅Π²ΠΌΠ΅ Π΄Π° Π³ΠΎ ΠΏΠΎΡ‚Π²Ρ€Π΄ΠΈΠΌΠ΅ Π½Π°ΡˆΠΈΠΎΡ‚ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚: Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈΡ‚Π΅ Π·Π° ΠΌΠ΅ΡΠΈΠ½ΡŸΠ΅Ρ€ сСга сС достапни Π·Π° iOS, Web PWA, Windows, GNU/Linux, Mac OS ΠΈ Android.

ДСнСс ќС Π²ΠΈ ΠΊΠ°ΠΆΠ΅ΠΌΠ΅ ΠΊΠ°ΠΊΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π° Π±Π»ΠΎΠΊΡ‡Π΅Ρ˜Π½-ΠΌΠ΅ΡΠΈΠ½ΡŸΠ΅Ρ€ΠΎΡ‚ ΠΈ ΠΊΠ°ΠΊΠΎ клиСнтскитС Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ°Ρ‚ Π΄Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ со Π½Π΅Π³ΠΎΠ²ΠΈΠΎΡ‚ API.
Како Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π° Π΄Π΅Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈΠΎΡ‚ гласник Π½Π° Π±Π»ΠΎΠΊΡ‡Π΅Ρ˜Π½?

Π‘Π°ΠΊΠ°Π²ΠΌΠ΅ Π±Π»ΠΎΠΊΡ‡Π΅Ρ˜Π½ΠΎΡ‚ Π΄Π° Π³ΠΈ Ρ€Π΅ΡˆΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅ со бСзбСдноста ΠΈ приватноста Π½Π° класичнитС P2P гласници:

  • Π•Π΄Π΅Π½ ΠΊΠ»ΠΈΠΊ Π·Π° Π΄Π° ΠΊΡ€Π΅ΠΈΡ€Π°Ρ‚Π΅ смСтка - Π½Π΅ΠΌΠ° Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ΠΈ ΠΈΠ»ΠΈ Π΅-ΠΏΠΎΡˆΡ‚Π°, Π½Π΅ΠΌΠ° пристап Π΄ΠΎ адрСсари ΠΈΠ»ΠΈ Π³Π΅ΠΎΠ»ΠΎΠΊΠ°Ρ†ΠΈΠΈ.
  • Π‘ΠΎΠ³ΠΎΠ²ΠΎΡ€Π½ΠΈΡ†ΠΈΡ‚Π΅ никогаш Π½Π΅ воспоставуваат Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΈ врски, Ρ†Π΅Π»Π°Ρ‚Π° ΠΊΠΎΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° сС ΠΎΠ΄Π²ΠΈΠ²Π° ΠΏΡ€Π΅ΠΊΡƒ дистрибуиран систСм Π½Π° јазли. IP-адрСситС Π½Π° корисницитС Π½Π΅ сС достапни Π΅Π΄Π½ΠΈ Π·Π° Π΄Ρ€ΡƒΠ³ΠΈ.
  • Π‘ΠΈΡ‚Π΅ ΠΏΠΎΡ€Π°ΠΊΠΈ сС ΡˆΠΈΡ„Ρ€ΠΈΡ€Π°Π½ΠΈ ΠΎΠ΄ ΠΊΡ€Π°Ρ˜ Π΄ΠΎ ΠΊΡ€Π°Ρ˜ curve25519xsalsa20poly1305. Π‘Π΅ Ρ‡ΠΈΠ½ΠΈ Π΄Π΅ΠΊΠ° ΠΎΠ²Π° Π½Π΅ΠΌΠ° Π΄Π° ΠΈΠ·Π½Π΅Π½Π°Π΄ΠΈ Π½ΠΈΠΊΠΎΠ³ΠΎ, Π½ΠΎ Π½Π°ΡˆΠΈΠΎΡ‚ ΠΈΠ·Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄ Π΅ ΠΎΡ‚Π²ΠΎΡ€Π΅Π½.
  • MITM Π½Π°ΠΏΠ°Π΄ΠΎΡ‚ Π΅ исклучСн - сСкоја ΠΏΠΎΡ€Π°ΠΊΠ° Π΅ Ρ‚Ρ€Π°Π½ΡΠ°ΠΊΡ†ΠΈΡ˜Π° ΠΈ Π΅ ΠΏΠΎΡ‚ΠΏΠΈΡˆΠ°Π½Π° ΠΎΠ΄ Ed25519 EdDSA.
  • ΠŸΠΎΡ€Π°ΠΊΠ°Ρ‚Π° Π·Π°Π²Ρ€ΡˆΡƒΠ²Π° Π²ΠΎ сопствСн Π±Π»ΠΎΠΊ. ΠšΠΎΠ½Π·ΠΈΡΡ‚Π΅Π½Ρ‚Π½ΠΎΡΡ‚ ΠΈ timestamp НС ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΈ ΠΏΠΎΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Π±Π»ΠΎΠΊΠΎΠ²ΠΈΡ‚Π΅, Π° со Ρ‚ΠΎΠ° ΠΈ рСдослСдот Π½Π° ΠΏΠΎΡ€Π°ΠΊΠΈΡ‚Π΅.
  • β€žΠΠ΅ Π³ΠΎ Ρ€Π΅ΠΊΠΎΠ² Ρ‚ΠΎΠ°β€œ Π½Π΅ΠΌΠ° Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ со ΠΏΠΎΡ€Π°ΠΊΠΈ Π½Π° Π±Π»ΠΎΠΊΡ‡Π΅Ρ˜Π½.
  • НС постои Ρ†Π΅Π½Ρ‚Ρ€Π°Π»Π½Π° структура ΡˆΡ‚ΠΎ ја ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡƒΠ²Π° β€žΠ°Π²Ρ‚Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎΡΡ‚Π°β€œ Π½Π° ΠΏΠΎΡ€Π°ΠΊΠ°Ρ‚Π°. Ова Π³ΠΎ ΠΏΡ€Π°Π²ΠΈ дистрибуиран систСм Π½Π° јазли заснован Π½Π° консСнзус ΠΈ Π΅ Π²ΠΎ сопствСност Π½Π° корисницитС.
  • НСмоТност Π·Π° Ρ†Π΅Π½Π·ΡƒΡ€Π° - смСткитС Π½Π΅ ΠΌΠΎΠΆΠ°Ρ‚ Π΄Π° сС Π±Π»ΠΎΠΊΠΈΡ€Π°Π°Ρ‚ ΠΈ ΠΏΠΎΡ€Π°ΠΊΠΈΡ‚Π΅ Π½Π΅ ΠΌΠΎΠΆΠ°Ρ‚ Π΄Π° сС ΠΈΠ·Π±Ρ€ΠΈΡˆΠ°Ρ‚.
  • Blockchain 2FA Π΅ Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° Π½Π° ΠΏΠ΅ΠΊΠΎΠ»Π½ΠΈΠΎΡ‚ 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.

Π•Π²Π΅ Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²ΠΎ JavaScript:

/**
 * 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, Π° ID Π½Π° Ρ‚Ρ€Π°Π½ΡΠ°ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π° Π΅ Π΄Π΅Π» ΠΎΠ΄ Ρ…Π°ΡˆΠΎΡ‚ 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'

Како ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€ ќС Π΄ΠΎΠ±ΠΈΠ΅ΠΌΠ΅ ID Π½Π° Ρ‚Ρ€Π°Π½ΡΠ°ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π° ΠΎΠ΄ Ρ‚ΠΈΠΏΠΎΡ‚

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

Π’Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡ˜Π° Π½Π° Ρ‚Ρ€Π°Π½ΡΠ°ΠΊΡ†ΠΈΡ˜Π°

Дистрибуиран систСм Π½Π° јазли, Π²Ρ€Π· основа Π½Π° консСнзус, ја ΠΎΠ΄Ρ€Π΅Π΄ΡƒΠ²Π° β€žΠ°Π²Ρ‚Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎΡΡ‚Π°β€œ Π½Π° ΠΏΠΎΡ€Π°ΠΊΠ°Ρ‚Π° Π·Π° Ρ‚Ρ€Π°Π½ΡΠ°ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π°. Од ΠΊΠΎΠ³ΠΎ ΠΈ Π½Π° ΠΊΠΎΠ³ΠΎ, ΠΊΠΎΠ³Π°, Π΄Π°Π»ΠΈ ΠΏΠΎΡ€Π°ΠΊΠ°Ρ‚Π° Π΅ Π·Π°ΠΌΠ΅Π½Π΅Ρ‚Π° со Π΄Ρ€ΡƒΠ³Π° ΠΈ Π΄Π°Π»ΠΈ Ρ‚ΠΎΡ‡Π½ΠΎ Π΅ ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΈΡΠΏΡ€Π°ΡœΠ°ΡšΠ΅. Ова Π΅ ΠΌΠ½ΠΎΠ³Ρƒ Π²Π°ΠΆΠ½Π° прСдност Π½Π° Π±Π»ΠΎΠΊΡ‡Π΅Ρ˜Π½ΠΎΡ‚ - Π½Π΅ постои Ρ†Π΅Π½Ρ‚Ρ€Π°Π»Π½Π° структура која Π΅ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€Π½Π° Π·Π° Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°, Π° рСдослСдот Π½Π° ΠΏΠΎΡ€Π°ΠΊΠΈΡ‚Π΅ ΠΈ Π½ΠΈΠ²Π½Π°Ρ‚Π° содрТина Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π»Π°ΠΆΠΈΡ€Π°.

ΠŸΡ€Π²ΠΎ, Π΅Π΄Π΅Π½ јазол ја ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡƒΠ²Π° точноста, Π° ΠΏΠΎΡ‚ΠΎΠ° Π³ΠΎ ΠΈΡΠΏΡ€Π°ΡœΠ° Π΄ΠΎ Π΄Ρ€ΡƒΠ³ΠΈ - Π°ΠΊΠΎ мнозинството ΠΊΠ°ΠΆΠ΅ Π΄Π΅ΠΊΠ° сè Π΅ Π²ΠΎ Ρ€Π΅Π΄, Ρ‚Ρ€Π°Π½ΡΠ°ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π° ќС Π±ΠΈΠ΄Π΅ Π²ΠΊΠ»ΡƒΡ‡Π΅Π½Π° Π²ΠΎ слСдниот Π±Π»ΠΎΠΊ ΠΎΠ΄ ΡΠΈΠ½ΡŸΠΈΡ€ΠΎΡ‚ - ΠΎΠ²Π° Π΅ консСнзус.

Како Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π° Π΄Π΅Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈΠΎΡ‚ гласник Π½Π° Π±Π»ΠΎΠΊΡ‡Π΅Ρ˜Π½?

Π”Π΅Π»ΠΎΡ‚ ΠΎΠ΄ ΠΊΠΎΠ΄ΠΎΡ‚ Π½Π° Ρ˜Π°Π·ΠΎΠ»ΠΎΡ‚ кој Π΅ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€Π΅Π½ Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈΡ‚Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π³Π»Π΅Π΄Π° Π½Π° GitHub - Π²Π°Π»ΠΈΠ΄Π°Ρ‚ΠΎΡ€.js ΠΈ ΠΏΠΎΡ‚Π²Ρ€Π΄ΠΈ.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 - Key-Value Storage - ΠΎΠ²Π° Π΅ ΡƒΡˆΡ‚Π΅ Π΅Π΄Π΅Π½ Π²ΠΈΠ΄ Ρ‚Ρ€Π°Π½ΡΠ°ΠΊΡ†ΠΈΡ˜Π° Π²ΠΎ која asset Ρ‚ΠΎΠ° Π½Π΅ Π΅ NaCl-ΠΊΡƒΡ‚ΠΈΡ˜Π° ΡˆΡ‚ΠΎ Π΅ ΡˆΠΈΡ„Ρ€ΠΈΡ€Π°Π½Π°, Ρ‚ΡƒΠΊΡƒ NaCl-Ρ‚Π°Ρ˜Π½Π° ΠΊΡƒΡ‚ΠΈΡ˜Π°. Π’Π°ΠΊΠ° гласникот складира Π΄Ρ€ΡƒΠ³ΠΈ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ.

ΠŸΡ€Π΅Π½ΠΎΡΠΎΡ‚ Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ/слики ΠΈ Π³Ρ€ΡƒΠΏΠ½ΠΈΡ‚Π΅ Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€ΠΈ сè ΡƒΡˆΡ‚Π΅ Π±Π°Ρ€Π°Π°Ρ‚ ΠΌΠ½ΠΎΠ³Ρƒ Ρ€Π°Π±ΠΎΡ‚Π°. Π‘Π΅ Ρ€Π°Π·Π±ΠΈΡ€Π°, Π²ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΡ‚ β€žBlunder-and-Blunderβ€œ ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π±Ρ€Π·ΠΎ Π΄Π° сС β€žΠ·Π°Ρ„Ρ€Π»ΠΈβ€œ, Π½ΠΎ Π½ΠΈΠ΅ сакамС Π΄Π° Π³ΠΎ Π·Π°Π΄Ρ€ΠΆΠΈΠΌΠ΅ истото Π½ΠΈΠ²ΠΎ Π½Π° приватност.

Π”Π°, ΠΈΠΌΠ° ΡƒΡˆΡ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π° ΡˆΡ‚ΠΎ Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ - ΠΈΠ΄Π΅Π°Π»Π½ΠΎ, вистинската приватност прСтпоставува Π΄Π΅ΠΊΠ° корисницитС Π½Π΅ΠΌΠ° Π΄Π° сС ΠΏΠΎΠ²Ρ€Π·Π°Ρ‚ со Ρ˜Π°Π·Π»ΠΈΡ‚Π΅ Π½Π° Ρ˜Π°Π²Π½ΠΈΡ‚Π΅ ΠΌΡ€Π΅ΠΆΠΈ, Ρ‚ΡƒΠΊΡƒ ќС Π³ΠΈ ΠΏΠΎΠ΄ΠΈΠ³Π½Π°Ρ‚ своитС. Колкав ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ ΠΎΠ΄ корисницитС мислитС Π΄Π΅ΠΊΠ° Π³ΠΎ ΠΏΡ€Π°Π²Π°Ρ‚ ΠΎΠ²Π°? Π’Π°ΠΊΠ° Π΅, 0. УспСавмС Π΄Π΅Π»ΡƒΠΌΠ½ΠΎ Π΄Π° Π³ΠΎ Ρ€Π΅ΡˆΠΈΠΌΠ΅ овој ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ со Tor Π²Π΅Ρ€Π·ΠΈΡ˜Π°Ρ‚Π° Π½Π° гласникот.

Π”ΠΎΠΊΠ°ΠΆΠ°Π²ΠΌΠ΅ Π΄Π΅ΠΊΠ° гласник Π½Π° Π±Π»ΠΎΠΊΡ‡Π΅Ρ˜Π½ ΠΌΠΎΠΆΠ΅ Π΄Π° постои. ΠŸΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΎ имашС само Π΅Π΄Π΅Π½ ΠΎΠ±ΠΈΠ΄ Π²ΠΎ 2012 Π³ΠΎΠ΄ΠΈΠ½Π° - Π±ΠΈΡ‚-ΠΏΠΎΡ€Π°ΠΊΠ°, ΡˆΡ‚ΠΎ Π½Π΅ успСа ΠΏΠΎΡ€Π°Π΄ΠΈ Π΄ΠΎΠ»Π³ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° испорака Π½Π° ΠΏΠΎΡ€Π°ΠΊΠΈ, ΠΎΠΏΡ‚ΠΎΠ²Π°Ρ€ΡƒΠ²Π°ΡšΠ΅ Π½Π° процСсорот ΠΈ нСдостаток Π½Π° ΠΌΠΎΠ±ΠΈΠ»Π½ΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ.

И скСптицизмот сС Π΄ΠΎΠ»ΠΆΠΈ Π½Π° Ρ„Π°ΠΊΡ‚ΠΎΡ‚ Π΄Π΅ΠΊΠ° гласницитС Π½Π° Π±Π»ΠΎΠΊΡ‡Π΅Ρ˜Π½ΠΎΡ‚ сС ΠΏΡ€Π΅Π΄ своСто Π²Ρ€Π΅ΠΌΠ΅ - Π»ΡƒΡ“Π΅Ρ‚ΠΎ Π½Π΅ сС ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²Π΅Π½ΠΈ Π΄Π° ΠΏΡ€Π΅Π·Π΅ΠΌΠ°Ρ‚ одговорност Π·Π° Π½ΠΈΠ²Π½Π°Ρ‚Π° смСтка, ΠΏΠΎΡΠ΅Π΄ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π»ΠΈΡ‡Π½ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ сè ΡƒΡˆΡ‚Π΅ Π½Π΅ Π΅ Ρ‚Ρ€Π΅Π½Π΄, Π° Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡ˜Π°Ρ‚Π° Π½Π΅ Π΄ΠΎΠ·Π²ΠΎΠ»ΡƒΠ²Π° Π³ΠΎΠ»Π΅ΠΌΠΈ Π±Ρ€Π·ΠΈΠ½ΠΈ Π½Π° Π±Π»ΠΎΠΊΡ‡Π΅Ρ˜Π½ΠΎΡ‚. Π‘Π»Π΅Π΄Π½ΠΎ ќС сС ΠΏΠΎΡ˜Π°Π²Π°Ρ‚ повСќС Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΡˆΠΊΠΈ Π°Π½Π°Π»ΠΎΠ·ΠΈ Π½Π° Π½Π°ΡˆΠΈΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. ЌС Π²ΠΈΠ΄ΠΈΡ‚Π΅.

Π˜Π·Π²ΠΎΡ€: www.habr.com

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€