рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ 2 рдЪрд░рдгреЛрдВ рдореЗрдВ (рдкреНрд░реВрдл рдСрдл рдПрдХреНрд╕рд┐рд╕реНрдЯреЗрдВрд╕) рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдП

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

рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВ PoE (рдЕрд╕реНрддрд┐рддреНрд╡ рдХрд╛ рд╕рдмреВрдд) рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рдкрд╛рд░ рдЖрдпрд╛ред рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдордВрдЪ рдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдиреЗ рдореЗрд░рд╛ рдорди рдереЛрдбрд╝рд╛ рддреЛрдбрд╝ рджрд┐рдпрд╛ред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд▓рд┐рдЦрдиреЗ рдФрд░ PoE рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдлрд┐рдирдЯреЗрдХ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реЛрдЧрд╛ред

рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд▓реЗрдЦ рдХреЛ 3 рдореБрдЦреНрдп рдЦрдВрдбреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рд╣реИ:

  • PoE рдХреНрдпрд╛ рд╣реИ рдФрд░ рдХрдм рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ
  • рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо
  • рдореЗрд░реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓реЗ рдХрд╛ рд╕рдорд╛рдзрд╛рди

рддреЛ рдЕрд╕реНрддрд┐рддреНрд╡ рдХрд╛ рд╕рдмреВрдд рдХреНрдпрд╛ рд╣реИ?


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

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

рдЗрд╕рдХреА рдЧрд╛рд░рдВрдЯреА рдХреИрд╕реЗ рджреА рдЬрд╛ рд╕рдХрддреА рд╣реИ? рдареАрдХ рд╣реИ, рдкреАрдУрдИ рд▓рд╛рдЧреВ рдХрд░реЗрдВред

рдкреАрдУрдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдПрд▓реНрдЧреЛрд░рд┐рдердо


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдП:

  1. рдЙрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рддреИрдпрд╛рд░ рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рдЖрдк рдкреЗрдЯреЗрдВрдЯ рдХрд░рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред (рдореИрдВрдиреЗ рдкреАрдбреАрдПрдл рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЖрдк рдХрд┐рд╕реА рдЕрдиреНрдп рдХрдВрдЯреЗрдирд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред
  2. рджрд┐рдП рдЧрдП рдлрд╝рд╛рдЗрд▓ рдХрд╛ рд╣реИрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ (рдореИрдВрдиреЗ sha256 рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ)ред

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

рд╡рд╣ рд╕рдм рд╣реИред рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рдеред рдЕрдм рд╣рдо рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВред

(рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдХреЛрдб рдмрдирд╛рдпрд╛ (рдХреЗрд╡рд▓ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП)ред рдЖрдк рдпрд╣рд╛рдВ рд╕реЗрд╡рд╛ рдХрд╛ рдбреЗрдореЛ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред)

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдбреЗрдореЛ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ 2 рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВ:

  1. рдПрдХ рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдз рдФрд░ рдПрдХ рдИрдерд░ рд╡реЙрд▓реЗрдЯ рддреИрдпрд╛рд░ рдХрд░рдирд╛ред
  2. Node.js рдХреЛрдб рдФрд░ рдирд┐рдЬреА рдХреБрдВрдЬреА рдореЗрдВ рд▓реЗрдирджреЗрди рдкреАрдврд╝реАред

рдЖрдЗрдП рдЬрд╛рдиреЗ рдХреНрд░рдо рдореЗрдВ:

рднрд╛рдЧ 1: рдПрдХ рдЗрдереЗрд░рд┐рдпрдо рд╕реНрдорд╛рд░реНрдЯ рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ рдФрд░ рд╡реЙрд▓реЗрдЯ рддреИрдпрд╛рд░ рдХрд░рдирд╛

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

рдореИрдВрдиреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕реНрдорд╛рд░реНрдЯ рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ рдЪреБрдирд╛, рдЬреЛ рдПрдХ рд╣реИрд╢ рдХреЛ рдПрдХ рдЙрдкрдпреБрдХреНрдд рддрд┐рдерд┐, рдкреНрд░рд╛рд░реВрдк рд╣реИрд╢ => рддрд┐рдерд┐ рдХреЗ рд╕рд╛рде рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рднреА рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рд╣реИрд╢ рддрд┐рдерд┐ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрдкрд░ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреЗрд╡рд▓ рдЕрдиреБрдмрдВрдз рдХреЗ рдорд╛рд▓рд┐рдХ рдирдП рд╣реИрд╢ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗред

рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдз рдХреЛрдб:

``` pragma solidity 0.5.9; /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor () internal { _owner = msg.sender; emit OwnershipTransferred(address(0), _owner); } /** * @return the address of the owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(isOwner()); _; } /** * @return true if `msg.sender` is the owner of the contract. */ function isOwner() public view returns (bool) { return msg.sender == _owner; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0)); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } /** * @title HashStore * @dev The contract store the hashes and returns date by hash * Only the owner can add new hashes */ contract HashStore is Ownable { mapping(bytes32 => uint256) private _hashes; event HashAdded(bytes32 hash); function addHash(bytes32 rootHash) external onlyOwner { require(_hashes[rootHash] == 0, "addHash: this hash was already deployed"); _hashes[rootHash] = block.timestamp; emit HashAdded(rootHash); } function getHashTimestamp(bytes32 rootHash) external view returns (uint256) { return _hashes[rootHash]; } } ``` 

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

рдПрдХ рд╣реИрд╢ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╣рдорд╛рд░реА рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рди sha256 рдкрд╛рд╕ рдХрд░рддреЗ рд╣реБрдП addHash рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ рдЕрдиреБрдмрдВрдз рдореИрдЪ рдХреЗ рдЕрдВрджрд░ рд╣реИрд╢ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд▓реЗрдирджреЗрди рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рд╡рд┐рднрд┐рдиреНрди рддрд┐рдерд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдореВрд▓реНрдпреЛрдВ рдХреЗ рдЕрд╡рд╛рдВрдЫрд┐рдд рджреЛрд╣рд░рд╛рд╡ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдпрд╣рд╛рдБ рдЬрд╛рдБрдЪ рдХреА рд╣реИ:

 require(_hashes[rootHash] == 0, "addHash: this hash was already deployed"); 

рд╣рдо getHashTimestamp рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣реИрд╢ рд▓реЗрдирджреЗрди рддрд┐рдерд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рд▓реЗрдирджреЗрди рддрд┐рдерд┐ рдХреЗ рд╕рд╛рде рд╣реИрд╢ рдкрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВред GetHashTimestamp рд╡рд┐рдзрд┐ UNIX рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рдордп рджреЗрддреА рд╣реИред рдЖрдк рдХрд┐рд╕реА рднреА рдЕрдзрд┐рдХ рдкрдардиреАрдп рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рдЕрдиреБрдмрдВрдз рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд▓рд┐рдпрд╛ рд╣реИ, рдЕрдм рдЖрдкрдХреЛ рдЗрд╕реЗ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рджреЛ рдЪреАрдЬреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

  1. рдмреНрд▓реЙрдХрдЪреЗрди рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП рдИрдерд░ рдХрд╛ рдкрддрд╛
  2. рдХреЙрд▓рд┐рдВрдЧ рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рдЕрдиреБрдмрдВрдзреЛрдВ рдХреА рддреИрдирд╛рддреА рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдИрдерд░ред

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

рднрд╛рдЧ 2: Node.js рдФрд░ рдирд┐рдЬреА рдХреБрдВрдЬреА рдореЗрдВ рд▓реЗрдирджреЗрди рд╕реГрдЬрди

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

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо web3.js рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЕрдкрдиреЗ рдиреЛрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреЛрдХрди рдмрдирд╛рдПрдВрдЧреЗред рдореИрдВрдиреЗ рд╕реЗрд╡рд╛ infura.io рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЗрд░рд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдФрд░ рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 ropsten.infura.io/v3/YOUR_TOKEN_HERE 

рд╣реИрд╢рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП, Sha256 рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдбреЗрдЯрд╛ рдкреНрд░рд╛рд░реВрдк рдХреЛрдИ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣рдо JSON рдореЗрдВ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рдореИрдВрдиреЗ PoE рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдорд╛рдорд▓реЗ рдХреЛ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛?


PoE рд╣реЛрдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдмреНрд▓реЙрдХрдЪреЗрди рдФрд░ рд▓реЗрдирджреЗрди рд╢реБрд▓реНрдХ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЕрдзрд┐рднрд╛рд░ рдирд╣реАрдВ рджреЗрдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдерд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, addHash рдкрджреНрдзрддрд┐ (рдмрд╛рдЗрдЯреНрд╕ 32 рд░реВрдЯрд╣реИрд╢) рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдореЗрдВ 0.2 рдлрд┐рдирдиреА (рдЬреВрди 2019 рдХреА рджрд░ рд╕реЗ 0.0002 ETH рдпрд╛ $ 0.06) рдХрд╛ рдЦрд░реНрдЪ рдЖрддрд╛ рд╣реИред



рд░рдгрдиреАрддрд┐ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ 30 рдирд┐рд╖реНрдХрд░реНрд╖ рдкреНрд░рддрд┐ рджрд┐рди рд╕рд╛рдордиреЗ рдЖрдП, рдЕрд░реНрдерд╛рдд, рдЗрд╕рдХреА рд▓рд╛рдЧрдд рд╣рдореЗрдВ $ 2.1 рд╣реИред рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ 100 рдЧреБрдирд╛ рдмрдврд╝ рдЬрд╛рддреА рд╣реИ, рдФрд░ рдИрдерд░ рдХреА рджрд░ рдмрдврд╝ рдЬрд╛рддреА рд╣реИ, рддреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд▓рд╛рдЧрдд рдмрдврд╝ рдЬрд╛рдПрдЧреАред

рдореИрдВрдиреЗ рдПрдХ рджрд┐рди рдХреЗ рд▓рд┐рдП рдмреНрд▓реЙрдХрдЪреЗрди рдкрд░ рдПрдХ рд╣реИрд╢ рд░рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдпрд╣ рд╣реИрд╢ рджреИрдирд┐рдХ рд░рдгрдиреАрддрд┐ рдЖрдЙрдЯрдкреБрдЯ рдФрд░ рдЙрдирдХреЗ рдЖрдВрддрд░рд┐рдХ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреА рд╣реИрд╢ рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрдЧреАред



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

рдЕрдВрдд рдореЗрдВ


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

 ```   : 1.    API       1.     2.    API  ,         3.          ,              .          . ``` 

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


All Articles