рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░! рдореЗрд░рд╛ рдирд╛рдо рдЕрд░реЗрдЯ рд╣реИ рдФрд░ рдореИрдВ рдХреНрд╡рд╛рдВрдЯрдиреЗрдЯ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ, рдЬрд┐рд╕рдореЗрдВ рдПрд▓реНрдЧреЛрд░рд┐рджрдорд┐рдХ рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХреЗ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛рдПрдВ рд╣реИрдВред рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореЗрд░реЗ рд╕рд╛рдордиреЗ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрдп рдЙрддреНрдкрдиреНрди рд╣реБрдЖ рд╣реИ - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рддрд╛рд░реАрдЦ рдХреА рдЕрджреГрд╢реНрдпрддрд╛ рдХреА рдЧрд╛рд░рдВрдЯреА рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдпрд╣ рдЕрддреНрдпрдВрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХреА рдкреНрд░рднрд╛рд╡рд╢реАрд▓рддрд╛ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд┐рддреНрддреАрдп рдмрд╛рдЬрд╛рд░реЛрдВ рд╕реЗ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ)ред
рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВ PoE (рдЕрд╕реНрддрд┐рддреНрд╡ рдХрд╛ рд╕рдмреВрдд) рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рдкрд╛рд░ рдЖрдпрд╛ред рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдордВрдЪ рдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдиреЗ рдореЗрд░рд╛ рдорди рдереЛрдбрд╝рд╛ рддреЛрдбрд╝ рджрд┐рдпрд╛ред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд▓рд┐рдЦрдиреЗ рдФрд░ PoE рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдлрд┐рдирдЯреЗрдХ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реЛрдЧрд╛ред
рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд▓реЗрдЦ рдХреЛ 3 рдореБрдЦреНрдп рдЦрдВрдбреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рд╣реИ:
- PoE рдХреНрдпрд╛ рд╣реИ рдФрд░ рдХрдм рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ
- рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо
- рдореЗрд░реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓реЗ рдХрд╛ рд╕рдорд╛рдзрд╛рди
рддреЛ рдЕрд╕реНрддрд┐рддреНрд╡ рдХрд╛ рд╕рдмреВрдд рдХреНрдпрд╛ рд╣реИ?
рдЕрд╕реНрддрд┐рддреНрд╡ рдХрд╛ рдкреНрд░рдорд╛рдг (рд╡рд╕реНрддреБрддрдГ, рдЕрд╕реНрддрд┐рддреНрд╡ рдХрд╛ рдкреНрд░рдорд╛рдг) рдпрд╣ рд╕рд╛рдмрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝, рдлрд╝рд╛рдЗрд▓ рдпрд╛ рдбреЗрдЯрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рддрд┐рдерд┐ рдФрд░ рд╕рдордп рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдЖрд╡реЗрджрди рдкреЗрдЯреЗрдВрдЯ рдкрдВрдЬреАрдХрд░рдг рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЬреЛ рджреЗрдЦрд╛, рдЙрд╕рдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрддрд░ рдЗрд╕реЗ рд╡рд┐рддреНрдд рдФрд░ рдЖрдИрдЯреА рдХреЗ рдЪреМрд░рд╛рд╣реЗ рдкрд░ рд▓рдЧрд╛рдП рдЧрдП рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдПрд▓реНрдЧреЛрд░рд┐рдердо рдЯреНрд░реЗрдбрд┐рдВрдЧ рдХреЗ рдореЗрд░реЗ рдХреНрд╖реЗрддреНрд░ рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг: рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╣реИ рдЬреЛ рдЕрдЧрд▓реЗ 2 рд╣рдлреНрддреЛрдВ рдХреЗ рд▓рд┐рдП рд╢реЗрдпрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ 70% рд╕рд╣реА рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рджреЗрддрд╛ рд╣реИред рдЖрдк рдЕрдкрдиреЗ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдЕрдиреНрдп рдмрд╛рдЬрд╛рд░ рдХреЗ рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреЛ рдмреЗрдЪрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВред рдмрд┐рдВрджреБ рдЫреЛрдЯрд╛ рд╣реИ - рдЦрд░реАрджрд╛рд░ рдХреЛ рдпрд╣ рд╕рдордЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЖрдкрдХреЗ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рд╕рд╣реА рд╣реИрдВ рдФрд░ рдмреЛрд▓реА рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐рдП рдЧрдП рдереЗ, рдЕрд░реНрдерд╛рддред рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдордп рдореЗрдВ рдЙрдирдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЧрд╛рд░рдВрдЯреАред
рдЗрд╕рдХреА рдЧрд╛рд░рдВрдЯреА рдХреИрд╕реЗ рджреА рдЬрд╛ рд╕рдХрддреА рд╣реИ? рдареАрдХ рд╣реИ, рдкреАрдУрдИ рд▓рд╛рдЧреВ рдХрд░реЗрдВред
рдкреАрдУрдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдПрд▓реНрдЧреЛрд░рд┐рдердо
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдП:
- рдЙрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рддреИрдпрд╛рд░ рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рдЖрдк рдкреЗрдЯреЗрдВрдЯ рдХрд░рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред (рдореИрдВрдиреЗ рдкреАрдбреАрдПрдл рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЖрдк рдХрд┐рд╕реА рдЕрдиреНрдп рдХрдВрдЯреЗрдирд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред
- рджрд┐рдП рдЧрдП рдлрд╝рд╛рдЗрд▓ рдХрд╛ рд╣реИрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ (рдореИрдВрдиреЗ sha256 рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ)ред
рдмрд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рд╣реИрд╢ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдПрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд "рдлрд┐рдВрдЧрд░рдкреНрд░рд┐рдВрдЯ" рд╣реИ, рдЧрд╛рд░рдВрдЯреА (рд▓рдЧрднрдЧ рдкреВрд░реНрдг) рдПрдХ рдФрд░ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╣реИрд╢ рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЧ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ред рдЬрдм рдЖрдк рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд╣реИрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдмреНрд▓реЙрдХрдЪреЗрди рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдПрдХ рд▓реЗрдирджреЗрди рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рд▓реЗрдирджреЗрди рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд╣реИрд╢ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрдЧрд╛ред
рд╡рд╣ рд╕рдм рд╣реИред рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рдеред рдЕрдм рд╣рдо рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВред
(рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдХреЛрдб рдмрдирд╛рдпрд╛ (рдХреЗрд╡рд▓ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП)ред рдЖрдк
рдпрд╣рд╛рдВ рд╕реЗрд╡рд╛ рдХрд╛ рдбреЗрдореЛ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред)
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдбреЗрдореЛ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдореИрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ 2 рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВ:
- рдПрдХ рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдз рдФрд░ рдПрдХ рдИрдерд░ рд╡реЙрд▓реЗрдЯ рддреИрдпрд╛рд░ рдХрд░рдирд╛ред
- Node.js рдХреЛрдб рдФрд░ рдирд┐рдЬреА рдХреБрдВрдЬреА рдореЗрдВ рд▓реЗрдирджреЗрди рдкреАрдврд╝реАред
рдЖрдЗрдП рдЬрд╛рдиреЗ рдХреНрд░рдо рдореЗрдВ:
рднрд╛рдЧ 1: рдПрдХ рдЗрдереЗрд░рд┐рдпрдо рд╕реНрдорд╛рд░реНрдЯ рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ рдФрд░ рд╡реЙрд▓реЗрдЯ рддреИрдпрд╛рд░ рдХрд░рдирд╛
PoE рдкрд╣рд▓реЗ рдмрд┐рдЯрдХреЙрдЗрди рдмреНрд▓реЙрдХрдЪреЗрди рд╕реЗ рдЬреБрдбрд╝рд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдИрдерд░ рдмреНрд▓реЙрдХрдЪреЗрди рдФрд░ рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдзреЛрдВ рдХреЛ рдЪреБрдирд╛ред рд╕реНрдорд╛рд░реНрдЯ рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯреНрд╕ рд╣рдореЗрдВ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд▓рдЪреАрд▓рд╛рдкрди, рдкреНрд░рддрд┐рд░реВрдкрдХрддрд╛ рдФрд░ рд╕реНрдХреЗрд▓реЗрдмрд┐рд▓рд┐рдЯреА рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рдмреНрд▓реЙрдХрдЪреЗрди рдореЗрдВ рд╣реИрд╢ рдХреЗ рднрдВрдбрд╛рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВред
рдореИрдВрдиреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕реНрдорд╛рд░реНрдЯ рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ рдЪреБрдирд╛, рдЬреЛ рдПрдХ рд╣реИрд╢ рдХреЛ рдПрдХ рдЙрдкрдпреБрдХреНрдд рддрд┐рдерд┐, рдкреНрд░рд╛рд░реВрдк рд╣реИрд╢ => рддрд┐рдерд┐ рдХреЗ рд╕рд╛рде рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рднреА рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рд╣реИрд╢ рддрд┐рдерд┐ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрдкрд░ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреЗрд╡рд▓ рдЕрдиреБрдмрдВрдз рдХреЗ рдорд╛рд▓рд┐рдХ рдирдП рд╣реИрд╢ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗред
рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдз рдХреЛрдб:
``` pragma solidity 0.5.9; contract Ownable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () internal { _owner = msg.sender; emit OwnershipTransferred(address(0), _owner); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(isOwner()); _; } function isOwner() public view returns (bool) { return msg.sender == _owner; } function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal { require(newOwner != address(0)); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } 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 рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рдордп рджреЗрддреА рд╣реИред рдЖрдк рдХрд┐рд╕реА рднреА рдЕрдзрд┐рдХ рдкрдардиреАрдп рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рдЕрдиреБрдмрдВрдз рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд▓рд┐рдпрд╛ рд╣реИ, рдЕрдм рдЖрдкрдХреЛ рдЗрд╕реЗ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рджреЛ рдЪреАрдЬреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
- рдмреНрд▓реЙрдХрдЪреЗрди рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП рдИрдерд░ рдХрд╛ рдкрддрд╛
- рдХреЙрд▓рд┐рдВрдЧ рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рдЕрдиреБрдмрдВрдзреЛрдВ рдХреА рддреИрдирд╛рддреА рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдИрдерд░ред
рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдИрдерд░ рдХреЛ рдмрд░реНрдмрд╛рдж рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд░реЛрдкреНрд╕реНрдЯрди рдкрд░реАрдХреНрд╖рдг рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдФрд░ рдЬрд╛рдиреЗрдВред рдпрд╣ рдкрддрд╛ рдЕрдиреБрдмрдВрдз рдХрд╛ рдорд╛рд▓рд┐рдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рддреИрдирд╛рддреА рдХрд╛ рд╕рд░реНрдЬрдХ рдерд╛ рдФрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдирдП рд╣реИрд╢ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдЗрд╕ рдкрддреЗ рдХреЛ рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рд╕реНрдерд╛рди рдкрд░ рд╕рд╣реЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдЖрдкрдХреЗ рдмрдЯреБрдП рдХреА рдирд┐рдЬреА рдХреБрдВрдЬреА рдФрд░ рдЕрдиреБрдмрдВрдз рдХрд╛ рдкрддрд╛ рднреАред рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╣рдо рд╕рднреА рдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рднрд╛рдЧ 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. , . . ```