05 / 736TIME

Timechain / Blockchain

временная цепь Bitcoin

Общая история блоков Bitcoin: она определяет, какие платежи подтверждены и в каком порядке, без единого центра, ведущего реестр.

Timechain, или Blockchain Bitcoin, — это связанная цепочка действительных блоков от Genesis Block до текущей вершины сети. Каждый следующий блок указывает на хеш предшественника, его цифровой отпечаток, и добавляет собственный Proof of Work — доказательство вычислительной работы для создания блока. Поэтому узлы могут независимо проверять, какая история соблюдает правила и обладает наибольшей накопленной работой. «Время» здесь означает не точные часы для каждой транзакции, а прежде всего доказуемый порядок событий.

Представьте публичную бухгалтерскую историю, в которой тысячи компьютеров могут независимо проверить каждую новую страницу. Одна страница — это блок. Он содержит набор транзакций и ссылку на предыдущий блок, поэтому страницы имеют определённый порядок и их нельзя произвольно перемешать. Timechain — вся эта связанная последовательность от первого блока до нынешней вершины. Она не сообщает, сколько bitcoin принадлежит каждому известному по имени человеку; она хранит историю транзакций, из которой узлы определяют неизрасходованные выходы транзакций. Это также не сервер одной компании. Любой Full Node (узел, самостоятельно проверяющий транзакции и правила сети) может загрузить копию и проверить её. [1] [3]

В контексте Bitcoin оба названия обозначают одну и ту же историю блоков. Сохранившийся код до запуска от ноября 2008 года использовал timechain в комментариях и именах переменных или функций. Whitepaper, напротив, говорит о временных метках, цепочке блоков и цепочке Proof of Work; самого слова timechain в нём нет. Позднее Blockchain стал общепринятым термином во всём мире. Сегодня это также широкое название для других сетей и баз данных, тогда как Bitcoin Timechain — конкретная цепочка Bitcoin. Два слова в заголовке не означают два протокола. Они сохраняют историческое название рядом с современным распространённым термином. [2] [1] [8]

Цифровая подпись может доказать, что транзакцию разрешил владелец необходимого ключа. Сама по себе она не мешает подписать две конфликтующие транзакции, пытающиеся потратить один и тот же неизрасходованный выход прежней транзакции, называемый UTXO. Один узел может первым получить платёж продавцу, а другой — возврат той же суммы отправителю. Поэтому сети нужна общая история, которая определяет, какая трата подтверждена, а какая уже не может быть действительной. Блоки дают транзакциям проверяемое место в этом порядке. Они не доказывают, какое сообщение было создано раньше по человеческому или сетевому времени: узлы могли увидеть неподтверждённые транзакции в разной последовательности. [1]

Block Header — заголовок с основными данными блока. Он содержит, в частности, хеш предыдущего заголовка и Merkle Root, объединяющий идентификаторы транзакций блока в один хеш. Hash похож на цифровой отпечаток: даже небольшое изменение входных данных даёт другой результат. Изменение старой транзакции поменяет Merkle Root, hash блока и ссылку, сохранённую следующим блоком. Правка не останется одной изменённой строкой истории; она нарушит всю последующую последовательность. Сам хеш не доказывает, что транзакции соблюдают правила. Узлы также должны проверять транзакции, а каждый блок обязан удовлетворять требуемому Proof of Work. [3] [1]

Узел не принимает ветвь только потому, что она длиннее или её продвигает крупный майнер. Сначала он проверяет правила: Proof of Work, связи с предыдущими блоками, разрешённую награду, транзакции, условия расходования и то, не были ли уже потрачены средства, на которые ссылаются входы. Недействительная ветвь остаётся недействительной независимо от вычислительной мощности автора. Лишь среди действительных кандидатов узел выбирает цепочку с наибольшей накопленной работой. Поэтому точнее говорить о действительной ветви с наибольшей работой, а не просто о «самой длинной цепи». Поле chainwork оценивает ожидаемое число вычислений хеша, нужных для создания цепочки при сложности каждого блока; оно не считает попытки, фактически сделанные майнерами. [4] [5] [6]

Proof of Work требует времени, электричества и вычислительной мощности, а его результат быстро проверяется. Тот, кто изменит старый блок, должен создать для него новый действительный Proof of Work, заново соединить все последующие блоки и продолжать догонять работу, которую честная ветвь постоянно добавляет. Чем глубже блок находится под вершиной, тем больше преимущество обычной истории. Это не математическое обещание, что прошлое никогда не изменится. Это экономическая и вероятностная защита: дополнительные блоки обычно быстро повышают стоимость успешного переписывания. Злоумышленник также не может добавить в заменяющую ветвь произвольный недействительный платёж или биткоины сверх разрешённого предела, потому что другие узлы отвергнут блок. [1] [4]

Майнер помещает временную метку в Block Header. Правила консенсуса допускают некоторый диапазон, поэтому значение time не доказывает точный момент создания блока или конкретной транзакции. Временная метка блока не обязана быть больше метки его непосредственного предшественника. Для некоторых правил Bitcoin поэтому использует Median Time Past — медиану временных меток предыдущих 11 блоков. Медиану получают, упорядочив эти временные метки и выбрав центральное значение полученного ряда. Она продвигается ровнее отдельных значений. Средний десятиминутный интервал между блоками тоже не является расписанием. Два блока могут появиться почти вместе, а следующего придётся ждать гораздо дольше. Высота блока задаёт точное положение в цепочке, а не точное время в календаре. [4] [7]

Два майнера могут почти одновременно найти разные действительные блоки на одной высоте. Одни узлы первыми увидят одну ветвь, другие — другую. Когда последующий Proof of Work создаёт разницу между действительными ветвями, узлы переходят на ветвь с большей накопленной работой. Такое переключение называется Reorg. Транзакции из отсоединённого блока могут подтвердиться в новой ветви, вернуться в Mempool или стать недействительными, если новая история подтвердит конфликтующую трату. Включение в блок — первое подтверждение; каждый последующий блок над ним добавляет ещё одно. Универсального магического числа для всех платежей не существует. Нужная уверенность зависит от суммы, риска и возможности ждать. [1] [3]

Bitcoin позволяет создать транзакцию, которую можно подтвердить только начиная с определённой высоты блока или после заданного времени. Timelock не является командой автоматически исполнить транзакцию в эту минуту. Он лишь задаёт самый ранний момент, с которого действительный блок может её включить. Для основанного на времени nLockTime BIP 113 использует Median Time Past предыдущего блока вместо легко сдвигаемой временной метки создаваемого блока. Поэтому условие опирается на историю нескольких блоков. Даже после его выполнения транзакцию нужно распространить, узлы должны её принять, а майнер — выбрать; включение в конкретный блок не гарантируется. [7] [4]

RPC — интерфейс для передачи узлу команд и чтения его ответов. Full Node не обязан доверять утверждению публичного обозревателя блоков, что блок или транзакция относится к текущей истории. Для конкретного хеша вызов RPC getblock может показать height, число подтверждений, Merkle Root, time, mediantime, предыдущий hash, сложность и chainwork. Каждое поле отвечает на свой вопрос: height даёт позицию; previousblockhash показывает происхождение; confirmations — глубину под текущей вершиной; time — значение заголовка; mediantime — медиану; chainwork — накопленную ожидаемую работу. Одного числа недостаточно. Смысл Timechain в том, что узел проверяет их взаимосвязь и все правила консенсуса как единое целое. [6] [4]

Для полной картины прочитайте эту статью вместе с Genesis Block, Proof of Work, Транзакция, Full Node, Difficulty Adjustment. На эту статью также ссылаются Bitcoin Whitepaper, Genesis Block, Proof of Work, Full Node.

DOC · 001Bitcoin whitepaperПервичный источник DOC · 002Satoshi Nakamoto Institute — early Bitcoin codeПервичный источник DOC · 003Bitcoin Developer Guide — Block ChainДокументация DOC · 004Bitcoin Core — validation sourceПервичный источник DOC · 005Bitcoin Core — chain sourceПервичный источник DOC · 006Bitcoin Core RPC — getblockДокументация DOC · 007BIP 113 — Median time-past for lock-time calculationsПервичный источник DOC · 008NIST — blockchain glossaryПервичный источник
Обновлено: Сначала источники · Не является инвестиционной рекомендацией