Основы блокчейна на примере написания криптовалютного кошелька. Часть 1

Основы блокчейна на примере написания криптовалютного кошелька. Часть 1

Написать мини-приложение крипто-кошелька — легко! Данил Замешаев познакомит вас с основными концепциями блокчейна и пошагово покажет, как их применить на практике.

Все привет! Я Данил Замешаев, выпускник Elbrus Bootcamp 2021 года. Через 2 недели после выпуска я уже сидел на своем первом рабочем месте. Сейчас в нашей компании Evercode Lab я работаю над обеспечением взаимодействия криптовалютного кошелька с разнообразными блокчейнами. На данный момент мы поддерживаем более 70 монет и множество токенов.

В этой статье, я вам докажу, что не обязательно быть программистом с многолетним стажем или гением, чтобы у вас получилось разобраться в основах блокчейна и начать писать код. Вам потребуется лишь немного любопытства и готовность погрузиться в новые концепции.

Глоссарий блокчейна

Давайте забудем о сложности, которую часто ассоциируют с блокчейном. Вместо этого посмотрим на него как на набор простых концепций, позволяющий миллионам людей во всем мире взаимодействовать в децентрализованной, безопасной и прозрачной среде.

Дисклеймер: Мир блокчейна огромен и невероятно разнообразен. Различные блокчейны могут иметь существенные отличия в структуре и функционировании. В этой статье мы разбираем основные концепции на примере сети Ethereum.

Блокчейн

Блокчейн (Blockchain) — это децентрализованная и защищенная сеть-инфраструктура, функционирующая на основе механизма консенсуса и, в некоторых случаях, как распределенный ЭВМ. Эта сеть обеспечивает регистрацию и хранение информации, которая, благодаря особенностям блокчейна, остается неизменной. В случае ЭВМ-подобных блокчейнов, также возможно исполнение кода, или так называемых смарт-контрактов.

Разберем определение по составным частям

«децентрализованная» — это означает, что блокчейн функционирует без единой точки управления, то есть: нет такого компьютера, отключив который вы отключите блокчейн.

«защищенная» — сама архитектура блокчейна и принципы его построения обеспечивают безопасность разными путями, и главная идея защищенности в том, что вам больше не нужно полагаться на добросовестность какой-то организации, например банка, вы можете полагаться на безопасность сети как таковой и доверять алгоритмам и коду.

«сеть-инфраструктура» — блокчейн физически — это сеть из участников, которые связаны друг с другом: есть узлы, майнеры, валидаторы и другие.  По факту — это сервера по всему миру с установленным нам них соответсвующим ПО.

«механизм консенсуса» — это набор правил и процедур, по которым все участники сети соглашаются на единое состояние информации. Его цель — обеспечить согласованность и непрерывность сети, несмотря на возможность ошибок, несоответствий или попыток мошенничества. Информация верифицируется и записывается в блокчейн, и как только информация записана, все участники сети соглашаются с тем, что она верна. Вы могли слышать разные виды механизма консенсуса, например в Bitcoin это Proof of Work, а в Etherium это Proof of Stake.

«распределенный ЭВМ» — это означает, что сети бывают двух основных видов, ЭВМ-подобные и не ЭВМ-подобные. Мне нравится такое сравнение:

  1. Bitcoin(не ЭВМ-подобный блокчейн) приложение в телефоне, которое позволяет вам проверять баланс своего счета, переводить деньги другим людям, получать платежи. Но оно ограничено функциями, для которых оно было разработано. Вы не можете настроить его или добавить новые функции. Все транзакции, которые вы делаете, имеют стандартный формат и следуют определенным правилам.
  2. Ethereum(ЭВМ-подобный блокчейн) можно сравнить с мощной платформой для создания приложений, как Android или iOS. Вместо того, чтобы предлагать только одно приложение с фиксированными функциями, Ethereum предоставляет вам инструменты и язык программирования (Solidity), которые позволяют вам создавать свои собственные приложения (смарт-контракты). Эти приложения могут делать все, что вы хотите: от создания новых криптовалют (токенов ERC-20) до создания децентрализованных бирж, игр, программ лояльности.

«неизменяемость информации» — если что-то попало в блокчейн, оно там навсегда. Вы не можете «откатить» транзакцию, нет никаких «бекапов» и возможности стереть информацию.

Регистрация, хранение и исполнение информации — основной функционал блокчейна. В первую очередь, блокчейн — это распределенная база данных, которая регистрирует новые транзакции, хранит всю их историю, и в случае с ЭВМ-подобными блокчейнами, умеет исполнять код, который в ней хранится.

С блокчейном мы разобрались, идем далее…

Адрес

Адрес (Address) — это уникальный идентификатор в блокчейн-сети. Он нужен для того, чтобы отправить или получить криптовалюту. Подобно тому, как вам нужен адрес друга, чтобы отправить ему письмо, вам нужен блокчейн-адрес получателя, чтобы отправить ему криптовалюту.

Существенное отличие физического адреса от блокчейн-адреса в том, что вся информация в блокчейне публична; любой может посмотреть, кто отправлял криптовалюту на ваш адрес, сколько именно он отправил и когда.

Приватный ключ

Приватный ключ (Private Key) — это уникальный идентификатор, который используется для подтверждения прав на совершение транзакции с его адресом-парой.

Подумайте об этом как о ключе от сейфа. Если у вас есть ключ (приватный ключ), вы можете открыть сейф (совершить транзакцию) и получить доступ к содержимому (криптовалюте). Если кто-то узнает ваш ключ, он может открыть ваш «сейф» и забрать вашу криптовалюту. Поэтому всегда храните свой приватный ключ в секрете.
Также в этом сравнении важно то, что конкретный ключ подходит под конкретный сейф, так и приватный ключ связан с конкретным адресом.

Кошелек

Кошелек (Wallet) — так называют и пару «адрес-приватный ключ», и программное обеспечение или устройство, которое используется для хранения, отправки и получения криптовалюты.

Кошелек похож на SSH-ключ на GitHub: это аналогичная пара адреса (публичный ключ) и приватного ключа. Первый загружается на GitHub, а второй служит подтверждением прав доступа компьютера к аккаунту.

Монета

Монета (Coin) — это цифровая валюта, которая существует на своем собственном блокчейне (например, Bitcoin или Ethereum). Обычно ей расплачиваются как обычными деньгами или платят комиссию за перевод токенов.

Токен

Токен (Token) — это цифровой актив, который создается и управляется на базе существующего блокчейна. Например, в сети Bitcoin нет токенов, так как сеть не предоставляет возможности их создать. С другой стороны, в сети Ethereum каждый может создать свой токен. Токены могут представлять различные виды ценности: например, акции, товары или права на использование услуг.

Представьте себе монеты (Coin) как основную валюту страны. В каждой стране есть своя валюта — доллары в США, евро в Европе, рубли в России. Так же в мире блокчейна есть монеты, такие как Bitcoin или Ethereum, которые имеют свой собственный «блокчейн-систему» или «страну».

Теперь подумайте о токенах (Token) как о подарочных картах, которые выпускает конкретная компания, но которые работают только внутри одной «страны» (блокчейна).

* Подарочную карту Старбакса можно использовать в заведениях Старбакса только в той стране, где вы ее получили.

Точно так же, токены созданные в сети Ethereum не могут быть напрямую использованы в сети Tron и наоборот. Вместо этого, вам нужно будет обменять свои Ethereum токены на Tron токены через специализированные платформы, такие как криптовалютные биржи.

При этом есть примеры, когда одна компания выпускает свой токен в разных блокчейнах, например USDT — это токен, который связан с одной конкретной организацией, но он бывает минимум в 8 сетях: Ethereum, Tron, Binance Smart Chain. USDT один из самых известных стейблкоинов.

* Стейблкоины — это токены, стоимость которых стабильна и привязана к определенной валюте, например, к доллару США.

Важно понимать, что для конечного пользователя монеты и токены часто выполняют одну и ту же функцию: служат цифровыми деньгами, которыми можно расплачиваться или которые можно хранить.

Глоссарий для продвинутых: сложные темы, которые нужно знать

Для обычного пользователя криптовалют этот раздел нарисует более объемную картину того, как работает блокчейн. А для разработчиков, которые хотят работать с блокчейн-технологиями, понимание этих терминов и их взаимодействия — основа для создания блокчейн-приложений.

Узел

Узел (Node) — это компьютер (сервер), подключенный к блокчейн-сети. Он хранит копию всей цепочки блоков и обрабатывает транзакции. Узлы поддерживают работу сети, проверяют и распространяют новые блоки и транзакции.

Давайте вспомним игру «Сломанный телефон». В этой игре сообщение шепчет один человек другому, и это продолжается по цепочке, пока последний человек не объявит вслух то, что ему сказали. Иногда сообщение искажается по пути, и конечный результат может быть очень смешным, в этом суть игры.
Теперь представьте, что вместо того чтобы шептать сообщение следующему человеку, игрок шепчет это всем остальным игрокам. Когда приходит время последнему игроку объявить сообщение, он может проверить его у каждого участника, чтобы быть уверенным, что его версия верна. Если кто-то попытается изменить сообщение, это будет легко обнаружить, потому что все остальные игроки знают сообщение.

В этом сценарии каждый игрок является «узлом».

Узел в блокчейн-сети — это компьютер, который хранит копию всего блокчейна и проверяет каждую новую транзакцию. Это важный элемент децентрализации, ключевой идеи, стоящей за блокчейном. Вместо того чтобы доверять одному центральному авторитету (например, банку или правительству), мы доверяем всей системе, где каждый узел подтверждает правильность информации. Это делает систему прозрачной и устойчивой к манипуляциям.

* На момент написания статьи в сети Ethereum было 7466 активных узлов, вы можете отслеживать их количество в реальном времени на сайте https://ethernodes.org.

Вы можете поднять узел на своем компьютере, на выделенном сервере или просто получить доступ к уже существующим узлам.

* Для этой статьи я использую узел, предоставляемый сервисом Infura, который выглядит как обычное API с ключом доступа.

Блок

Блок (Block) — это базовая единица блокчейна. Транзакции в сеть записываются не по одной, а блоками.

Представьте блокчейн как поезд, где каждый вагон — это блок. В каждом вагоне (блоке) находятся коробки (транзакции). Вместо того чтобы отправлять каждую коробку отдельно, мы собираем их вместе и загружаем в один вагон. Каждый вагон может вместить разное количество коробок. Например, в сети Ethereum блок 16906111 содержит 338 транзакций.
Важно то, что все вагоны (блоки) соединены в одну цепочку (поезд). Каждый новый вагон добавляется в конец поезда и связывается с предыдущим. Это и есть основная идея блокчейна — цепочка блоков, где каждый блок связан с предыдущим.

Блокчейн-эксплорер

Блокчейн-эксплорер (Explorer) — это веб-приложение и API, которые по прямым запросам предоставляют информацию из блокчейна. Думайте про эксплорер как про специализированный Google, где вы можете найти всю нужную информацию. Вы можете получить баланс адреса, список транзакций, последний блок и много другой информации. Конечно, то же самое можно получить и из узла, но эксплорер удобнее, легче и быстрее.

Поднять экземпляр эксплорера можно или самостоятельно, или получить доступ к уже существующим.

* Для нашего приложения мы возьмем официальный эксплорер сети Ethereum — etherscan.io.

Основная и Тестовая сеть

Основная сеть (Mainnet) и Тестовая сеть (Testnet ). Из названия легко понять, что mainnet — это основная сеть, в которой происходят реальные операции с реальными средствами, а testnet — это копия основной сети (по функционалу).

Представьте, что Mainnet представляет собой настоящий полет за рулем самолета, здесь каждое действие имеет реальные последствия и стоимость, а от вас требуется полная ответственность.
А Testnet, или тестовая сеть, можно сравнить с симулятором полета на самолете. Здесь вы можете испытывать и оттачивать свои навыки, экспериментировать с различными сценариями и изучать небо в безопасной среде. Все, что происходит в Testnet, не оказывает влияния на настоящий полет.

Тестовая сеть особенно полезна для разработчиков, которые могут использовать ее для проверки и тестирования своих приложений перед запуском в реальной сети. Они могут испытать свои стратегии, убедиться в правильности работы своего приложения и принять решение о переходе на «настоящий полет» Mainnet, где их приложение будет работать с реальными операциями и средствами.

* В сети Ethereum существует несколько тестовых сетей, а в этом тексте мы используем одну из них под названием Goerli.

Библиотека

Библиотека (Library) — это обычная npm-библиотека, которую обычно предоставляют разработчики блокчейна для интеграции его в различные среды, включая веб-приложения.

* Например, для взаимодействия с сетью Ethereum сегодня мы будем использовать библиотеку Web3.

Переходим к практике. Пишем приложение

Заветная ссылка для самых терпеливых лежит тут.

Автор статьи — Данил Замешаев
Софья Пирогова

Софья Пирогова

Главный редактор / Автор статей