Если совсем коротко. Биткоин — это открытый список переводов, который никто не ведёт. Монет нет: есть только записи «столько-то от такого-то такому-то», подписанные так, что подделать подпись нельзя. Вся трудность в одном — как чужим друг другу людям договориться, в каком порядке эти записи случились: порядок и решает, кто потратил деньги первым. Ответ биткоина: право дописать очередную страницу списка разыгрывается лотереей, билеты в которой покупаются электричеством, а каждая страница намертво пришита к предыдущей.
Дальше то же самое подробно, минут на пять. Принимать на веру не придётся ни одного числа: страница считает их сама из настоящих байтов настоящих блоков.
Понять биткоин мешает привычка: кажется, что где-то лежит файл с вашими монетами. Не лежит. Нет ни файла, ни счёта, ни монет.
Есть один список переводов — открытый целиком и одинаковый у всех, кто захотел его скачать. «Мой баланс» не записан в нём нигде, он вычисляется: сложите переводы, пришедшие на ваш адрес и ещё не потраченные. Кошелёк не хранит монет — он хранит ключ, то есть умение подписаться.
Мы определяем электронную монету как цепочку электронных подписей.
Накамото, раздел 2. В подлиннике: «We define an electronic coin as a chain of digital signatures»
Не предмет, а история переходов. Всё остальное — механика того, как чужие друг другу люди договариваются, каким считать этот список.
Устройство биткоина проще всего собрать самому: попробуйте его обмануть, и на каждом шаге станет видно, чего в нём не хватает. Каждая часть биткоина появится ровно там, где без неё обман удаётся.
Напишу в список: «Пётр — мне, 10» — и всё.
Мешает подпись. У каждого пара ключей: секретный знает только он, открытый виден всем. Подписать перевод можно лишь секретным, а проверить подпись — открытым, то есть кто угодно. Адрес, который вы даёте плательщику, и есть отпечаток вашего открытого ключа.
Здесь не запрет, а невозможность: чтобы расписаться за Петра, надо угадать его секретный ключ, а вариантов у него 1,16 · 1077. Всей вычислительной мощи биткоина — а она ниже посчитана — на подбор одного ключа не хватило бы и за 1048 лет.
Отправлю одни и те же деньги двум продавцам разом.
А вот это уже интересно. Обе записи подписаны верно, к каждой по отдельности не придраться. Кто прав? Тот, чья запись была раньше. Значит нужен общий порядок событий — и вот это, а вовсе не «шифрование», и есть вся задача биткоина.
Нужен способ участникам сойтись на единой истории того, в каком порядке [переводы] были получены.
Накамото, раздел 3. В подлиннике: «we need a system for participants to agree on a single history of the order in which they were received»
Банк решает это просто: список у него один, и он же решает, что пришло первым. Биткоину нужно то же самое — без банка. Дальше четыре попытки обойтись без него.
Пусть порядок выбирают голосованием. Тогда я заведу миллион участников и проголосую сам за себя.
Если бы большинство считалось по правилу «один IP-адрес — один голос», его подорвал бы всякий, кто способен раздобыть много адресов. Доказательство работы — это по сути «один процессор — один голос».
Накамото, раздел 4. В подлиннике: «Proof-of-work is essentially one-CPU-one-vote»
Вот ключевой поворот, ради которого всё и придумано: голос нельзя заводить бесплатно, его надо покупать. И платить за него тем, что нельзя ни подделать, ни размножить, — работой.
Хорошо, скажу, что проделал работу, а сам ничего делать не буду.
Переводы собирают пачками — блоками. У блока есть заголовок в восемьдесят байт, и в нём есть свободное число, которое можно ставить какое угодно.
От заголовка считают SHA-256. Это счётная мясорубка: подаёте что угодно — получаете ровно 64 знака. Обратно не провернуть, а от перемены одной буквы результат меняется целиком. Вот, посчитано прямо сейчас:
| Школяр | db714acb454b011904520c50a59f2b5b1a44b3d5c835dfd71feaecd7c0605f05 |
| Школяp | e8feeef08d19942ec750dca90b1b2eee96f7b86caf29007b70afc2521503e82a |
Слова различаются одной буквой: во втором «р» латинская. Общего в ответах — ничего.
Правило одно: имя блока — тот самый хеш — должно оказаться меньше заданного числа. Это число называют целью. Считать назад нельзя: остаётся менять свободное число в заголовке и пробовать снова.
Требуемая в среднем работа растёт показательно с числом нулевых битов, а проверить её можно, взяв хеш один раз.
Накамото, раздел 4
В этой строчке весь биткоин: найти трудно, проверить мгновенно. Вот во сколько обходится каждый следующий ноль — страница искала это сама, пока вы открывали её:
| нулей в начале | попыток понадобилось | в среднем нужно | времени |
| 0… | 5 | 16 | 0,000 с |
| 00… | 174 | 256 | 0,000 с |
| 000… | 250 | 4 096 | 0,000 с |
| 0000… | 38 123 | 65 536 | 0,014 с |
Столбцы разные не по недосмотру: каждый следующий ноль дороже предыдущего ровно в шестнадцать раз, но выпадает он когда придётся — на трёх нулях нам повезло вшестнадцатеро. Перебор — лотерея, а не задача.
Теперь мера. Вот нынешняя цель — то самое число, меньше которого должно оказаться имя блока:
000000000000000000023cc10000000000000000000000000000000000000000
В её начале 19 нулей — значит, и у имени блока их должно быть не меньше. В среднем на один блок вся сеть перебирает
540 345 524 393 959 676 682 311
вариантов — это 0,9 числа Авогадро, то есть примерно столько атомов, сколько их в 10,8 граммах углерода. Перебрать поатомно щепоть угля — и так каждые десять минут, круглые сутки, без перерыва с января 2009 года.
Отсюда и обещание из первой попытки: сеть перебирает 900 575 873 989 932 794 470 имён в секунду, и даже с такой скоростью на один чужой ключ ушло бы 1048 лет.
Цель и число попыток — на 5 сентября 2026 года, блок 965 630. Трудность пересчитывают раз в две недели, поэтому число меняется; порядок — нет.
Заплачу, дождусь товара, а потом перепишу тот блок, где стоит мой платёж.
Мешает то, что каждый блок называет предыдущий по имени. Это и есть вся «цепочка блоков», и рисовать её незачем — её видно. Вот три первых блока биткоина; имена посчитаны страницей из их же байтов при отдаче:
| блок 0 | внутри записано имя предыдущего: нет предыдущего — это первый блок собственное имя: 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f 3 января 2009 года, 18:15 UTC |
| блок 1 | внутри записано имя предыдущего: 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f собственное имя: 00000000839a8e6886ab5951d76f411475428afc90947ee320161bbf18eb6048 9 января 2009 года, 02:54 UTC |
| блок 2 | внутри записано имя предыдущего: 00000000839a8e6886ab5951d76f411475428afc90947ee320161bbf18eb6048 собственное имя: 000000006a625f06636b8bb6ac7b960a8d03705d1ace08b1a19da3fdcc99ddbd 9 января 2009 года, 02:55 UTC |
Присмотритесь: имя нулевого блока и строка «внутри» у первого — одно и то же. Второй так же держится за первый.
Тронь любой блок — изменится его имя, а в следующем записано старое, которого больше нет: цепь рвётся, и это видит каждый. Чинить придётся всё: заново проделать работу за тот блок и за все, что после, обгоняя при этом остальных, которые наращивают честную цепь.
Поскольку следом пристроены другие блоки, работа по изменению блока включала бы переделку всех блоков после него.
Накамото, раздел 4
Отсюда и «подтверждения», которые считает кошелёк: каждый новый блок — ещё один слой работы поверх вашего платежа. Не обещание, а гиря.
Я ведь собираю блок сам. Впишу себе тысячу монет.
Мешает то, что награду не назначают, а вычисляют — и вычисляет её каждый сам, у себя. Возьмёшь больше положенного — блок не примут, и вся работа пропала. Вот весь код, которым выпускаются все монеты биткоина:
CAmount GetBlockSubsidy(int nHeight, const Consensus::Params& consensusParams)
{
int halvings = nHeight / consensusParams.nSubsidyHalvingInterval;
// Force block reward to zero when right shift is undefined.
if (halvings >= 64)
return 0;
CAmount nSubsidy = 50 * COIN;
// Subsidy is cut in half every 210,000 blocks which will occur approximately every 4 years.
nSubsidy >>= halvings;
return nSubsidy;
}
Bitcoin Core, src/validation.cpp. nSubsidyHalvingInterval равен 210 000 (src/kernel/chainparams.cpp), >>= — деление пополам.
Пятьдесят монет за блок; вдвое меньше каждые 210 000 блоков — примерно раз в четыре года. Ни слова про двадцать один миллион здесь нет.
Всё. Устройство биткоина кончилось: подпись, порядок, работа, цепь и награда — больше в нём ничего нет. Дальше — то, что из этого следует, и как всё сказанное проверить.
Сложим награды всех этапов, пока они не станут нулём. Страница делает это при каждой отдаче тем же действием, что и код выше:
20 999 999,9769 BTC
Не 21 000 000, а на 0,0231 монеты меньше. Разница — остаток от деления пополам в целых сатоши: на 33-м этапе награда доходит до одной сатоши, а следующее деление даёт ноль. Первый блок вовсе без награды — 6 930 000-й, это около 2140 года.
И даже столько не будет. Награду мало заслужить — её надо себе выписать, а выписывали не всегда правильно. Три случая мы проверили по самой цепочке:
| блок | положено | взято | что вышло |
| 124 724 | 50,00000000 | 49,99999999 | взято на одну сатоши меньше |
| 501 726 | 12,50000000 | 0,00000000 | награда не взята вовсе |
| 526 591 | 12,50000000 | 6,25000000 | взята половина |
Только на этих трёх блоках не родилось 18,75000001 монеты. Перечень не полон — мы проверили ровно эти три, а не все девятьсот с лишним тысяч блоков.
Что до самого числа «21 000 000», то в коде оно есть — и рядом стоит оговорка разработчиков, которая стоит всех пересказов:
Заметьте, что эта постоянная не есть общее количество денег, которого в биткоине сейчас по разным причинам меньше 21 000 000 BTC; это проверка на разумность.
Bitcoin Core, src/consensus/amount.h, комментарий к MAX_MONEY
Всё, что выше, держится на одном утверждении: имя блока получается из его же байтов и ниоткуда больше. Это можно проверить, не веря ни нам, ни биткоину. Возьмите восемьдесят байт нулевого блока:
0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a29ab5f49ffff001d1dac2b7c
и посчитайте от них SHA-256 дважды — в любой командной строке Linux или macOS:
echo -n 0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a29ab5f49ffff001d1dac2b7c \
| xxd -r -p | openssl dgst -sha256 -binary | openssl dgst -sha256
Ответ будет такой:
6fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000
А теперь посмотрите на начало первого блока: те же цифры стоят в нём сразу после первых восьми.
010000006fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000982051fd…
Вот и вся цепочка блоков — буквально. Имя нулевого блока лежит внутри первого не как ссылка и не как обещание, а как шестнадцать пар цифр, от которых зависит имя первого блока. Тронете нулевой — эти цифры станут другими.
Привычная запись имени блока (000000000019d668…) — те же байты, перевёрнутые задом наперёд: биткоин хранит числа младшим байтом вперёд, а показывает старшим. Оттого имена блоков и выглядят начинающимися с нулей.
В самой первой записи биткоина, в той, что выпустила первые пятьдесят монет, есть место для произвольных байтов. Накамото вписал туда строку. Вот она, вынутая страницей из этой записи:
«The Times 03/Jan/2009 Chancellor on brink of second bailout for banks»
Заголовок «Таймс» за 3 января 2009 года: «Канцлер на грани второго спасения банков». Это одновременно дата — раньше 3 января 2009-го нулевой блок сделать было нельзя — и объяснение, зачем всё затевалось. Всё, что описано выше, придумано затем, чтобы список переводов не зависел ни от чьего решения.
Нет, и это самое живучее заблуждение о биткоине. Никакой задачи не решается: числа перебираются наугад. Умного способа найти подходящий хеш не существует — если бы он существовал, биткоин перестал бы работать в тот же день. Майнер не математик, а покупатель лотерейных билетов, и билет стоит электричество.
Наоборот: это самая публичная платёжная система в истории. Каждый перевод виден каждому и остаётся видимым навсегда. Скрыто только одно — какое имя стоит за адресом. Это называется псевдонимностью, и она рассыпается, как только адрес хоть раз связали с человеком: вся его история переводов уже лежит на виду и задним числом не прячется.
Останутся комиссии, и так задумано с самого начала. Накамото пишет об этом прямо: «Как только заранее назначенное число монет войдёт в обращение, вознаграждение может целиком перейти на комиссии за переводы и стать полностью свободным от инфляции». Последний блок с ненулевой наградой — примерно 6 930 000-й; при десяти минутах на блок это около 2140 года.
Это не свойство, а цель. Раз в 2016 блоков (около двух недель) сеть смотрит, за какое время они вышли, и подкручивает трудность так, чтобы среднее держалось у десяти минут. Число выбрано Накамото и записано в коде: nPowTargetSpacing = 10 * 60. Отдельный блок может выйти и через минуту, и через час: это лотерея, а десять минут — её средний шаг.
Нет. Отмены не предусмотрено вовсе: чтобы убрать запись из цепочки, надо переделать всю работу с того места и обогнать всю остальную сеть. Это не строгость правил, а следствие устройства — отменять некому, поскольку нет того, кто ведёт список.
Тогда он сможет переписывать недавние блоки и отменять собственные платежи — но не сможет ни подделать чужую подпись, ни выписать себе монет сверх положенного: это проверяет каждый узел отдельно. Накамото добавляет довод не из математики, а из корысти: такому нападающему выгоднее играть по правилам, «которые дают ему больше новых монет, чем всем остальным вместе», чем подрывать ценность собственного богатства.
Архивные копии источников сняты и проверены 5 сентября 2026 года.
Проверено . Заголовки блоков 0, 1 и 2 записаны в коде страницы байтами; их имена, сумма всех наград, нынешняя цель, цена перебора и строка из нулевого блока считаются заново при каждой отдаче. Разойдись хоть одно — наверху страницы встала бы жалоба вместо разбора. Цитаты из Накамото переведены нами с подлинника; английский текст приведён рядом с ключевыми.
Про деньги, которыми платят каждый день, — разбор банковской карты и счёт её номерного пространства.
— версия для печатиПерепечатывать можно свободно. Назвать источник — условие лицензии, а не просьба.
Ссылка на страницу:
Школяр. Как работает биткоин: шесть попыток сжульничать // scolaire.ru : образовательный портал. — Проверено 5 сентября 2026 г. — URL: https://scolaire.ru/kak-rabotaet-bitkoin.php| Если у вас есть мысли по поводу данной страницы или предложение по созданию математической (см. раздел «Математика») вспомогательной памятки, мы обязательно рассмотрим ваше предложение. Просто воспользуйтесь обратной связью. |