2017 เจฆเฉ เจธเจผเฉเจฐเฉเจเจค เจตเจฟเฉฑเจ, เจ เจธเฉเจ เจเจฒเจพเจธเจฟเจ P2P เจฎเฉเจธเฉเจเจเจฐเจพเจ เจฆเฉ เจซเจพเจเจฆเจฟเจเจ เจฌเจพเจฐเฉ เจเจฐเจเจพ เจเจฐเจเฉ เจฌเจฒเจพเจเจเฉเจจ [เจจเจพเจฎ เจ เจคเฉ เจฒเจฟเฉฐเจ เจชเฉเจฐเฉเจซเจพเจเจฒ เจตเจฟเฉฑเจ เจนเจจ] เจเฉฑเจคเฉ เจเฉฑเจ เจฎเฉเจธเฉเจเจเจฐ เจฌเจฃเจพเจเจฃเจพ เจธเจผเฉเจฐเฉ เจเฉเจคเจพเฅค
เจชเจพเจธ เจเฉเจคเจพ 2.5
เจธเจพเจฒ, เจ
เจคเฉ เจ
เจธเฉเจ เจเจชเจฃเฉ เจงเจพเจฐเจจเจพ เจฆเฉ เจชเฉเจธเจผเจเฉ เจเจฐเจจ เจฆเฉ เจฏเฉเจ เจนเฉ เจเจ: เจฎเฉเจธเฉเจเจเจฐ เจเจชเจฒเฉเจเฉเจธเจผเจจเจพเจ เจนเฉเจฃ iOS, Web PWA, Windows, GNU/Linux, Mac OS เจ
เจคเฉ Android เจฒเจ เจเจชเจฒเจฌเจง เจนเจจเฅค
เจ
เฉฑเจ เจ
เจธเฉเจ เจคเฉเจนเจพเจจเฉเฉฐ เจฆเฉฑเจธเจพเจเจเฉ เจเจฟ เจฌเจฒเจพเจเจเฉเจจ เจฎเฉเจธเฉเจเจเจฐ เจเจฟเจตเฉเจ เจเฉฐเจฎ เจเจฐเจฆเจพ เจนเฉ เจ
เจคเฉ เจเจฒเจพเจเฉฐเจ เจเจชเจฒเฉเจเฉเจธเจผเจจ เจเจธ เจฆเฉ API เจจเจพเจฒ เจเจฟเจตเฉเจ เจเฉฐเจฎ เจเจฐ เจธเจเจฆเฉเจเจ เจนเจจเฅค
เจ
เจธเฉเจ เจเจพเจนเฉเฉฐเจฆเฉ เจธเฉ เจเจฟ เจฌเจฒเจพเจเจเฉเจจ เจเจฒเจพเจธเจฟเจ P2P เจฎเฉเจธเฉเจเจเจฐเจพเจ เจฆเฉ เจธเฉเจฐเฉฑเจเจฟเจ เจ
เจคเฉ เจเฉเจชเจจเฉเจฏเจคเจพ เจฎเฉเฉฑเจฆเจฟเจเจ เจจเฉเฉฐ เจนเฉฑเจฒ เจเจฐเฉ:
- เจเฉฑเจ เจเจพเจคเจพ เจฌเจฃเจพเจเจฃ เจฒเจ เจเฉฑเจ เจเจฒเจฟเฉฑเจ - เจเฉเจ เจซเฉเจจ เจเจพเจ เจเจฎเฉเจฒ เจจเจนเฉเจ, เจเจกเจฐเฉเฉฑเจธ เจฌเฉเฉฑเจ เจเจพเจ เจญเฉ-เจธเจฅเจพเจจ เจคเฉฑเจ เจเฉเจ เจชเจนเฉเฉฐเจ เจจเจนเฉเจเฅค
- เจตเจพเจฐเจคเจพเจเจพเจฐ เจเจฆเฉ เจตเฉ เจธเจฟเฉฑเจงเฉ เจธเฉฐเจชเจฐเจ เจธเจฅเจพเจชเจค เจจเจนเฉเจ เจเจฐเจฆเฉ; เจธเจพเจฐเฉ เจธเฉฐเจเจพเจฐ เจจเฉเจกเจพเจ เจฆเฉ เจตเฉฐเจกเฉ เจชเฉเจฐเจฃเจพเจฒเฉ เจฆเฉเจเจฐเจพ เจนเฉเฉฐเจฆเฉ เจนเจจเฅค เจเจชเจญเฉเจเจคเจพเจตเจพเจ เจฆเฉ IP เจชเจคเฉ เจเฉฑเจ เจฆเฉเจเฉ เจคเฉฑเจ เจชเจนเฉเฉฐเจเจฏเฉเจ เจจเจนเฉเจ เจนเจจเฅค
- เจธเจพเจฐเฉ เจธเฉเจจเฉเจนเฉ Encrypted End-to-End curve25519xsalsa20poly1305 เจนเจจเฅค เจ เจเจฟเจนเจพ เจฒเจเจฆเจพ เจนเฉ เจเจฟ เจเจน เจเจฟเจธเฉ เจจเฉเฉฐ เจนเฉเจฐเจพเจจ เจจเจนเฉเจ เจเจฐเฉเจเจพ, เจชเจฐ เจธเจพเจกเจพ เจธเจฐเฉเจค เจเฉเจก เจเฉเฉฑเจฒเฉเจนเจพ เจนเฉ.
- MITM เจนเจฎเจฒเฉ เจจเฉเฉฐ เจฌเจพเจนเจฐ เจฐเฉฑเจเจฟเจ เจเจฟเจ เจนเฉ - เจนเจฐเฉเจ เจธเฉเจจเฉเจนเจพ เจเฉฑเจ เจฒเฉเจฃ-เจฆเฉเจฃ เจนเฉ เจ เจคเฉ Ed25519 EdDSA เจฆเฉเจเจฐเจพ เจนเจธเจคเจพเจเจฐเจฟเจค เจนเฉเฅค
- เจธเฉเจจเฉเจนเจพ เจเจธ เจฆเฉ เจเจชเจฃเฉ เจฌเจฒเจพเจ เจตเจฟเฉฑเจ เจเจคเจฎ เจนเฉเฉฐเจฆเจพ เจนเฉ. เจเจเจธเจพเจฐเจคเจพ เจ
เจคเฉ
timestamp
เจคเฉเจธเฉเจ เจฌเจฒเจพเจเจพเจ เจจเฉเฉฐ เจ เฉเจ เจจเจนเฉเจ เจเจฐ เจธเจเจฆเฉ เจนเฉ, เจ เจคเฉ เจเจธเจฒเจ เจธเฉเจจเฉเจนเจฟเจเจ เจฆเจพ เจเฉเจฐเจฎ. - "เจฎเฉเจ เจเจน เจจเจนเฉเจ เจเจฟเจนเจพ" เจฌเจฒเจพเจเจเฉเจจ 'เจคเฉ เจธเฉฐเจฆเฉเจธเจผเจพเจ เจจเจพเจฒ เจเฉฐเจฎ เจจเจนเฉเจ เจเจฐเฉเจเจพเฅค
- เจเฉฑเจฅเฉ เจเฉเจ เจเฉเจเจฆเจฐเฉ เจขเจพเจเจเจพ เจจเจนเฉเจ เจนเฉ เจเฉ เจธเฉฐเจฆเฉเจธเจผ เจฆเฉ "เจชเฉเจฐเจฎเจพเจฃเจฟเจเจคเจพ" เจฆเฉ เจเจพเจเจ เจเจฐเจฆเจพ เจนเฉเฅค เจเจน เจธเจนเจฟเจฎเจคเฉ เจฆเฉ เจ เจงเจพเจฐ เจคเฉ เจจเฉเจกเจพเจ เจฆเฉ เจตเฉฐเจกเฉ เจชเฉเจฐเจฃเจพเจฒเฉ เจฆเฉเจเจฐเจพ เจเฉเจคเจพ เจเจพเจเจฆเจพ เจนเฉ, เจ เจคเฉ เจเจน เจเจชเจญเฉเจเจคเจพเจตเจพเจ เจฆเฉ เจฎเจฒเจเฉเจ เจค เจนเฉเฅค
- เจธเฉเจเจธเจฐเจธเจผเจฟเจช เจฆเฉ เจ เจธเฉฐเจญเจตเจคเจพ - เจเจพเจคเจฟเจเจ เจจเฉเฉฐ เจฌเจฒเฉเจ เจจเจนเฉเจ เจเฉเจคเจพ เจเจพ เจธเจเจฆเจพ เจ เจคเฉ เจธเฉฐเจฆเฉเจธเจผเจพเจ เจจเฉเฉฐ เจฎเจฟเจเจพเจเจ เจจเจนเฉเจ เจเจพ เจธเจเจฆเจพเฅค
- เจฌเจฒเจพเจเจเฉเจจ 2FA SMS เจฆเฉเจเจฐเจพ เจจเจฐเจ 2FA เจฆเจพ เจตเจฟเจเจฒเจช เจนเฉ,
เจฌเจนเฉเจค เจธเจพเจฐเฉ เจธเจฟเจนเจค เจฌเจฐเจฌเจพเจฆ เจเฉเจคเฉเฅค - เจเจฟเจธเฉ เจตเฉ เจธเจฎเฉเจ เจเจฟเจธเฉ เจตเฉ เจกเจฟเจตเจพเจเจธ เจคเฉเจ เจคเฉเจนเจพเจกเฉเจเจ เจธเจพเจฐเฉเจเจ เจเฉฑเจฒเจฌเจพเจคเจพเจ เจจเฉเฉฐ เจชเฉเจฐเจพเจชเจค เจเจฐเจจ เจฆเฉ เจฏเฉเจเจคเจพ เจฆเจพ เจฎเจคเจฒเจฌ เจนเฉ เจเจฟ เจคเฉเจนเจพเจจเฉเฉฐ เจธเจฅเจพเจจเจ เจคเฉเจฐ 'เจคเฉ เจเฉฑเจฒเจฌเจพเจค เจจเฉเฉฐ เจธเจเฉเจฐ เจเจฐเจจ เจฆเฉ เจฒเฉเฉ เจจเจนเฉเจ เจนเฉเฅค
- เจธเฉเจจเฉเจนเจพ เจกเจฟเจฒเฉเจตเจฐเฉ เจฆเฉ เจชเฉเจธเจผเจเฉ. เจเจชเจญเฉเจเจคเจพ เจฆเฉ เจกเจฟเจตเจพเจเจธ เจฒเจ เจจเจนเฉเจ, เจชเจฐ เจจเฉเจเจตเจฐเจ เจฒเจ. เจ เจธเจฒ เจตเจฟเฉฑเจ, เจเจน เจคเฉเจนเจพเจกเฉ เจธเฉฐเจฆเฉเจธเจผ เจจเฉเฉฐ เจชเฉเฉเจนเจจ เจฆเฉ เจชเฉเจฐเจพเจชเจคเจเจฐเจคเจพ เจฆเฉ เจฏเฉเจเจคเจพ เจฆเฉ เจชเฉเจธเจผเจเฉ เจนเฉเฅค เจเจน เจจเจพเจเจผเฉเจ เจธเฉเจเจจเจพเจตเจพเจ เจญเฉเจเจฃ เจฒเจ เจเฉฑเจ เจเจชเจฏเฉเจเฉ เจตเจฟเจธเจผเฉเจธเจผเจคเจพ เจนเฉเฅค
เจฌเจฒเจพเจเจเฉเจจ เจฒเจพเจญเจพเจ เจตเจฟเฉฑเจ เจเฉเจฐเจฟเจชเจเฉเจเจฐเฉฐเจธเฉ เจเจฅเจฐเจฟเจ เจฎ, เจกเฉเจเฉเจเฉเจเจจ, เจฒเจฟเจธเจ, เจกเฉเจธเจผ, เจฌเจฟเจเจเฉเจเจจ (เจเจน เจ เจเฉ เจตเฉ เจเจพเจฐเฉ เจนเฉ) เจ เจคเฉ เจเฉเจเจพเจ เจตเจฟเฉฑเจ เจเฉเจเจจ เจญเฉเจเจฃ เจฆเฉ เจฏเฉเจเจคเจพ เจฆเฉ เจจเจพเจฒ เจจเจเจผเจฆเฉเจเฉ เจเจเฉเจเจฐเจฃ เจธเจผเจพเจฎเจฒ เจนเฉเฅค เจ เจธเฉเจ เจเฉฑเจ เจฌเจฟเจฒเจ-เจเจจ เจเฉเจฐเจฟเจชเจเฉ เจเจเจธเจเฉเจเจเจฐ เจตเฉ เจฌเจฃเจพเจเจ เจนเฉเฅค
เจ เจคเฉ เจซเจฟเจฐ - เจเจน เจธเจญ เจเจฟเจตเฉเจ เจเฉฐเจฎ เจเจฐเจฆเจพ เจนเฉ.
เจเฉฑเจ เจธเฉเจจเฉเจนเจพ เจเฉฑเจ เจฒเฉเจฃ-เจฆเฉเจฃ เจนเฉ
เจนเจฐ เจเฉเจ เจชเจนเจฟเจฒเจพเจ เจนเฉ เจเจธ เจคเฉฑเจฅ เจฆเจพ เจเจฆเฉ เจนเฉ เจเจฟ เจฌเจฒเจพเจเจเฉเจจ เจเฉเจฐเจพเจเจธเจซเจฐ เจเฉเจเจจเจพเจ (เจธเจฟเฉฑเจเฉ) เจตเจฟเฉฑเจ เจเฉเจฐเจพเจเจเฉเจเจธเจผเจจเจพเจ เจเฉฑเจ เจเจชเจญเฉเจเจคเจพ เจคเฉเจ เจฆเฉเจเฉ เจคเฉฑเจ เจชเจนเฉเฉฐเจเจฆเฉเจเจ เจนเจจ. เจฌเจฟเจเจเฉเจเจจ เจตเจพเจเจเฅค เจ เจธเฉเจ เจธเฉฐเจฆเฉเจธเจผเจพเจ เจจเฉเฉฐ เจธเฉฐเจเจพเจฐเจฟเจค เจเจฐเจจ เจฒเจ เจเฉฑเจ เจตเจฟเจธเจผเฉเจธเจผ เจเจฟเจธเจฎ เจฆเจพ เจฒเฉเจฃ-เจฆเฉเจฃ เจฌเจฃเจพเจเจ เจนเฉเฅค
เจฌเจฒเจพเจเจเฉเจจ 'เจคเฉ เจเฉฑเจ เจฎเฉเจธเฉเจเจเจฐ เจตเจฟเฉฑเจ เจธเฉเจจเฉเจนเจพ เจญเฉเจเจฃ เจฒเจ, เจคเฉเจนเจพเจจเฉเฉฐ เจเจ เจชเฉเจพเจตเจพเจ เจตเจฟเฉฑเจเฉเจ เจฒเฉฐเจเจฃ เจฆเฉ เจฒเฉเฉ เจนเฉ:
- เจธเฉเจจเฉเจนเจพ เจเฉเจเจธเจ เจจเฉเฉฐ เจเจจเจเฉเจฐเจฟเจชเจ เจเจฐเฉ
- เจเฉฑเจ เจฒเฉเจฃ-เจฆเฉเจฃ เจตเจฟเฉฑเจ เจธเจฟเจซเจฐเจเฉเจเจธเจ เจชเจพเจ
- เจฒเฉเจฃ-เจฆเฉเจฃ 'เจคเฉ เจฆเจธเจคเจเจค เจเจฐเฉ
- เจเจฟเจธเฉ เจตเฉ เจจเฉเฉฑเจเจตเจฐเจ เจจเฉเจก เจจเฉเฉฐ เจเฉฑเจ เจฒเฉเจฃ-เจฆเฉเจฃ เจญเฉเจเฉ
- เจจเฉเจกเจพเจ เจฆเฉ เจเฉฑเจ เจตเฉฐเจกเฉ เจชเฉเจฐเจฃเจพเจฒเฉ เจเฉฑเจ เจธเฉฐเจฆเฉเจธเจผ เจฆเฉ "เจชเฉเจฐเจฎเจพเจฃเจฟเจเจคเจพ" เจจเฉเฉฐ เจจเจฟเจฐเจงเจพเจฐเจค เจเจฐเจฆเฉ เจนเฉ
- เจเฉ เจธเจญ เจเฉเจ เจ เฉเจ เจนเฉ, เจคเจพเจ เจธเฉเจจเฉเจนเฉ เจจเจพเจฒ เจฒเฉเจฃ-เจฆเฉเจฃ เจจเฉเฉฐ เจ เจเจฒเฉ เจฌเจฒเจพเจ เจตเจฟเฉฑเจ เจธเจผเจพเจฎเจฒ เจเฉเจคเจพ เจเจฟเจ เจนเฉ
- เจชเฉเจฐเจพเจชเจคเจเจฐเจคเจพ เจธเฉเจจเฉเจนเจพ เจฒเฉเจฃ-เจฆเฉเจฃ เจจเฉเฉฐ เจฎเฉเฉ เจชเฉเจฐเจพเจชเจค เจเจฐเจฆเจพ เจนเฉ เจ เจคเฉ เจกเฉเจเฉเจฐเจฟเจชเจ เจเจฐเจฆเจพ เจนเฉ
เจชเฉเจพเจ 1โ3 เจ เจคเฉ 7 เจเจฒเจพเจเฉฐเจ 'เจคเฉ เจธเจฅเจพเจจเจ เจคเฉเจฐ 'เจคเฉ เจเฉเจคเฉ เจเจพเจเจฆเฉ เจนเจจ, เจ เจคเฉ เจเจฆเจฎ 5-6 เจฎเฉเจเจผเจฌเจพเจจเจพเจ 'เจคเฉ เจเฉเจคเฉ เจเจพเจเจฆเฉ เจนเจจเฅค
เจธเฉเจจเฉเจนเจพ เจเจจเจเฉเจฐเจฟเจชเจธเจผเจจ
เจธเฉเจจเฉเจนเจพ เจญเฉเจเจฃ เจตเจพเจฒเฉ เจฆเฉ เจจเจฟเฉฑเจเฉ เจเฉเฉฐเจเฉ เจ
เจคเฉ เจชเฉเจฐเจพเจชเจคเจเจฐเจคเจพ เจฆเฉ เจเจจเจคเจ เจเฉเฉฐเจเฉ เจจเจพเจฒ เจเจจเจเฉเจฐเจฟเจชเจ เจเฉเจคเจพ เจเจฟเจ เจนเฉเฅค เจ
เจธเฉเจ เจจเฉเฉฑเจเจตเจฐเจ เจคเฉเจ เจเจจเจคเจ เจเฉเฉฐเจเฉ เจฒเจตเจพเจเจเฉ, เจชเจฐ เจเจธเจฆเฉ เจฒเจ, เจชเฉเจฐเจพเจชเจคเจเจฐเจคเจพ เจฆเจพ เจเจพเจคเจพ เจธเจผเฉเจฐเฉ เจเฉเจคเจพ เจเจพเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉ, เจฏเจพเจจเฉ, เจเฉฑเจเฉ-เจเฉฑเจ เจเฉฑเจ เจฒเฉเจฃ-เจฆเฉเจฃ เจนเฉเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉเฅค เจคเฉเจธเฉเจ เจเฉฑเจ REST เจฌเฉเจจเจคเฉ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐ เจธเจเจฆเฉ เจนเฉ GET /api/accounts/getPublicKey?address={ADAMANT address}
, เจ
เจคเฉ เจเฉเจเจพเจ เจจเฉเฉฐ เจฒเฉเจก เจเจฐเจจ เจตเฉเจฒเฉ, เจตเจพเจฐเจคเจพเจเจพเจฐเจพเจ เจฆเฉเจเจ เจเจจเจคเจ เจเฉเฉฐเจเฉเจเจ เจชเจนเจฟเจฒเจพเจ เจนเฉ เจเจชเจฒเจฌเจง เจนเฉเจฃเจเฉเจเจเฅค
เจฎเฉเจธเฉเจเจเจฐ เจเจฐเจต25519xsalsa20poly1305 เจเจฒเจเฉเจฐเจฟเจฆเจฎ (
เจเฉฑเจฅเฉ 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
- noncetype
- เจธเฉเจจเฉเจนเจพ เจเจฟเจธเจฎ
เจธเฉฐเจฆเฉเจธเจผเจพเจ เจจเฉเฉฐ เจตเฉ เจเจฟเจธเจฎเจพเจ เจตเจฟเฉฑเจ เจตเฉฐเจกเจฟเจ เจเจฟเจ เจนเฉเฅค เจ
เจธเจฒ เจตเจฟเฉฑเจ, เจชเฉเจฐเจพเจฎเฉเจเจฐ 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 เจจเจพเจฒ เจฒเฉเจฃ-เจฆเฉเจฃ เจจเฉเฉฐ เจนเฉเจธเจผ เจเจฐเจฆเฉ เจนเจพเจ เจ
เจคเฉ เจซเจฟเจฐ เจเจธ 'เจคเฉ เจฆเจธเจคเจเจค เจเจฐเจฆเฉ เจนเจพเจ 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 'เจคเฉ เจฆเฉเจเจฟเจ เจเจพ เจธเจเจฆเจพ เจนเฉ -
เจเฉฑเจ เจฌเจฒเจพเจ เจตเจฟเฉฑเจ เจเฉฑเจ เจธเฉเจจเฉเจนเฉ เจฆเฉ เจจเจพเจฒ เจเฉฑเจ เจฒเฉเจฃ-เจฆเฉเจฃ เจธเจฎเฉเจค
เจเฉเจเจฐ เจธเจนเจฟเจฎเจคเฉ เจฌเจฃ เจเจพเจเจฆเฉ เจนเฉ, เจคเจพเจ เจธเจพเจกเฉ เจธเฉเจจเฉเจนเฉ เจจเจพเจฒ เจฒเฉเจฃ-เจฆเฉเจฃ เจจเฉเฉฐ เจนเฉเจฐ เจตเฉเจง เจฒเฉเจฃ-เจฆเฉเจฃ เจฆเฉ เจจเจพเจฒ เจ เจเจฒเฉ เจฌเจฒเจพเจ เจตเจฟเฉฑเจ เจธเจผเจพเจฎเจฒ เจเฉเจคเจพ เจเจพเจตเฉเจเจพเฅค
เจฌเจฒเจพเจเจพเจ เจฆเจพ เจเฉฑเจ เจธเจเจผเจค เจเฉเจฐเจฎ เจนเฉเฉฐเจฆเจพ เจนเฉ, เจ เจคเฉ เจนเจฐเฉเจ เจ เจเจฒเฉ เจฌเจฒเจพเจ เจฆเจพ เจเจ เจจ เจชเจฟเจเจฒเฉ เจฌเจฒเจพเจเจพเจ เจฆเฉ เจนเฉเจธเจผเจพเจ เจฆเฉ เจ เจงเจพเจฐ เจคเฉ เจเฉเจคเจพ เจเจพเจเจฆเจพ เจนเฉเฅค
เจฌเจฟเฉฐเจฆเฉ เจเจน เจนเฉ เจเจฟ เจธเจพเจกเจพ เจธเฉฐเจฆเฉเจธเจผ เจตเฉ เจเจธ เจเฉเจฐเจฎ เจตเจฟเฉฑเจ เจธเจผเจพเจฎเจฒ เจนเฉ เจ
เจคเฉ "เจฎเฉเฉ เจตเจฟเจตเจธเจฅเจฟเจค" เจจเจนเฉเจ เจเฉเจคเจพ เจเจพ เจธเจเจฆเจพ เจนเฉเฅค เจเฉเจเจฐ เจเจ เจธเฉเจจเฉเจนเฉ เจเฉฑเจ เจฌเจฒเจพเจ เจตเจฟเฉฑเจ เจเจเจเจฆเฉ เจนเจจ, เจคเจพเจ เจเจนเจจเจพเจ เจฆเจพ เจเจฐเจกเจฐ เจฆเฉเจเจฐเจพ เจจเจฟเจฐเจงเจพเจฐเจค เจเฉเจคเจพ เจเจพเจตเฉเจเจพ 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-เจฌเจพเจเจธ เจจเจนเฉเจ เจนเฉ เจเฉ เจเจจเจเฉเจฐเจฟเจชเจเจก เจนเฉ, เจชเจฐ
เจซเจพเจเจฒ/เจเจฟเฉฑเจคเจฐ เจเฉเจฐเจพเจเจธเจซเจฐ เจ เจคเฉ เจธเจฎเฉเจน เจเฉเจเจพเจ เจฒเจ เจ เจเฉ เจตเฉ เจฌเจนเฉเจค เจเฉฐเจฎ เจฆเฉ เจฒเฉเฉ เจนเฉเฉฐเจฆเฉ เจนเฉเฅค เจฌเฉเจธเจผเฉฑเจ, เจเจฒเจคเฉ-เจ เจคเฉ-เจเจฒเจคเฉ เจซเจพเจฐเจฎเฉเจ เจตเจฟเฉฑเจ เจเจธ เจจเฉเฉฐ เจคเฉเจเจผเฉ เจจเจพเจฒ "เจฌเจฆเจฒเจฟเจ" เจเจพ เจธเจเจฆเจพ เจนเฉ, เจชเจฐ เจ เจธเฉเจ เจเจธเฉ เจชเฉฑเจงเจฐ เจฆเฉ เจเฉเจชเจจเฉเจฏเจคเจพ เจจเฉเฉฐ เจฌเจฐเจเจฐเจพเจฐ เจฐเฉฑเจเจฃเจพ เจเจพเจนเฉเฉฐเจฆเฉ เจนเจพเจเฅค
เจนเจพเจ, เจ เจเฉ เจตเฉ เจเฉฐเจฎ เจเจฐเจจเจพ เจฌเจพเจเฉ เจนเฉ - เจเจฆเจฐเจธเจผเจ เจคเฉเจฐ 'เจคเฉ, เจ เจธเจฒ เจเฉเจชเจจเฉเจฏเจคเจพ เจเจน เจฎเฉฐเจจเจฆเฉ เจนเฉ เจเจฟ เจเจชเจญเฉเจเจคเจพ เจเจจเจคเจ เจจเฉเจเจตเจฐเจ เจจเฉเจกเจพเจ เจจเจพเจฒ เจจเจนเฉเจ เจเฉเฉเจจเจเฉ, เจชเจฐ เจเจชเจฃเฉ เจเจช เจจเฉเฉฐ เจตเจงเจพเจเจฃเจเฉ. เจคเฉเจนเจพเจกเฉ เจตเจฟเจเจพเจฐ เจตเจฟเฉฑเจ เจเจฟเฉฐเจจเฉ เจชเฉเจฐเจคเฉเจธเจผเจค เจเจชเจญเฉเจเจคเจพ เจเจน เจเจฐเจฆเฉ เจนเจจ? เจเจน เจธเจนเฉ เจนเฉ, 0. เจ เจธเฉเจ เจฎเฉเจธเฉเจเจเจฐ เจฆเฉ เจเฉเจฐ เจธเฉฐเจธเจเจฐเจฃ เจจเจพเจฒ เจเจธ เจฎเฉเฉฑเจฆเฉ เจจเฉเฉฐ เจ เฉฐเจธเจผเจ เจคเฉเจฐ 'เจคเฉ เจนเฉฑเจฒ เจเจฐเจจ เจฆเฉ เจฏเฉเจ เจธเฉเฅค
เจ
เจธเฉเจ เจธเจพเจฌเจค เจเฉเจคเจพ เจนเฉ เจเจฟ เจฌเจฒเจพเจเจเฉเจจ 'เจคเฉ เจเฉฑเจ เจฆเฉเจค เจฎเฉเจเฉเจฆ เจนเฉ เจธเจเจฆเจพ เจนเฉ. เจชเจนเจฟเจฒเจพเจ, 2012 เจตเจฟเฉฑเจ เจธเจฟเจฐเจซ เจเฉฑเจ เจเฉเจธเจผเจฟเจธเจผ เจธเฉ -
เจ
เจคเฉ เจธเฉฐเจฆเฉเจนเจตเจพเจฆ เจเจธ เจคเฉฑเจฅ เจฆเฉ เจเจพเจฐเจจ เจนเฉ เจเจฟ เจฌเจฒเฉเจเจเฉเจจ 'เจคเฉ เจฎเฉเจธเฉเจเจเจฐ เจเจชเจฃเฉ เจธเจฎเฉเจ เจคเฉเจ เจ
เฉฑเจเฉ เจนเจจ - เจฒเฉเจ เจเจชเจฃเฉ เจเจพเจคเฉ เจฆเฉ เจเจผเจฟเฉฐเจฎเฉเจตเจพเจฐเฉ เจฒเฉเจฃ เจฒเจ เจคเจฟเจเจฐ เจจเจนเฉเจ เจนเจจ, เจจเจฟเฉฑเจเฉ เจเจพเจฃเจเจพเจฐเฉ เจฆเจพ เจฎเจพเจฒเจ เจนเฉเจฃเจพ เจ
เจเฉ เจเฉฑเจ เจฐเฉเจเจพเจจ เจจเจนเฉเจ เจนเฉ, เจ
เจคเฉ เจคเจเจจเจพเจฒเฉเจเฉ เจฌเจฒเฉเจเจเฉเจจ 'เจคเฉ เจเฉฑเจ เจเจคเฉ เจฆเฉ เจเจเจฟเจ เจจเจนเฉเจ เจฆเจฟเฉฐเจฆเฉ เจนเฉเฅค เจธเจพเจกเฉ เจชเฉเจฐเฉเจเฉเจเจ เจฆเฉ เจนเฉเจฐ เจคเจเจจเฉเจเฉ เจเจจเจพเจฒเจพเจ เจ
เฉฑเจเฉ เจฆเจฟเจเจพเจ เจฆเฉเจฃเจเฉเฅค เจคเฉเจธเฉเจ เจฆเฉเจเฉเจเฉเฅค
เจธเจฐเฉเจค: www.habr.com