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

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

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

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


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

  • рдПрдХ рдЦрд╛рддрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ - рдХреЛрдИ рдлрд╝реЛрди рдФрд░ рдИрдореЗрд▓ рдирд╣реАрдВ, рдкрддрд╛ рдкреБрд╕реНрддрд┐рдХрд╛ рдФрд░ рдЬрд┐рдпреЛрд▓реЛрдХреЗрд╢рди рддрдХ рдХреЛрдИ рдкрд╣реБрдВрдЪ рдирд╣реАрдВред
  • Interlocutors рд╕реАрдзреЗ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд╕рднреА рд╕рдВрдЪрд╛рд░ рдиреЛрдбреНрд╕ рдХреА рдПрдХ рд╡рд┐рддрд░рд┐рдд рдкреНрд░рдгрд╛рд▓реА рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдЖрдИрдкреА рдкрддреЗ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд▓рд┐рдП рд╕реБрд▓рдн рдирд╣реАрдВ рд╣реИрдВред
  • рд╕рднреА рд╕рдВрджреЗрд╢ рдПрдВрдб-рдЯреВ-рдПрдВрдб рд╡рдХреНрд░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} рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ GET /api/accounts/getPublicKey?address={ADAMANT address} , рдФрд░ рдЬрдм рдЖрдк рдЪреИрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╡рд╛рд░реНрддрд╛рдХрд╛рд░реЛрдВ рдХреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧреАред



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

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

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

рдХрд┐рд╕реА рд╣реЛрд╕реНрдЯ рдХреЛ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рд▓реЗрди-рджреЗрди рднреЗрдЬрдирд╛


рдЪреВрдВрдХрд┐ рдиреЗрдЯрд╡рд░реНрдХ рд╡рд┐рдХреЗрдиреНрджреНрд░реАрдХреГрдд рд╣реИ, рдХреЛрдИ рднреА рдЦреБрд▓реЗ рдПрдкреАрдЖрдИ рд╡рд╛рд▓рд╛ рдиреЛрдб рдХрд░реЗрдЧрд╛ред рд╣рдо api/transactions рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП рдПрдХ POST рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ:

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

рдЬрд╡рд╛рдм рдореЗрдВ, рд╣рдореЗрдВ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рд▓реЗрдирджреЗрди рдЖрдИрдбреА рдорд┐рд▓рддреА рд╣реИ

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

рд▓реЗрди-рджреЗрди рдХреА рдорд╛рдиреНрдпрддрд╛


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

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



рд╣реЛрд╕реНрдЯ рдХреЛрдб рдХрд╛ рд╡рд╣ рднрд╛рдЧ рдЬреЛ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдЙрд╕реЗ GitHub - validator.js рдФрд░ verify.js рдкрд░ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рдБ, рдиреЛрдб Node.js. рдкрд░ рдЪрд▓рддрд╛ рд╣реИ

рдмреНрд▓реЙрдХ рдореЗрдВ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рд▓реЗрдирджреЗрди рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ


рдпрджрд┐ рдЖрдо рд╕рд╣рдорддрд┐ рдмрди рдЬрд╛рддреА рд╣реИ, рддреЛ рд╣рдорд╛рд░реЗ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рд▓реЗрдирджреЗрди рдЕрдиреНрдп рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд▓реЗрдирджреЗрди рдХреЗ рд╕рд╛рде, рдЕрдЧрд▓реЗ рдмреНрд▓реЙрдХ рдореЗрдВ рдЖ рдЬрд╛рдПрдЧрд╛ред

рдмреНрд▓реЙрдХреЛрдВ рдХрд╛ рдПрдХ рд╕рдЦреНрдд рдЕрдиреБрдХреНрд░рдо рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдж рдХреЗ рдмреНрд▓реЙрдХ рдХрд╛ рдЧрдарди рдкрд┐рдЫрд▓реЗ рдмреНрд▓реЙрдХреЛрдВ рдХреА рд╣реИрд╢ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред



рд▓рдмреНрдмреЛрд▓реБрдЖрдм рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рдХреНрд░рдо рдореЗрдВ рд╣рдорд╛рд░рд╛ рд╕рдВрджреЗрд╢ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ рдФрд░ рдЗрд╕реЗ "рдкреБрдирд░реНрд╡реНрдпрд╡рд╕реНрдерд┐рдд" рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдХрдИ рд╕рдВрджреЗрд╢ рдмреНрд▓реЙрдХ рдореЗрдВ рдЖрддреЗ рд╣реИрдВ, рддреЛ рдЙрдирдХрд╛ рдХреНрд░рдо рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ timestamp рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рд╕рдВрджреЗрд╢ рдкрдврд╝рдирд╛


рдореИрд╕реЗрдВрдЬрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмреНрд▓реЙрдХрдЪреИрди рд╕реЗ рд▓реЗрдирджреЗрди рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдкрддрд╛рдХрд░реНрддрд╛ рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ api/chatrooms рдПрдВрдбрдкреЙрдЗрдВрдЯ рдмрдирд╛рдпрд╛ред

рд╕рднреА рд▓реЗрдирджреЗрди рд╕рднреА рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИрдВ - рдЖрдк рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдЕрдкрдиреА рдирд┐рдЬреА рдХреБрдВрдЬреА рдФрд░ рдкреНрд░реЗрд╖рдХ рдХреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ:

 ** * Decodes the incoming message * @param {any} msg encoded message * @param {string} senderPublicKey sender public key * @param {string} privateKey our private key * @param {any} nonce nonce * @returns {string} */ adamant.decodeMessage = function (msg, senderPublicKey, privateKey, nonce) { if (typeof msg === 'string') { msg = hexToBytes(msg) } if (typeof nonce === 'string') { nonce = hexToBytes(nonce) } if (typeof senderPublicKey === 'string') { senderPublicKey = hexToBytes(senderPublicKey) } if (typeof privateKey === 'string') { privateKey = hexToBytes(privateKey) } const DHPublicKey = ed2curve.convertPublicKey(senderPublicKey) const DHSecretKey = ed2curve.convertSecretKey(privateKey) const decrypted = nacl.box.open(msg, nonce, DHPublicKey, DHSecretKey) return decrypted ? decode(decrypted) : '' } 

рдФрд░ рдХреНрдпрд╛?


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

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

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

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

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

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

Source: https://habr.com/ru/post/hi467751/


All Articles