4
Подписаться
1271
Подписчики

Как работает протокол Bitcoin (часть 1)

Создано: 2017-01-19 18:04:02, Обновлено: 2017-01-19 18:11:24
comments   0
hits   1625

Как работает протокол Bitcoin (часть 1)

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

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

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

  • ### Вот текст.

Тысячи статей пытаются объяснить биткойн, онлайн, точечную (peer-to-peer) валюту. Большинство статей о базовом соглашении, которое лежит в основе, упускают многие детали. Даже очень глубокие статьи пробиваются в ключевые моменты.

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

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

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

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

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

Наконец, я должен сказать, что я относительно новичок в биткойн-мире. У меня было немного внимания в 2011 году, но действительно серьезное изучение деталей было в начале 2013 года.

  • Первый шаг: подписание завещания

    • #### Как создать валюту?

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

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

    Этот способ не очень популярен, но все же имеет некоторые преимущества. Любой человек в мире может использовать публичный ключ Алисы, чтобы подтвердить, что Алиса действительно является тем, кто подписал. Никто другой не может произвести результат, который подписывает (подпись может быть получена только из частного ключа, который принадлежит Алисе, в принципе, см. цифровую подпись, упомянутую выше), поэтому Алиса не может сожалеть и сказать нет, я не дал Бобу infocoin. Таким образом, этот протокол предоставляет доказательство того, что Алиса действительно намерена дать Бобу infocoin.

    Я еще не сказал, что это за деньги в этом соглашении. Я хочу быть предельно ясным: деньги - это сама информация. То есть, эта последовательность подписей - это символы, которые я хочу, чтобы моя Алиса дала Бобу infocoin.

  • Уникальное обозначение валюты с помощью серийных номеров

Проблема с нашей первой версией Infocoin заключалась в том, что Алиса могла неоднократно отправлять Бобу одно и то же сообщение с подписью. Предположим, что Боб получил 10 таких сообщений.

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

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

Более подробно, предположим, что Алиса идет в банк и говорит: “Я хочу забрать инфокоин из моего счета”. Банк вычитает инфокоин из ее счета, а затем дает ей новый, никогда не использованный серийный номер, предположим, 1234567 . Затем, когда Алиса хочет отправить инфокоин Бобу, она подписывает новое сообщение “Я хочу, чтобы Алиса дала Бобу серийный номер 1234567 ”. Но Боб не только принимает инфокоин, но и связывается с банком, чтобы подтвердить две вещи: во-первых, инфокоин с серийным номером 1234567 действительно принадлежит Алисе. Во-вторых, Алиса еще не сняла инфокоин.

  • ### Давайте сделаем всех банками.

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

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

Теперь, предположим, что Алиса собирается передать информационную монету Бобу. Она подписывает информационную монету Бобу с порядковым номером 1234567 в своем сообщении. И выводит сообщение с подписью Бобу, который может проверить это на своей собственной блокчейне.

Мы все еще задаемся вопросом, откуда появился этот серийный номер, но это очень легко, поэтому я объясню позже. Еще более сложным вопросом является то, что этот протокол позволяет Алисе повторно тратить ее инфокоин. Она может выпустить подписанное сообщение о том, что Алиса собирается дать Бобу серийный номер инфокоина 1234567, а также она может выпустить подписанное сообщение о том, что Алиса собирается дать Чарли серийный номер инфокоина 1234567.

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

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

Более конкретно, предположим, что Алиса хочет дать Бобу infocoin. Как и раньше, она дает подпись на сообщение, и я говорю, что Алиса дает Бобу коробку infocoin с порядковым номером 1234567, и подпишет сообщение с именем Бобу. Также как и раньше, Боб делает проверку с помощью своего собственного блокчейна, что эта монета действительно принадлежит Алисе.

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

  • ### Доказательство работы Proof-of-work

Предположим, что Алиса хочет сделать двойник в вышеупомянутом соглашении, и ему нужно будет управлять всей сетью infocoin. Предположим, что она использует автоматическую систему для создания множества учетных записей в разных идентичностях в сети infocoin, предположим, что их 1 миллиард. Как и прежде, она пытается сделать двойник, чтобы передать ту же самую infocoin Бобу и Чарли, но когда Боб и Чарли спрашивают сеть infocoin, чтобы проверить эту сделку, Алиса заливает всю сеть, рассказывая Бобу и Чарли, что они могут пройти эту сделку, и, возможно, обмануть одного из них или обоих, чтобы принять эту сделку.

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

Но чтобы по-настоящему понять это, нам нужно углубиться в более конкретные детали.

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

Как работает протокол Bitcoin (часть 1)

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

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

Как работает протокол Bitcoin (часть 1)

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

Это не работает, когда x равен 1.

Как работает протокол Bitcoin (часть 1)

И затем мы пытаемся сделать x=2, а затем x=3, 4, 5… и наконец, когда мы узнаем, что x=4350 мы получаем

Как работает протокол Bitcoin (часть 1)

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

Что делает эту загадку нелегкой для решения, так это то, что результаты hash-функций всегда случайны, и любое незначительное изменение входных значений будет полностью отличаться от результатов вывода всей hash-функции, что очень сложно предсказать. Так что, если нам нужно, чтобы результат вывода начинался с 10 нулей, то Дэвиду потребуется в среднем 1610 ≈ 1012 различных x, чтобы найти подходящее значение. Это очень сложная задача, требующая большого количества вычислительной способности.

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

Хорошо, предположим, что Дэвиду повезло, и он нашел нужный x (nonce), поздравляем его! Он получит вознаграждение за то, что нашел этот ответ. Он опубликует, что он доказал, что сделки внутри этого блока являются обоснованными, и в то же время опубликует значение x, которое она нашла.

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

В протоколе биткоина этот процесс верификации называется mining. Успешный верификатор каждого блока транзакций получает биткойны в качестве вознаграждения. Вначале это было вознаграждение в размере 50 биткоинов. Однако вознаграждение уменьшается вдвое за каждый 210000 верифицированных блоков (то есть примерно каждые 4 года).

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

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

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

Как работает протокол Bitcoin (часть 1)

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

Как работает протокол Bitcoin (часть 1)

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

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

Как работает протокол Bitcoin (часть 1)

Когда они получают это сообщение, люди в ветке A замечают, что ветка B теперь самая длинная, и переходят в ветку B. Работа на ветке A быстро прекращается, так что все работают на блокчейне в одном и том же порядке. Затем блок A игнорируется.

Точно так же, если шахтер на ветке A добывает следующий блок, то тот, кто работает на ветке B, просто останавливается и переходит к ветке A.

В любом случае, этот процесс гарантирует, что блокчейн будет иметь единую последовательность. В биткоине сделка не будет считаться подтвержденной, пока 1) она не будет находиться в блоке с самой длинной ветвью, и 2) не будет подтверждено как минимум 5 подтверждённых блоков. В этом случае мы говорим, что у сделки есть 6 подтверждённых блоков. Это дает всей сети время, чтобы объединить последовательность блоков.

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

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

Другой вариант - Alice = Bob, то есть Alice пытается передать одну монету Charlie, а она передает ее себе, так как у нее может быть несколько учетных записей. В этом случае стратегия Alice заключается в том, чтобы подождать, пока Charlie не получит Infocoin, то есть, вероятно, после того, как сделка будет подтверждена 6 раз в самом длинном блокчейне.

Как работает протокол Bitcoin (часть 1)

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

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

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

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

(Смотрите иллюстрацию в начале статьи.)