
рдпрджрд┐ рдЖрдкрдХреЛ Geth рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдирд┐рдЬреА Ethereum рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рднреМрддрд┐рдХ рд╕рд░реНрд╡рд░ рдпрд╛ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрдиреЛрдВ рдкрд░ рдиреЗрдЯрд╡рд░реНрдХ рдиреЛрдб рдмрдирд╛рдХрд░ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдбреЙрдХрд░ рд╣рдм рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рдЬреЗрда рдХрдВрдЯреЗрдирд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрдк рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдпрд╛ рдПрдХ рднреМрддрд┐рдХ рд╕рд░реНрд╡рд░ рдкрд░ рднреА рдиреЛрдбреНрд╕ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рдиреЗрдЯрд╡рд░реНрдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдЖрдкрдХреЛ рдмрддрд╛рдПрдВрдЧреЗ рдХрд┐ рдбреЗрдмрд┐рдпрди 9 (рдЖрднрд╛рд╕реА рдпрд╛ рднреМрддрд┐рдХ) рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рд╕рд░реНрд╡рд░ рдкрд░ рдбреЙрдХрд░ рдХреЛ рдХреИрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЧреИрде рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрдИ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдирд┐рдЬреА рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рд╣рдо Node.js рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреЗрдВрдЧреЗ рдЬреЛ рдХрд┐ рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ Geth рдиреЛрдбреНрд╕ рддрдХ рдкрд╣реБрдВрдЪрддреА рд╣реИред
рдбреЙрдХрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдбреЙрдХрд░ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдбреЗрдмрд┐рдпрди 9 рдФрд░ 10 рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ
https://docs.docker.com/install/linux/docker-ce/debian/ рдкрд░ рд╡рд┐рд╕реНрддреГрдд рдирд┐рд░реНрджреЗрд╢ рдорд┐рд▓реЗрдВрдЧреЗред
рдбреЙрдХрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВрд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕рдВрдХреБрд▓ рдЕрджреНрдпрддрди рдХрд░реЗрдВ:
рдЕрдЧрд▓рд╛, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдЖрд╡рд╢реНрдпрдХ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
рдЖрдзрд┐рдХрд╛рд░рд┐рдХ GPG рдХреБрдВрдЬреА рдЬреЛрдбрд╝реЗрдВ:
рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЛ рдлрд┐рдВрдЧрд░рдкреНрд░рд┐рдВрдЯ 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88:
рдПрдХ рд╕реНрдерд┐рд░ рдбреЙрдХрд░ рднрдВрдбрд╛рд░ рдЬреЛрдбрд╝реЗрдВ:
рдкреИрдХреЗрдЬ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ рдФрд░ рдбреЙрдХрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
рдЕрдм рдпрд╣ рдХреЗрд╡рд▓ рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЫрд╡рд┐ (рдЫрд╡рд┐) рд╣реИрд▓реЛ-рд╡рд░реНрд▓реНрдб рдЫрд╡рд┐ рдЪрд▓рд╛рдПрдБ:
рдпрд╣ рдХрдорд╛рдВрдб рд╡рд╛рдВрдЫрд┐рдд рдЫрд╡рд┐ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдЧрд╛, рдФрд░ рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЪрд▓рд╛рдПрдЧрд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЙрдореНрдореАрдж рдХрд░реЗрдВрдЧреЗ, рдЖрдкрдХреЛ рдХрдВрд╕реЛрд▓ рдкрд░ "рд╣реИрд▓реЛ рд╕реЗ рдбреЙрдХ!" рд╕рдВрджреЗрд╢ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ! рдЕрдм рдЖрдк рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдиреЛрдбреНрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рдЬреА Geth рдиреЗрдЯрд╡рд░реНрдХ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдФрд░ рдлрд╝рд╛рдЗрд▓реЗрдВ рдмрдирд╛рдПрдБ
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рд░реНрд╡рд░ рдкрд░ рдПрдХ рдкреБрд╕реНрддрдХ рдмрдирд╛рдПрдБ, рдФрд░ рдЙрд╕рдХреЗ рдШрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдПрдБ:
/home/book/dock-test /home/book/dock-test/distr
рдЗрд╕рдХреЗ рдмрд╛рдж, / рд╣реЛрдо / рдкреБрд╕реНрддрдХ / рдбреЙрдХ-рдЯреЗрд╕реНрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ, рдПрдХ рдбреЙрдХрд░рдлрд╛рдЗрд▓ рдмрдирд╛рдПрдВ:
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 1. рдлрд╝рд╛рдЗрд▓ / рд╣реЛрдо / рдмреБрдХ / рдбреЙрдХ-рдЯреЗрд╕реНрдЯ / рдбреЙрдХрдлрд╛рдЗрд▓ FROM ubuntu:16.04 LABEL version="1.0" LABEL maintainer="alexandre@frolov.pp.ru" ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update && apt-get install --yes software-properties-common RUN add-apt-repository ppa:ethereum/ethereum RUN apt-get update && apt-get install --yes geth RUN adduser --disabled-login --gecos "" eth_book COPY distr /home/eth_book/distr RUN chown -R eth_book:eth_book /home/eth_book/distr USER eth_book WORKDIR /home/eth_book RUN geth --nousb init distr/genesis.json ENTRYPOINT bash
рдбреЙрдХрдЯрд░ рдХрдВрдЯреЗрдирд░ рдмрдирд╛рддреЗ рд╕рдордп рдЗрд╕ рдлрд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЖрдкрдХреЛ Ethereum рдиреЗрдЯрд╡рд░реНрдХ рдиреЛрдбреНрд╕ рдХреЛ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ /home/book/dock-test/distr/genesis.json рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 2. рдлрд╝рд╛рдЗрд▓ /home/book/dock-test/distr/genesis.json { "config": { "chainId": 98760, "homesteadBlock": 0, "eip150Block": 0, "eip155Block": 0, "eip158Block": 0 }, "difficulty": "10", "gasLimit": "5100000", "alloc": {} }
рдпрд╣рд╛рдВ рд╣рдо рдЕрдкрдиреЗ рдирд┐рдЬреА рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ 98760 рдкрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рдЦрдирди рдореЗрдВ рдЖрд╕рд╛рдиреА рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдХрдард┐рдирд╛рдИ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ 10 рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рд╣реИред рдпрд╣ рд╣рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдХрдо рдорд╛рддреНрд░рд╛ рдореЗрдВ рдореЗрдореЛрд░реА (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 4 рдЬреАрдмреА) рдХреЗ рд╕рд╛рде рдЖрднрд╛рд╕реА рдорд╢реАрдиреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
рдПрдХ рдиреЗрдЯрд╡рд░реНрдХ рдФрд░ рдХрдВрдЯреЗрдирд░ рдмрдирд╛рдПрдБ
рд╣рдорд╛рд░реЗ рдиреЛрдбреНрд╕ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рдмреАрдЪ рдПрдХ рдиреЗрдЯрд╡рд░реНрдХ рдмрдирд╛рдПрдВрдЧреЗ:
рдЗрд╕рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рд╡рд░реНрддрдорд╛рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ / рд╣реЛрдо / рдмреБрдХ / рдбреЙрдХ-рдЯреЗрд╕реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдбреЙрдХрд░рдлрд╛рдЗрд▓ рд╕реНрдерд┐рдд рд╣реИред рдлрд┐рд░ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдЦреНрдпрд╛ рдмрдирд╛рдПрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рддреАрди:
рдкрд╣рд▓рд╛ рдХрдВрдЯреЗрдирд░ рдмрдирд╛рдиреЗ рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд▓рдВрдмрд╛ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХ рдЪрд┐рддреНрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗред рд▓реЗрдХрд┐рди рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рд▓рдЧрднрдЧ рддреБрд░рдВрдд рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдХреНрд▓реЛрдирд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдЖрднрд╛рд╕реА рдорд╢реАрдиреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдЧрддрд┐ рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░реЗрдВред
рдЕрдм рдЪрд╛рд░ рдХрдВрд╕реЛрд▓ рд╡рд┐рдВрдбреЛ рдЦреЛрд▓реЗрдВред рдЙрдирдореЗрдВ рд╕реЗ рддреАрди рдореЗрдВ, рд╣рдо рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдЪреМрдереЗ рдореЗрдВ, рд╣рдореЗрдВ рдХрдВрдЯреЗрдирд░ рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ред
рдкрд╣рд▓реЗ рдХрдВрд╕реЛрд▓ рд╡рд┐рдВрдбреЛ рдореЗрдВ, рдирд┐рдореНрди рдХрдорд╛рдВрдб рдЬрд╛рд░реА рдХрд░реЗрдВ:
рдЖрдкрдХреЛ рдПрдХ рдкреНрд░реЙрдореНрдкреНрдЯ рджрд┐рдЦреЗрдЧрд╛:
eth_book@304bf4f09063:~$
рджреВрд╕рд░реЗ рдФрд░ рддреАрд╕рд░реЗ рдХрдВрд╕реЛрд▓ рд╡рд┐рдВрдбреЛ рдореЗрдВ, рдХреНрд░рдорд╢рдГ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ:
Ethereum Private Network рдиреЛрдбреНрд╕ рдФрд░ рдЕрдХрд╛рдЙрдВрдЯ рдмрдирд╛рдирд╛
рдлрд┐рд▓рд╣рд╛рд▓, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЧреЗрде рдХреЗ рд╕рд╛рде рддреАрди рдХрдВрдЯреЗрдирд░ рд╣реИрдВред рдЖрдЗрдП рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рд╣рдорд╛рд░реЗ рдирд┐рдЬреА рдПрдереЗрд░рдо рдиреЗрдЯрд╡рд░реНрдХ рдФрд░ рдЦрд╛рддреЗ рдХрд╛ рдиреЛрдб рдмрдирд╛рдПрдВред
рдкрд╣рд▓реЗ рддреАрди рдХрдВрд╕реЛрд▓ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ:
$ geth account new
рдЖрдкрдХреЛ рдПрдХ рдкрд╛рд╕рд╡рд░реНрдб рджрд░реНрдЬ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рдкрд░ рдПрдХ рд╣реА рдкрд╛рд╕рд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдХрд╣реАрдВ рд▓рд┐рдЦреЗрдВред рдпрджрд┐ рдЖрдк рдкрд╛рд╕рд╡рд░реНрдб рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
рдХрдВрд╕реЛрд▓ рдкрд░ рдЦрд╛рддреЗ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЗрди рдХреЗ рд╕рдорд╛рди рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рдкрддреЗ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗ:
Public address of the key: 0xc5Df10a76Bb559332c385F8cA789C0F37dD77A54 Public address of the key: 0x0C976006a5762779bA36AC590D1D8Ebac1Ca2981 Public address of the key: 0xaB627feab4e962222a3333F3b09182dF68bB9422
рдкрддреЗ рд╕рд╣реЗрдЬреЗрдВ (рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрдиреНрдп рд╣реЛрдВрдЧреЗ), рдЬреИрд╕рд╛ рдХрд┐ рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдиреЛрдбреНрд╕ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЕрдм рдЖрдкрдХреЛ рдиреЛрдбреНрд╕ рдХрд╛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
$ geth --nousb init distr/genesis.json
рд╣рдорд╛рд░реЗ рдХрдВрдЯреЗрдирд░ рдХреЗ рд╕рднреА рдХрдВрд╕реЛрд▓ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдЗрд╕ рдХрдорд╛рдВрдб рдХреЛ рджрд░реНрдЬ рдХрд░реЗрдВред --Nousb рд╡рд┐рдХрд▓реНрдк USB рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╕рднреА рд╕рдВрдЪрд╛рд░ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИред
рдЪрд▓рдд рдЧрде рдирдж
рдЕрдм рдкреНрд░рддреНрдпреЗрдХ рдХрдВрд╕реЛрд▓ рд╡рд┐рдВрдбреЛ рдХреЛ рдмрд╛рд░реА-рдмрд╛рд░реА рд╕реЗ рдЦреЛрд▓реЗрдВ рдФрд░ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд╣рд╛рдВ рдЧреЗрде рдХреЛ рдЪрд▓рд╛рдПрдВред
рдкрд╣рд▓реА рдЦрд┐рдбрд╝рдХреА:
$ geth --identity="Node01" --etherbase "0xc5Df10a76Bb559332c385F8cA789C0F37dD77A54" --mine --minerthreads 1 --verbosity 3 --networkid 98760 --rpc --rpcaddr 127.0.0.1 --nousb --rpcapi="db,eth,net,web3,personal,web3" console
рджреВрд╕рд░реА рдЦрд┐рдбрд╝рдХреА:
$ geth --identity="Node02" --etherbase "0x0C976006a5762779bA36AC590D1D8Ebac1Ca2981" --mine --minerthreads 1 --verbosity 3 --networkid 98760 --rpc --rpcaddr 127.0.0.1 --rpcport=8546 --nousb --rpcapi="db,eth,net,web3,personal,web3" console
рддреАрд╕рд░реА рдЦрд┐рдбрд╝рдХреА:
$ geth --identity="Node03" --etherbase "0xaB627feab4e962222a3333F3b09182dF68bB9422" --mine --minerthreads 1 --verbosity 3 --networkid 98760 --rpc --rpcaddr 127.0.0.1 --rpcport=8547 --nousb --rpcapi="db,eth,net,web3,personal,web3" console
рдкреНрд░рддреНрдпреЗрдХ рдЦреБрд▓реА рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рдореЗрдВ, DAG рдкреАрдврд╝реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрджреЗрд╢ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗ:
тАж INFO [12-19|17:57:44.072] Generating DAG in progress epoch=0 percentage=34 elapsed=29.740s INFO [12-19|17:57:44.898] Generating DAG in progress epoch=0 percentage=35 elapsed=30.566s INFO [12-19|17:57:45.671] Generating DAG in progress epoch=0 percentage=36 elapsed=31.339s тАж
рдкреАрдврд╝реА рдкреВрд░рд╛ рд╣реЛрдиреЗ рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВред рдЙрд╕рдХреЗ рдмрд╛рдж, eth.hashrate рдФрд░ eth.blockNumber 0 рд╕реЗ рдЕрд▓рдЧ рд╣реЛрдЧрд╛:
> eth.hashrate 4 > eth.blockNumber 2
рдЖрдк рдирд┐рдореНрди рдкреНрд░рдХрд╛рд░ рд╕реЗ рдЪрд╛рд▓реВ рдЦрд╛рддрд╛ рд╢реЗрд╖ рдХреА рдЬрд╛рдБрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
> web3.fromWei( eth.getBalance(eth.coinbase) )
рдХрдВрд╕реЛрд▓ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдирдП рдмреНрд▓реЙрдХ рдФрд░ рдЕрдиреНрдп рдореИрд╕реЗрдЬ рдмрдирд╛рдиреЗ рдХреЗ рд╕рдВрджреЗрд╢реЛрдВ рд╕реЗ рдЖрдкрдХреЛ рдкрд░реЗрд╢рд╛рди рди рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдЧреНрдЬрд┐рдЯ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдЧреЗрде рдЫреЛрдбрд╝реЗрдВ рдФрд░ рд╡рд░реНрдмреЛрд╕рд┐рдЯреА рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдлрд┐рд░ рд╕реЗ 1 рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВред
рдиреЗрдЯрд╡рд░реНрдХрд┐рдВрдЧ рдиреЛрдбреНрд╕
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЪрд▓ рд░рд╣реЗ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреА рд╕реВрдЪреА рджреЗрдЦреЗрдВрдЧреЗред рдЪреМрдереЗ рдХрдВрд╕реЛрд▓ рд╡рд┐рдВрдбреЛ рд╕реЗ рдирд┐рдореНрди рдЖрджреЗрд╢ рдЬрд╛рд░реА рдХрд░реЗрдВ:
рдпрд╣рд╛рдВ, рдкреНрд░рддреНрдпреЗрдХ рдХрдВрдЯреЗрдирд░ рдХреЗ рд▓рд┐рдП, рдЙрд╕рдХреА рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛, рдЫрд╡рд┐ рдХрд╛ рдирд╛рдо, рдХрдВрдЯреЗрдирд░ рдХрд╛ рдирд╛рдо рдФрд░ рдЕрдиреНрдп рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред
рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╣рдорд╛рд░реЗ рдирд┐рдЬреА рдирд┐рдЬреА рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рдЖрдИрдкреА рдкрддреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЖрдк рдЗрди рдкрддреЛрдВ рдХреЛ рдХрдВрдЯреЗрдирд░ рдЖрдИрдбреА рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
рдЖрдк docker рдиреЗрдЯрд╡рд░реНрдХ PRIVATENET рдХрдорд╛рдВрдб рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
docker рдиреЗрдЯрд╡рд░реНрдХ PRIVATENET рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рддрд╛ рд╣реИ [ { "Name": "PRIVATENET", "Id": "576ec7edba5b4c228740deaf7fabb5e2ba003d310086153dd7f15e2c7de0c1b2", "Created": "2019-12-20T11:52:07.90695857+03:00", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": {}, "Config": [ { "Subnet": "172.21.0.0/16", "Gateway": "172.21.0.1" } ] }, "Internal": false, "Attachable": false, "Ingress": false, "ConfigFrom": { "Network": "" }, "ConfigOnly": false, "Containers": { "49a028744b4b6073f6dbca23e78625bc58fc0cdacadec7cded4bb0e888c7e37b": { "Name": "reverent_wescoff", "EndpointID": "11006b596b5a46df9bf9f95a9456784795d333a3e6901b15bd2db746fd4b5513", "MacAddress": "02:42:ac:15:00:03", "IPv4Address": "172.21.0.3/16", "IPv6Address": "" }, "5a9ade2947ebd8e55594ede9763aac71f5e6529c03e762ef723adb2c592c5ccd": { "Name": "clever_ellis", "EndpointID": "41ef69a0a93b5b1de495836028bac1742c303de92ffe42a0855ed32c93c28953", "MacAddress": "02:42:ac:15:00:02", "IPv4Address": "172.21.0.2/16", "IPv6Address": "" }, "fa70a54186185de01db3647e7333bf6c71250162fafefb78dbe9998e5ac93f34": { "Name": "gifted_curran", "EndpointID": "d368c032bc0886c27ad4895d1856e4f00cf1b25ce040f3b42393dbff778c18e5", "MacAddress": "02:42:ac:15:00:04", "IPv4Address": "172.21.0.4/16", "IPv6Address": "" } }, "Options": {}, "Labels": {} } ]
рдЗрди рдЖрджреЗрд╢реЛрдВ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдЖрдВрдХрдбрд╝реЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдЕрдкрдиреЗ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдИрдкреА рдкрддреЗ рдХреА рдПрдХ рд╕реВрдЪреА рдмрдирд╛рдПрдВрдЧреЗ:
node01 - 172.21.0.2 node02 - 172.21.0.3 node03 - 172.21.0.4
рдмреЗрд╢рдХ, рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдЕрд▓рдЧ рд╕реВрдЪреА рд╣реЛрдЧреА, рдФрд░ рдЬрдм рдЖрдк рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпреЗ рдкрддреЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред
рдкрддреЗ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╕рднреА рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ geth рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░реЗрдВ - рдЕрдкрдиреЗ рдХрдВрдЯреЗрдирд░ рдХреЗ рдкрддреЗ рдХреЛ --rpcaddr рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВред рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдкрддреЗ рдХреЛ 0.0.0.0 рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдмреБрд░рд╛ рд╣реИ - рдХреЛрдИ рднреА рдпрд╛ рдХреБрдЫ рднреА рдиреЛрдб рд╕реЗ рдЬреБрдбрд╝ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдмреЙрдЯреНрд╕ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЗрди рдиреЛрдбреНрд╕ рд╕реЗ рд╕рднреА рдлрдВрдбреЛрдВ рдХреЛ "рд╡рд╛рдкрд╕ рд▓реЗрдиреЗ" рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рдиреЛрдб рдХреЗ рдЕрдирд▓реЙрдХ рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред
рдиреЛрдбреНрд╕ рдХреЛ рдорд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ admin.addPeer рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рдХрдорд╛рдВрдб рдХреЗ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдкрдХреЛ URL рдХреЛ рдПрдиреЛрдб рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ URL рдХреЛ admin.nodeInfo.enode рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдХрдВрдЯреЗрдирд░ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:
> admin.nodeInfo.enode "enode://0a84e562c9b22e43269b7dca215cf2ed8c20bbf35da67bae8d5ee81b36d8bbb69e3ec704b9b6f7501059fe861843a836b2fbab641f36616cdd77365b1a522d5b@62.152.63.28:30303?discport=1350" "enode://ee49f69e25c068e006fec4a8d74370370b1d2be9715b86eddd99f97a3a5a9c692a265ab7d01fb36410d59c3f6e2b253a22f652ecbf1941eef0b3f1d30b19a535@62.152.63.28:30303?discport=1345" "enode://156d43648b47078439c7481e54f697bbf1c6b6e762029ba2969f1556ceb94e51ad03f8bd2bed35f466073165810600f52925d155f0fceef832ae86fc39a8c135@62.152.63.28:30303?discport=1348"
рдкреНрд░рд╛рдкреНрдд рдкрддреЗ рд╕рд╣реЗрдЬреЗ рдЧрдПред
рдПрдХ рдиреЛрдб рдХреЛ рджреВрд╕рд░реЗ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ рдиреЛрдб рдХреА рдХрдВрд╕реЛрд▓ рд╡рд┐рдВрдбреЛ рдЦреЛрд▓реЗрдВ рдФрд░ рд╡рд╣рд╛рдВ рдирд┐рдореНрди рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ:
> admin.addPeer( "enode://0a84e562c9b22e43269b7dca215cf2ed8c20bbf35da67bae8d5ee81b36d8bbb69e3ec704b9b6f7501059fe861843a836b2fbab641f36616cdd77365b1a522d5b@172.21.0.3:30303")
рдпрд╣рд╛рдВ рд╣рдордиреЗ URL рдкрддрд╛ рдкрд╛рд╕ рдХрд┐рдпрд╛, рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдЬреБрдбрд╝рд╛ рд╣реЛрд╕реНрдЯ рдХрд╛ рдЖрдИрдкреА рдкрддрд╛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдЕрдиреНрдп рдиреЗрдЯрд╡рд░реНрдХ рдиреЛрдбреНрд╕ рдкрд░ рд╕рдорд╛рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВред
рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рд╣реИ, рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдпрджрд┐ рдХреЛрдИ рдХрдиреЗрдХреНрд╢рди рдирд╣реАрдВ рд╣реИ, рддреЛ рдХрдорд╛рдВрдб рдПрдХ рдЦрд╛рд▓реА рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рдПрдЧрд╛:
> admin.peers []
рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрдорд╛рдВрдб рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдкрддрд╛ 172.21.0.2 рдХреЗ рд╕рд╛рде рдкрд╣рд▓рд╛ рдиреЛрдб 172.21.0.3 рдФрд░ 172.21.0.4 рдХреЗ рдкрддреЗ рдХреЗ рд╕рд╛рде рдиреЛрдбреНрд╕ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИ:
рдЬрдм рдХрдиреЗрдХреНрд╢рди рд╣реЛрддреЗ рд╣реИрдВ рддреЛ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦреЗрдВ > admin.peers [{ caps: ["eth/63", "eth/64"], enode: "enode://156d43648b47078439c7481e54f697bbf1c6b6e762029ba2969f1556ceb94e51ad03f8bd2bed35f466073165810600f52925d155f0fceef832ae86fc39a8c135@172.21.0.4:30303", id: "4dac1d10cb6ae8bfc1fdebd3f5334b24ee62ec38a50bc92c89104cfc3251b5fc", name: "Geth/Node03/v1.9.9-stable-01744997/linux-amd64/go1.13.4", network: { inbound: false, localAddress: "172.21.0.2:40652", remoteAddress: "172.21.0.4:30303", static: true, trusted: false }, protocols: { eth: { difficulty: 98414119, head: "0x6b31a5bb9cde06fab5a8cc1ae9b18bada30de0d1b76cb3286c1081e76dbf5b83", version: 64 } } }, { caps: ["eth/63", "eth/64"], enode: "enode://ee49f69e25c068e006fec4a8d74370370b1d2be9715b86eddd99f97a3a5a9c692a265ab7d01fb36410d59c3f6e2b253a22f652ecbf1941eef0b3f1d30b19a535@172.21.0.3:30303", id: "b74277d278c15317fa7f7fa492daca60492ea22053bfc53281dd0071eba1c16b", name: "Geth/Node02/v1.9.9-stable-01744997/linux-amd64/go1.13.4", network: { inbound: false, localAddress: "172.21.0.2:42576", remoteAddress: "172.21.0.3:30303", static: true, trusted: false }, protocols: { eth: { difficulty: 99041423, head: "0x0ec44735bbb425cb8db96103f52300dfaae1147ba0e03aa4892d041250ce4408", version: 64 } } }]
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдиреЛрдбреНрд╕ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рдВрдпреБрдХреНрдд рдФрд░ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, eth.blockNumber рдХрдорд╛рдВрдб рд╣рдорд╛рд░реЗ рддреАрди рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдореЗрдВ рд▓реЙрдиреНрдЪ рд╣реЛрдиреЗ рдкрд░ рд╕рдорд╛рди рдорд╛рди рд▓реМрдЯрд╛рдПрдЧрд╛ред
Web3.fromWei рдХрдорд╛рдВрдб (eth.getBalance (eth.coinbase)), рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╡рд┐рднрд┐рдиреНрди рдиреЛрдбреНрд╕ рдкрд░ рдПрдХ рдЕрд▓рдЧ рд╕рдВрддреБрд▓рди рджрд┐рдЦрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рдХрд╛ рдЕрдкрдирд╛ рдЦрд╛рддрд╛ рд╣реИред
Node.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЗрдЬрдмрд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ
рд╕реВрдЪреА 3 рдореЗрдВ, рд╣рдордиреЗ Node.js рдХреЛ рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реА рдПрдХ рд╕рд░рд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░рд╕реНрддреБрдд рдХреА рд╣реИ рдЬреЛ рдХрдВрд╕реЛрд▓ рдкрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдиреЛрдб рдХреЗ рд▓рд┐рдП рдЦрд╛рддреЛрдВ рдХреА рд╕реВрдЪреА рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд╕рдВрддреБрд▓рди рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ:
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 3. рдлрд╝рд╛рдЗрд▓ / рдШрд░ / рдкреБрд╕реНрддрдХ / list_accounts.js var Web3 = require('web3') var web3 = new Web3(new Web3.providers.HttpProvider("http://172.21.0.2:8545")); web3.eth.getAccounts() .then(accList => { return accList; }) .then(function (accounts) { var balancePromeses = []; for(let i = 0; i < accounts.length; i++) { balancePromeses[i] = web3.eth.getBalance(accounts[i]); } Promise.all(balancePromeses).then(values => { for(let i = 0; i < values.length; i++) { console.log('Account: ', accounts[i], 'balance: ', values[i], 'wei, ', web3.utils.fromWei(values[i], 'ether'), 'ether'); } }); }) .catch(function (error) { console.error(error); });
рдЖрдк рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдПрдХ рдЕрд▓рдЧ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЪреМрдереЗ рдХрдВрд╕реЛрд▓ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ:
рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реИ
рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХреНрд░рд┐рдкреНрдЯреЛрдХреНрдпреВрд░реЗрдВрд╕реА рдХреЗ рд▓рд┐рдП рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдереЗрд░рд┐рдпрдо рдХреЗ рд▓рд┐рдП рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╡рд┐рдХрд╛рд╕ рдХрд╛ рд╡рд┐рд╖рдп рдХрд╛рдлреА рдЖрдХрд░реНрд╖рдХ рд╣реИред рдпрджрд┐ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж рдЖрдкрдХреЗ рдкрд╛рд╕ рдкреНрд░рд╢реНрди рд╣реИрдВ рдФрд░ рдЖрдк рдЕрдзрд┐рдХ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдореЗрд░реА рдкреБрд╕реНрддрдХ рдкрдврд╝реЗрдВ
"рдЗрдереЗрд░рд┐рдпрдо рдмреНрд▓реЙрдХрдЪреЗрди рдХреЗ рд▓рд┐рдП рд╕реЙрд▓рд┐рдбрд┐рдЯреА рд╕реНрдорд╛рд░реНрдЯ рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ рдмрдирд╛рдирд╛ред рдкреНрд░реИрдХреНрдЯрд┐рдХрд▓ рдЧрд╛рдЗрдб тАЭ , рдЬрд┐рд╕реЗ
рд▓рд┐рдЯрд╕ рдкрдмреНрд▓рд┐рд╢рд┐рдВрдЧ рд╣рд╛рдЙрд╕ рдиреЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдерд╛ред
рдЖрдкрдХреЛ рдПрдХ рдЕрдЪреНрдЫреЗ
рдбреЙрдХрдЯрд░ рдХреЛ рдзреЛрдЦрд╛ рджреЗрдиреЗ рд╡рд╛рд▓реА рд╢реАрдЯ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред
рдореИрдВ рд▓реЗрдЦ рдФрд░ рдкреБрд╕реНрддрдХ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдЯрд┐рдкреНрдкрдгреА рдФрд░ рдкрд░рд┐рд╡рд░реНрдзрди рдХреЗ рд▓рд┐рдП рдЖрднрд╛рд░реА рд░рд╣реВрдВрдЧрд╛!