Найти тему
ProMoney

Блокчейн изнутри: как устроен биткоин

Оглавление

🔥 Подписывайтесь на новостную рассылку FF.ru
💰
Торговые сигналы с заработком от 5% в Телеграм канале

Статья предоставлена: vas3k

Впервые блокчейн (Blockchain) был подробно описан в статье Сатоши Накамото. Текст на 8 страницах содержал основные описания и принципы криптовалюты Биткоин.

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

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

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

Ваши друзья постоянно занимают у вас деньги. Через 1-2 недели вы уже точно не помните, кому вы одолжили и какую сумму, кто вернул долг, а кто остался должен. Чтобы как-то упорядочить бюджет в один прекрасный день вы решили завести блокнот и записывать всех друзей, которые занимают деньги. Это очень удобно, ведь теперь открыв блокнот, вы видите, что Егор взял у вас 500 р. и вернул долг, а вот Марк не отдает 300 р., Петр взял 700 р. и через неделю вернул 400 р. и т.д.

-2

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

-3

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

-4

А теперь представим, что ваш недоброжелатель - Костя тоже умеет пользоваться SHA-256 и может быстро изменить записи вместе с хешем. Это сделать совсем просто, если хеш видимый. Чтобы этого не происходило, вы можете хешировать не только каждую запись в отдельности, а складывать ее с хешем предыдущей записи. В этом случае каждая следующая запись будет зависеть от всех предыдущих. Таким образом, у вас появляется связный список должников.

-5

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

-6

Ведь теперь Косте для внесения изменений в ваших записях необходимо решать уравнения, а таких уравнений может быть сотни. Учитывая, что каждое уравнение уникально, понятно, что изменить список будет практически невозможно. А вам теперь легко проверить подлинность списка. Достаточно сравнить хеши и проверить решения уравнений методом простой подстановки. Все сходится? Значит, изменения в записи не вносились.

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

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

Централизация и децентрализация доверия

-7

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

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

-8

Транзакции

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

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

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

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

Отсутствие "баланса"

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

-10

Простой пример: вы хотите оплатить покупку на 500 р. используя блокчейн. При этом в цепочке отыскиваются записи, в которых видно получение доходов: 200 р. + 400 р. Значит, у вас есть 600 р. и вы можете произвести оплату. Продавец обязательно проверит, не посчитали ли вы свои доходы более одного раза, т.е. удостоверится, что 600 р., которые вы получили ранее, не были потрачены на другую покупку.

Прикрепленные к транзакции доходы имеют название - инпут (input), а получатель денег - аутпут (output). Количество инпутов редко равняется сумме, которую вы хотите потратить за один раз, поэтому одним из аутпутов будете вы сами. Наглядно это выглядит следующим образом: мне заплатили 3 + 2 биткоина, я хочу 4 биткоина перевести в счет оплаты, а 1 вернуть себе обратно".

-11

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

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

Как предотвратить двойные траты?

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

-12

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

-13

Блоки - база блокчейна

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

-14

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

-15

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

-16

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

Сложная задача для компьютера - это добавить в конец блока nonce - число, в результате добавления которого хеш блока будет начинаться на 10 нулей. Решив эту задачу можно добавить блок в Bitcoin. По сути, в этом и заключается понятие "майнинг", о котором так много говорят.

-17

Майнинг биткоинов

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

-18

Многие задают вопрос: почему именно 10 нулей должно быть в начале искомого числа? Просто так придумал Сатоши, считая, что это одна из задач, которую всегда можно решить, но на поиск ответа будет потрачено определенное время, т.к. единственный способ решения - перебор вариантов.

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

Решение задачи с 10 нулями на одном компьютере потребует примерно 10-30 лет его непрерывной работы в зависимости от мощности. Если объединить несколько тысяч компьютеров в сеть и совместно искать число, то вероятность найти решение задачи многократно увеличивается. В среднем на поиск затрачивается около 10 минут. Примерно каждые 10 минут в мире кто-то находит нужный хеш и получает право представить свою находку всем участникам сети.

-19

По данным на 2017 г. за нахождение правильного ответа компьютер получал вознаграждение - 12.5 Bitcoin. Сумма генерируется системой Биткоина буквально из воздуха и уменьшается каждые четыре года. Математически количество биткоинов ограничено 21 миллионами. На конец 2017 г. было намайнено порядка 16 миллионов. Полученные таким образом биткоины, майнер может отправить на свой крипто-кошелек.

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

Ведь именно майнеры создают блокчейн, добавляя в него новые блоки. Просто взять и создать блокчейн - это очень мало. Необходимо, чтобы на нем занимались майнингом, а привлечь майнеров к делу можно только за вознаграждение - коины (coin). Какую выгоду принесут майнерам различные коины, в т.ч. Bitcoin?

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

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

Сумма в 12,5 BTC вручается один раз в 10 минут и только одному из миллионов майнеров, который нашел блок. Это значит, что придется майнить и жечь видеокарты десятки лет, надеясь получить вознаграждение. Для системы Bitcoin именно так. Но если майнить в небольшой сети, то вероятность нахождения блока многократно возрастает. Конечно, при этом стоимость криптовалюты, получаемой в качестве вознаграждения, значительно ниже.

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

Одиночный майнинг возможен в других сетях. Например, в начале 2018 г. относительно легко было майнить Эфириум (Ethereum). Блоки находились каждые 10 секунд, но и вознаграждение за найденный хеш было намного ниже, чем у биткоина.

В последнее время стали появляться блокчейны с принципиально новыми видами майнинга. Набирает популярность концепция Proof-of-Stake. При таком виде майнинга шансы участника вставить свой блок в блокчейн зависят от количества коинов на личном счету: чем больше коинов, тем выше шансы.

Блокчейн и правила безопасности

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

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

-20

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

-21

По причине возникновения подобных ситуаций были придуманы правила безопасности для "хвоста" блокчейна:

  • Майнер может использовать свое вознаграждение (монеты) не ранее, чем через 20 подтвержденных блоков. По времени это составляет примерно 3 ч.
  • Присланные биткоины можно применять в качестве инпутов для транзакций только после 5 подтвержденных блоков.
  • Оба правила прописаны в алгоритмах, но никто не отслеживает их выполнение. В этом нет смысла, т.к. правило о самой длинной цепочке отвергнет ваши транзакции при попытке обмануть сеть.

А можно ли обмануть блокчейн?

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

-22

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

Вы решаете максимально быстро, чтобы добавить блок первым. Можно ли гарантированно обогнать других участников системы? Теоретически это возможно, если мощность вашего компьютера будет составлять больше 50% от суммарной мощности компьютеров других участников сети. Таким образом, с вероятностью 1/2 именно вы сможете создать самую длинную цепочку. Ваша цепочка в соответствии с правилом, описанным выше, будет считаться единственно правильной, а все транзакции других участников сети будут отвергнуты. Вознаграждение получите только вы. Подобный случай имел место в 2017 г. с Ethereum по причине бага в сети.

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

-23

Заключение

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

Читайте также: Три ключевых вывода из проблемного обновления Constantinople