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

· 10 min read

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

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

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

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

Указатели

Указатели — это переменные, которые сообщают, где находится другая переменная. Обычно переменные в программировании хранят данные. (В примере int a = 10 целочисленная переменная a имеет значение 10.) Указатели же не хранят значение как данные, а указывают на адрес переменной, в которой эти данные лежат.

Связные списки

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

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

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

Хеш-указатель — это указатель, который содержит хеш предыдущего блока.

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

В простейшем виде блокчейн — это связный список, как показано ниже.

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

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

Что такое майнинг?

Майнинг — это процесс, необходимый для создания новых биткоинов. Майнинг биткоина работает по принципу Proof of Work (POW), доказательства выполненной работы. Проще говоря: решить задачу должно быть очень трудно, но как только вы её решили, правильность вашего решения должна проверяться предельно легко.

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

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

Задача византийских генералов

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

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

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

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

Та же логическая задача касается и блокчейн-сетей, которые служат инфраструктурой для криптовалют вроде биткоина. Это невероятно большие сети — как доверять каждому человеку в них? Мы хотим отправить кому-то 4 эфира, но как быть уверенными, что злоумышленник не превратит эту сумму в 40 эфиров?

Сатоши Накамото сумел решить эту логическую задачу, предложив протокол proof of work. Посмотрим, как он работает:

Когда осаждающая армия хочет передать сообщение «атакуем в понедельник» армии слева от себя, ей нужно выполнить следующие шаги;

Сначала исходному сообщению присваивается случайное, сгенерированное один раз значение — «nonce». Nonce может быть любым значением в шестнадцатеричной системе.

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

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

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

При этом, хотя вероятность крайне мала, у любой хеш-функции могут возникнуть совпадающие результаты. В теории для двух разных входных данных A и B не должно быть никакой вероятности того, что H(A) = H(B), но на практике ни одна хеш-функция не защищена от коллизий полностью.

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

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

На этом этапе подобрать nonce для такого сообщения и изменить его содержимое — серьёзная потеря времени.

А вот задача генералов, получающих сообщение, проста: им нужно лишь добавить к результату хеширования переданное им значение nonce и сравнить результаты. Этот шаг — очень быстрая и простая операция. Эта идея и есть механизм работы принципа proof of work.

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

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

Именно так майнеры реализуют протокол proof of work при майнинге биткоина. Они используют свои вычислительные мощности, чтобы решить стоящую перед ними криптографическую задачу и создать следующий блок. В блокчейне биткоина блоки создаются каждые 10 минут.

Как проходят переводы в сети биткоина?

Допустим, Джон хочет отправить немного биткоинов Дэйву. Как происходит этот перевод? Переводы биткоина устроены совсем не так, как переводы фиатных денег. Если бы Джон хотел дать Дэйву 10 USD, он физически достал бы купюру в 10 USD из кошелька, передал её Дэйву — и перевод завершён. С биткоином иначе: это не то, чем мы владеем физически. У нас есть доказательство того, что биткоин у нас есть.

Есть две вещи, которые стоит знать и держать в уме;

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

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

В свете этого посмотрим на перевод биткоина между Джоном и Дэйвом. У этого перевода две части: вход и выход (input-output).

Чтобы совершить перевод, Джон должен иметь биткоины от предыдущих переводов. Как мы уже упоминали, все переводы фиксируются в сети биткоина.

Джону нужно собрать биткоины из ранее полученных переводов с названиями TR(0), TR(1) и TR(2), создать новый перевод под названием TR(INPUT) и отправить его Дэйву. Здесь TR(INPUT) становится входными данными нового перевода.

Примерно так выглядит перевод биткоина со стороны входа.

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

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

Условия, которым должны соответствовать переводы:

TR(INPUT) > TR(OUTPUT). Входной перевод всегда должен быть больше выходного. В каждом переводе разница между входом и выходом (выход + сдача) выплачивается майнерам в виде комиссии. То есть: Комиссия майнинга = TR(INPUT) - (TR(OUTPUT) + СДАЧА)

Со стороны входа должно выполняться TR(0)+TR(1)+TR(2)=TR(INPUT). Другими словами, у Джона должно быть достаточно биткоинов, чтобы отправить их Дэйву. Если биткоинов на проведение операции не хватает, майнеры отклоняют перевод.

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

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

Входные данные (включая данные подписи) и выходные данные складываются и пропускаются через хеш-алгоритм SHA-256. Результат работы этого алгоритма и называют переводом.

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

Отсюда и появился принцип replace-by-fee. Работает он просто: даже если Джон отправил Дэйву 5 BTC, транзакция так и не попадает в блок и остаётся в ожидании, потому что комиссия майнинга была низкой. Отменить или откатить эту операцию невозможно, поскольку потраченные биткоины вернуть нельзя. Но если Джон сделает перевод на тот же адрес на ту же сумму BTC и поставит комиссию майнинга выше, старый перевод считается недействительным, а новый встаёт в очередь на обработку.

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

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

По мнению одних, это группа внутри ЦРУ, по мнению других — инопланетянин, а может быть, он и правда киберпанк по имени Сатоши Накамото. Кем бы он ни был, он оставил нас наедине с решением, что делать дальше с его идеями и их воплощением, которые полностью меняют взгляд на наши активы и способ их хранения. Он открыл дорогу идеям более продвинутым, чем его собственная, и убедил мир взглянуть на вещи совершенно иначе.

Сатоши не забыл спрятать послание в генезис-блоке — стартовом блоке, который он добыл и записал жёстко в код. Отметив дату 3 января 2009 года, он приложил заголовок британской Times того дня о банках, ответственных за мировой экономический кризис: «Министр на грани второго спасения банков». Скорее всего, этими словами он высмеивает систему центральных банков. Почему Сатоши создал в стартовом блоке этот адрес, с которого нельзя тратить средства, неизвестно. На сегодняшний день на этот адрес анонимно отправлено 16 BTC, и поэтому общая эмиссия в 21 миллион биткоинов на деле никогда не будет достигнута.

Биткоину понадобилось всего 9 лет, чтобы выйти на уровни, пугающие центральные банки мира, и впереди у него ещё долгий путь.

Биткоин Как работает биткоин Сатоши Сатоши Накамото Накамото криптовалюты блокчейн Что такое блокчейн Майнинг Что такое майнинг сеть биткоина