Как добавляются новые блоки в блокчейн
Перейти к содержимому

Как добавляются новые блоки в блокчейн

  • автор:

Что такое блокчейн и как он работает

Рассказываем о том, как устроена самая популярная криптотехнология, где её применяют и какие у неё есть недостатки.

Иллюстрация: Катя Павловская для Skillbox Media

Максим Сафронов

Блокчейн сейчас везде — на нём работают криптовалюты, мессенджеры, сложные банковские системы и модные токены с собачками. Выпускникам МФТИ выдают дипломы в виде NFT, а Эрмитаж продаёт виртуальные картины Ван Гога на блокчейн-аукционах. Самое время разобраться, что это за технология, как она устроена, зачем нужна и не пирамида ли это.

Технология блокчейн простыми словами

Блокчейн — это реестр для хранения и передачи цифровых активов. Активы могут быть любые: деньги, акции, игровые персонажи, произведения искусства — всё что угодно. Идея в том, что блокчейн позволяет взять какую-то вещь в Сети и сказать: «Это моё». И никто не сможет её у вас украсть, взломать или переписать.

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

Изначально блокчейн был нишевой технологией для подписания цифровых документов. А потом энтузиасты догадались использовать его для перевода денег между людьми — без банков, WebMoney и прочих посредников. Так появилась криптовалюта биткоин — пока что самое известное воплощение технологии.

Как работает блокчейн

Допустим, вы программист в европейской компании. Приближается Международный день пожилых людей, и вы решили поздравить свою бабушку, которая живёт в России, — отправить ей немного денег на новое пальто.

Можно сделать это по-старинке — через обычный банк:

  • Открываете приложение банка.
  • Отправляете деньги бабушке на карту.
  • Банк списывает деньги с вашего счёта.
  • Зачисляет на счёт бабушке.

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

А теперь посмотрите, как изящно все эти проблемы решает блокчейн:

  • Вы подключаетесь к блокчейн-сети.
  • Заводите бабушке кошелёк и отправляете туда деньги.
  • Перевод заносится в блокчейн и шифруется.
  • Информацию о переводе получают все участники сети — а в крупных блокчейнах это миллионы человек.

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

Из чего состоит блокчейн

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

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

Например, в биткоине все операции хешируются алгоритмом SHA-256. Он превращает любую информацию в строку размером 256 бит. Без разницы, будет ли это «Война и мир» Толстого или строчка из песни Михаила Боярского — на выходе получится шифрованная колбаса весом в 256 бит. Выглядит она примерно так:

В нашем случае, если перевести эту колбасу на русский, выйдет что-то вроде: «Петя Иванов отправил Зинаиде Степановне Ивановой 5000 рублей 1 октября 2022 года в 14:30».

Тут есть нюанс: если Петю заменить, скажем, на Диму, получится совершенно другой хеш. Следующий блок заметит изменения и отправит сигнал всем участникам сети: «Что-то тут нечисто, нас хотят взломать». И если большинство компьютеров знать не знают никакого Диму, блок останется неизменным.

Вернёмся к нашей Зинаиде Степановне. Предположим, деньги ей не особо нужны, и она решает отправить их вашему брату, который учится на первом курсе в Москве. Вот как система будет работать в таком случае:

Шаг 1. Блокчейн возьмёт хеш предыдущего блока.

Шаг 2. Добавит к нему новые данные:

«Данные о сделке Зинаиды Степановны и Васи».

Шаг 3. В таком виде запись снова хешируется, и получится ещё один блок:

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

Кто создаёт новые блоки

Сама по себе транзакция — это просто набор данных, вроде записи в тетради. Чтобы превратить её в блок, нужны вычислительные мощности — и чем больше сеть, тем больше железа она требует для работы. Поэтому созданием новых блоков в больших блокчейнах занимаются специальные люди с мощными компьютерами — майнеры.

Вот как выглядит день из жизни обычного майнера:

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

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

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

Как и в каких крупных компаниях применяют блокчейн

Так как блокчейн трудно взломать или подделать, его часто применяют для защиты цифровых активов: файлов, документов, сделок или транзакций. Например, можно составить и заверить ипотечный договор без обращения к нотариусу. Или оформить права собственности на землю и недвижимость, как это уже делают в Грузии.

Вот для чего используют блокчейн крупные российские и зарубежные компании:

  • Сбербанк — для учёта ипотечных закладных и других ценных бумаг.
  • S7 Airlines — для продажи авиабилетов без посредников.
  • «Норникель» — для выпуска токенов, обеспеченных полезными ископаемыми.
  • Maersk — для отслеживания морских перевозок.
  • Renault — для сертификации автомобильных запчастей.
  • IBM — для разработки системы межбанковских переводов (аналога Swift).

А вот наиболее распространённые сферы, которые без блокчейна уже трудно представить:

Криптовалюты. Если вы были в интернете в последние пять лет, то наверняка слышали про пиринговые валюты: Bitcoin, Litecoin, Ethereum и другие. Интерес к ним сейчас не шквальный, но их по-прежнему ценят фрилансеры, блогеры, программисты, цифровые кочевники и все, кому важен свободный обмен деньгами без посредников.

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

Государственное управление. После того как взлетел биткоин, блокчейн перестал быть забавой для гиков и технократов — теперь его внедряют банки, госкомпании и даже некоторые государства. Например, правительство Тайваня использует блокчейн на базе Ethereum для защиты от кибератак со стороны Китая.

Медицина. Данные о здоровье — лакомый кусочек для мошенников, хакеров и фармацевтических компаний. Чтобы избежать утечек, многие клиники переносят медицинские карты пациентов в блокчейн — так их невозможно украсть, взломать или подделать. Ещё такие карты удобно заполнять и передавать между учреждениями.

Интернет вещей. Любое умное устройство работает в паре с каким-то сервером: передаёт данные, скачивает обновления, обращается к условной «Алисе». Если этот сервер взломает хакер, он может управлять устройством удалённо — например, установить во всём доме температуру 32 °C. Чтобы этого избежать, многие компании хранят данные пользователей децентрализованно — то есть в блокчейн-сетях.

Что такое блокчейн-платформа

Представьте, что вы решили испечь торт. Можно взять в магазине готовые коржи и поиграться с начинкой — добавить крем, фрукты или варенье. А можно сделать основу самостоятельно и получить такой торт, какой захотите, — например, двухметровый шоколадный торт в виде зайца Багз Банни.

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

Самые известные платформы:

  • Ethereum — позволяет создавать приложения на основе смарт-контрактов в разных сферах: финансы, страхование, инвестфонды, онлайн-игры. Широко используется в России — например, Сбербанком и Минцифры.
  • Bitcoin — финансовая платформа для выпуска одноимённой криптовалюты. На механизмах Bitcoin работают и другие валюты — тот же Dogecoin, который активно поддерживает Илон Маск.
  • Hyperledger — блокчейн-платформа от Linux Foundation. Есть фреймворки для создания цифровых паспортов, облачных сервисов и бухгалтерских книг.
  • Corda — система для хранения и передачи активов между финансовыми организациями: акций, облигаций, кредитов и других обязательств.
  • Solana — блокчейн-фреймворк, нацеленный на скорость: может проводить 65 000 транзакций в секунду (для сравнения, Ethereum — всего 30). Из минусов — не всегда стабильная работа и ограниченная децентрализация.
  • Polkadot — позволяет объединять несколько блокчейнов в одну экосистему. Проект от создателя Ethereum Гэвина Вуда.

Далеко не у всех блокчейнов есть свои собственные платформы — к примеру, криптовалюта Litecoin работает на блокчейн-сети Bitcoin. Это не хорошо и не плохо, просто так сложилось. Если вы захотите сделать свой блокчейн, можете взять за основу готовый фреймворк — исходный код большинства платформ лежит на GitHub.

Если интересно узнать, как разрабатывают блокчейны, почитайте нашу статью про создание блокчейнов на языке C# — рассказываем, как всё устроено и пробуем запустить первый проект.

На каких языках программирования пишут блокчейны

Выбор зависит от конкретной задачи. Допустим, вам надо написать блокчейн-сеть с нуля. Для этого лучше использовать языки низкого уровня вроде Rust, Go и C++. Они дают программисту полный доступ к «железу» и памяти, поэтому хорошо подходят для создания высоконагруженных систем.

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

Языки общего назначения: Java, C#, Python или Kotlin. Это универсальный вариант: можно создать новую сеть, а можно написать приложение для какой-то платформы. Например, Java-код легко компилируется под Ethereum, Hyperledger и Quorum. При этом на базе Java работают некоторые известные платформы — скажем, NEM и IOTA.

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

Возьмём, к примеру, язык Solidity для платформы Ethereum. Так как создатели взяли синтаксис от JavaScript, внешне языки очень похожи:

Разница в том, что JavaScript исполняется в браузере, а Solidity — в виртуальной машине Ethereum. Если этой машины нет, код на Solidity работать не будет. Поэтому его редко запускают где-то кроме блокчейн-платформы — для этого пришлось бы под каждое «железо» писать свою машину. Проще взять язык вроде Java, чья виртуалка есть на любом утюге.

Solidity — не единственный язык программирования смарт-контрактов. Как минимум есть ещё Simplicity, Vyper и Rholang. Если интересно, как вся эта кухня устроена изнутри, читайте наше интервью с блокчейн-разработчиком.

Недостатки технологии

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

Атака 51%. Чтобы в блокчейне появился новый блок, его должны одобрить больше половины участников. Но если к сети подключится хакер с достаточно мощным «железом», он сможет проталкивать в неё фальшивые блоки и обналичивать их на криптовалютных биржах. На практике этим редко кто занимается, и вот почему:

  • Дорого — «железо» должно быть мощнее, чем у 50% всех майнеров вместе взятых. Например, в случае биткоина будет выгоднее майнить валюту, чем создавать поддельную.
  • Сложно — в большинстве блокчейнов есть механизмы защиты от хакерских атак: Proof of Work и Proof of Stake.

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

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

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

Что дальше

По словам экспертов, к 2027 году в блокчейне будет храниться до 10% мирового ВВП. Например, цифровые дистрибьюторы смогут лицензировать фильмы, музыку и книги через NFT-токены. А государства полностью переведут в блокчейн выборы, закупки, регистрацию недвижимости и другие процедуры.

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

Читайте также:

Действительно, в этом году День пожилого человека приходится на 1 октября. Не забудьте поздравить близких!

Как с нуля построить свою блокчейн сеть

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

Какие задачи решает блокчейн

Технологию активно внедряют, потому что она решает несколько задач:

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

обеспечение безопасности — данные сохраняются на всех блоках в цепи, поэтому полностью удалить или изменить какую-либо запись в системе невозможно;

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

Кроме того, блокчейн гарантирует прозрачность сделок благодаря смарт-контрактам. Это программный код, в котором зафиксированы условия, например, если пользователь А отправит 100 монет Б, то Б передаст А NFT-картинку. Он позволяет отказаться от лишних посредников, взимающих комиссии. Смарт-контракт невозможно изменить, а операция выполняется автоматически.

Как самостоятельно сделать блокчейн

Чтобы разработать собственный блокчейн, потребуется:

Python 3.6 или новее;

HTTP-клиент (Postman, cURL).

Пишем скелет

Начать работу можно в любом совместимом с Python редакторе, т. е. Integrated Development Environment, например: PyCharm, PyDev, WingWare, Komodo IDE. Создадим файл под названием «Blockchain», чтобы потом не потерять код.

Сначала необходимо прописать класс блокчейна, конструктор которого сделает 2 пустых листа для хранения исходного кода и информации о транзакциях.

Этот класс блокчейна управляет цепью, то есть он будет хранить информацию и иметь несколько методов внесения новых блоков в систему.

Создаем первый блок

Первый блок в цепи называют Genesis block. В нем хранится информация, являющаяся фундаментом всех последующих элементов системы. Генезис необходим для связи блоков между собой и проверки транзакций, так как перевод не будет завершен, пока майнер не сравнит данные в новом блоке с предыдущими.

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

Чтобы разработать первый блок, нужно запустить следующий программный код:

Теперь стоит добавить функцию, позволяющую сохранять информацию о транзакциях на локальном диске. Она сделает систему безопаснее, т. к. в случае отключения узла данные не потеряются.

Назовем новую папку «blockchaindata» и допишем программный код:

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

Синхронизируем блокчейн

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

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

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

Прописываем отображение через браузер

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

Для создания веб-приложения стоит воспользоваться фреймворком Flask. Это легкий и понятный софт, имеющий все необходимые функции для работы. Flask отличается тем, что позволяет быстро разработать приложение, используя только один файл Python. Также подойдут Django, CherryPy, Pyramid, TurboGears.

Код для отображения блокчейна:

Проигнорируем импорты для экономии места.

Теперь вы можете посмотреть имеющийся блок, запустив программный код и перейдя в localhost:3000/blockchain.json .

Создание цепочки блоков

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

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

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

Для этого нужно прописать команду:

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

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

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

Теперь майнеры могут подключаться к memorypool и обрабатывать информацию. Устройства узнают о транзакции, изучат ее, запишут в блок, посчитают хэш, за что их владельцы будут получать вознаграждение. Однако при таком типе блокчейна компьютеры с самым мощным CPU будут создавать длинные цепи, которые другие узлы определяют как корректные.

Настройка алгоритма подтверждения

Для подтверждения действительности переводов, зафиксированных в блокчейне, разработчики используют несколько механизмов консенсуса. Наиболее популярными являются:

Proof of Work (PoW) — подтверждение работы;

Proof of Stake (PoS) — доказательство доли владения.

Первый вариант считают более безопасным с точки зрения уязвимости, однако актуальность вопроса децентрализации для PoW блокчейнов ежегодно растет. Постепенно майнить становится сложнее, поэтому пользователи объединяются в пулы. В 2021 году было зафиксировано, что 50% мощности сети Bitcoin принадлежит 4 пулам, то есть постепенно происходит стягивание всех процессов к нескольким крупным серверам.

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

Чтобы получить право проверить блок, пользователь должен заблокировать монеты с помощью смарт-контракта. Этот процесс называют стейкингом. Затем алгоритмы блокчейна выбирают, кто займется валидацией следующего блока.

Рассмотрим все существенные различия механизмов:

Кто участвует в майнинге/валидации

Владельцы компьютеров с наибольшей вычислительной мощностью

Пользователи с большим количеством заблокированных монет

Оборудование, заточенное под добычу криптовалюты

Любое устройство с постоянным выходом в интернет

Их забирают пользователи, добывшие блок первыми

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

Чем больше хэш, тем защищеннее система

Смарт-контракты блокируют валюту участников

В нашем случае использован Proof of Work, как у Биткоина. Чтобы настроить механизм, необходимо поставить требования к структуре хэша.

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

Когда блок получит валидное значение показателя nonce, другие узлы смогут подтвердить хэш.

Как создать пару ключей

Чтобы зашифровать данные, стоит воспользоваться RSA. В результате вы получите пару ключей: публичный и приватный.

Сначала нужно импортировать RSA из Crypto.PublicKey, а затем создать простой код доступа и сгенерировать ключ RSA на 2048 битов. Чтобы создать приватный ключ, необходимо вызвать метод exportKey и отдать ему код доступа. Последний будет использован стандартом PKCS, схема шифровки которого подходит для защиты конфиденциальной информации.

Полученный файл следует записать на диск. Остается создать приватный ключ через метод publickey, связав его с вызовом exportKey.

Реализация подписей

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

хэши открытых ключей в разблокированных выходах, чтобы идентифицировать отправителя;

хэши открытых ключей в новых выходах для подтверждения получателя;

значения новых выходов.

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

Алгоритм проверки транзакции:

Получение информации и ЭЦП из новой транзакции.

Расшифровка подписи и открытого ключа с помощью RSA Decode.

Сравнение хэшей, полученных на втором и третьем этапе.

Если значения совпали, значит, информация корректна, а транзакция действительно подписана ключом владельца. В случае одобрения перевода данные добавляются в блок.

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

Введение в блокчейн — основу криптовалют

Anastasia Uvarova

Вы ещё помните то время, когда курс криптовалют вырос более чем в 50 раз всего за 1 год?! Вот наглядный график произошедшего:

А затем случилось это:

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

Сначала расшифруем само понятие, а потом разберёмся, как влияние блокчейна может оказаться ещё больше.

Что такое блокчейн?

Попробуем разобрать само слово:

Что в принципе передаёт суть термина. А вот, что узнаем, погрузившись в детали:

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

Воспринимайте блок как коробку для хранения некоторых данных. Например, данных о транзакции. У каждого блока есть свой уникальный хеш. Он складывается из текущего хеша блока и хеша предыдущего блока. Хеш в некотором смысле — это отпечаток пальца, который нужен для идентификации. Если говорить более формально, то это математический код, который присваивается каждому блоку. Вы можете встретить другие названия — хеш-сумма или хеш-функция. Здесь мы для краткости пишем просто “хеш”.

В блоке хранятся данные, хеш текущего блока и хеш предыдущего блока

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

Блокчейн — связанная информационная система, которая постоянно растёт. Для примера возьмём данные транзакции. Каждый раз, когда происходит новая транзакция, блокчейн удлиняется — добавляется новый блок. Но какие именно особенности делают блокчейн таким “могущественным”?

Причины потенциала блокчейна

1. Содержимое блокчейна неизменно

Что делает данные, которые хранятся в блокчейне, неизменными?

  • Хеши

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

Это значит, что изменение одного блока повлияет на все последующие. Они станут невалидными и тогда очевидно, что над данными произвели манипуляции.

Благодаря большой вычислительной мощности компьютеры могут просто пересчитывать все следующие хеши, чтобы сделать блокчейн валидным снова за несколько секунд!

  • Алгоритм консенсуса

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

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

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

Распространённые алгоритмы консенсуса: доказательство работы, доказательство доли владения и доказательство полномочий.

2. Применение децентрализованной и распределённой структуры

Блокчейн — децентрализованная и распределённая система. Это значит, что информация разделена между всеми в сети. Такое устройство противоположно централизованным системам, в которых информация хранится в одном месте. Пусть у всех и есть копия блокчейна, но при этом никто не может ничем манипулировать.

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

3. Блокчейн как одноранговая (пиринговая) сеть

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

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

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

Перспективные варианты применения блокчейна

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

1) Финансы — криптовалюты

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

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

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

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

2) Смарт-контракты

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

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

3) Защита данных для устройств IoT (Internet of Things/интернет вещей)

Устройства из интернета вещей собирают массу данных, а их приватность — это всегда зона сильного беспокойства. Быстро увеличивается количество используемых устройств, значит приходит больше данных, а хакеры и мошенники могут их украсть. Оценки исследования, которое провели в Mckinsey & Company, говорят, что к 2023 году будет работать 43 млрд девайсов интернета вещей.

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

Блокчейн затронет практически каждую сферу

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

Что такое блокчейн: руководство для чайников в 2021 году

Знакомьтесь, это Вася и он — душнила. Главная цель жизни Васи — спорить с друзьям.

Вася запоминает, кто и что говорил, находит взаимоисключающие параграфы и тыкает в них людей носом.

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

Прелесть системы в том, что изменять, редактировать или удалять добавленные записи нельзя. Окружение Васи в восторге от идеи — теперь коллективный дневник на блокчейне ведёт вся душная компания.

Во время корпоратива Вася сделал две записи: «Потратил 12 000 рублей в баре” и “целовался с барменшей».

Запись попала в дневничок, и наутро Вася вспомнил, что его жена Рита тоже пользуется книжечкой и решил заменить последнюю фразу на «скучал по жене».

Но у него ничего не вышло и вот почему.

«Blockchain” переводится как “цепочка из блоков». Продолжая аналогию с дневником, блок — это некоторое количество дневниковых записей, собранных, запакованных вместе в блок и верифицированных.

Хранятся блоки в последовательной цепочке, одна за другой, в порядке добавления.

Каждый блок содержит информацию не только о самом себе, но и о предыдущем блоке. Так можно добраться от последнего блока до самого первого и восстановить всю цепочку.

Упрощенно блок состоит из двух частей: заголовка и списка транзакций.

Список транзакций — это наши дневниковые записи. В заголовке хранится служебная информация: время создания, хеш этого блока и хеш предыдущего.

Тут надо сделать краткое отступление и понять, что такое хеш.

Хеш (хеш-сумма, хеш-код) — это ничего не значащая последовательность чисел и букв, проще говоря, кракозябра. Например:

Это — хеш, который создала хеш-функция из сообщения «позвони мне! мой номер +79807529891» на визитке

Хеш-функция — программа, которая берет нормальные данные и создает из них уникальную кракозябру.

В случае с блокчейном, функция принимает строчку любой длины (даже огромную) и каждый раз выдает кракозябру длиной в 64 символа.

У хешей есть три приятных особенности:

  1. Глядя на хеш, мы никогда не узнаем первоначальное сообщение
    То есть, вытащить номер барменши из хеша практически невозможно
  2. Одинаковые данные всегда дают одинаковый результат
    Раз за разом скармливая хеш-функции одну и ту же записку, мы всегда будем получать одинаковый результат. Это называется детерминированностью
  3. Стоит изменить хотя бы один символ и результат станет совершенно иными
    Новый хеш совершенно не будет напоминать предыдущий. Изменится не один символ, а почти все и сразу. Это называют эффектом лавины

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

Например, к Васе подходит коллега Коля и говорит «оо, барменша только что дала мне номер телефона, прикинь».

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

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

В дневнике душнил блоки связаны друг с другом через хеш-суммы.

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

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

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

Вот блок №233, в котором хранится запись, которую Вася хотел бы поменять.

Когда блок № 233 сформировался и добавился в блокчейн, произошло три вещи:

  • Все дневниковые записи и в этом блоке превратились в одну хеш-сумму и записались в заголовке блока
  • У блока просчитался еще один хеш, куда вошел хеш предыдущего блока № 232
  • Следом добавился еще один блок, куда вошел хеш уже злополучного блока

Стоит Васе изменить хотя бы один символ в своей записи «целовал барменшу», хеш его блока №223 неузнаваемо изменится.

И система верификации отбросит измененный блок как ложный.

Что это за система верификации? Кто проверяет блоки и кто отвечает за то, чтобы они все соответствовали друг другу?

Тут пора рассказать о том, кто такие майнеры.

Блоки не попадают в систему просто так, кто-то должен

  • считать хеш-коды
  • добавлять новые блоки
  • проверять, никто ли не жульничает

Именно этим и занимаются майнеры — они добавляют новые блоки.

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

Чтобы добавить новый блок, майнеры наперебой решают сложную математическую загадку. Задачка рассчитана таким образом, чтобы решалась примерно каждые 10 минут. Кто первый решил, тот и добавил блок.

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

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

В игре «добавь блок» есть еще два важных числа.

  • Первое называется нонс — это случайное значение, которое пытается угадать майнер.
  • Второе — таргет, число, на которое майнер ориентируется, когда пытается угадать нонс.

К хешу блока добавляется случайный нонс, снова считается хеш.

И новый хеш сравнивается в таргетом.

Если он меньше таргета — то блок будет добавлен в цепочку.

Если нет — то майнер берет другой нонс, снова считает… и так пока не угадает подходящий.

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

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

Чем мощнее компьютер — тем быстрее он угадает нонс. Поэтому биткоин майнят на мега-мощностях, иначе просто нет шанса добавить блок.

Но вернемся к Васе и его душным друзьям. Каждому уважающему себя душниле важно, где хранится информация о блоках. Вдруг я помещу наш дневник на сервера Amazone, а они захотят удалить наши записи? Или, не дай Бог, что-то изменить?

Тут мы подходим ко второй важной вещи в блокчейне — децентрализации.

Обычно информация в интернете хранится на каком-либо сервере. Например, когда вы пишете документ в Google Docs, он хранится на серверах Google. Когда получаете письмо на Яндекс.Почту, оно сохраняется и открывается на серверах Яндекса.

Если бы Вася имел друга-сисадмина в Яндексе с доступом к серверу и полным отсутствием мозгов, он бы просил друга удалить письмо с компрометирующей информацией и никто бы ни о чем не узнал.

Запись изменена, Рита счастлива

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

Поэтому друзья Васи решили доверить хранение блоков группе майнеров.

Допустим, майнеры хранят информацию на своих телефонах.

На каждом телефоне, который майнит блоки, хранятся данные о всех блоках.

При добавлении нового блока майнер отправляет информацию о нем соседним телефонам, а те — своим соседям и так пока у всех информация не обновится.

Друзья Васи в экстазе (почти)

Блокчейн долго был технологией, интересной лишь гикам. Когда анонимный создатель биткоина Сатоси Накамото в 2008 году придумал сделать на ее основе первую криптовалюту, ситуация резко изменилась.

Блокчейн в основе биткоина делает его первой децентрализованной валютой.

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

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

Блокчейн защищен от взлома методами криптографии — проще говоря, наукой. Им никто не владеет, но в то же время, он полностью открыт и прозрачен. Неудивительно, что друзья Васи, страдающие душнотой, как побочным эффектом своего интеллекта, настолько в восторге от системы.

Блокчейн дарит криптовалюте еще одно свойство — анонимность.

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

В случае биткоина вместо дневниковых записей в блоке просто ведется запись списка транзакций: кошелек с номером А перевел кошельку B столько-то биткоинов. Кто стоит за этими кошельками не знает никто.

Появление криптовалюты — это событие в мире финансов, сопоставимое разве что появлением взаимозаменяемых монет вместо натурального обмена.

Наша команда создает первый удобный и легальный криптовалютный банк: с нормальным интерфейсом, лицензией Центробанка, прозрачной разработкой и командой.

Мы готовимся к запуску и до старта будем публиковать статьи про криптовалюту и финансовую грамотность простыми словами.

Дальше мы расскажем

  • как устроен биткоин
  • разборы финансовых пирамид и как на них не попасться
  • как устроены скам-проекты в криптовалюте
  • что такое compound interest и почему мы думаем набить это себе на груди

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

Спасибо огромное! Вот так и надо объяснять всё.

По статье, однако, вопросы:
1) В случае децентрализованного хранения — чем больше инфы, тем больше ресурсов для её хранения. Если это Террабайты инфы, то врядли она передается так, как вы описали — "после каждого обновления весь объем инфы пересылается всем майнерам и обновляется у них"

2) Почему для майнинга требуются в основном видеокарты, если рассчеты примерно математические?

3) В случае решения задач майнерами — непонятно кто и как ставит эти задачи. То есть задачи-то ставит какая-то программа (алгоритм, утилита), так? Она где хранится? Централизована? Также передается вместе с блокчейнами или что?

1. Там не террабайты. За всю историю BTC его блокчейн весит всего

365гб. К тому же размер блока ограничен 1мб. В более "толстых" блокчейнах применяются некоторые методы оптимизации. Но обычно размер блока ограничен, а главной проблемой является место на диске. В эфире это решается "подрезанием" старых блоков, так-как они нужны не всегда.
2. GPU более эффективны в математических рассчётах, чем CPU.
3. Задача определена алгоритмом, у каждого участника сети есть нода, где в коде прописано повышение сложности и критерии, по которым блок считается смайненым. В случае битка это поиск "красивых" хешей, где вначале хэша должно быть определённое кол-во нулей. Майнер, добавляя новые транзакции в блок и меняя определённое число в блоке, постоянно хэширует этот блок. И когда хэш блока получается "красивым", он сообщает сети, что смайнил блок. Блок включается в цепь, а майнер получает награду.

Поиграться в блокчейном в браузере можно в этой демке: https://andersbrownworth.com/blockchain/

Ну даже если 365 гб. То есть после каждого обновления инфы все майнеры скачивают 365 Гб? А сколько операций в минуту происходит? Например, купил я биткоин — в блокчейн надо добавить одну запись. Я правильно понял что все майнеры должны тут же получить обновленный блокчейн целиком? Если это 365 Гб — врядли они его качают, скорее получают обновления.

То есть блокчейн целиком получают только новые майнеры?

А как работает программа определения очередности записи? Где она физически расположена? Вот одновременно Вася и Коля купили биткоин — надо дописать эти записи в блокчейн. Кто решает какая запись будет первая? Если записи с Васей обновили блокчейн в Америке, а с Колей в Китае, то как они потом синхронизируются?

И все-таки не понятно что за софт все это регулирует. Вы пишите "задача определена алгоритмом" — а алгоритм-то сам где лежит, хранится, синхронизируется? Вот мне надо фото ретушировать — я скачал дистрибутив Фотошопа, это программа, в ней алгоритмы работы с Фотошопом. Её дистрибутив там-то и там-то — я могу его скачать и все понятно. А если я хочу хранить блокчейн у себя — мне чего скачивать — это какая-то софтина или нет? Где леат эти лагоритмы, как они синхронизируются со всем миром? И если эта программа установлена одновременно на тысачах компов какой из них определяет очередность записи?

В: То есть блокчейн целиком получают только новые майнеры?
О: Да, верно. Ноды получившие блокчейн полностью, лишь догоняют всю сеть, получая обновления по одному блоку.

В: А как работает программа определения очередности записи?
О: Перед тем как транзакция попадёт в блок, она попадает в mempool, который синхронизируется между всеми нодами. Это что-то вроде чана с транзакциями, откуда майнеры берут их, чтобы включить в блок. Очередность записи определяется блоком, в который включена транзакция. Во всех сервисах принимающих криптовалюты средства считаются зачисленными после включения блока с транзакцией в блокчейн, правда, с некоторыми оговорками, требуется ещё n-ое кол-во подтверждений, чтобы избежать двойной траты из-за возможности образования вилки в блокчейне, но это уже тянет на отдельную статью. То есть, если майнера удовлетворяет комиссия транзакции(выставляется отправителем транзакции), он включает транзакцию в блок и пытается смайнить блок со всеми удовлетворяющими по комиссии транзакциями. То есть, если Вася и Коля купили биткоин одновременно, не факт что их транзакции попадут в один блок. Возможно что Васину транзакцию возьмут первой, из-за того что Вася поставил более высокую комиссию, в таком случае Вася сможет распоряжаться своими средствами раньше Коли.

В: Где лежат эти алгоритмы, как они синхронизируются со всем миром?
О: Алгоритмы определены в коде биткоин-ноды. Скачать её можно здесь: https://bitcoin.org/en/download. Так же, можно написать и свою реализацию биткоин-ноды, но если её поведение будет отличатся от общепринятого сетью, такая нода попросту исключается из сети. Чтобы лучше понимать суть такого взаимодействия, рекомендую почитать про P2P сети.

Сами бы не сказали лучше. Спасибо

Допустим в сети 3 компьютера мощностью 30Тхеш, 60 и 90. Вознаграждения они будут получать (то есть вычислять правильный хэш) пропорционально мощности. Как это регулируется алгоритмически?

Выглядит так, будто вы просто отрерайтили статью Вастрика: https://vas3k.ru/blog/blockchain/

Логика повествования, стиль иллюстраций, примеры — все то же самое. Ц-ц-ц.

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

Вот только ваша статья совершенно не похожа на статью парня с ником sleep, но очень похожа на статью Вастрика ¯\_(ツ)_/¯

спасибо за пример, статья, которую вы скинули, — класс. спокойная, интересная, с цепляющими иллюстрациями.

а вот исходную на vc.ru я, честно говоря, не очень поняла. как будто хотели упростить, но за счёт разговоров, кто с кем когда целовался, усложнили. + стиль повествования отталкивает

Огонь! Вот такие примеры с душнилами и надо преподавать в школах и универах)

Блин, я Вася и я душнила������

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

Не совсем понятно. Если хеш блока определяется самим содержимым блока (т.е. его данными от транзакциях), то тогда что же майнят? Или сначала надо забить новый блок транзакциями, потом к данным блока добавить нонс и майнить до победного, меняя нонс? (мне казалось, что блок майнится сначала, а потом в уже сманенный блок добавляют транзакции)

В статье увидела ответы на свои вопросы! ������ Молодец Вася❣️ Буду ждать следующей встречи❤️

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *