рдмреНрд▓реЙрдХрдЪреЗрди рдкрд░ рд╡рд┐рдХреЗрдВрджреНрд░реАрдХреГрдд рдореИрд╕реЗрдВрдЬрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?

2017 рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рд╣рдордиреЗ рдХреНрд▓рд╛рд╕рд┐рдХ рдкреА2рдкреА рдореИрд╕реЗрдВрдЬрд░ рдХреЗ рдлрд╛рдпрджреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдХреЗ рдмреНрд▓реЙрдХрдЪреЗрди рдкрд░ рдПрдХ рдореИрд╕реЗрдВрдЬрд░ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ [рдирд╛рдо рдФрд░ рд▓рд┐рдВрдХ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдореЗрдВ рд╣реИрдВ]ред

рдЧрдпрд╛ 2.5 рд╡рд░реНрд╖, рдФрд░ рд╣рдо рдЕрдкрдиреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗ: рдореИрд╕реЗрдВрдЬрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрдм рдЖрдИрдУрдПрд╕, рд╡реЗрдм рдкреАрдбрдмреНрд▓реНрдпреВрдП, рд╡рд┐рдВрдбреЛрдЬ, рдЬреАрдПрдирдпреВ/рд▓рд┐рдирдХреНрд╕, рдореИрдХ рдУрдПрд╕ рдФрд░ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИрдВред

рдЖрдЬ рд╣рдо рдЖрдкрдХреЛ рдмрддрд╛рдПрдВрдЧреЗ рдХрд┐ рдмреНрд▓реЙрдХрдЪреЗрди рдореИрд╕реЗрдВрдЬрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрд╕рдХреЗ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдмреНрд▓реЙрдХрдЪреЗрди рдкрд░ рд╡рд┐рдХреЗрдВрджреНрд░реАрдХреГрдд рдореИрд╕реЗрдВрдЬрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?

рд╣рдо рдЪрд╛рд╣рддреЗ рдереЗ рдХрд┐ рдмреНрд▓реЙрдХрдЪреЗрди рдХреНрд▓рд╛рд╕рд┐рдХ рдкреА2рдкреА рдореИрд╕реЗрдВрдЬрд░ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдФрд░ рдЧреЛрдкрдиреАрдпрддрд╛ рд╕рдВрдмрдВрдзреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░реЗ:

  • рдЦрд╛рддрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд▓рд┐рдХ - рдХреЛрдИ рдлреЛрди рдпрд╛ рдИрдореЗрд▓ рдирд╣реАрдВ, рдкрддрд╛ рдкреБрд╕реНрддрд┐рдХрд╛рдУрдВ рдпрд╛ рдЬрд┐рдпреЛрд▓реЛрдХреЗрд╢рди рддрдХ рдХреЛрдИ рдкрд╣реБрдВрдЪ рдирд╣реАрдВред
  • рд╡рд╛рд░реНрддрд╛рдХрд╛рд░ рдХрднреА рднреА рд╕реАрдзреЗ рд╕рдВрдмрдВрдз рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ; рд╕рднреА рд╕рдВрдЪрд╛рд░ рдиреЛрдбреНрд╕ рдХреА рдПрдХ рд╡рд┐рддрд░рд┐рдд рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрддреЗ рд╣реИрдВред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдЖрдИрдкреА рдкрддреЗ рдПрдХ-рджреВрд╕рд░реЗ рддрдХ рдкрд╣реБрдВрдЪ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИрдВред
  • рд╕рднреА рд╕рдВрджреЗрд╢ рдПрдВрдб-рдЯреВ-рдПрдВрдб рдХрд░реНрд╡25519xsalsa20poly1305 рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рд╣реИрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдХрд┐рд╕реА рдХреЛ рдЖрд╢реНрдЪрд░реНрдп рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░рд╛ рд╕реЛрд░реНрд╕ рдХреЛрдб рдЦреБрд▓рд╛ рд╣реИред
  • MITM рд╣рдорд▓реЗ рдХреЛ рдмрд╛рд╣рд░ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ - рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрджреЗрд╢ рдПрдХ рд▓реЗрдирджреЗрди рд╣реИ рдФрд░ Ed25519 EdDSA рджреНрд╡рд╛рд░рд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд╣реИред
  • рд╕рдВрджреЗрд╢ рдЕрдкрдиреЗ рдмреНрд▓реЙрдХ рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ. рд╕рдВрдЧрддрд┐ рдФрд░ timestamp рдЖрдк рдмреНрд▓реЙрдХ рдФрд░ рдЗрд╕рд▓рд┐рдП рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдХреНрд░рдо рдХреЛ рдареАрдХ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
  • "рдореИрдВрдиреЗ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд╣рд╛" рдмреНрд▓реЙрдХрдЪреЗрди рдкрд░ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
  • рдРрд╕реА рдХреЛрдИ рдХреЗрдВрджреНрд░реАрдп рд╕рдВрд░рдЪрдирд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рд╕рдВрджреЗрд╢ рдХреА "рдкреНрд░рд╛рдорд╛рдгрд┐рдХрддрд╛" рдХреА рдЬрд╛рдБрдЪ рдХрд░рддреА рд╣реЛред рдпрд╣ рдЖрдо рд╕рд╣рдорддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдиреЛрдбреНрд╕ рдХреА рдПрдХ рд╡рд┐рддрд░рд┐рдд рдкреНрд░рдгрд╛рд▓реА рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдкрд╛рд╕ рд╣реЛрддрд╛ рд╣реИред
  • рд╕реЗрдВрд╕рд░рд╢рд┐рдк рдХреА рдЕрд╕рдВрднрд╡рддрд╛ - рдЦрд╛рддреЛрдВ рдХреЛ рдмреНрд▓реЙрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдФрд░ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╣рдЯрд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ред
  • рдмреНрд▓реЙрдХрдЪреЗрди 2FA рдПрд╕рдПрдордПрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд╛рд░рдХреАрдп 2FA рдХрд╛ рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИ, рдмрд╣реБрдд рд╕рд╛рд░рд╛ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдмрд░реНрдмрд╛рдж рдХрд░ рджрд┐рдпрд╛.
  • рдХрд┐рд╕реА рднреА рд╕рдордп рдХрд┐рд╕реА рднреА рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рдЖрдкрдХреА рд╕рднреА рдмрд╛рддрдЪреАрдд рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдмрд╛рддрдЪреАрдд рдХреЛ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
  • рд╕рдВрджреЗрд╢ рд╡рд┐рддрд░рдг рдХреА рдкреБрд╖реНрдЯрд┐. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ред рдореВрд▓рддрдГ, рдпрд╣ рдЖрдкрдХреЗ рд╕рдВрджреЗрд╢ рдХреЛ рдкрдврд╝рдиреЗ рдХреА рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдХреА рдХреНрд╖рдорддрд╛ рдХреА рдкреБрд╖реНрдЯрд┐ рд╣реИред рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реВрдЪрдирд╛рдПрдВ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдЙрдкрдпреЛрдЧреА рд╕реБрд╡рд┐рдзрд╛ рд╣реИред

рдмреНрд▓реЙрдХрдЪреЗрди рдХреЗ рд▓рд╛рднреЛрдВ рдореЗрдВ рдХреНрд░рд┐рдкреНрдЯреЛрдХрд░реЗрдВрд╕реА рдПрдереЗрд░рд┐рдпрдо, рдбреЙрдЧрдХреЙрдЗрди, рд▓рд┐рд╕реНрдХ, рдбреИрд╢, рдмрд┐рдЯрдХреЙрдЗрди (рдпрд╣ рдЕрднреА рднреА рдкреНрд░рдЧрддрд┐ рдкрд░ рд╣реИ) рдФрд░ рдЪреИрдЯ рдореЗрдВ рдЯреЛрдХрди рднреЗрдЬрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдШрдирд┐рд╖реНрда рдПрдХреАрдХрд░рдг рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред рд╣рдордиреЗ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд░реНрдорд┐рдд рдХреНрд░рд┐рдкреНрдЯреЛ рдПрдХреНрд╕рдЪреЗрдВрдЬрд░ рднреА рдмрдирд╛рдпрд╛ рд╣реИред

рдФрд░ рдлрд┐рд░ - рдпрд╣ рд╕рдм рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рд╕рдВрджреЗрд╢ рдПрдХ рд▓реЗрди-рджреЗрди рд╣реИ

рд╣рд░ рдХреЛрдИ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рддрдереНрдп рдХрд╛ рдЖрджреА рд╣реИ рдХрд┐ рдмреНрд▓реЙрдХрдЪреЗрди рдореЗрдВ рд▓реЗрдирджреЗрди рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рджреВрд╕рд░реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрдХ рдЯреЛрдХрди (рд╕рд┐рдХреНрдХреЗ) рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдмрд┐рдЯрдХреЙрдЗрди рдХреА рддрд░рд╣. рд╣рдордиреЗ рд╕рдВрджреЗрд╢ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд▓реЗрдирджреЗрди рдмрдирд╛рдпрд╛ред

рдмреНрд▓реЙрдХрдЪреЗрди рдкрд░ рдореИрд╕реЗрдВрдЬрд░ рдореЗрдВ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХрдИ рдЪрд░рдгреЛрдВ рд╕реЗ рдЧреБрдЬрд░рдирд╛ рд╣реЛрдЧрд╛:

  1. рд╕рдВрджреЗрд╢ рдкрд╛рда рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░реЗрдВ
  2. рд▓реЗрди-рджреЗрди рдореЗрдВ рд╕рд┐рдлрд░рдЯреЗрдХреНрд╕реНрдЯ рдбрд╛рд▓реЗрдВ
  3. рд▓реЗрди-рджреЗрди рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░реЗрдВ
  4. рдХрд┐рд╕реА рднреА рдиреЗрдЯрд╡рд░реНрдХ рдиреЛрдб рдкрд░ рд▓реЗрдирджреЗрди рднреЗрдЬреЗрдВ
  5. рдиреЛрдбреНрд╕ рдХреА рдПрдХ рд╡рд┐рддрд░рд┐рдд рдкреНрд░рдгрд╛рд▓реА рдХрд┐рд╕реА рд╕рдВрджреЗрд╢ рдХреА "рдкреНрд░рд╛рдорд╛рдгрд┐рдХрддрд╛" рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИ
  6. рдпрджрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ, рддреЛ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рд▓реЗрдирджреЗрди рдЕрдЧрд▓реЗ рдмреНрд▓реЙрдХ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
  7. рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рд╕рдВрджреЗрд╢ рд▓реЗрдирджреЗрди рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рддрд╛ рд╣реИ

рдЪрд░рдг 1-3 рдФрд░ 7 рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЪрд░рдг 5-6 рд╣реЛрд╕реНрдЯреНрд╕ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

рд╕рдВрджреЗрд╢ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди

рд╕рдВрджреЗрд╢ рдкреНрд░реЗрд╖рдХ рдХреА рдирд┐рдЬреА рдХреБрдВрдЬреА рдФрд░ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдХреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рдо рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рд▓реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдХрд╛ рдЦрд╛рддрд╛ рдЖрд░рдВрднреАрдХреГрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛рдиреА рдХрдо рд╕реЗ рдХрдо рдПрдХ рд▓реЗрдирджреЗрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдк REST рдЕрдиреБрд░реЛрдз рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ GET /api/accounts/getPublicKey?address={ADAMANT address}, рдФрд░ рдЪреИрдЯ рд▓реЛрдб рдХрд░рддреЗ рд╕рдордп, рд╡рд╛рд░реНрддрд╛рдХрд╛рд░реЛрдВ рдХреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧреАред

рдмреНрд▓реЙрдХрдЪреЗрди рдкрд░ рд╡рд┐рдХреЗрдВрджреНрд░реАрдХреГрдд рдореИрд╕реЗрдВрдЬрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?

рдореИрд╕реЗрдВрдЬрд░ рдХрд░реНрд╡25519xsalsa20poly1305 рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рддрд╛ рд╣реИ (NaCl рдмреЙрдХреНрд╕). рдЪреВрдБрдХрд┐ рдЦрд╛рддреЗ рдореЗрдВ Ed25519 рдХреБрдВрдЬрд┐рдпрд╛рдБ рд╣реИрдВ, рдПрдХ рдмреЙрдХреНрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рдкрд╣рд▓реЗ рдХрд░реНрд╡25519 рдбрд┐рдлреА-рд╣реЗрд▓рдореИрди рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрд╣рд╛рдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

/**
 * 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, рдФрд░ рд▓реЗрдирджреЗрди рдЖрдИрдбреА 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 рдкрд░ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛.рдЬреЗрдПрд╕ ╨╕ рд╕рддреНрдпрд╛рдкрд┐рдд.рдЬреЗ.рдПрд╕. рд╣рд╛рдБ, рдиреЛрдб 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 рд╕реЗрдХрдВрдб рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ - рдпрд╣реА рд╡рд╣ рд╕рдордп рд╣реИ рдЬрдм рдПрдХ рдирдпрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдмреНрд▓реЙрдХ рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИ - рд╣рдо рдХреНрд▓рд╛рдЗрдВрдЯ-рдЯреВ-рдиреЛрдб рдФрд░ рдиреЛрдб-рдЯреВ-рдиреЛрдб рд╕реЙрдХреЗрдЯ рдХрдиреЗрдХреНрд╢рди рд▓реЗрдХрд░ рдЖрдП рд╣реИрдВред рдЬрдм рдХреЛрдИ рдиреЛрдб рдПрдХ рдирдпрд╛ рд▓реЗрдирджреЗрди рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдЗрд╕рдХреА рд╡реИрдзрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЕрдиреНрдп рдиреЛрдбреНрд╕ рдХреЛ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рд╕рд░реНрд╡рд╕рдореНрдорддрд┐ рд╣реЛрдиреЗ рдФрд░ рдмреНрд▓реЙрдХ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣реА рд▓реЗрдирджреЗрди рдореИрд╕реЗрдВрдЬрд░ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИред рдЗрд╕ рддрд░рд╣ рд╣рдо рдирд┐рдпрдорд┐рдд рддреНрд╡рд░рд┐рдд рджреВрддреЛрдВ рдХреА рддрд░рд╣ рддреБрд░рдВрдд рд╕рдВрджреЗрд╢ рд╡рд┐рддрд░рд┐рдд рдХрд░реЗрдВрдЧреЗред

рдПрдбреНрд░реЗрд╕ рдмреБрдХ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдордиреЗ рдХреЗрд╡реАрдПрд╕ - рдХреА-рд╡реИрд▓реНрдпреВ рд╕реНрдЯреЛрд░реЗрдЬ рдмрдирд╛рдпрд╛ - рдпрд╣ рдПрдХ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХрд╛ рд▓реЗрдирджреЗрди рд╣реИ asset рдпрд╣ NaCl-рдмреЙрдХреНрд╕ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рд╣реИ, рд▓реЗрдХрд┐рди NaCl-рдЧреБрдкреНрдд рдмреЙрдХреНрд╕. рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдореИрд╕реЗрдВрдЬрд░ рдЕрдиреНрдп рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред

рдлрд╝рд╛рдЗрд▓/рдЫрд╡рд┐ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдФрд░ рд╕рдореВрд╣ рдЪреИрдЯ рдореЗрдВ рдЕрднреА рднреА рдмрд╣реБрдд рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдмреЗрд╢рдХ, рдЧрд▓рддреА-рдФрд░-рднреВрд▓ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЗрд╕реЗ рдЬрд▓реНрджреА рд╕реЗ "рдЦрд░рд╛рдм" рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЧреЛрдкрдиреАрдпрддрд╛ рдХреЗ рд╕рдорд╛рди рд╕реНрддрд░ рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рд╣рд╛рдВ, рдЕрднреА рднреА рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдмрд╛рдХреА рд╣реИ - рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЧреЛрдкрдиреАрдпрддрд╛ рдпрд╣ рдорд╛рдирддреА рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рдиреЛрдбреНрд╕ рд╕реЗ рдирд╣реАрдВ рдЬреБрдбрд╝реЗрдВрдЧреЗ, рдмрд▓реНрдХрд┐ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдмрдирд╛рдПрдВрдЧреЗред рдЖрдкрдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд┐рддрдиреЗ рдкреНрд░рддрд┐рд╢рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ? рдпрд╣ рд╕рд╣реА рд╣реИ, 0. рд╣рдо рдореИрд╕реЗрдВрдЬрд░ рдХреЗ рдЯреЛрд░ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗред

рд╣рдордиреЗ рд╕рд╛рдмрд┐рдд рдХрд░ рджрд┐рдпрд╛ рд╣реИ рдХрд┐ рдмреНрд▓реЙрдХрдЪреЗрди рдкрд░ рдПрдХ рд╕рдВрджреЗрд╢рд╡рд╛рд╣рдХ рдореМрдЬреВрдж рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, 2012 рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░рдпрд╛рд╕ рд╣реБрдЖ рдерд╛ - рдмрд┐рдЯрдореИрд╕реЗрдЬ, рдЬреЛ рд▓рдВрдмреЗ рд╕рдВрджреЗрд╢ рд╡рд┐рддрд░рдг рд╕рдордп, рд╕реАрдкреАрдпреВ рд▓реЛрдб рдФрд░ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдХрдореА рдХреЗ рдХрд╛рд░рдг рд╡рд┐рдлрд▓ рд░рд╣рд╛ред

рдФрд░ рд╕рдВрджреЗрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдмреНрд▓реЙрдХрдЪреЗрди рдкрд░ рд╕рдВрджреЗрд╢рд╡рд╛рд╣рдХ рдЕрдкрдиреЗ рд╕рдордп рд╕реЗ рдЖрдЧреЗ рд╣реИрдВ - рд▓реЛрдЧ рдЕрдкрдиреЗ рдЦрд╛рддреЗ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИрдВ, рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдЕрднреА рддрдХ рдПрдХ рдкреНрд░рд╡реГрддреНрддрд┐ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдмреНрд▓реЙрдХрдЪреЗрди рдкрд░ рдЙрдЪреНрдЪ рдЧрддрд┐ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреА рд╣реИред рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдзрд┐рдХ рддрдХрдиреАрдХреА рдПрдирд╛рд▓реЙрдЧ рдЖрдЧреЗ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗред рдЖрдк рджреЗрдЦреЗрдВрдЧреЗред

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ