Как работает протокол биткоина?

Автор:Маленькие мечты, Создано: 2017-01-19 18:04:02, Обновлено: 2017-01-19 18:11:24

Как работает протокол биткоина?

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

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

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

  • Ниже приведены официальные тексты:

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

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

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

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

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

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

    В заключение я должен сказать, что я относительно новичок в мире биткоина. Я был в 2011 году, но в начале 2013 года я действительно серьезно изучил его детали.

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

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

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

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

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

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

  • Уникальный идентификатор с помощью серийного номера

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

    Мы хотим, чтобы инфокоин имел уникальный идентификатор. Ему нужен тег или серийный номер. Алиса может подписать в сообщении мне, чтобы Алиса дала Бобу инфокоин с серийным номером 8740348.

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

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

  • Пусть каждый станет банком

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

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

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

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

    Мы называем эту проблему "двойной тратой денег" ("double spending money"), и на первый взгляд такая трата денег может показаться невыполнимой. Ведь если Алиса сначала отправляет сообщение Бобу, а затем Боб отправляет сообщение всем остальным, включая Чарли, и все остальные обновляют свой блокчейн, то Чарли не обманут. Таким образом, кажется, что двойные траты возможны только в короткие сроки.

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

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

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

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

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

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

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

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

    img

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

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

    img

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

    И мы видим, что это не работает, когда x равно 1.

    img

    И затем мы пытаемся найти x равному 2, и затем x равному 3, 4, 5... И наконец, когда мы обнаруживаем, что x равно 4350, мы получаем

    img

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

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

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

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

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

    В протоколе биткоина этот процесс подтверждения называется "добычей" (минированием); каждый успешный проверяющий блок получает биткойны в качестве вознаграждения. Вначале это было вознаграждение в размере 50 биткойнов. Но по 210000 проверенных блоков (примерно каждые 4 года) вознаграждение будет сокращено вдвое. До сих пор это происходит только один раз, то есть в настоящее время подтверждение блока получает вознаграждение в размере 25 биткойнов. Процесс сокращения вдвое продолжается до 2140 года.

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

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

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

    img

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

    img

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

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

    img

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

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

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

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

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

    Еще одна возможность - Алиса = Боб, то есть Алиса пытается передать одну монету Чарли, и в то же время она передает эту монету себе, так как она может иметь несколько счетов. В этом случае стратегия Алисы состоит в том, чтобы подождать, пока Чарли не получит этот Infocoin, то есть, вероятно, после того, как транзакция будет подтверждена 6 раз в самой длинной блокчейне.

    img

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

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

    Это первая половина, а вторая половина автор Майкл откладывает концепцию Infocoin, чтобы более подробно рассказать о протоколе Bitcoin с точки зрения биткоин-транзакций.

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

Статья приведена из брошюры


Больше