Это первая часть статьи про биткоин, в которой описаны общие принципы работы. Разбор деталей реализации во второй части.
История появления биткоина
В 2008 году автор под псевдонимом Сатоши Накамото (не известно, кто именно скрывается под этим именем) опубликовал статью “Bitcoin: A Peer-to-Peer Electronic Cash System”. Сатоши Накамото на основании различных достижений криптографии предложил полностью децентрализованную рабочую систему электронных денег. В 2009 году он выпустил первую реализацию программы-участника сети биткоин. Биткоин положил начало бурному развитию криптовалют и заложил многие ключевые идеи этого направления.
Децентрализация
Главное отличие биткоина от привычных платёжных систем – децентрализация. Это означает, что все участники системы равноправны, каждый участник работает независимо и не доверяет остальным. Нет главного центра или арбитра. Решения в системе принимаются голосованием отдельных участников.
Участники объединены в сеть и общаются между собой, передавая сообщения через интернет. Так как общего центра нет, ни у кого из участников нет полного списка всех остальных. Каждый знает только несколько своих соседей, те - других соседей и так далее.
Вопрос-ответ
Если соседи участника покинут сеть, ему тоже придётся уйти?
Периодически каждый участник опрашивает соседей для получения новых адресов, чтобы не потерять связь с сетью
Как участники узнают соседей в первый раз?
Есть два механизма:
- В программу-клиент вписаны несколько начальных адресов
- Узнать адрес участника (например, спросить у друга или прочитать на странице известного человека в социальной сети) и добавить его в список
Сделка Алисы и Боба
Боб – владелец магазина больших мягких игрушек. Алиса хочет купить большую игрушку тигра за биткоины
Процесс платежа для Алисы: она в приложении указывает сумму в биткоинах, биткоин-адрес Боба и нажимает кнопку “Отправить”
Процесс платежа для Боба: Боб в своём приложении видит поступление биткоинов от Алисы и отправляет ей игрушку
Для Алисы и Боба платёж биткоином ничем не отличается от платежа в банковском приложении. А мы проследим как происходит сделка между Алисой и Бобом внутри сети биткоин
Кошельки и адреса
Адреса
Чтобы стать участником системы биткоин нужно сгенерировать биткоин-адрес. Как правило, для работы в системе биткоин вы скачиваете одно из популярных приложений-кошельков и генерируете адрес прямо в нём. Для этого не требуется куда-то идти, предоставлять документы, подтверждать личность, регистрироваться, даже не нужно подключение к интернету – достаточно нажать кнопку. После этого вы готовы принимать и отправлять биткоины: можете дать кому-то свой адрес и получить биткоины прямо в ваш кошелёк.
Замечание
Название “кошелёк” не слишком удачное: биткоин-кошелёк это хранилище криптографических ключей, а не каких-либо “монет”. Кошелёк, скорее, похож на сейф, в котором хранятся ключи от сундука с деньгами, чем на сам сундук.Ключи
При генерации адреса генерируется пара криптографических ключей . Публичный ключ (оформленный в чуть более красивом виде) и есть адрес кошелька, а секретный ключ используется для получения отправленных биткоинов. Адрес выглядит как длинная череда букв и цифр, например: 1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2
. Часто адреса представляют в виде QR-кода
Алиса и Боб скачали приложение и сгенерировали себе биткоин-адреса, Алиса готова перевести биткоины на адрес Боба.
Вопрос-ответ
Сколько адресов может иметь один участник?
Сколько угодно
Что если адреса закончатся? Могу ли я случайно получить адрес, который уже занят?
Размер закрытого ключа 256 бит, всего различных ключей порядка $2^{256}$ – это огромное число, сравнимо с количеством атомов в видимой части вселенной. Кошельки не закончатся, даже если все люди будут всё время генерировать новые. По этой же причине вероятность получить занятый кошелёк ничтожна
В чём отличие от регистрации в банке, ведь я также скачиваю приложение?
- В банке вам нужно предоставлять документы, телефон и что-то подобное – в биткоин ничего подобного нет
- Приложения-кошельки биткоин просто упрощают процесс для вас. Вам не обязательно пользоваться каким-либо приложением: вы можете сами написать программу и сгенерировать адрес или сгенерировать его вручную “на бумажке” (при должном старании)
Кошельки анонимны?
До тех пор, пока неизвестен владелец кошелька, кошелёк анонимен. При этом владелец может получать и отправлять биткоины, не нужно подтверждать личность, чтобы пользоваться биткоином
Зачем нужен секретный ключ?
Секретный ключ нужен для получения биткоинов. Чтобы потратить биткоины, нужно иметь секретный ключ, что подтверждается с помощью ЭЦП. Только тот, кто имеет секретный ключ к кошельку, может тратить средства с этого кошелька
Что за слова мне предлагает запомнить кошелёк?
Эти слова используются для восстановления доступа к кошельку. Секретный ключ человек запомнить не в состоянии (он выглядит как очень длинный бессмысленный набор символов), слова же запомнить намного проще. Эти слова нельзя никому показывать, ровно как и секретный ключ
При регистрации на бирже мне сразу выдали кошелёк без всяких ключей, как это возможно?
Главное правило криптовалюты: вы владеете ей настолько, насколько владеете секретным ключом. Никакого механизма подтверждения владения, кроме секретного ключа, в биткоин нет. Любой, кто владеет секретным ключом, может сделать с биткоинами что угодно
Иногда биржи генерируют ключи внутри себя, не предоставляя их клиентам для удобства. Нужно понимать, что вы владеете средствами на этой бирже ровно настолько, насколько вы доверяете ей. Фактически ключом владеет биржа, она может полностью распоряжаться биткоинами и лишь позволяет вам иметь к ним доступ
Транзакции
Состав транзакции
В биткоин отсутствует привычное понимание “баланса кошелька”. Вместо этого используются транзакции. Транзакция говорит сети о передаче биткоинов от одного участника к другому. Это похоже на двойную запись в бухгалтерии: приход и расход. У транзакции есть входы - приходы средств и выходы - расходования средств. Каждый вход транзакции всегда берёт полностью средства из одного или нескольких выходов предыдущих транзакций. Тем самым создаётся цепочка передачи биткоинов, по мере того, как они перемещаются от адреса к адресу.
Игрушка в магазине Боба стоит 4 биткоина. Вместо привычного “у Алисы есть 5 биткоинов, она переводит 4 Бобу, 1 остаётся у неё” используется “Алиса взяла 2 биткоина, который ей раньше прислал Паша, 3 биткоина, которые ей прислал Никита, отправила 4 биткоина Бобу и 1 биткоин себе в виде сдачи”.
Транзакция Алисы состоит из двух входов и двух выходов:
Вход | От кого | Сумма |
---|---|---|
1 | Паша | 2 |
2 | Никита | 3 |
Выход | Кому | Сумма |
---|---|---|
1 | Боб (за игрушку) | 4 |
2 | Алиса (сдача) | 1 |
В дальнейшем Боб может потратить средства с выхода, используя его как вход в своей новой транзакции, например, расплатившись с поставщиком.
Создание транзакции
Алиса указала в приложении кошелька сумму и биткоин-адрес Боба. Приложение автоматически формирует транзакцию и отправляет её в сеть. Каждый участник, получив новую транзакцию, проверяет её на корректность и рассылает дальше по сети. Очень скоро о транзакции Алисы будут знать все участники сети. Но пока это только заявка на перевод биткоинов. Перевод будет завершён, только когда он попадёт в реестр совершённых транзакций – блокчейн.
Вопрос-ответ
Мой кошелёк показывает баланс и на сайтах он отображается, как это у кошельков нет балансов?
Обычно приложения-кошельки автоматически подсчитывают баланс кошелька, суммируя все непотраченные выходы, направленные на этот кошелёк для удобства
Как отменить ошибочный платёж?
В биткоин невозможно отменить платёж, поэтому всегда нужно внимательно проверять адрес и сумму платежа
Какие входы нужно выбирать, чтобы сделать выход?
Любые, лишь бы средств хватило. Кошельки автоматически собирают средства из непотраченных выходов и создают транзакцию, пользуясь различными стратегиями
Блокчейн
Блокчейн – это связанный упорядоченный список блоков начиная от нулевого блока (блока генезиса, созданного Сатоши Накамото). Каждый блок состоит из заголовка блока и списка транзакций. В заголовке блока, помимо прочего, содержится ссылка на предыдущий блок – криптографический хеш заголовка предыдущего блока.
Нет единого хранилища блокчейна (как, например, база данных в банке). Данные блокчейна хранят и проверяют все участники сети независимо. Со временем блокчейн стал занимать много места (на момент написания порядка 500 ГБ) и сейчас полностью его хранят только так называемые полные узлы, а остальные пользователи хранят небольшую часть, запрашивая информацию у полных узлов по необходимости. Блокчейн полностью открыт, вы можете свободно посмотреть всю информацию: любой блок, транзакцию, кошелёк и т. д.
Как блоки попадают в блокчейн? Формированием блоков и добавлением их в блокчейн занимаются майнеры.
Вопрос-ответ
Зачем записывать хеш предыдущего блока, можно же просто записывать номер?
Это нужно, чтобы данные в блокчейне нельзя было подменить. Вычислительно сложно найти другой блок с таким же хешом, поэтому, чтобы подменить блок в блокчейне придётся пересчитать хеши всех последующих блоков, что, как мы увидим далее, также вычислительно сложно. Если бы вместо хеша был просто номер, то подменить блок было бы легко
Как это блокчейн открыт? Получается все знают сколько у меня биткоинов?
Блокчейн открыт, то есть все сделки находятся в открытом доступе. Сделки совершаются между адресами, поэтому всем известно, сколько биткоинов на счету каждого адреса. Однако пока адрес анонимен, никто не знает кому именно принадлежат эти средства
Блокчейн можно использовать только для платежей?
Не обязательно, блокчейн – это технология распределённого хранения. Биткоин использует его для хранения транзакций, существует множество других применений блокчейна вне биткоина и даже вне криптовалют. Пример: хранение в блокчейне истории прав собственности на недвижимость
В чём особенность блокчейна? Не вижу отличия от обычной базы данных
Блокчейн хранится децентрализовано: у каждого участника своя копия, при этом участники не доверяют данным от других участников. В то же время он организован так, что никто не может подделать данные в блокчейне, и у всех участников данные совпадают
Майнинг
Транзакция Алисы распространилась по сети и попала к майнерам. Майнеры собирают транзакции в блоки и добавляют блоки в блокчейн. Но в блокчейн можно добавить не любой блок. Чтобы добавить блок, нужно решить сложную вычислительную задачу. Все майнеры ищут решение параллельно, как только кто-то находит решение, он формирует блок и отправляет его в сеть. Блок распространяется по сети, проверяется и принимается остальными участниками. С этого момента начинается гонка за включение следующего блока и так далее. Сложность задачи автоматически калибруется так, чтобы в среднем новый блок появлялся каждые 10 минут
Пример:
Игрушечный майнинг: решение судоку. Решить судоку – сложная задача. Можно регулировать сложность решения под силу решающих: стирать\добавлять начальные цифры или изменять размер судоку. При этом проверить, что судоку правильно решено, намного проще, чем решить его∎
Задача в сети биткоин
Когда майнер заполнил блок транзакциями и сформировал заголовок блока, в нём остаётся одно незаполненное поле – число nonce
. Цель майнера – найти такой значение nonce
, чтобы двойной хеш SHA-256 от заголовка блока был меньше заданной величины, определяющего сложность (что то же самое, иметь нужное количество нулевых бит в начале).
Пример:
Заголовок блока равен “sergablog” и нам нужно добавить такой nonce
в конец, чтобы двойной SHA-256 хеш имел один ноль в начале (число меньше, чем 0x10..0) Начинаем перебирать nonce с нуля и рассчитывать хеши:
“seregablog0”:
92f28b21585a0fc44b6789bfcd477806378b1d5b8d9938bae87ed036a2b9f65a
“seregablog1”:
46511e0eff19ba5645dbe2bcd262ed44eed1709bfb308dbc732bfa97ffeaeb91
…
Наконец при nonce=9 получаем решение:
“seregablog9”:
01f1ae69b4802ef478a71bf2c0734fda777bee0806a9ac9f8f5a94babfc8a08
Если нужно было бы подобрать хеш с четыремя нулями в начале, то перебирать пришлось бы больше и ответ уже nonce=29303
“seregablog29303”:
000079c4e556abb1e35480102848a6b00d0e33d5d05f19b5d6d8a66fb77da895
∎
Каждые 2016 блоков участники калибруют уровень сложности на основе времени предыдущих блоков: сравнивают время, которое потребовалось, чтобы найти последние 2016 блоков с ожидаемыми 20160 минутами. Если реальное время было меньше 20160 минут, то число-сложность уменьшается, и задача становится сложнее. Если больше, то число-сложность увеличивается, и задача становится проще.
Награда за майнинг
Майнеры создают блоки не просто так, они получают за это награду. Награда состоит из двух частей: получение фиксированного числа новых биткоинов и комиссии транзакции.
Новые биткоины. Майнер включает в созданный блок специальную транзакцию, в которой вознаграждает самого себя за найденный блок в виде некоторого количества биткоинов. Майнинг создает новые биткоины в каждом новом блоке – так происходит эмиссия биткоинов.
Комиссия транзакции. При создании транзакции можно включить в неё комиссию – награду для майнера. Майнер, включивший в блок транзакцию, получает эту награду. Величину комиссии устанавливает отправитель транзакции.
Зачем нужен майнинг
Майнинг нужен для создания доверия к блокчейну, защиты системы биткоин от транзакций, тратящих одни и те же биткоины дважды и защиты от спам-атак на сеть. Использование майнинга для преодоления сложности цифровых денег (таких как двойная трата и согласованности списка транзакций) является самым важным достижением Сатоши Накамото.
Спам-атаки. Если участник отправит в сеть неверный блок, то он будет отброшен соседями и не будет отправлен дальше в сеть. Проверить корректность блока просто – нужно лишь вычислить хеш блока
Двойная трата. У денег в электронном виде есть проблема – владелец может скопировать “монету” и потратить её несколько раз. Механизм майнинга предотвращает возможность двойной траты. По правилам биткоин транзакции, тратящие один и тот же выход несколько раз, считаются некорректными. Все майнеры независимо проверяют транзакции, поэтому включать такую некорректную транзакцию в блок невыгодно, ведь он будет отклонён остальными участниками, и ресурсы на создание блока будут потрачены впустую
Доверие к блокчейну. Если кто-то захочет изменить блок в блокчейне, то хеш этого блока изменится. Так как следующий блок содержит хеш предыдущего, хеш следующего блока тоже изменится и так далее вплоть до текущего последнего блока. Чтобы изменить один блок, потребуется изменить все блоки за ним, это потребует большой вычислительной мощности. Поэтому достаточно старые блоки можно считать фактически неизменяемыми
Интервал между блоками биткоин длиной 10 минут является компромиссом между быстрым временем подтверждения транзакции и защитой от параллельной траты одних и тех же биткоинов, которая может произойти в случае, если два майнера создадут разные блоки одновременно. Вероятность такого события мала, однако такая ситуация полностью не исключена. В этом случае участники системы биткоин приходят к единому блокчейну с помощью механизма консенсуса.
Вопрос-ответ
Когда один майнер выигрывает, что получают остальные?
Ничего. В гонке за этот блок они потратили ресурсы впустую и переходя к гонке за следующим блоком
Почему майнеру не назначить себе награду больше положенной?
Каждый участник проверяет блок самостоятельно. Блок с неправильной наградой будет отброшен остальными участниками
Почему найденный хеш является доказательством работы майнера?
Не известно никакого алгоритма решения задачи лучше, чем перебирать значение nonce
и проверять не подошёл ли хеш под условие. Если майнер нашёл нужное значение хеша, значит он действительно делал перебор и потратил на это вычислительные ресурсы
Но также не доказано, что такого алгоритма в принципе не существует. Если кто-то найдёт более эффективный алгоритм, то у системы майнинга будут проблемы. Но это очень сложная задача из области криптографии
Какая польза от майнинга?
Майнинг в сети биткоин нужен только для поддержания работы блокчейна. Хеши с нулями, которые получаются в результате майнинга, бесполезны. Есть проекты, которые стараются решить эту проблему и сделать результаты майнинга полезным. Например, майнинг в Primecoin основан на генерации больших простых чисел, которые используются в математике и криптографии. А Gridcoin использует блокчейн для награды вычислений научных проектов BOINC
Почему подорожали видеокарты?
Майнинг биткоина хорошо параллелится, и потому может эффективно вычисляться на видеокартах. Это привело к росту спроса на видеокарты
Что такое майнинг-пулы?
Поскольку вероятность каждого отдельного майнера выиграть в гонке за блок уменьшается с ростом вычислительной мощности сети, майнеры могут объединять мощности в единый пул, который распределяет награду пропорционально вкладу каждого майнера
Что такое ASIC?
Майнинг биткоина – это решение задачи по поиску специальных хешей. ASIC – это электронная схема, которая выполняет только одну задачу – расчёт хешей. Майнинг на ASIC эффективнее, чем на обычном процессоре, так как они, в отличие от процессора, на электронном уровне спроектированы для одной единственной задачи
Консенсус
Поскольку система децентрализована, может произойти ситуация, когда два майнера одновременно нашли новый блок и отправили его в сеть. Тогда часть сети считает, что в блокчейн включен блок одного майнера, а другая часть сети - что другого.
Для восстановления согласования данных участники используют правило: всегда используется цепочка блоков, в которой больше совокупная сложность вычислений. Майнер, который создаст следующий блок, транслирует его в сеть (вместе с его цепочкой блоков), эта цепочка будет обладать большей сложностью и будет принята всеми участниками сети. Вторая цепочка будет отброшена, и работы системы продолжится в обычном режиме. Конечно, есть вероятность, что и второй блок также приведёт к ветвлению, тем не менее, вероятность такого события очень мала. Одноблочное ветвление периодически происходит, но даже ветвление на два блока происходит очень редко.
При покупке товаров продавец обычно ждёт несколько блоков после транзакции, чтобы удостовериться, что транзакция не будет отменена из-за ветвления и после этого передаёт товар покупателю. Боб видит, что после транзакции Алисы прошло 6 блоков и посылает ей игрушку.
Вопрос-ответ
Почему выбирается цепочка в которой больше вычислений?
Чем больше вычислительной работы затрачено на цепочку, тем сложнее её изменить, и тем больше доверия к ней
Почему участники не нарушают правила?
Все участники проверяют транзакции, блоки, цепочки и т.д. независимо.
Если участник будет нарушать правила (например, создавать неверные блоки), то его блок всё равно не будет принят остальными, при этом он теряет ресурсы, которые затратил на блок, поэтому нарушать правила обычному участнику невыгодно
Что такое атака 51%?
Но если кто-то контролирует более половины вычислительной мощности сети, то он может влиять на консенсус. Например, он может сформировать альтернативную цепочку и принять её даже после нескольких подтверждений
Экономика биткоина
С экономической точки зрения биткоин обладает несколькими интересными свойствами:
Ограниченная и предсказуемая эмиссия. Размер постоянной награды майнеров (в результате которой и появляются новые биткоины) постепенно убывает. Первоначально она составляла 50 биткоинов за блок, и уменьшается вдвое после каждых 210000 блоков. В 2031 году эмиссия совсем остановится, общее количество биткоинов будет порядка 21 миллиона. С этого момента майнеры будут получать награду только в виде комиссий, и больше новых биткоинов создаваться не будет. Новые биткоины создаются алгоритмически по известному графику, их нельзя просто напечатать, как это может сделать центральный банк с фиатными деньгами
Отсутствие регулятора. Курс биткоина формируется в результате баланса спроса и предложения. Нет никакого органа, который обязан обеспечивать его покупательную способность, принимать биткоины в качестве платежа или следить за его ценой. По этой же причине биткоин очень волатилен: курс может сильно меняться даже в короткие промежутки времени
Вопрос-ответ
Как приобрести биткоин?
Вы можете намайнить биткоины, купить на специальной площадке (бирже) или получить перевод (например, от знакомого)
Как работают биржи?
Биржи позволяют обменять биткоины на другие валюты. Обычно биржа либо сама является покупателем\продавцом, либо посредником между желающим совершить встречные сделки. Обратите внимание, что сделки с биржей строятся на доверии. С юридической точки зрения биткоин не признан активом во многих странах, поэтому в случае обмана вы не сможете вернуть свои средства
Чем обеспечен биткоин?
Биткоин не обеспечен ни какими-либо товарами, ни законами государства - его курс полностью является результатом баланса спроса и предложения