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-3 āĻāĻŦāĻ 7 āĻ¸ā§āĻĨāĻžāĻ¨ā§āĻ¯āĻŧāĻāĻžāĻŦā§ āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻā§āĻ° āĻāĻĒāĻ° āĻ¸āĻā§āĻāĻžāĻ˛āĻŋāĻ¤ āĻšāĻ¯āĻŧ, āĻāĻŦāĻ āĻĒāĻĻāĻā§āĻˇā§āĻĒ 5-6 āĻšā§āĻ¸ā§āĻā§ āĻ¸āĻā§āĻāĻžāĻ˛āĻŋāĻ¤ āĻšāĻ¯āĻŧāĨ¤
āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻāĻ¨āĻā§āĻ°āĻŋāĻĒāĻļāĻ¨
āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻāĻŋ āĻĒā§āĻ°ā§āĻ°āĻā§āĻ° āĻŦā§āĻ¯āĻā§āĻ¤āĻŋāĻāĻ¤ āĻā§ āĻāĻŦāĻ āĻĒā§āĻ°āĻžāĻĒāĻā§āĻ° āĻ¸āĻ°ā§āĻŦāĻāĻ¨ā§āĻ¨ āĻā§ āĻĻāĻŋāĻ¯āĻŧā§ āĻāĻ¨āĻā§āĻ°āĻŋāĻĒā§āĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻāĻŽāĻ°āĻž āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻ āĻĨā§āĻā§ āĻ¸āĻ°ā§āĻŦāĻāĻ¨ā§āĻ¨ āĻā§ āĻ¨ā§āĻŦ, āĻ¤āĻŦā§ āĻāĻ° āĻāĻ¨ā§āĻ¯, āĻĒā§āĻ°āĻžāĻĒāĻā§āĻ° āĻ
ā§āĻ¯āĻžāĻāĻžāĻāĻ¨ā§āĻāĻāĻŋ āĻ
āĻŦāĻļā§āĻ¯āĻ āĻļā§āĻ°ā§ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§, āĻ
āĻ°ā§āĻĨāĻžā§ āĻāĻŽāĻĒāĻā§āĻˇā§ āĻāĻāĻāĻŋ āĻ˛ā§āĻ¨āĻĻā§āĻ¨ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻāĻĒāĻ¨āĻŋ āĻāĻāĻāĻŋ REST āĻ
āĻ¨ā§āĻ°ā§āĻ§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ GET /api/accounts/getPublicKey?address={ADAMANT address}
, āĻāĻŦāĻ āĻā§āĻ¯āĻžāĻ āĻ˛ā§āĻĄ āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻāĻĨā§āĻĒāĻāĻĨāĻ¨āĻāĻžāĻ°ā§āĻĻā§āĻ° āĻ¸āĻ°ā§āĻŦāĻāĻ¨ā§āĻ¨ āĻā§āĻā§āĻ˛āĻŋ āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§āĻ āĻāĻĒāĻ˛āĻŦā§āĻ§ āĻĨāĻžāĻāĻŦā§ā§ˇ
āĻŽā§āĻ¸ā§āĻā§āĻāĻžāĻ° curve25519xsalsa20poly1305 āĻ
ā§āĻ¯āĻžāĻ˛āĻāĻ°āĻŋāĻĻāĻŽ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻāĻ¨āĻā§āĻ°āĻŋāĻĒā§āĻ āĻāĻ°ā§ (
āĻāĻāĻžāĻ¨ā§ āĻāĻžāĻāĻžāĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻā§āĻ° āĻāĻāĻāĻŋ āĻāĻĻāĻžāĻšāĻ°āĻŖ:
/**
* 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 āĻĻāĻŋāĻ¯āĻŧā§ āĻ˛ā§āĻ¨āĻĻā§āĻ¨āĻāĻŋ āĻšā§āĻ¯āĻžāĻļ āĻāĻ°āĻŋ āĻāĻŦāĻ āĻ¤āĻžāĻ°āĻĒāĻ°ā§ āĻ¸ā§āĻŦāĻžāĻā§āĻˇāĻ° āĻāĻ°āĻŋ 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"
}
āĻ˛ā§āĻ¨āĻĻā§āĻ¨ā§āĻ° āĻŦā§āĻ§āĻ¤āĻž
āĻ¨ā§āĻĄāĻā§āĻ˛āĻŋāĻ° āĻāĻāĻāĻŋ āĻŦāĻŋāĻ¤āĻ°āĻŖ āĻāĻ°āĻž āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ, āĻāĻāĻŽāĻ¤ā§āĻ¯ā§āĻ° āĻāĻĒāĻ° āĻāĻŋāĻ¤ā§āĻ¤āĻŋ āĻāĻ°ā§, āĻ˛ā§āĻ¨āĻĻā§āĻ¨ā§āĻ° āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻāĻŋāĻ° "āĻ¸āĻ¤ā§āĻ¯āĻ¤āĻž" āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŖ āĻāĻ°ā§āĨ¤ āĻāĻžāĻ° āĻāĻžāĻ āĻĨā§āĻā§ āĻāĻŦāĻ āĻāĻžāĻ° āĻāĻžāĻā§, āĻāĻāĻ¨, āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻāĻŋ āĻ āĻ¨ā§āĻ¯ā§āĻ° āĻ¸āĻžāĻĨā§ āĻĒā§āĻ°āĻ¤āĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻŋāĻ¤ āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛ āĻāĻŋāĻ¨āĻž āĻāĻŦāĻ āĻĒāĻžāĻ āĻžāĻ¨ā§āĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ¸āĻ āĻŋāĻāĻāĻžāĻŦā§ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļāĻŋāĻ¤ āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛ āĻāĻŋāĻ¨āĻžāĨ¤ āĻāĻāĻŋ āĻŦā§āĻ˛āĻāĻā§āĻāĻ¨ā§āĻ° āĻāĻāĻāĻŋ āĻ āĻ¤ā§āĻ¯āĻ¨ā§āĻ¤ āĻā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§āĻ°ā§āĻŖ āĻ¸ā§āĻŦāĻŋāĻ§āĻž - āĻ¯āĻžāĻāĻžāĻāĻāĻ°āĻŖā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĻāĻžāĻ¯āĻŧā§ āĻā§āĻ¨ āĻā§āĻ¨ā§āĻĻā§āĻ°ā§āĻ¯āĻŧ āĻāĻžāĻ āĻžāĻŽā§ āĻ¨ā§āĻ āĻāĻŦāĻ āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻ° āĻā§āĻ°āĻŽ āĻāĻŦāĻ āĻ¤āĻžāĻĻā§āĻ° āĻŦāĻŋāĻˇāĻ¯āĻŧāĻŦāĻ¸ā§āĻ¤ā§ āĻāĻžāĻ˛ āĻāĻ°āĻž āĻ¯āĻžāĻŦā§ āĻ¨āĻžāĨ¤
āĻĒā§āĻ°āĻĨāĻŽā§, āĻāĻāĻāĻŋ āĻ¨ā§āĻĄ āĻ¨āĻŋāĻ°ā§āĻā§āĻ˛āĻ¤āĻž āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°ā§, āĻāĻŦāĻ āĻ¤āĻžāĻ°āĻĒāĻ° āĻāĻāĻŋ āĻ āĻ¨ā§āĻ¯āĻĻā§āĻ° āĻāĻžāĻā§ āĻĒāĻžāĻ āĻžāĻ¯āĻŧ - āĻ¯āĻĻāĻŋ āĻ¸āĻāĻā§āĻ¯āĻžāĻāĻ°āĻŋāĻˇā§āĻ āĻŦāĻ˛ā§ āĻ¯ā§ āĻ¸āĻŦāĻāĻŋāĻā§ āĻ āĻŋāĻ āĻāĻā§, āĻ˛ā§āĻ¨āĻĻā§āĻ¨āĻāĻŋ āĻā§āĻāĻ¨ā§āĻ° āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§ āĻŦā§āĻ˛āĻā§ āĻ āĻ¨ā§āĻ¤āĻ°ā§āĻā§āĻā§āĻ¤ āĻāĻ°āĻž āĻšāĻŦā§ - āĻāĻāĻŋ āĻ¸āĻ°ā§āĻŦāĻ¸āĻŽā§āĻŽāĻ¤āĻŋāĨ¤
āĻā§āĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĻāĻžāĻ¯āĻŧā§ āĻ¨ā§āĻĄ āĻā§āĻĄā§āĻ° āĻ
āĻāĻļāĻāĻŋ āĻāĻŋāĻāĻšāĻžāĻŦā§ āĻĻā§āĻāĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§ -
āĻāĻāĻāĻŋ āĻŦā§āĻ˛āĻā§ āĻāĻāĻāĻŋ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻ¸āĻš āĻāĻāĻāĻŋ āĻ˛ā§āĻ¨āĻĻā§āĻ¨ āĻ¸āĻš
āĻ¯āĻĻāĻŋ āĻāĻāĻŽāĻ¤ā§āĻ¯ āĻĒā§āĻāĻā§ āĻ¯āĻžāĻ¯āĻŧ, āĻāĻŽāĻžāĻĻā§āĻ° āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻ° āĻ¸āĻžāĻĨā§ āĻ˛ā§āĻ¨āĻĻā§āĻ¨āĻāĻŋ āĻ āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻŦā§āĻ§ āĻ˛ā§āĻ¨āĻĻā§āĻ¨ā§āĻ° āĻ¸āĻžāĻĨā§ āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§ āĻŦā§āĻ˛āĻā§ āĻ āĻ¨ā§āĻ¤āĻ°ā§āĻā§āĻā§āĻ¤ āĻāĻ°āĻž āĻšāĻŦā§āĨ¤
āĻŦā§āĻ˛āĻāĻā§āĻ˛āĻŋāĻ° āĻāĻāĻāĻŋ āĻāĻ ā§āĻ° āĻā§āĻ°āĻŽ āĻ°āĻ¯āĻŧā§āĻā§ āĻāĻŦāĻ āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§ āĻŦā§āĻ˛āĻāĻā§āĻ˛āĻŋ āĻĒā§āĻ°ā§āĻŦāĻŦāĻ°ā§āĻ¤ā§ āĻŦā§āĻ˛āĻāĻā§āĻ˛āĻŋāĻ° āĻšā§āĻ¯āĻžāĻļāĻā§āĻ˛āĻŋāĻ° āĻāĻĒāĻ° āĻāĻŋāĻ¤ā§āĻ¤āĻŋ āĻāĻ°ā§ āĻāĻ āĻŋāĻ¤ āĻšāĻ¯āĻŧāĨ¤
āĻŦāĻŋāĻ¨ā§āĻĻā§ āĻšāĻ˛ āĻ¯ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻāĻŋāĻ āĻāĻ āĻā§āĻ°āĻŽāĻāĻŋāĻ¤ā§ āĻ
āĻ¨ā§āĻ¤āĻ°ā§āĻā§āĻā§āĻ¤ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§ āĻāĻŦāĻ "āĻĒā§āĻ¨āĻ°ā§āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸" āĻāĻ°āĻž āĻ¯āĻžāĻŦā§ āĻ¨āĻžāĨ¤ āĻ¯āĻĻāĻŋ āĻŦā§āĻļ āĻāĻ¯āĻŧā§āĻāĻāĻŋ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻāĻāĻāĻŋ āĻŦā§āĻ˛āĻā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻĒāĻĄāĻŧā§ āĻ¤āĻŦā§ āĻ¤āĻžāĻĻā§āĻ° āĻ
āĻ°ā§āĻĄāĻžāĻ° āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŋāĻ¤ āĻšāĻŦā§ 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