เบœเบนเป‰เบชเบปเปˆเบ‡เบ‚เปˆเบฒเบงเบ—เบตเปˆเบกเบตเบเบฒเบ™เปเบšเปˆเบ‡เบ‚เบฑเป‰เบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™ blockchain เปเบ™เบงเปƒเบ”?

เปƒเบ™เบ•เบญเบ™เบ•เบปเป‰เบ™เบ‚เบญเบ‡ 2017, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบฅเบตเปˆเบกเบชเป‰เบฒเบ‡เบœเบนเป‰เบชเบปเปˆเบ‡เบ‚เปˆเบฒเบงเบเปˆเบฝเบงเบเบฑเบš blockchain [เบŠเบทเปˆเปเบฅเบฐเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบขเบนเปˆเปƒเบ™เป‚เบ›เบฃเป„เบŸเบฅเปŒ] เป‚เบ”เบเบเบฒเบ™เบชเบปเบ™เบ—เบฐเบ™เบฒเบ‚เปเป‰เป„เบ”เป‰เบ›เบฝเบšเบซเบผเบฒเบเบเบงเปˆเบฒเบœเบนเป‰เบชเบปเปˆเบ‡เบ‚เปˆเบฒเบง P2P เบ„เบฅเบฒเบชเบชเบดเบ.

เบœเปˆเบฒเบ™ 2.5 เบ›เบต, เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบขเบทเบ™เบขเบฑเบ™เปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ: เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ messenger เปเบกเปˆเบ™เบกเบตเบขเบนเปˆเปƒเบ™ iOS, Web PWA, Windows, GNU/Linux, Mac OS เปเบฅเบฐ Android.

เบกเบทเป‰เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบšเบญเบเบ—เปˆเบฒเบ™เบงเปˆเบฒ blockchain messenger เป€เบฎเบฑเบ”เบงเบฝเบเปเบ™เบงเปƒเบ”เปเบฅเบฐเบงเบดเบ—เบตเบเบฒเบ™เบฅเบนเบเบ„เป‰เบฒเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบš API เบ‚เบญเบ‡เบกเบฑเบ™เป„เบ”เป‰เปเบ™เบงเปƒเบ”.
เบœเบนเป‰เบชเบปเปˆเบ‡เบ‚เปˆเบฒเบงเบ—เบตเปˆเบกเบตเบเบฒเบ™เปเบšเปˆเบ‡เบ‚เบฑเป‰เบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™ blockchain เปเบ™เบงเปƒเบ”?

เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เปƒเบซเป‰ blockchain เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบ„เบงเบฒเบกเบ›เบญเบ”เป„เบžเปเบฅเบฐเบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบชเปˆเบงเบ™เบ•เบปเบงเบ‚เบญเบ‡เบœเบนเป‰เบชเบปเปˆเบ‡เบ‚เปˆเบฒเบง P2P เบ„เบฅเบฒเบชเบชเบดเบ:

  • เบ„เบฅเบดเบเบ”เบฝเบงเป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบšเบฑเบ™เบŠเบต - เบšเปเปˆเบกเบตเป‚เบ—เบฅเบฐเบชเบฑเบš เบซเบผเบทเบญเบตเป€เบกเบง, เบšเปเปˆเบกเบตเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบ›เบถเป‰เบกเบ—เบตเปˆเบขเบนเปˆ เบซเบผเบทเบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ•เบฑเป‰เบ‡เบžเบนเบกเบชเบฒเบ”.
  • interlocutors เบšเปเปˆเป€เบ„เบตเบเบชเป‰เบฒเบ‡เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเป‚เบ”เบเบเบปเบ‡; เบเบฒเบ™เบชเบทเปˆเบชเบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เป€เบเบตเบ”เบ‚เบถเป‰เบ™เป‚เบ”เบเบœเปˆเบฒเบ™เบฅเบฐเบšเบปเบšเบเบฒเบ™เปเบˆเบเบขเบฒเบเบ‚เบญเบ‡ nodes. เบ—เบตเปˆเบขเบนเปˆ IP เบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰เบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบเบฑเบ™เปเบฅเบฐเบเบฑเบ™.
  • เบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบฑเบ‡เปเบปเบ”เบ–เบทเบเป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เปเบšเบš End-to-End curve25519xsalsa20poly1305. เบกเบฑเบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบ™เบตเป‰เบˆเบฐเบšเปเปˆเปเบ›เบเปƒเบˆเปƒเบœ, เปเบ•เปˆเบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปเบกเปˆเบ™เป€เบ›เบตเบ”.
  • เบเบฒเบ™เป‚เบˆเบกเบ•เบต MITM เปเบกเปˆเบ™เบ–เบทเบเบเบปเบเป€เบงเบฑเป‰เบ™ - เปเบ•เปˆเบฅเบฐเบ‚เปเป‰เบ„เบงเบฒเบกเปเบกเปˆเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเปเบฅเบฐเบ–เบทเบเป€เบŠเบฑเบ™เป‚เบ”เบ Ed25519 EdDSA.
  • เบ‚เปเป‰เบ„เบงเบฒเบกเบชเบดเป‰เบ™เบชเบธเบ”เบฅเบปเบ‡เปƒเบ™เบšเบฅเบฑเบญเบเบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡. เบ„เบงเบฒเบกเบชเบญเบ”เบ„เปˆเบญเบ‡เปเบฅเบฐ timestamp เบ—เปˆเบฒเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เปเบเป‰เป„เบ‚เบ•เบฑเบ™เป„เบ”เป‰, เปเบฅเบฐเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบ‚เบญเบ‡เบ‚เปเป‰เบ„เบงเบฒเบก.
  • "เบ‚เป‰เบญเบเบšเปเปˆเป„เบ”เป‰เป€เบงเบปเป‰เบฒเปเบ™เบงเบ™เบฑเป‰เบ™" เบˆเบฐเบšเปเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบ‚เปเป‰เบ„เบงเบฒเบกเปƒเบ™ blockchain.
  • เบšเปเปˆเบกเบตเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบชเบนเบ™เบเบฒเบ‡เบ—เบตเปˆเบเบงเบ”เบชเบญเบš "เบ„เบงเบฒเบกเบ–เบทเบเบ•เป‰เบญเบ‡" เบ‚เบญเบ‡เบ‚เปเป‰เบ„เบงเบฒเบก. เบ™เบตเป‰เปเบกเปˆเบ™เป€เบฎเบฑเบ”เป‚เบ”เบเบฅเบฐเบšเบปเบšเบเบฒเบ™เปเบˆเบเบขเบฒเบเบ‚เบญเบ‡ nodes เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบ„เบงเบฒเบกเป€เบซเบฑเบ™เบ”เบตเป€เบซเบฑเบ™เบžเป‰เบญเบก, เปเบฅเบฐเบกเบฑเบ™เปเบกเปˆเบ™เป€เบ›เบฑเบ™เป€เบˆเบปเป‰เบฒเบ‚เบญเบ‡เป‚เบ”เบเบœเบนเป‰เปƒเบŠเป‰.
  • เป€เบ›เบฑเบ™เป„เบ›เบšเปเปˆเป„เบ”เป‰เบ‚เบญเบ‡เบเบฒเบ™เป€เบŠเบฑเบ™เป€เบŠเบต - เบšเบฑเบ™เบŠเบตเบšเปเปˆเบชเบฒเบกเบฒเบ”เบ–เบทเบเบšเบฅเบฑเบญเบ เปเบฅเบฐเบ‚เปเป‰เบ„เบงเบฒเบกเบšเปเปˆเบชเบฒเบกเบฒเบ”เบ–เบทเบเบฅเบถเบšเป„เบ”เป‰.
  • Blockchain 2FA เป€เบ›เบฑเบ™เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบตเปˆเป€เบ›เบฑเบ™ hellish 2FA เบœเปˆเบฒเบ™ SMS, เบ—เปเบฒเบฅเบฒเบเบชเบธเบ‚เบฐเบžเบฒเบšเบซเบผเบฒเบ.
  • เบ„เบงเบฒเบกโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เบชเบปเบ™โ€‹เบ—เบฐโ€‹เบ™เบฒโ€‹เบ—เบฑเบ‡โ€‹เบซเบกเบปเบ”โ€‹เบ‚เบญเบ‡โ€‹เบ—เปˆเบฒเบ™โ€‹เบˆเบฒเบโ€‹เบญเบธโ€‹เบ›เบฐโ€‹เบเบญเบ™โ€‹เปƒเบ”โ€‹เบซเบ™เบถเปˆเบ‡โ€‹เปƒเบ™โ€‹เบ—เบธเบโ€‹เป€เบงโ€‹เบฅเบฒโ€‹เบซเบกเบฒเบโ€‹เบ„เบงเบฒเบกโ€‹เบงเปˆเบฒโ€‹เบ—เปˆเบฒเบ™โ€‹เบšเปเปˆโ€‹เบˆเปเบฒโ€‹เป€เบ›เบฑเบ™โ€‹เบ•เป‰เบญเบ‡โ€‹เป€เบเบฑเบšโ€‹เบฎเบฑเบโ€‹เบชเบฒโ€‹เบเบฒเบ™โ€‹เบชเบปเบ™โ€‹เบ—เบฐโ€‹เบ™เบฒโ€‹เปƒเบ™โ€‹เบ—เบตเปˆโ€‹เบ—เบฑเบ‡โ€‹เบซเบกเบปเบ”โ€‹.
  • เบขเบทเบ™เบขเบฑเบ™เบเบฒเบ™เบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบก. เบšเปเปˆเปเบกเปˆเบ™เบญเบธเบ›เบฐเบเบญเบ™เบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰, เปเบ•เปˆเบเบฑเบšเป€เบ„เบทเบญเบ‚เปˆเบฒเบ. เป‚เบ”เบเบžเบทเป‰เบ™เบ–เบฒเบ™เปเบฅเป‰เบง, เบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เบขเบทเบ™เบขเบฑเบ™เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบ‚เบญเบ‡เบœเบนเป‰เบฎเบฑเบšเปƒเบ™เบเบฒเบ™เบญเปˆเบฒเบ™เบ‚เปเป‰เบ„เบงเบฒเบกเบ‚เบญเบ‡เบ—เปˆเบฒเบ™. เบ™เบตเป‰เปเบกเปˆเบ™เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเบปเปˆเบ‡เบเบฒเบ™เปเบˆเป‰เบ‡เป€เบ•เบทเบญเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™.

เบœเบปเบ™เบ›เบฐเป‚เบซเบเบ”เบ‚เบญเบ‡ Blockchain เบเบฑเบ‡เบ›เบฐเบเบญเบšเบกเบตเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบขเปˆเบฒเบ‡เปƒเบเป‰เบŠเบดเบ”เบเบฑเบš cryptocurrencies Ethereum, Dogecoin, Lisk, Dash, Bitcoin (เบญเบฑเบ™เบ™เบตเป‰เบเบฑเบ‡เบขเบนเปˆเปƒเบ™เบ„เบงเบฒเบกเบ„เบทเบšเบซเบ™เป‰เบฒ) เปเบฅเบฐเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบชเบปเปˆเบ‡ tokens เปƒเบ™เบเบฒเบ™เบชเบปเบ™เบ—เบฐเบ™เบฒ. เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เป„เบ”เป‰เบชเป‰เบฒเบ‡เบ•เบปเบงเปเบฅเบเบ›เปˆเบฝเบ™ crypto เบ—เบตเปˆเบกเบตเปƒเบ™เบ•เบปเบง.

เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™ - เป€เบฎเบฑเบ”เปเบ™เบงเปƒเบ”เบกเบฑเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เป€เบฎเบฑเบ”เบงเบฝเบ.

เบ‚เปเป‰เบ„เบงเบฒเบกเปเบกเปˆเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒ

เบ—เบธเบเป†เบ„เบปเบ™เป„เบ”เป‰เบ„เบธเป‰เบ™เป€เบ„เบตเบเบเบฑเบšเบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒเบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเปƒเบ™ tokens เบเบฒเบ™เป‚เบญเบ™ blockchain (เบซเบผเบฝเบ™) เบˆเบฒเบเบœเบนเป‰เปƒเบŠเป‰เบซเบ™เบถเปˆเบ‡เป„เบ›เบซเบฒเบ„เบปเบ™เบญเบทเปˆเบ™. เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบš Bitcoin. เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบชเป‰เบฒเบ‡เบ›เบฐเป€เบžเบ”เบžเบดเป€เบชเบ”เบ‚เบญเบ‡เบ—เบธเบฅเบฐเบเปเบฒเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบก.

เป€เบžเบทเปˆเบญเบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเปƒเบ™ messenger เปƒเบ™ blockchain, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบœเปˆเบฒเบ™เบซเบผเบฒเบเบ‚เบฑเป‰เบ™เบ•เบญเบ™:

  1. เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เบ‚เปเป‰เบ„เบงเบฒเบก
  2. เปƒเบชเปˆ ciphertext เป€เบ‚เบปเป‰เบฒเปƒเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒ
  3. เป€เบŠเบฑเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒ
  4. เบชเบปเปˆเบ‡เบ—เบธเบฅเบฐเบเปเบฒเป„เบ›เบซเบฒ node เป€เบ„เบทเบญเบ‚เปˆเบฒเบเปƒเบ”เป†
  5. เบฅเบฐเบšเบปเบšเบเบฒเบ™เปเบˆเบเบขเบฒเบเบ‚เบญเบ‡ nodes เบเปเบฒเบ™เบปเบ” "เบ„เบงเบฒเบกเบ–เบทเบเบ•เป‰เบญเบ‡" เบ‚เบญเบ‡เบ‚เปเป‰เบ„เบงเบฒเบก
  6. เบ–เป‰เบฒเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™ OK, เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบ—เบตเปˆเบกเบตเบ‚เปเป‰เบ„เบงเบฒเบกเบ–เบทเบเบฅเบงเบกเบขเบนเปˆเปƒเบ™เบšเบฅเบฑเบญเบเบ•เปเปˆเป„เบ›
  7. เบœเบนเป‰เบฎเบฑเบšเบ”เบถเบ‡เบ‚เปเป‰เบกเบนเบ™เบ—เบธเบฅเบฐเบเปเบฒเบ‚เปเป‰เบ„เบงเบฒเบกเปเบฅเบฐเบ–เบญเบ”เบฅเบฐเบซเบฑเบ”

เบ‚เบฑเป‰เบ™โ€‹เบ•เบญเบ™โ€‹เบ—เบต 1โ€“3 เปเบฅเบฐ 7 เปเบกเปˆเบ™โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เบขเบนเปˆโ€‹เปƒเบ™โ€‹เบ—เป‰เบญเบ‡โ€‹เบ–เบดเปˆเบ™โ€‹เบเปˆเบฝเบงโ€‹เบเบฑเบšโ€‹เบฅเบนเบโ€‹เบ„เป‰เบฒ, เปเบฅเบฐโ€‹เบ‚เบฑเป‰เบ™โ€‹เบ•เบญเบ™ 5โ€“6 เปเบกเปˆเบ™โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เบขเบนเปˆโ€‹เปƒเบ™โ€‹เบเบฒเบ™โ€‹เป€เบ›เบฑเบ™โ€‹เป€เบˆเบปเป‰เบฒโ€‹เบžเบฒเบš.

เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เบ‚เปเป‰เบ„เบงเบฒเบก

เบ‚เปเป‰เบ„เบงเบฒเบกเบ–เบทเบเป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เบ”เป‰เบงเบเบเบฐเปเบˆเบชเปˆเบงเบ™เบ•เบปเบงเบ‚เบญเบ‡เบœเบนเป‰เบชเบปเปˆเบ‡ เปเบฅเบฐเบเบฐเปเบˆเบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐเบ‚เบญเบ‡เบœเบนเป‰เบฎเบฑเบš. เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบญเบปเบฒเบฅเบฐเบซเบฑเบ”เบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐเบˆเบฒเบเป€เบ„เบทเบญเบ‚เปˆเบฒเบ, เปเบ•เปˆเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เบตเป‰, เบšเบฑเบ™เบŠเบตเบ‚เบญเบ‡เบœเบนเป‰เบฎเบฑเบšเบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบกเบตเบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบเบซเบ™เบถเปˆเบ‡เบ—เบธเบฅเบฐเบเปเบฒ. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เป REST เป„เบ”เป‰ GET /api/accounts/getPublicKey?address={ADAMANT address}, เปเบฅเบฐเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเป‚เบซเบฅเบ”เบเบฒเบ™เบชเบปเบ™เบ—เบฐเบ™เบฒ, เบเบฐเปเบˆเบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐเบ‚เบญเบ‡ interlocutors เบˆเบฐเบกเบตเบขเบนเปˆเปเบฅเป‰เบง.

เบœเบนเป‰เบชเบปเปˆเบ‡เบ‚เปˆเบฒเบงเบ—เบตเปˆเบกเบตเบเบฒเบ™เปเบšเปˆเบ‡เบ‚เบฑเป‰เบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™ blockchain เปเบ™เบงเปƒเบ”?

Messenger เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เบ‚เปเป‰เบ„เบงเบฒเบกเป‚เบ”เบเปƒเบŠเป‰ algorithm 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. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเบžเบฝเบ‡เปเบ•เปˆ, เบซเบผเบทเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบชเบปเปˆเบ‡เบงเบฑเบ”เบ–เบธเบ—เบตเปˆเบกเบตเบชเบดเปˆเบ‡เบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเบžเบฒเบเปƒเบ™ - เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ™เบตเป‰เปเบกเปˆเบ™เบงเบดเบ—เบตเบ—เบตเปˆเบœเบนเป‰เบชเบปเปˆเบ‡เบ‚เปˆเบฒเบงเป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เป‚เบญเบ™เป€เบ‡เบดเบ™ cryptocurrency เปƒเบ™เบเบฒเบ™เบชเบปเบ™เบ—เบฐเบ™เบฒ.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡เบ—เบธเบฅเบฐเบเปเบฒ:

{
  "transaction": {
    "type": 8,
    "amount": 0,
    "senderId": "U12499126640447739963",
    "senderPublicKey": "e9cafb1e7b403c4cf247c94f73ee4cada367fcc130cb3888219a0ba0633230b6",
    "asset": {
      "chat": {
        "message": "cb682accceef92d7cddaaddb787d1184ab5428",
        "own_message": "e7d8f90ddf7d70efe359c3e4ecfb5ed3802297b248eacbd6",
        "type": 1
      }
    },
    "recipientId": "U15677078342684640219",
    "timestamp": 63228087,
    "signature": "ั‚ัƒั‚ ะฑัƒะดะตั‚ ะฟะพะดะฟะธััŒ"
  }
}

เบฅเบฒเบเป€เบŠเบฑเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒ

เป€เบžเบทเปˆเบญเบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบงเปˆเบฒเบ—เบธเบเบ„เบปเบ™เบกเบตเบ„เบงเบฒเบกเบซเบกเบฑเป‰เบ™เปƒเบˆเปƒเบ™เบ„เบงเบฒเบกเบ–เบทเบเบ•เป‰เบญเบ‡เบ‚เบญเบ‡เบœเบนเป‰เบชเบปเปˆเบ‡เปเบฅเบฐเบœเบนเป‰เบฎเบฑเบš, เป€เบงเบฅเบฒเบ‚เบญเบ‡เบเบฒเบ™เบชเบปเปˆเบ‡เปเบฅเบฐเป€เบ™เบทเป‰เบญเปƒเบ™เบ‚เบญเบ‡เบ‚เปเป‰เบ„เบงเบฒเบก, เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเป„เบ”เป‰เบ–เบทเบเป€เบŠเบฑเบ™. เบฅเบฒเบเป€เบŠเบฑเบ™เบ”เบดเบˆเบดเบ•เบญเบ™เบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบเบงเบ”เบชเบญเบšเบ„เบงเบฒเบกเบ–เบทเบเบ•เป‰เบญเบ‡เบ‚เบญเบ‡เบ—เบธเบฅเบฐเบเปเบฒเป‚เบ”เบเปƒเบŠเป‰เบฅเบฐเบซเบฑเบ”เบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐ - เบฅเบฐเบซเบฑเบ”เบชเปˆเบงเบ™เบ•เบปเบงเปเบกเปˆเบ™เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เบตเป‰.

เปเบ•เปˆเบฅเบฒเบเป€เบŠเบฑเบ™เบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เป‚เบ”เบเปƒเบŠเป‰เบฅเบฐเบซเบฑเบ”เบชเปˆเบงเบ™เบ•เบปเบง:

เบœเบนเป‰เบชเบปเปˆเบ‡เบ‚เปˆเบฒเบงเบ—เบตเปˆเบกเบตเบเบฒเบ™เปเบšเปˆเบ‡เบ‚เบฑเป‰เบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™ blockchain เปเบ™เบงเปƒเบ”?

เปเบœเบ™เบงเบฒเบ”เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบ—เปเบฒเบญเบดเบ” hash เบ—เบธเบฅเบฐเบเปเบฒเบเบฑเบš SHA-256 เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เป€เบŠเบฑเบ™เบกเบฑเบ™ Ed25519 EdDSA เปเบฅเบฐเป„เบ”เป‰เบฎเบฑเบšเบฅเบฒเบเป€เบŠเบฑเบ™ signature, เปเบฅเบฐ ID เบ—เบธเบฅเบฐเบเปเบฒเปเบกเปˆเบ™เบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡ SHA-256 hash.

เบ•เบปเบงเบขเปˆเบฒเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”:

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'))
}

เบเบฒเบ™เบชเบปเปˆเบ‡เบ—เบธเบฅเบฐเบเปเบฒเบ”เป‰เบงเบเบ‚เปเป‰เบ„เบงเบฒเบกเป„เบ›เบซเบฒเป‚เบซเบ™เบ”เป€เบ„เบทเบญเบ‚เปˆเบฒเบ

เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเป€เบ„เบทเบญเบ‚เปˆเบฒเบเบ–เบทเบเปเบšเปˆเบ‡เบ‚เบฑเป‰เบ™เบ„เบธเป‰เบกเบ„เบญเบ‡, เปƒเบ”เป†เบ‚เบญเบ‡ nodes เบ—เบตเปˆเบกเบต API เป€เบ›เบตเบ”เบˆเบฐเป€เบฎเบฑเบ”. เป€เบฎเบฑเบ”เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป POST เป„เบ›เบซเบฒเบˆเบธเบ”เบชเบดเป‰เบ™เบชเบธเบ” api/transactions:

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

เปƒเบ™เบเบฒเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป„เบ”เป‰เบฎเบฑเบš ID เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบ‚เบญเบ‡เบ›เบฐเป€เบžเบ”

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

เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒ

เบฅเบฐเบšเบปเบšเบเบฒเบ™เปเบˆเบเบขเบฒเบเบ‚เบญเบ‡ nodes, เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบ„เบงเบฒเบกเป€เบซเบฑเบ™เบ”เบตเป€เบซเบฑเบ™เบžเป‰เบญเบก, เบเปเบฒเบ™เบปเบ” "เบ„เบงเบฒเบกเบ–เบทเบเบ•เป‰เบญเบ‡" เบ‚เบญเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบธเบฅเบฐเบเปเบฒ. เบˆเบฒเบเปƒเบœเปเบฅเบฐเปƒเบœ, เป€เบงเบฅเบฒเปƒเบ”, เบ‚เปเป‰เบ„เบงเบฒเบกเบ–เบทเบเปเบ—เบ™เบ—เบตเปˆเบ”เป‰เบงเบเบ‚เปเป‰เบ„เบงเบฒเบกเบญเบทเปˆเบ™, เปเบฅเบฐเป€เบงเบฅเบฒเบ‚เบญเบ‡เบเบฒเบ™เบชเบปเปˆเบ‡เบ–เบทเบเบŠเบตเป‰เบšเบญเบเบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡. เบ™เบตเป‰เปเบกเปˆเบ™เบ›เบฐเป‚เบซเบเบ”เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบซเบผเบฒเบเบ‚เบญเบ‡ blockchain - เบšเปเปˆเบกเบตเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบชเบนเบ™เบเบฒเบ‡เบ—เบตเปˆเบฎเบฑเบšเบœเบดเบ”เบŠเบญเบšเปƒเบ™เบเบฒเบ™เบเบงเบ”เบชเบญเบš, เปเบฅเบฐเบฅเปเบฒเบ”เบฑเบšเบ‚เบญเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเปเบฅเบฐเป€เบ™เบทเป‰เบญเบซเบฒเบ‚เบญเบ‡เบžเบงเบเบกเบฑเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เบ–เบทเบเบ›เบญเบกเปเบ›เบ‡เป„เบ”เป‰.

เบซเบ™เป‰เบฒเบ—เปเบฒเบญเบดเบ”, เบซเบ™เบถเปˆเบ‡เปƒเบ™ node เบเบงเบ”เป€เบšเบดเปˆเบ‡เบ„เบงเบฒเบกเบ–เบทเบเบ•เป‰เบญเบ‡, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบชเบปเปˆเบ‡เปƒเบซเป‰เบœเบนเป‰เบญเบทเปˆเบ™ - เบ–เป‰เบฒเบชเปˆเบงเบ™เปƒเบซเบเปˆเบšเบญเบเบงเปˆเบฒเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡, เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบˆเบฐเบ–เบทเบเบฅเบงเบกเบขเบนเปˆเปƒเบ™เบ•เบฑเบ™เบ•เปเปˆเป„เบ›เบ‚เบญเบ‡เบ•เปˆเบญเบ‡เป‚เบชเป‰ - เบ™เบตเป‰เปเบกเปˆเบ™เบ„เบงเบฒเบกเป€เบซเบฑเบ™เบ”เบตเบ™เปเบฒ.

เบœเบนเป‰เบชเบปเปˆเบ‡เบ‚เปˆเบฒเบงเบ—เบตเปˆเบกเบตเบเบฒเบ™เปเบšเปˆเบ‡เบ‚เบฑเป‰เบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™ blockchain เปเบ™เบงเปƒเบ”?

เบชเปˆเบงเบ™เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ” node เบ—เบตเปˆเบฎเบฑเบšเบœเบดเบ”เบŠเบญเบšเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบงเบ”เบชเบญเบšเบชเบฒเบกเบฒเบ”เป€เบšเบดเปˆเบ‡เป„เบ”เป‰เปƒเบ™ GitHub - validator.js ะธ verify.js. เปเบกเปˆเบ™เปเบฅเป‰เบง, node เปเบฅเปˆเบ™เบขเบนเปˆเปƒเบ™ Node.js.

เบฅเบงเบกเบ—เบฑเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบ—เบตเปˆเบกเบตเบ‚เปเป‰เบ„เบงเบฒเบกเบขเบนเปˆเปƒเบ™เบšเบฅเบฑเบญเบ

เบ–เป‰เบฒเบเบฒเบ™เบ•เบปเบเบฅเบปเบ‡เป€เบซเบฑเบ™เบ”เบต, เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบเบฑเบšเบ‚เปเป‰เบ„เบงเบฒเบกเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ–เบทเบเบฅเบงเบกเบขเบนเปˆเปƒเบ™เบšเบฅเบฑเบญเบเบ•เปเปˆเป„เบ›เบžเป‰เบญเบกเบเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เบญเบทเปˆเบ™เป†.

เบ•เบฑเบ™เบกเบตเบฅเปเบฒเบ”เบฑเบšเบ—เบตเปˆเป€เบ„เบฑเปˆเบ‡เบ„เบฑเบ”, เปเบฅเบฐเปเบ•เปˆเบฅเบฐเบ•เบฑเบ™เบ•เปเปˆเบกเบฒเปเบกเปˆเบ™เบชเป‰เบฒเบ‡เบ•เบฑเป‰เบ‡เบ‚เบถเป‰เบ™เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆ hashes เบ‚เบญเบ‡เบ•เบฑเบ™เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ.

เบœเบนเป‰เบชเบปเปˆเบ‡เบ‚เปˆเบฒเบงเบ—เบตเปˆเบกเบตเบเบฒเบ™เปเบšเปˆเบ‡เบ‚เบฑเป‰เบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™ blockchain เปเบ™เบงเปƒเบ”?

เบˆเบธเบ”เบชเปเบฒเบ„เบฑเบ™เปเบกเปˆเบ™เบงเปˆเบฒเบ‚เปเป‰เบ„เบงเบฒเบกเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบ–เบทเบเบฅเบงเบกเบขเบนเปˆเปƒเบ™เบฅเปเบฒเบ”เบฑเบšเบ™เบตเป‰เปเบฅเบฐเบšเปเปˆเบชเบฒเบกเบฒเบ” "เบˆเบฑเบ”เบฅเบฝเบ‡เปƒเบซเบกเปˆ". เบ–เป‰เบฒเบ‚เปเป‰เบ„เบงเบฒเบกเบˆเปเบฒเบ™เบงเบ™เบซเบ™เบถเปˆเบ‡เบ•เบปเบเบขเบนเปˆเปƒเบ™เบšเบฅเบฑเบญเบ, เบ„เปเบฒเบชเบฑเปˆเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเบˆเบฐเบ–เบทเบเบเปเบฒเบ™เบปเบ”เป‚เบ”เบ timestamp เบ‚เปเป‰เบ„เบงเบฒเบก.

เบเบณเบฅเบฑเบ‡เบญเปˆเบฒเบ™เบ‚เปเป‰เบ„เบงเบฒเบก

เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ messenger เบ”เบถเบ‡เป€เบญเบปเบฒเบ—เบธเบฅเบฐเบเปเบฒเบˆเบฒเบ blockchain เบ—เบตเปˆเบ–เบทเบเบชเบปเปˆเบ‡เป„เบ›เบซเบฒเบœเบนเป‰เบฎเบฑเบš. เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบฎเบฑเบ”เบˆเบธเบ”เบชเบดเป‰เบ™เบชเบธเบ” 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 เบงเบดเบ™เบฒเบ—เบต - เบ™เบตเป‰เปเบกเปˆเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบšเบฅเบฑเบญเบเป€เบ„เบทเบญเบ‚เปˆเบฒเบเปƒเบซเบกเปˆเบ›เบฒเบเบปเบ” - เบžเบงเบเป€เบฎเบปเบฒเบกเบฒเบžเป‰เบญเบกเบเบฑเบšเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ socket client-to-node เปเบฅเบฐ node-to-node. เป€เบกเบทเปˆเบญ node เป„เบ”เป‰เบฎเบฑเบšเบ—เบธเบฅเบฐเบเปเบฒเปƒเบซเบกเปˆ, เบกเบฑเบ™เบˆเบฐเบเบงเบ”เบชเบญเบšเบ„เบงเบฒเบกเบ–เบทเบเบ•เป‰เบญเบ‡เบ‚เบญเบ‡เบกเบฑเบ™เปเบฅเบฐเบชเบปเปˆเบ‡เบ•เปเปˆเป„เบ›เบซเบฒ nodes เบญเบทเปˆเบ™เป†. เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเปเบกเปˆเบ™เบกเบตเปƒเบซเป‰เบฅเบนเบเบ„เป‰เบฒ messenger เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เป€เบญเบเบฐเบชเบฑเบ™เป€เบเบตเบ”เบ‚เบถเป‰เบ™เปเบฅเบฐเบฅเบงเบกเบขเบนเปˆเปƒเบ™เบ•เบฑเบ™. เบ”เป‰เบงเบเบงเบดเบ—เบตเบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบฑเบ™เบ—เบต, เบ„เบทเบเบฑเบ™เบเบฑเบšเบœเบนเป‰เบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบฑเบ™เบ—เบต.

เป€เบžเบทเปˆเบญเป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ›เบทเป‰เบกเบ—เบตเปˆเบขเบนเปˆ, เบžเบงเบเป€เบฎเบปเบฒเป€เบฎเบฑเบ” KVS - Key-Value Storage - เบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบ›เบฐเป€เบžเบ”เบญเบทเปˆเบ™ asset เบกเบฑเบ™เบšเปเปˆเปเบกเปˆเบ™ NaCl-box เบ—เบตเปˆเบ–เบทเบเป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”, เปเบ•เปˆ NaCl-secretbox. เบ™เบตเป‰เปเบกเปˆเบ™เบงเบดเบ—เบตเบ—เบตเปˆเบœเบนเป‰เบชเบปเปˆเบ‡เบ‚เปˆเบฒเบงเป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบญเบทเปˆเบ™เป†.

เบเบฒเบ™เป‚เบญเบ™เป„เบŸเบฅเปŒ/เบฎเบนเบšเบžเบฒเบš เปเบฅเบฐเบเบฒเบ™เบชเบปเบ™เบ—เบฐเบ™เบฒเบเบธเปˆเบกเบเบฑเบ‡เบ•เป‰เบญเบ‡เบเบฒเบ™เบงเบฝเบเบซเบผเบฒเบ. เปเบ™เปˆเบ™เบญเบ™, เปƒเบ™เบฎเบนเบšเปเบšเบš blunder-and-blunder เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™ "screwed" เบขเปˆเบฒเบ‡เบงเปˆเบญเบ‡เป„เบง, เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบฎเบฑเบเบชเบฒเบฅเบฐเบ”เบฑเบšเบ”เบฝเบงเบเบฑเบ™เบ‚เบญเบ‡เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบชเปˆเบงเบ™เบ•เบปเบง.

เปเบกเปˆเบ™เปเบฅเป‰เบง, เบเบฑเบ‡เบกเบตเบงเบฝเบเบ—เบตเปˆเบ•เป‰เบญเบ‡เป€เบฎเบฑเบ” - เป‚เบ”เบเบซเบฅเบฑเบเบเบฒเบ™เปเบฅเป‰เบง, เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบชเปˆเบงเบ™เบ•เบปเบงเบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡เบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบœเบนเป‰เปƒเบŠเป‰เบˆเบฐเบšเปเปˆเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบš nodes เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐ, เปเบ•เปˆเบˆเบฐเบเบปเบเบชเบนเบ‡เบšเบปเบ”เบšเบฒเบ”เบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡. เบญเบฑเบ”เบ•เบฒเบชเปˆเบงเบ™เบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰เปƒเบ”เบ—เบตเปˆเบ—เปˆเบฒเบ™เบ„เบดเบ”เบงเปˆเบฒเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰? เบ–เบทเบเบ•เป‰เบญเบ‡เปเบฅเป‰เบง, 0. เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบ™เบตเป‰เป„เบ”เป‰เบšเบฒเบ‡เบชเปˆเบงเบ™เบ”เป‰เบงเบเบชเบฐเบšเบฑเบš Tor เบ‚เบญเบ‡เบœเบนเป‰เบชเบปเปˆเบ‡เบ‚เปˆเบฒเบง.

เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบžเบดเบชเบนเบ”เปเบฅเป‰เบงเบงเปˆเบฒเบœเบนเป‰เบชเบปเปˆเบ‡เบ‚เปˆเบฒเบงเปƒเบ™ blockchain เบชเบฒเบกเบฒเบ”เบกเบตเบขเบนเปˆ. เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰, เบกเบตเบžเบฝเบ‡เปเบ•เปˆเบซเบ™เบถเปˆเบ‡เบ„เบงเบฒเบกเบžเบฐเบเบฒเบเบฒเบกเปƒเบ™เบ›เบต 2012 - เบ‚เปเป‰เบ„เบงเบฒเบก, เป€เบŠเบดเปˆเบ‡เบฅเบปเป‰เบกเป€เบซเบฅเบงเป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเป€เบงเบฅเบฒเบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเบเบฒเบง, เบเบฒเบ™เป‚เบซเบผเบ” CPU, เปเบฅเบฐเบเบฒเบ™เบ‚เบฒเบ”เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบกเบทเบ–เบท.

เปเบฅเบฐเบ„เบงเบฒเบกเบšเปเปˆเบ„เปˆเบญเบเป€เบŠเบทเปˆเบญเบ‡เปˆเบฒเบเป†เปเบกเปˆเบ™เบเป‰เบญเบ™เบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒเบœเบนเป‰เบชเบปเปˆเบ‡เบ‚เปˆเบฒเบงเปƒเบ™ blockchain เปเบกเปˆเบ™เบขเบนเปˆเบเปˆเบญเบ™เป€เบงเบฅเบฒเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ - เบ›เบฐเบŠเบฒเบŠเบปเบ™เบšเปเปˆเบžเป‰เบญเบกเบ—เบตเปˆเบˆเบฐเบฎเบฑเบšเบœเบดเบ”เบŠเบญเบšเบšเบฑเบ™เบŠเบตเบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ, เบเบฒเบ™เป€เบ›เบฑเบ™เป€เบˆเบปเป‰เบฒเบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™เบชเปˆเบงเบ™เบšเบธเบเบ„เบปเบ™เบเบฑเบ‡เบšเปเปˆเบ—เบฑเบ™เป€เบ›เบฑเบ™เปเบ™เบงเป‚เบ™เป‰เบก, เปเบฅเบฐเป€เบ•เบฑเบเป‚เบ™เป‚เบฅเบขเบตเบšเปเปˆเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบกเบตเบ„เบงเบฒเบกเป„เบงเบชเบนเบ‡เปƒเบ™ blockchain. เบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบšเบ”เป‰เบฒเบ™เป€เบ•เบฑเบเป‚เบ™เป‚เบฅเบขเบตเป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ›เบฒเบเบปเบ”เบ•เปเปˆเป„เบ›. เป€เบˆเบปเป‰เบฒเบˆเบฐเป€เบซเบฑเบ™.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™