Хардфорк 20Мб: Что будет, если не увеличить размер блока биткоина
В связи с вероятным увеличением размера блока в блокчейне со следующего года и широким обсуждением этой проблемы, имеет смысл рассмотреть некоторые возможные варианты более подробно.
В целом очевидны два сценария: первый — к следующему году блоки заполняются, но в целом ПО остаётся тем же, что и сейчас; второй — происходит запуск некой гипотетической модифицированной версии ядра биткоина и приложений кошельков. В обоих случаях речь идёт о блоках с ограничением объёма в 1 мегабайт.
СЛУЧАЙ ПЕРВЫЙ: код остается прежним
Количество транзакций в системе более-менее однородно с некоторыми флуктуациями по дням недели — и когда произойдёт 100% заполнение, время ожидания подтверждения станет постепенно, но достаточно быстро, увеличиваться. В симуляциях Монте Карло, проведённых Дейвом Хадсоном, при 80% заполнении среднее время ожидания будет составлять порядка 20 минут, но при 100% заполнении речь уже идёт о промежутках порядка 6 часов или даже дольше. В ядре биткоина нет кода, который обрабатывал бы постоянный и растущий бэклог транзакций — который неизбежно начнёт создаваться при заполнении блоков на 100%. Транзакции будут вставать в очередь в памяти, пока узел не выйдет из строя. На этом этапе может случиться одна из трёх вещей: узел станет умопомрачительно медленным, он просто выйдет из строя при попытке переструктурировать память, и будет уничтожен ядром системы.
Кроме этого, почти все кошельки не будут знать размеры бэклога — что позволит пользователям отправлять деньги вне зависимости от размеров пула. По мере роста бэклога, узлы начнут выходить из строя из-за отсутствия большей памяти, а на их рестарт нужно будет время. При рестарте, однако, риск двойной траты становится гораздо выше (из-за того, что данные о предыдущей транзакции будут стёрты), а кошельки при этом не будут иметь никаких данных о том, что нечто пошло не так, и транзакции просто не будут подтверждаться. Поскольку кошелёк запрограммирован на продолжение вещания транзакций, которые не были подтверждены, поэтому узлы снова довольно быстро окажутся заполнены, а на построение бэклога понадобится ещё больше времени, так что проблема лишь усугубится. Пользователи тем временем, разумеется, начнут жаловаться на неподтверждение транзакций. Многие из них могут испытать неудобства, а кто-то — даже потерять деньги.
В последнее время слышно много разговоров о «комиссионном рынке», и его зачатки видны уже сегодня. Проблема в том, что в краткосрочной перспективе подобное сделает ситуацию с «перегрузкой» ещё хуже, и заставит рынок переходить к централизации.
Прежде всего, это произойдёт потому, что сейчас комиссии весьма малы. Однако, когда узлы начнут падать, все подумают, что могут позволить себе потратить чуть больше, повторят транзакцию, чем только усилят перегрузку. Кроме того, нет способов автоматически выбрать размер комиссии. Если даже решить её переплатить, потому что транзакция занимает часы, вашу транзакцию легко смогут обойти другие, но узнать об этом можно будет только если она по-прежнему не подтверждается — что может быть вызвано и другими причинами. Таким образом, можно начать тратить всё больше и больше денег, но при этом так и не достигать требуемого результата. SPV-кошельки же не имеют возможности оценить эту «конкуренцию» без масштабных изменений в протоколе (что потребует создания форка). В случае перегрузки потребуется подтверждение третьей стороны, и ПО постепенно начнёт становиться всё менее и менее децентрализованным.
Обычные пользователи, мягко говоря, прохладно отнесутся ко всему изложенному, особенно в свете того, что о подобном развитии событий было известно заранее. Они решат, что сообщество разработчиков некомпетентно, ценность и стоимость биткойна резко упадут, если вовсе не обнулятся — и, возможно, это станет его концом.
Но даже если этого не случится, и биткоин со временем восстановится, те пользователи, кого разочаровала его ненадёжность, могут навсегда покинуть сообщество или перестать оперировать своими биткоинами, просто забросив их на кошельках, и тогда для операций с ними понадобится некий центральный орган. С объективной точки зрения, биткойн, вероятнее всего, выживет, но станет аналогом MySpace в мире цифровой валюты.
СЛУЧАЙ ВТОРОЙ: код модифицирован
Если тот же сценарий проиграть для случая модифицированного кода, который не допускает возможности того, что память закончится. При заполнении всего предоставленного объёма памяти может произойти следующее: либо кошельки, подав транзакцию в сеть, получат отказ по р2р-протоколу (что не позволит провести транзакцию, но по крайней мере не позволит потерять деньги), либо кошелёк получит данные, что транзакция не прошла в пул, и автоматически попробует провести её с более высокой комиссией — о чём пользователь может даже не догадываться — и в результате транзакция замещает собой другую, а если пользователь уже успел уйти в оффлайн, транзакция никогда не будет подтверждена; попыток может быть сколько угодно, но каждый раз не будет никакой гарантии успеха.
Таким образом, перегрузка при сохранении текущего объёма памяти блока может неминуемо привести как минимум к колоссальным репутационным потерям биткоина, а возможно — и самой идеи цифровой валюты.
Читайте также
Майнеры ничего не потеряют после увеличения размера блока
Люди просто перестанут использовать биткоин, если не увеличить размер блока
Рассылки ForkLog: держите руку на пульсе биткоин-индустрии!