Ознакомительная версия. Доступно 16 страниц из 76
пять блоков, и каждый из новых блоков будет косвенно указывать на транзакцию из первого шага, тем самым подтверждая ее. В этот момент продавец решит, что оплата завершена, и покупатель получит купленный продукт, поскольку мы рассматриваем случай цифрового продукта с моментальной доставкой. Теперь злоумышленник создает другую транзакцию, пересылая эти 100 BTC себе. Если он просто отправит транзакцию в сеть, она не пройдет; майнеры, пытаясь провести эту транзакцию, запустят APPLY(S,TX) и получат ошибку, поскольку TX пытается потратить уже несуществующие UTXO. Так что вместо этого злоумышленник создает «форк» блокчейна: начинает майнить другую версию блока 270 000, отмечая предыдущий блок 269 999 как родительский, но с новой транзакцией вместо изначальной. Поскольку информация в этом блоке другая, для своей версии блока 270 000 ему придется заново вычислять нужный хеш. Более того, новая версия блока 270 000 имеет другой хеш, так что изначальные блоки 270 001–270 005 уже «указывают» не на него, поэтому блокчейн всей сети и блокчейн злоумышленника совершенно различны. По правилам протокола истинной считается самая длинная цепочка блокчейна; соответственно, «честные» майнеры продолжат майнинг цепи блокчейна длиной 270 005, а злоумышленник будет в одиночку майнить свою. Злоумышленник может сделать свою цепь самой длинной, только если его вычислительные мощности будут больше суммарной вычислительной мощности всей остальной сети (так называемая атака 51 %).
Дерево Меркла
Слева: лишь малое число вершин в дереве Меркла необходимо для доказательства валидности ветви. Справа: любая попытка изменить любую часть дерева Меркла приведет к нестыковке в корне дерева
Для масштабируемости протокола Bitcoin важно, что каждый блок встроен в многоуровневую структуру данных. Упомянутый хеш блока – на самом деле только хеш заголовка блока, примерно 200-байтовый фрагмент данных, включающий в себя временную метку, одноразовый код блока, хеш предыдущего блока и корневой хеш структуры данных под названием дерево Меркла, которая и хранит всю информацию о транзакциях блока. Дерево Меркла – тип бинарного дерева, устроенный следующим образом: внизу – набор нод, содержащих всю информацию; в середине – промежуточные ноды, где каждая представляет собой хеш двух дочерних нод; а наверху – одна корневая нода, также сформированная хешем двух дочерних нод.
Цель дерева Меркла – раздробить данные в блоке: ноде достаточно загрузить только заголовок блока из одного источника и нужную часть дерева из другого, чтобы быстро удостовериться, что вся информация корректна. Все это работает, потому что хеши вычисляются «вверх»: если злоумышленник попытается «подсунуть» фейковую транзакцию внизу дерева Меркла, все ноды сверху также изменят свои хеши, ноды над ними – тоже, и так до самого корня, из-за чего изменится и хеш блока. Из-за этого протокол будет воспринимать такой блок как совершенно другой (proof-of-work которого будет практически наверняка не валиден).
Можно сказать, что деревья Меркла необходимы для жизнеспособности системы Bitcoin в долгосрочной перспективе. На апрель 2014 года полная нода сети Bitcoin, которая полностью хранит и обрабатывает каждый блок, занимает 15 Гб дискового пространства и растет более чем на 1 Гб в месяц. На данный момент хранить полную копию блокчейна могут позволить себе владельцы ПК (но не смартфонов), а в будущем с этим будут справляться только специальные компании и отдельные энтузиасты. Протокол «упрощенной верификации платежей» (simplified payment verification, SPV) допускает существование также «легких нод», которые загружают лишь заголовки блоков, проверяют их proof-of-work и затем загружают «ветви» дерева Меркла лишь с необходимыми держателю такой ноды транзакциями. Это позволяет держателям легких нод надежно определить статус любой биткойн-транзакции, а также собственный текущий баланс, загрузив при этом крайне малую часть всего блокчейна.
АЛЬТЕРНАТИВНЫЕ ПРИЛОЖЕНИЯ БЛОКЧЕЙНА
Идея нефинансового применения блокчейн-технологии также имеет долгую историю. В 2005 году Ник Сабо изложил концепцию «безопасного хранения права на собственность», в которой описал, как «новые достижения в технологии реплицированных баз данных» позволят использовать основанные на блокчейне системы для хранения реестра земельной собственности, – что возможно выработать фреймворк, способный описывать, в частности, самообеспечение, «враждебное» владение землей и налог на земельную собственность. Но, к сожалению, никакой эффективной реализации реплицированных баз данных на тот момент не было, и протокол не имел практического применения. Однако с развитием системы децентрализованного консенсуса Bitcoin число альтернативных применений блокчейна стало быстро расти.
◊ NAMECOIN. Созданный в 2010 году Namecoin можно описать как децентрализованную базу данных зарегистрированных имен. Децентрализованным протоколам вроде Tor, Bitcoin и BitMessage нужен какой-то способ идентификации учетных записей, чтобы другие люди могли с ними взаимодействовать, но во всех существующих возможен лишь один вид идентификации – псевдослучайный хеш вроде 1LW79wp5ZBqaHW1jL5TCiBCrhQYtHagUWy. В идеале пользователям хотелось бы иметь возможность создавать аккаунты с именами вроде «george». Но проблема в том, что если кто-то может создать аккаунт «george», то другой пользователь сможет таким же образом зарегистрировать аккаунт с тем же именем и выдавать себя за первого человека. Единственное решение здесь – парадигма «первого заявителя», где второй заявитель не сможет претендовать на уже занятое имя. Такой подход прекрасно сочетается с протоколом консенсуса Bitcoin. Namecoin – первый и самый успешный пример такой системы регистрации имен.
◊ ЦВЕТНЫЕ МОНЕТЫ. Цель цветных монет – позволить людям создавать собственные цифровые валюты (или, что тоже важно, валюты с одной единицей – цифровые токены) на блокчейне Bitcoin. В протоколе цветных монет любой может «выпустить» новую валюту, публично перекрасив свои UTXO из Bitcoin. Протокол рекурсивно окрашивает UTXO в цвет монет на входе создавших их транзакций (в случаях, когда на входе присутствует несколько цветов, применяются особые правила). Это позволяет пользователям поддерживать кошельки, содержащие только UTXO определенного цвета, и отправлять их так же, как обычные биткойны, отслеживая в истории цвет любого полученного UTXO.
◊ МЕТАКОЙН. Идея следующая: протокол метакойна располагается поверх сети Bitcoin, в ней же хранятся метакойн-транзакции, но при этом используется другая функция изменения состояния – APPLY’. Поскольку метакойн-протокол не может предотвратить появление невалидных метакойн-транзакций в блокчейне Bitcoin, в протокол добавляется правило: если APPLY’ (S, TX) выдает ошибку, применить APPLY’ (S, TX) = S. Это обеспечивает простой механизм для создания произвольного протокола криптовалюты с расширенным функционалом, невозможным внутри самого Bitcoin, но с очень низкой стоимостью разработки, поскольку сложности майнинга и сетевого взаимодействия уже обрабатываются протоколом Bitcoin. Метакойны используют для реализации некоторых классов финансовых контрактов, регистрации имен и децентрализованных бирж.
Таким образом, есть два подхода к созданию протокола консенсуса: построить независимую сеть или же построить протокол поверх сети Bitcoin. Первый подход при всей его успешности в приложениях вроде Namecoin трудноосуществим; для реализации каждой конкретной идеи необходимо построить свой блокчейн, а также создать и протестировать все необходимые переходы состояний и сетевой код. Кроме того, мы прогнозируем, что набор приложений для технологии децентрализованного консенсуса будет распределяться по степенному закону, где
Ознакомительная версия. Доступно 16 страниц из 76