Ограничения и улучшения. Хардфорк и Софтфорк


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

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

Есть и другие изменения, которые многие не прочь внедрить, поскольку некоторые начальные проектировочные решения кажутся далеко не лучшими в ретроспективе. Среди них есть хватает таких, которые повлияли бы на работу системы. Сколько транзакций сеть может обрабатывать в секунду? Это ограничение ведёт своё начало из базового ограничения на размер блока. Каждый из них ограничен мегабайтом, а каждая транзакция весит около 250 байт. Поделив миллион на 250 мы увидим, что в блоке может быть не более 4000 транзакций, и с учётом того, что блоки обнаруживаются каждые 10 минут, остаётся всего 7 транзакций в минуту - больше сеть просто не потянет.

Может показаться, что изменение этих ограничений не так уж сильно повредит исходному коду. Однако, на практике такое изменение достаточно сложно осуществить по причинам, которые мы объясним вкратце. Семь транзакций в секунду - много или мало? Очень мало по сравнению с любым процессором кредиток. Система Visa в среднем обрабатывает около 2000 транзакций в секунду по всему миру, и имеет возможность обрабатывать до 10000 в пиковые моменты. Даже PayPal, которые куда моложе и скромнее Visa, обрабатывают 100 транзакций в секунду в пиковые моменты. Это на порядки больше возможностей биткоина.

Другое ограничение, которое вызывает беспокойство на долгосрочной перспективе - тот факт, что выбор криптографических алгоритмов биткоина неизменен. Есть всего пара доступных хэш-алгоритмов, и только один сигнатурный - ECDSÄ - выше особой эллиптической кривой под названием secp256k1. Есть некоторая озабоченность в связи с тем, что со временем этот алгоритм может выйти из строя. Криптографы могут измыслить новый способ атаки, о котором не подумали создатели - и это сделает весь алгоритм ненадёжным.

То же касается и хэш-функций: фактически, в последнее десятилетие они стабильно развивались в рамках криптоанализа. SHA-1, инкорпорированный в биткоин, уже имеет обнаруженные криптографические слабые места, хоть и не фатальные. Для того, чтобы изменить это всё, придётся расширять сценарный язык биткоина - иначе он не сможет поддерживать новые криптографические алгоритмы.

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

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

Софтфорк. Второй возможный тип изменений - это добавление правил, делающих валидацию более тщательной. Например, они запрещают набор валидных транзакций или блоков таким образом, что старая версия принимает все блоки, а новая - только большинство. Этот тип изменения называется софтфорком, и позволяет избежать вечного разлучения ветвей блокчейна, которое вызывает хардфорк. Подумайте, что случится, если выпустить новую версию ПО с изменением, вызывающим появление софтфорка. Узлы на новом ПО будут применять более строгий набор правил. Если большинство узлов перейдёт на новое ПО, они смогут применять эти правила. Допущение софтфорка основано на достаточном количестве узлов, переключающихся на новую версию протокола, так как старые узлы не смогут применять новые правила.

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

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

Что же можно добавить с помощью софтфорка? С P2SH повезло. Также возможно, что новые криптографические схемы тоже лучше добавлять через софтфорк. Также можно вводить дополнительные осмысленные метаданные в параметр coinbase. Сейчас он может принимать любые значения, однако в будущем, теоретически, можно было бы задать ему специфический формат.

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

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

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

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

 



Дата добавления: 2023-05-18; просмотров: 269;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.008 сек.