Биткойны существуют только в виде записей в реплицированной распределённой базе (см. блокчейн), в которой в общедоступном открытом (нешифрованном) виде хранятся все транзакции, с указанием биткойн-адресов отправителей/получателей, но без информации о реальном владельце этих адресов[12]. В базе нет отдельных записей о текущем количестве биткойнов у какого-либо владельца. Лишь на основании цепочек транзакций становится понятным текущее количество биткойнов, связанных с тем или иным биткойн-адресом. То есть можно увидеть, что на адрес поступил 1 биткойн, а по другой транзакции на этот же адрес поступило 2 биткойна, третья транзакция отправила с этого адреса 1 биткойн. Но в базе не хранится отдельной записи, сколько всего сейчас биткойнов числится за данным адресом — просто предоставляется возможность в любой момент это легко подсчитать. Такие подсчёты автоматически делают клиентские программы, пользователь может и не замечать раздробленности информации.
Ключи
Основная статья: Криптосистема с открытым ключом
Трезор — аппаратный хранитель ключей
Пара ключей и биткойн-адрес для печати на бумаге, сгенерированные сервисом bitaddress.org
Каждый пользователь системы может генерировать неограниченное количество пар ключей (алгоритм ECDSA с параметром secp256k1). Размер закрытого ключа — 256 бит, а соответствующего ему открытого ключа — 512 бит.
Основное использование ключей — создание биткойн-адреса и подтверждение правомочности формирования транзакций. Но они могут использоваться и для цифровой подписи или шифрования при переписке.
Создание новой пары ключей автономно и не требует соединения с сетью или Интернетом. Созданные ключи обычно хранят в специальном шифрованном файле wallet.dat («кошельке»). Пользователь придумывает пароль только для доступа к информации из файла «wallet.dat», то есть для доступа к своим парам ключей. Для распоряжения биткойнами наличие этого файла не является обязательным — в большинстве случаев будет достаточно каким-либо образом получить закрытый ключ.
Хранить ключи можно на любом носителе, не только на карте памяти, но и в бумажном виде. Существуют онлайн-кошельки, например, Blockchain, Circle Snapcard или Coinbase, которые достаточно просты в использовании[46]. Однако, подобный инструмент снижает степень защищённости ключей, так как проблемы с сайтом такого сервиса, в том числе его взлом, могут приводить к перебоям в использовании своих биткойнов или даже их утрате.
Адресация
Адреса создаются при помощи генерации асимметричной пары криптографических ключей, для чего не требуется подключения к Интернету. Человек может иметь неограниченное число адресов, создавая их по своему желанию. Каждому возможному адресу соответствует баланс, выраженный в биткойнах. Все адреса с ненулевым балансом записаны в децентрализованную цепочку блоков транзакций, защищённую от изменений. При создании адреса его баланс всегда нулевой и может быть пополнен либо отправкой биткойнов с других адресов, либо путём создания новых биткойнов и комиссионных сборов за счёт майнинга.
Биткойн-адрес является последовательностью байт, полученных в результате преобразования открытого ключа[47]. Чаще всего кодированием Base58 адрес записывают как строку длиной до 34 букв латинского алфавита и цифр, для человека является хаотичным набором символов, например: 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa (первый сгенерированный биткойн-адрес[48]). Адреса с небольшим количеством неслучайных символов могут быть получены путём перебора[49][50]. Первый символ адреса является всегда единицей для обычных адресов или тройкой для адресов, созданных с использованием мультиподписи. Часть символов является контрольной суммой, проверяющей корректность основной части адреса[47].
Передача биткойнов на адрес происходит с контролем формальной корректности адреса получателя, но без контроля реального существования публичного и секретного ключей, которые бы ему соответствовали. Так адреса 1111111111111111111114oLvT2 (ему соответствует публичный ключ 0000000000000000000000000000000000000000[51]) или 1BitcoinEaterAddressDontSendf59kuE являются корректными, однако создание соответствующего им приватного ключа вычислительно маловероятно[49]. Хотя биткойнами, отправленными на такие адреса, никто потом не сможет воспользоваться[49], тем не менее, такие адреса в силу разных причин могут не пустовать. Например, по состоянию на июль 2019 года на адрес 1111111111111111111114oLvT2 в результате более 53 тыс. транзакций попало более 68 биткойнов[51], на адресе 1BitcoinEaterAddressDontSendf59kuE — более 13 биткойнов за почти 300 транзакций[52].
Адреса также могут быть отображены в виде QR-кодов и других штрихкодов, пригодных для машинного считывания, например, мобильными устройствами[12][53].
Если секретный ключ утерян, биткойн-сеть не примет никаких других доказательств права собственности[54]. Создать для существующего адреса новый ключ не получится, так как уникальной паре ключей всегда соответствует свой адрес. Биткойны, связанные с адресом, для которого нет закрытого ключа, становятся недоступными, фактически утрачиваются. В конце ноября 2013 года на BBC прошёл сюжет о британце, который на местной свалке искал выброшенный им ранее свой старый компьютерный жёсткий диск с секретным ключом к адресу, на котором ещё с 2009 года хранилось 7,5 тыс. биткойнов. Из новостей британец узнал о значительном росте курса биткойна и «осознал, что натворил». На момент «раскопок» стоимость утраченных биткойнов превысила 7,5 млн долларов[40][55].
Конфиденциальность
Сравнение традиционной модели приватности с моделью приватности в системе Биткойн.
Традиционная модель приватности достигается системой ограничения доступа к информации: о транзакции будут знать только две стороны и банк. В системе «Биткойн» все транзакции публичны, хранятся в открытом нешифрованном виде со свободным доступом к любому блоку, а приватность достигается полным отсутствием в системе персональных данных владельцев биткойн-адресов[56]. Сатоси Накамото для повышения конфиденциальности рекомендовал создавать отдельные адреса для каждой транзакции. Это осложняет сопоставление адресов с конкретным владельцем.
По мнению ряда авторов, с точки зрения приватности биткойн-адреса являются псевдонимами пользователей системы[44]. Если удаётся связать биткойн-адрес с конкретным человеком, то эта персонализация будет справедлива для всех транзакций с использованием этого адреса. В июле 2011 года было показано, что на основе общедоступной информации возможно связать многие биткойн-адреса как друг с другом, так и с определённой внешней идентифицирующей информацией. Обменники, магазины и хранилища кошельков, опираясь на электронную почту, IP-адреса, номера кредитных карт и т. п., способны выявлять и персонифицировать значительную часть биткойн-транзакций[57].
Дополнительную анонимность операций с биткойнами может обеспечить использование сети Tor, которая скрывает истинный IP-адрес, но не меняет биткойн-адреса.
Существенно повышает конфиденциальность применение «биткойн-миксеров». В этом случае сумма реального платежа дробится на несколько стандартных порций (например, один платёж на 35000 сатоши может отправляться тремя стандартными порциями по 10000 сатоши и одной на 5000). Но при этом в одной транзакции миксера на входе присутствуют биткойны стандартных и нестандартных порций большого количества разных пользователей и той же транзакцией выполняется отправка платежей сразу на много разных адресов. Это затрудняет сопоставление отправителей и получателей платежей.
Транзакции
Упрощённая структура последовательных транзакций с одним входом и одним выходом
Биткойны могут быть переданы любому, кто сообщит корректный биткойн-адрес или открытый ключ. Для передачи биткойнов текущий владелец создаёт новую транзакцию, которая, помимо указаний о количестве передаваемых биткойнов, содержит подписанный инициатором хеш предыдущей транзакции, по которой биткойны были получены. Предыдущая транзакция становится «входом» текущей транзакции. Также указывается публичный ключ или биткойн-адрес нового получателя («выход») (см. схематическую структуру на рисунке). Транзакция широковещательным запросом по открытым каналам без шифрования отправляется в сеть. Остальные узлы сети, прежде чем принять транзакцию к обработке, проверяют подписи. Правильность подписи свидетельствует, что инициатор действительно является владельцем секретного ключа для адреса «выхода».
Примеры множественных входов и выходов в транзакциях
Транзакции поддерживают произвольное количество «входов» (ссылок на предыдущие транзакции, в том числе в пользу разных адресов) и «выходов» (указания о получателях). Значения со всех «входов» суммируются, и сумма распределяется по «выходам»[6].
Особенностью протокола является невозможность взять лишь некоторую часть биткойнов из «входа». Если на адрес было передано 2 биткойна одной транзакцией, то при следующей операции с указанием этой транзакции в качестве «входа» автоматически будет подразумеваться передача 2 биткойнов. Однако их можно распределить на несколько «выходов», один из которых может указывать на этот же адрес, то есть часть биткойнов будет передана самому себе («сдача»)[6]. Но остаток не обязательно отправлять на адрес из входного списка. Например, «Bitcoin-qt» отправляет каждый остаток на новый биткойн-адрес из резерва заранее созданных адресов.
Отменить стандартную транзакцию невозможно даже при явной ошибке или мошенничестве. Однако предусмотрено использование мультиподписей, в том числе для сделок с участием арбитра[58][7], что может обеспечить возврат биткойнов при невыполнении контрагентами оговорённых условий.
Передача биткойнов сводится к указанию условий дальнейшего распоряжения ими. Условия формируются с применением открытых ключей[59]. Для следующей операции с этими биткойнами потребуется соответствующая электронная подпись с применением секретных ключей (см. криптосистема с открытым ключом), что и будет выполнением условий. Сеть проверяет подписи парными открытыми ключами. Таким образом, распорядиться биткойнами сможет только владелец секретного ключа. Наиболее типичным условием является простое указание биткойн-адреса, который формируют на основе открытого ключа[47]. Условия могут быть и другими. Например, можно потребовать использовать последовательно несколько цифровых подписей (то есть получить согласие нескольких сторон) или указать открытый ключ и IP-адрес — тогда цифровую подпись надо будет выполнить на компьютере с оговорённым IP-адресом[59].
Комиссионные сборы
В системе «Биткойн» не предусмотрено обязательной комиссии. Пользователи могут добровольно установить любой её размер. Если сумма «входов» транзакции больше суммы «выходов», то разница считается комиссией, и она достанется создателю блока с данной транзакцией[17]. Различные программы-клиенты имеют свои правила и настройки относительно комиссии и чаще всего рекомендуемый размер комиссии они вычисляют автоматически.
Тот, кто генерирует новый блок, может по своему усмотрению добавлять в него транзакции из очереди. Например, он может отобрать только транзакции с комиссией[60]. По состоянию на начало 2015 года обычно 50 000 байт в блоке резервируется под приоритетные транзакции вне зависимости от комиссии. За счёт транзакций с комиссией величина блока может достигать 750 000 байт. Между компьютерами сети «Биткойн» установлено ограничение скорости в 15 килобайт в минуту для ретрансляции информации о транзакциях без комиссии, которые ещё не включены ни в один блок. Таким образом, нет гарантии, что транзакция без комиссии будет включена в ближайший блок.
Блоки транзакций
Основная статья: Блокчейн
Основная последовательность блоков (чёрные) является самой длинной от начального (зелёный) до текущего. Побочные ветви (фиолетовые) отсекаются.
Отдельные транзакции объединяют вместе с другими транзакциями в специальную структуру — блок. Информация в блоках открыта, не шифруется, её можно быстро перепроверить.
Каждый блок всегда содержит свой порядковый номер и хеш предыдущего блока. Все блоки можно выстроить в одну цепочку, которая содержит информацию о всех совершённых когда-либо операциях с биткойнами. С ними можно ознакомиться, например, на специализированных сайтах — браузерах цепочек блоков[61] (англ. Blockchain explorer).
Первая транзакция в блоке всегда формируется автоматически и передаёт вознаграждение за создание блока[17]. Остальное наполнение блока берут из очереди транзакций, которые ещё не были записаны в предыдущие блоки. Создающий блок участник может сам отобрать включаемые в блок транзакции, например, не взять в блок транзакции без комиссии[60].
Не всякий сформированный блок будет принят остальными участниками. Требуется, чтобы числовое значение хеша заголовка не превышало установленного значения (параметр «сложность»). Чем меньше задано значение, тем меньше вероятность выполнения условия. В служебной области блока выделено место для произвольных значений. Если хеш заголовка неудовлетворителен, произвольные значения заменяются на новые и расчёт хеша повторяется. Результат хеширования (функции SHA-256) непредсказуем, поэтому нет алгоритма целенаправленного изменения произвольной области для достижения желаемого результата. Обычно требуется большое количество пересчётов. Параметр «сложность» каждые 2016 блоков (примерно раз в две недели) автоматически устанавливается так, чтобы поддерживать постоянной среднюю скорость создания блоков[62] (примерно 1 блок в 10 минут). Если блоки формируются быстрее, то после пересчёта «сложности» достичь цели становится труднее, и наоборот. Поэтому изменение суммарной вычислительной мощности сети лишь очень незначительно изменяет количество создаваемых блоков.
Когда подходящий вариант хеша найден, узел рассылает полученный блок другим подключённым узлам для проверки. Если ошибок нет, то каждый узел сети получивший блок записывает его в свой экземпляр базы[63].
При формировании блоков могут возникнуть ситуации, когда несколько новых блоков считают предыдущим один и тот же блок. Это явление называется ветвлением и происходит из-за одновременного формирования блоков «майнерами».
До включения транзакции в блок есть техническая возможность оформления нескольких разных транзакций по передаче с одного адреса одних и тех же биткойнов разным получателям[64]. Как только транзакция будет включена в блок, остальные транзакции с этими же биткойнами система будет уже игнорировать, то есть в цепочке блоков останется только одна транзакция. Но если контролировать более 50 % суммарной вычислительной мощности сети, то существует теоретическая возможность при любом пороге подтверждений формировать параллельную более длинную цепочку блоков, в которой те же биткойны будут переданы другому получателю[65] (проблема «двойного расходования», часто её называют «Атака 51 %»). Когда сеть получит сведения о второй цепочке блоков, она станет основной, а транзакция в ней — подтверждённой, первая же транзакция утратит подтверждения и будет считаться ошибочной. В результате не произойдёт удвоения биткойнов[66], но изменится их текущий владелец, при этом первый получатель утратит биткойны без каких-либо компенсаций.
Майнинг
Основная статья: Майнинг
См. также: proof-of-work
Количество биткойнов с течением времени (годы c 2009 по 2033)
Логарифмический график сложности майнинга.
Блок из нескольких ASIC-плат в форме USB-модулей, широко используется для майнинга с 2013 года
Выпуск новых биткойнов децентрализован, не зависит от какого-либо регулирующего органа, объём эмиссии известен заранее (см. график количества биткойнов до 2033 года). Стандартная порция новых биткойнов прибавляется к сумме комиссий из транзакций, включённых в очередной блок. Итоговую сумму в качестве вознаграждения получает тот, кто добавил очередной блок в базу транзакций[17].
Деятельность по созданию новых блоков ради возможности получить вознаграждение в форме эмитированных биткойнов и комиссионных сборов получила название «майнинг» (от англ. mining — добыча полезных ископаемых).
В первых версиях программы-клиента была кнопка «сгенерировать новые биткойны»[38]. Для поиска хеша заголовка нового блока использовался центральный процессор компьютера. Вероятность успешного создания блока майнером приблизительно равна отношению его вычислительной мощности к вычислительной мощности всей сети, и если это отношение очень мало, то вероятность получения награды даже за длительный промежуток времени будет незначительной. Желающие увеличить вероятность получения вознаграждения стремятся задействовать как можно большие вычислительные мощности. Особенность задачи перебора хешей позволяла применить максимальное распараллеливание вычислений. Для этого хорошо подошли многопоточные графические процессоры (GPU) после появления небольшой дополнительной программы[67] (в сотни раз производительнее CPU[68]) и платы с FPGA (производительность аналогична видеокартам, но превосходят их по энергоэффективности). После этого майнинг при помощи центрального процессора оказался нецелесообразным из-за слишком малой вероятности получить вознаграждение, и кнопку в программе-клиенте убрали. Позднее были выпущены специализированные процессоры (ASIC), ориентированные на вычисление хешей для сети «Биткойн», ещё более производительные, чем GPU и FPGA. С 2013 года майнинг без специализированных процессоров (на видеокартах или центральном процессоре) стал нерентабельным: стоимость потребляемой электроэнергии превысила средний результат[69][70].
С 2013 года появляются репортажи о «фабриках биткойнов» — специализированных безлюдных предприятиях, на которых «трудятся» тысячи ASIC-процессоров[71][72]. Месячный доход фабрики может превышать миллион долларов (несколько тысяч биткойнов)[73]. В начале 2015 года, даже если предположить, что все майнеры используют наиболее энергоэффективные процессоры ASIC, суммарный расход электроэнергии на майнинг оценивался в 1,46 тераватт-часа в год, что эквивалентно годовому потреблению 135 000 американских домов[72] (средний уровень порядка 10,8 МВт⋅ч за год). В 2017 году появилась услуга облачного майнинга с использованием арендованной мощности[74]. Обслуживание оборудования, настройка и подключение к интернету берёт на себя компания, предоставляющая данную услугу. В большинстве случаев арендатор может выбрать криптовалюту для майнинга и майнинговый пул для присоединения.
Облачный майнинг может иметь форму[75]:
аренды физической фермы;
аренды виртуальной фермы (может являться частью большой физической фермы);
аренды вычислительной мощности (может располагаться на нескольких физических фермах);
Свои платформы облачного майнинга создали и такие компании как Cisco[76], BitDeer[77], ECOS[78].
После формирования каждых 210 000 блоков (приблизительно раз в 4 года) запрограммировано размер вознаграждения новыми биткойнами уменьшать вдвое[79], то есть это значение является убывающей геометрической прогрессией (размер вознаграждения 50 → 25 → 12,5 → …)[79]. Общий объём эмиссии биткойнов ограничен, так как является суммой членов убывающей геометрической прогрессии, и не превысит 21 миллион. На май 2014 года в обращении находилось 12,7 миллиона биткойнов[38].
Первоначально размер эмиссии при создании блока составлял 50 биткойнов. 28 ноября 2012 года произошло первое уменьшение эмиссионной награды с 50 до 25 биткойнов. 9 июля 2016 года произошло второе уменьшение эмиссионной награды с 25 до 12,5 биткойна. 11 мая 2020 — третье до 6,25[80]. В 2031 году размер эмиссии при создании блока составит менее одного биткойна и продолжит стремиться к нулю. Предполагается, что эмиссия остановится в 2140 году, поскольку награда за блок не сможет превышать 10−8 BTC, однако задолго до этого постепенно основным источником вознаграждения за формирование новых блоков станут комиссионные сборы[17].
Пулы
Для уменьшения случайности и более равномерного получения биткойнов майнеры используют специализированные веб-службы — пулы[81] (от англ. pool — общий фонд). Каждый участник ищет свой вариант блока и полученные результаты направляет пулу.
Пул получает вознаграждение как некий мощный сольный майнер. Полученные биткойны пул распределяет между участниками в соответствии с правилами, установленными владельцем пула.
По состоянию на 2016 год большинство крупных пулов находится в КНР: по состоянию на март 2016 года более половины мощности сети разделено между тремя крупными китайскими пулами[82][83][84][85][86], четвёртое место занимает пул компании BitFury — одного из первых[87] производителей майнинговых чипов и основанной выходцами из постсоветского пространства[88].
Объём данных
Стандартные программы-клиенты ориентированы на работу с полной базой транзакций. Программа-клиент способна работать полностью автономно, как полноценная сеть. Такой механизм обеспечивает работоспособность сети без выделенного сервера и центрального агента, но вынуждает хранить огромный архив всех транзакций. По состоянию на февраль 2019 года, размер базы составлял более 250 ГБ. После первого запуска на получение, анализ и сохранение базы транзакций может уходить более суток. В случае увеличения числа транзакций до уровней, сравнимых с популярными ныне платёжными системами, проблема хранения и передачи данных может сделать невозможным использование стандартных программных клиентов на большинстве домашних компьютеров.
По этой причине разработаны «тонкие клиенты», которые хранят на жёстком диске только заголовки блоков (около 80 байт)[89], а полное содержимое блоков скачивают по мере необходимости. Это экономит место на диске, но не подходит для майнинга.
Масштабируемость
Основная статья: Проблема масштабируемости биткойна
Количество транзакций биткойнов в месяц
Размер блока в блокчейне Биткойна ограничен в 1 мегабайт. Когда транзакций было не слишком много, такое ограничение почти ни на что не влияло, но существенно ограничивало возможности DDoS-атаки. С ростом популярности Биткойна число транзакций увеличилось, но из-за ограничения максимального размера блоков не все транзакции «помещались» сразу, периодически возникала очередь. В мае 2017 года ситуация сильно ухудшилась. Некоторые пользователи жаловались, что им приходится ждать подтверждения несколько дней[90]. Для ускорения обработки пользователь может назначить повышенную комиссию. Но это делает использование биткойнов достаточно дорогим, особенно для небольших платежей — исчезает смысл использовать их, например, в кафе и барах[90].
Один из первых вариантов решения проблемы обработки увеличившегося количества транзакций и уменьшения комиссий предложил один из ведущих разработчиков Гэвин Андресен — предполагалось увеличить максимальный размер блока с 1 мегабайта до 20. Однако эта идея была раскритикована многими другими разработчиками, крупнейшими майнерами и владельцами пулов (сосредоточенными в КНР), а также владельцем самого крупного форума о биткойне bitcointalk и модератором раздела о биткойне на Reddit, поскольку это сильно увеличило бы размер базы данных и снизило бы децентрализацию.
Другим решением проблемы масштабируемости является использование некоторых видов сайдчейнов[91][92] и в целом протоколов более высокого уровня, развёрнутых поверх протокола биткойна. Этим занимаются компания Blockstream[93], а также проекты Lightning Network[94][95][96][97][98], Rootstock[99][100], Segregated Witness[101][102], Amiko Pay[103].
Постепенно было выработано решение Segregated Witness (SegWit) — часть информации хранится не в блокчейне, а в отдельных файлах за пределами цепочки блоков. Разработчики считают, что в результате освободится много места, в блоке будет помещаться больше транзакций и скорость подтверждений увеличится[90].
В итоге был разработан компромиссный протокол SegWit2x — часть информации хранить за пределами блокчейна и размер блоков постепенно увеличить до 2 Мб.
Группа разработчиков под руководством экс-инженера Facebook Амори Сечета объявила об отказе от SegWit2x и сохранении прежней структуры блокчейна (без хранения информации за его рамками), но увеличении размера блока до 8 Мб. Свою ветку они назвали «Bitcoin Cash».
1 августа 2017 года состоялось «принудительное ветвление». У обеих криптовалют общая начальная история[104], но блок 478559 был сформирован дважды в разных форматах. Один из них соответствует протоколу SegWit2x, другой — Bitcoin Cash, который фактически стал первым блоком новой криптовалюты. Все последующие транзакции разделены — попадают в разные ветки блокчейна. Таким образом, кто имел биткойны до 1 августа, после разделения сохранили все свои биткойны, но автоматически стали владельцами ещё и аналогичного количества Bitcoin Cash. Фактически, разделение веток создало возможность двойного расходования из одного и того же кошелька с использованием одних и тех же ключей доступа, хотя это уже две разные криптовалюты, для работы с которыми используется разное ПО, хотя отличия и минимальны.
18 декабря 2017 года стало известно о возобновлении активной работы по запуску приостановленного проекта Segwit2x[105]. Идея команды разработчиков заключается в возобновлении и доработке приостановленного проекта Segwit2x и создании «реально анонимного и моментального Биткоина». При этом утверждается, что целью работы является не замена оригинальной сети, а эффективное сосуществование двух сетей с разным предназначением.