В ожидании подтверждения: о мемпуле и политике передачи транзакций узлами Биткойна

0
ПОДЕЛИТЬСЯ

Подробно о политиках, применяемых нодами при передаче транзакций, правилах включения в мемпул и отборе транзакций для майнинга. А также почему в Bitcoin Core применяется более жёсткая политика по сравнению с правилами консенсуса сети, и как биткойн-приложения могут использовать эту политику наиболее эффективно.

Большая часть обсуждения технологии Биткойна вращается вокруг различных изменений в его протоколе, в том числе новых опкодов или хешей подписей, или вокруг технологий второго уровня, таких как Lightning. Обсуждение мемпула или политик (т.е. правил помимо консенсуса), применяемых нодами и определяющих взаимодействие между ними, часто отходит на второй план. Однако с резко возросшим объёмом ончейн-трафика и запуском различных проектов и платформ для ординалов и токенов на их основе, а также сопутствующим всплеском в размере комиссий, мемпул и политика узлов выходят на первый план.

Пользователи ординалов и прочих подобных протоколов столкнулись с проблемами, связанными с политиками “стандартности”, применимыми в сети Биткойна, что многих побудило усомниться в целесообразности этих правил и искать способы их удаления или обхода. Обычные же пользователи Биткойна столкнулись с резким ростом комиссий за транзакции. В попытке просветить и вовлечь сообщество в обсуждение и разработку авторитетная техническая рассылка Bitcoin Optech выпустила серию постов о мемпуле и политике передачи транзакций, применяемой биткойн-нодами. Приводим полный перевод этой серии.

 


 

Навигация:

 


Для чего нужен мемпул

Многие узлы сети Биткойна хранят неподтверждённые транзакции в пуле памяти, или мемпуле (от memory pool). Этот кэш — важный ресурс для любого узла, позволяющий скоординированно ретранслировать транзакции в одноранговой сети таких узлов.

Ноды, ретранслирующие по сети чужие транзакции, загружают и подтверждают блоки постепенно, без резких скачков активности. Узлы без мемпула каждые ~10 минут, при обнаружении нового блока, претерпевают всплеск использования пропускной способности, за которым следует период интенсивных вычислений, подразумевающий проверку каждой транзакции. Напротив, узлы с мемпулом, как правило, уже видели все транзакции из найденного блока и хранят их в своих локальных мемпулах. С протоколом compact block relay эти узлы загружают только заголовок блока вместе с короткими ID, после чего воспроизводят этот блок локально из транзакций в своих мемпулах. Объём данных, используемый для компактной передачи блоков, ничтожно мал по сравнению с размером самого блока. Проверка транзакций в этом случае тоже происходит гораздо быстрее: узел уже проверил (и кэшировал) подписи и скрипты, рассчитал требования таймлока и при необходимости загрузил соответствующие UTXO с диска. Кроме того, узел может оперативно переслать блок другим узлам, что существенно повышает скорость распространения блока по сети, снижая тем самым риск появления устаревших блоков.

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

Однако общего на всю сеть мемпула не существует — каждый узел может получать разные транзакции. И отправка транзакции одному из узлов не обязательно означает, что она попадёт к майнерам. Некоторых такая неопределённость несколько сбивает с толку, и они задаются вопросом: «А почему бы нам просто не отправлять транзакции майнерам напрямую?»

Но давайте представим себе сеть Биткойна, в которой все транзакции отправляются от пользователей непосредственно майнерам. В такой сети можно будет ввести цензуру и наблюдение за финансовой активностью, потребовав от небольшого числа субъектов регистрировать IP-адреса, соответствующие каждой транзакции, и отказывать в приёме любых транзакций, соответствующих определённому шаблону. Такой тип сети может быть удобнее в некоторых случаях, однако он полностью лишён нескольких наиболее ценных свойств сегодняшнего Биткойна.

Устойчивость к цензуре и конфиденциальность Биткойна обеспечиваются одноранговой сетью узлов. Для передачи транзакции каждый узел может подключиться к некоторому набору анонимных пиров, каждый из которых может оказаться майнером или как-то с ним связан. Такой метод позволяет скрыть, от какого узла исходит транзакция, а также то, какой узел может отвечать за её подтверждение. Кто-то, кто захочет подвергнуть цензуре определённых субъектов сети, может нацелиться на майнеров, популярные биржи или другие централизованные сервисы, но полностью перекрыть возможности передачи транзакций будет сложно.

Общедоступность неподтверждённых транзакций помогает также минимизировать стоимость входа в число производителей блоков — если кого-то не устраивают отобранные для блока (или исключённые из него) транзакции, то он может сразу же начать майнить сам. То, что каждый узел рассматривается как равный кандидат на трансляцию транзакций, позволяет избежать предоставления какому-либо майнеру привилегированного доступа к транзакциям и их комиссиям.

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

В следующем разделе рассмотрим использование совместимости стимулов в качестве параметра для удержания в мемпулах наиболее полезных транзакций.

Стимулы

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

Комиссии за переводы — обычное явление и в традиционных финансах, но новые пользователи Биткойна часто удивляются, обнаружив, что комиссии за ончейн-транзакции выплачиваются не пропорционально сумме транзакции, но в зависимости от её “веса”. Ограничивающим фактором здесь является пространство блока, а не ликвидность. Обычно ставка комиссии деноминируется в сатоши на виртуальный байт (vByte).

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

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

С точки зрения теории алгоритмов, максимизация комиссий при выборе транзакций для блока (имеющего ограничения на общий вес и операции подписи) представляет собой NP-полную задачу. Эта проблема ещё больше усложняется взаимосвязями между транзакциями: для майнинга высокодоходной транзакции может потребоваться включить в блок и её “родителя” с низкой комиссией. Другими словами, добыча низкоэффективной транзакции может открывать возможность для добычи её высокоэффективного потомка.

Мемпул Bitcoin Core вычисляет ставку комиссии для каждого из входов и его предков (это называется ancestor feerate), кэширует результат и использует жадный алгоритм построения шаблонов блоков. Он сортирует мемпул по значению ancestor score(минимальное значение ставки комиссии предка и отдельной ставки комиссии данной транзакции) и выбирает пакеты предков в этом порядке, в процессе обновляя информацию о комиссии предков и весе для оставшихся транзакций. Этот алгоритм предлагает баланс между производительностью и прибыльностью и не обязательно даёт оптимальный результат. Его эффективность можно повысить, установив ограничения на размер транзакций и пакетов предков (в Bitcoin Core эти ограничения составляют 400 000 и 404 000 весовых единиц соответственно.

Аналогичным образом рассчитывается “балл потомков”, descendant score, используемый при выборе пакетов для вытеснения из мемпула, поскольку невыгодно вытеснять транзакцию с низкой ставкой комиссии, если у неё есть дочерняя транзакция с высокой комиссией.

В проверке мемпула тоже используются комиссии и ставки комиссии при работе с транзакциями, расходующими один и тот же вход (или несколько входов), т. е. двойными тратами или конфликтующими транзакциями. Вместо того чтобы всегда сохранять первую попавшуюся транзакцию, узлы используют набор правил, чтобы определить, какую транзакцию выгоднее сохранить. Такое поведение известно как Replace by Fee.

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

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

Дефицитность пространства блоков оказывает понижающее давление на размер транзакций, побуждая разработчиков эффективнее подходить к построению транзакций.

В следующей части поговорим о практических стратегиях и способах минимизировать комиссии в ончейн-транзакциях.

Аукцион за место в блоке

Мы уже упоминали выше, что транзакции платят за использованное пространство блоков, а не за переданную сумму, а также что майнеры оптимизируют выбор транзакций так, чтобы максимизировать собираемые комиссии. Из этого следует, что подтверждение получают только те транзакции, которые при нахождении блока находятся в верхней части мемпула. В этой части мы обсудим практические стратегии, позволяющие майнерам максимизировать доход от комиссий. Предположим, что у нас есть достойный источник оценки ставки комиссии (о самой оценке ставки поговорим подробнее в следующей главе).

При построении транзакций некоторые их части являются более гибкими, какие-то менее. Каждая транзакция должна содержать поле заголовка, выходы получателей производимых платежей и в большинстве транзакций требуется ещё выход со сдачей. Как для отправителя, так и для получателя имеет смысл отдавать предпочтение типам выходов с эффективным использованием пространства блока, чтобы снизить стоимость будущей траты этих выходов, но именно при выборе входов есть больше всего возможностей для изменения конечного состава и веса транзакции. Поскольку транзакции конкурируют между собой по ставке комиссии (комиссия/вес), для более “лёгкой” транзакции та же ставка достигается при меньшей сумме комиссии.

Некоторые кошельки, например, Bitcoin Core, пытаются комбинировать входы таким образом, чтобы вообще избежать потребности в выходе со сдачей. Избегая сдачи, вы экономите на весе дополнительного выхода в текущей транзакции, но также и на последующем расходовании этой сдачи. К сожалению, такие комбинации входов доступны лишь в редких случаях (если только в кошелёк не содержит большого пула UTXO с широким диапазоном сумм).

Современные типы выходов более эффективны по сравнению со старыми с точки зрения занимаемого места в блоке. Например, расход P2TR-выхода занимает менее 2/5 от веса P2PKH-входа (можете посчитать сами на калькуляторе размера транзакции). Для multisig-кошельков недавно доработанная схема MuSig2 и протокол FROST обеспечивают огромную экономию, позволяя закодировать функциональность многосторонней подписи в том, что выглядит как вход с одной подписью. Особенно в периоды чрезвычайно высокого спроса на блокчейн, использование кошельком современных типов выходов уже обеспечивает существенную экономию на комиссиях.

В ожидании подтверждения: о мемпуле и политике передачи транзакций узлами Биткойна
Верхние границы для размеров входов и выходов различных типов

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

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

В ожидании подтверждения: о мемпуле и политике передачи транзакций узлами Биткойна

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

В распоряжении пользователей обычно есть два инструмента для повышения приоритета своих транзакций: “ребёнок платит за родителя” (Child-Pays-For-Parent, CPFP) и “замена по комиссии” (Replace-By-Fee, RBF). В CPFP получатель тратит предназначающийся ему выход входящей транзакции в дочерней транзакции с большей ставкой комиссии. Как уже говорилось выше, майнеры заинтересованы отбирать для блоков родительские транзакции с небольшой комиссией, если у них есть дочерние транзакции с высокой ставкой. CPFP доступен любому из получателей выходов данной транзакции, так что воспользоваться этим методом может как получатель, так и отправитель (если в исходной транзакции есть выход со сдачей).

В replace-by-fee отправитель создаёт замещающую транзакцию с более высокой комиссией. Замещающая транзакция должна повторно использовать хотя бы один вход из оригинальной транзакции, чтобы гарантировать конфликт с ней — так чтобы только одна из этих двух транзакций могла быть записана в блокчейн. Обычно такая замена просто дублирует платежи из оригинальной транзакции, но отправитель может и изменить её состав, перенаправив средства другим получателям или объединив платежи из нескольких транзакций в одну. Как уже упоминалось, узлы вытесняют из мемпула исходную транзакцию в пользу замещающей транзакции с лучшими стимулами.

Хотя спрос на блокчейн и место в нём находятся, это не то, что мы можем контролировать, — есть множество методов, которые кошельки могут использовать для эффективного участия в аукционе за место в блоке. Кошельки могут экономить на комиссии, создавая более “лёгкие” транзакции за счёт отказа от выходов со сдачей, расходования segwit-выводов и дефрагментации пула UTXO в периоды низких комиссий. Кошельки с поддержкой CPFP и RBF также могут начинать с консервативной ставки комиссии, а позже при необходимости поднять приоритет транзакции с помощью CPFP или RBF.

Оценка ставки комиссии

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

Цель оценки — перевести целевой срок подтверждения в минимальную ставку комиссии, которую должна платить транзакция.

Одна из сложностей в оценке комиссии состоит в неравномерности нахождения блоков. Допустим, пользователю нужно оплатить товар или услугу в течение часа, иначе заказ аннулируется. Пользователь может ожидать, что блок будет добываться каждые 10 минут, и, следовательно, стремиться обеспечить своей транзакции место в одном из ближайших 6 блоков. Но нельзя исключить вероятность, что на поиск одного из этих шести блоков может уйти и 45 минут. Программам оценки ставки комиссии приходится переводить данные между желаемой срочностью обработки транзакции для пользователя и предложением пространства блоков (количества блоков). Многие калькуляторы ставки решают эту проблему, обозначая целевой период для подтверждения не только по времени, но и по количеству блоков.

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

К счастью, рынок пространства блоков — это не “слепой” аукцион. Мы упоминали в первой части, что ведение собственного мемпула и участие в одноранговой сети передачи транзакций позволяет узлу видеть, какие ставки комиссии выставляют другие пользователи. Оценщик комиссии Bitcoin Core тоже использует исторические данные для расчёта вероятности подтверждения транзакции со ставкой комиссии f в течение n блоков, но отслеживает также высоту блока, на которой узел впервые видит транзакцию, и когда она подтверждается. Этот метод позволяет обойти активность, происходящую за пределами публичного рынка комиссий, игнорируя её. Если майнеры включают в свои блоки транзакции с искусственно завышенной ставкой комиссии, это не исказит показания такого оценщика, поскольку он использует только данные о транзакциях, которые были публично переданы по сети до подтверждения.

У нас также есть понимание того, как транзакции отбираются для блоков. В предыдущей части мы упоминали, что ноды эмулируют политику майнеров, чтобы сохранять в своих мемпулах транзакции, соответствующие их стимулам. Развивая эту идею, вместо того чтобы смотреть лишь на прошлые данные, мы можем построить такой оценщик комиссий, который будет имитировать ожидаемое поведение майнера. Чтобы узнать, при какой ставке комиссии транзакция должна получить подтверждение в следующих n блоках, оценщик комиссии может использовать алгоритм сборки блоков, чтобы спроектировать шаблоны следующих n блоков из своего мемпула и рассчитать ставку комиссии, которая побьёт последнюю транзакцию (или транзакции), попадающие в блок n.

Ясно, что эффективность такого подхода к оценке комиссии зависит от сходства между содержимым мемпула ноды и мемпулов майнеров, что нельзя гарантировать. Он также не учитывает транзакции, которые майнеры могут включать в свои блоки по внешним мотивам. Прогноз также должен учитывать получение дополнительных транзакций от настоящего момента до нахождения блока n. Такой задел можно воспроизвести, уменьшив в расчёте размер прогнозных блоков, но на сколько именно?

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

Оценка комиссии — многогранная и сложная проблема. Неправильная оценка комиссии может приводить к пустой трате средств за счёт переплаты, создавать дополнительные трудности при использовании Биткойна для платежей и приводить к потере средств пользователей L2, если с неверно выставленной комиссией они пропустят окно, в которое могли истребовать UTXO с таймлоком. Корректная оценка комиссии позволяет пользователям чётко и точно сообщать майнерам о срочности передаваемых транзакций, а CPFP и RBF позволяют пользователям обновить ставку комиссии для “застрявшей” в мемпуле транзакции, если первоначальная оценка комиссии оказалась некорректной.

Оценщики комиссии, как правило, никогда не выдают ставку ниже 1 sat/vB, независимо от допустимого времени ожидания или от наполнения мемпула. Поэтому многие воспринимают 1 sat/vB как фактический нижний порог ставки комиссии в сети Биткойна. В следующей главе мы поговорим подробнее об этой политике узлов и обсудим ещё один мотив для использования ставки комиссии при ретрансляции транзакций: защиту от исчерпания ресурсов узла.

Политика защиты ресурсов узла

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

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

Общие средства защиты от DoS-атак встроены в реализации узлов для предотвращения исчерпания ресурсов ноды. Например, если Bitcoin Core нода получает много сообщений от одного пира, то обрабатывает только первое, а остальные добавляет в очередь, чтобы обработать их после сообщений от других пиров. Также узел обычно загружает сперва заголовок блока и проверяет его proof-of-work (PoW), после чего уже загружает и проверяет остальные части блока. Так любой злоумышленник, ставящий целью исчерпать ресурсы узла посредством трансляции блоков, должен сначала потратить непропорционально большое количество собственных ресурсов на вычисление достоверного PoW. Асимметрия между огромными затратами на вычисление PoW и тривиальностью проверки обеспечивает естественную защиту от DoS-атак через трансляцию блоков. Но это свойство не распространяется на ретрансляцию неподтверждённых транзакций.

Общие средства защиты от DoS не обеспечивают достаточной устойчивости к атакам, чтобы обезопасить узел от атаки посредством транзакций. Злоумышленник, пытающийся создать максимально вычислительно сложную, но валидную по правилам консенсуса транзакцию, может отправить, например, такую 1 Мб “мегатранзакцию”, как в блоке #364292, на валидацию которой ушло аномально много времени из-за проверки и квадратичного хеширования подписи. Злоумышленник также может сделать валидными все подписи, кроме последней, в результате чего узел, потратив на транзакцию несколько минут, обнаружит, что она является мусорной. В течение этого времени узел будет откладывать обработку нового блока. Можно представить, как такую атаку можно направить на конкурирующих майнеров, чтобы получить “фору” в нахождении следующего блока.

Чтобы избежать работы с чрезвычайно вычислительно сложными транзакциями, узлы Bitcoin Core устанавливают максимальный стандартный размер и максимальное количество операций подписи (sigops) для каждой транзакции, более строгие, чем ограничения консенсуса для блока. Узлы Bitcoin Core также накладывают ограничения на размеры пакетов предков и потомков, что повышает эффективность алгоритмов построения шаблонов блоков и вытеснения из мемпула и ограничивает вычислительную сложность операций добавления в мемпул и удаления транзакций, требующих обновления наборов предков и потомков транзакции. Хотя это означает, что некоторые легитимные транзакции могут быть не приняты или не переданы дальше по сети, ожидается, что такие случаи будут редкими.

Это пример политики ретрансляции транзакций, набора правил проверки в дополнение к правилам консенсуса, применяемых узлами к не подтверждённым транзакциям.

По умолчанию узлы Bitcoin Core не принимают транзакции со ставкой комиссии ниже 1 sat/vB (“minrelaytxfee“), не проверяют никаких подписей до проверки этого требования и не пересылают другим узлам транзакции, не принятые в собственный мемпул. В некотором смысле, это правило устанавливает минимальную “цену” за ретрансляцию и валидацию сетью. Не занятый в майнинге узел не получает никаких комиссий — они выплачиваются только майнеру, который подтверждает транзакцию. Однако комиссия представляет собой издержки для потенциального злоумышленника. Так тот, кто будет тратить ресурсы сети впустую, отправляя чрезвычайно большое количество транзакций, в конечном счёте исчерпает собственные ресурсы для оплаты комиссий.

Политика replace-by-fee, реализованная в Bitcoin Core, требует не просто чтобы замещающая транзакция платила более высокую комиссию, чем каждая из транзакций, с которыми она непосредственно конфликтует, но чтобы её общая комиссия была выше, чем у всех вытесняемых ею транзакций. Дополнительная комиссия, делённая на виртуальный размер замещающей транзакции, должна составлять не менее 1 sat/vB. Другими словами, независимо от ставок комиссии исходной и замещающей транзакций, новая транзакция должна платить сверх того “новую” комиссию в размере не менее 1 sat/vB, чтобы покрыть затраты на собственную пропускную способность. Основная цель такой политики состоит не в обеспечении совместимости стимулов. Скорее, она предусматривает минимальную стоимость повторного замещения транзакций, чтобы предотвратить атаки, приводящие к исчерпанию пропускной способности, — например, с добавлением всего 1 сатоши к каждой замене.

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

Согласованность политики узлов

Выше мы обсудили понятие политики узлов — набора правил проверки транзакций, применяемых нодами в дополнение к правилам консенсуса сети. Эти правила не применяются к транзакциям, которые уже содержатся в блоках, поэтому узел может оставаться в рамках консенсуса, даже если его политика отличается от политики других узлов. Так же, как оператор ноды может решить не ретранслировать чужие транзакции, он волен выбирать любую политику, вплоть до полного отсутствия таковой (подвергая свою ноду риску DoS-атаки). Это означает, что мы не можем рассчитывать на полную однородность политик мемпулов в сети. Однако для того, чтобы пользовательская транзакция дошла до майнера, она должна пройти путь через множество узлов, все из которых принимают её в свой мемпул, так что различия в политиках между нодами напрямую влияют на функциональность передачи транзакций по сети.

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

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

Учитывая сложность проверки мемпулов и трудности, возникающие из-за различий в применяемых политиках, Bitcoin Core исторически придерживается консервативного подхода в отношении возможностей настройки политики узлов. Хотя пользователи могут легко настроить способ подсчёта sigops(bytespersigop) и ограничить количество данных, встраиваемых в OP_RETURN выходы (datacarriersize и datacarrier), они не могут отказаться от ограничения веса в 400 000 весовых единиц или применить другой набор правил для RBF без изменения исходного кода.

Некоторые опции настройки политики Bitcoin Core существуют для того, чтобы учесть различия в операционных средах узлов и целях их работы. Например, аппаратные ресурсы и цель хранения мемпула майнера отличаются от рядового пользователя, запускающего лёгкую ноду на ноутбуке или Raspberry Pi. Майнер может увеличить ёмкость (maxmempool) или срок экспирации транзакций (mempoolexpiry) в своём мемпуле, чтобы хранить транзакции с низкой ставкой комиссии в периоды пикового трафика, и добывать их позже, когда трафик спадёт. Сайты, предоставляющие визуализации, архивы и статистику сети, могут запускать несколько нод, чтобы собрать как можно больше данных, а также отображать поведение мемпула с настройками по умолчанию.

На отдельном узле выбор ёмкости мемпула влияет на доступность инструментов для повышения комиссии. Когда минимальная ставка мемпула растёт из-за того, что количество транзакций превышает размер мемпула по умолчанию, транзакции, вытесненные со “дна” мемпула, и новые транзакции с комиссией ниже этой ставки уже нельзя поднять в очереди с помощью CPFP.

С другой стороны, поскольку входы, использованные вытесненными транзакциями, больше не тратятся никакими другими транзакциями в мемпуле, это может позволить повысить приоритет транзакции с помощью RBF, даже если раньше это было невозможно. Новая транзакция фактически не заменяет ничего в мемпуле узла, поэтому ей не нужно учитывать обычные правила RBF. Однако узлы, не вытеснившие исходную транзакцию (ввиду большего объёма мемпула), будут рассматривать новую транзакцию как предлагаемую замену и требовать от неё соблюдения правил RBF. Если вытесненная транзакция не сигнализировала о заменяемости по BIP125, или комиссия новой транзакции не соответствует требованиям RBF, то, несмотря даже на высокую ставку комиссии, майнер может не принять новую транзакцию. Кошелькам следует осторожно обращаться с вытесненными из мемпула транзакциями: выходы транзакции не могут считаться доступными для расходования, но и входы также недоступны для повторного использования.

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

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

В следующей части мы обсудим то, какие политики были приняты, чтобы соответствовать интересам сети в целом.

Ресурсы сети

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

Как мы уже говорили, многие идеологические задачи Биткойна воплощены в распределённой структуре его сети. Одноранговая, peer-to-peer, природа Биткойна позволяет правилам сети возникать из грубого консенсуса на основе множества выборов операторов отдельных узлов и пресекает попытки приобрести неправомерное влияние в сети. Эти правила обеспечиваются тем, что каждый узел самостоятельно проверяет каждую транзакцию. Для диверсифицированной и здоровой популяции узлов необходимо, чтобы затраты на запуск и поддержку узла были низкими. Любой проект с глобальной аудиторией масштабировать непросто, но делать это без ущерба для децентрализации — всё равно что сражаться с одной рукой, привязанной к спине. Биткойн пытается найти этот баланс, яростно защищая свои общесетевые ресурсы — UTXO-сет, объём данных в блокчейне и вычислительные усилия, необходимые для их обработки, — а также обновляя хуки для эволюции протокола.

Не нужно повторять всю войну за размер блока, чтобы понять, что ограничивать разрастание блокчейна необходимо, чтобы сохранить доступность запуска собственной ноды. Однако рост блокчейна сдерживается и на уровне политики узлов: minRelayTxFee составляет 1 sat/vByte, обеспечивая минимальную стоимость для выражения части “безграничного спроса на высокореплицируемое вечное хранилище” (Грег Максвелл, 2015©).

Изначально состояние сети отслеживалось через хранение всех транзакций, которые ещё имевших не потраченные выходы. Этот объём был значительно сокращён с введением UTXO-сета как средства отслеживания средств. С тех пор UTXO-сет является центральной структурой данных. Особенно при первоначальной загрузке блоков, но и в целом тоже, поиск по UTXO-сету составляет большую часть всех обращений к памяти узла. В Bitcoin Core уже используется вручную оптимизированная структура данных для кэша UTXO, но размер UTXO-сета определяет, какая его часть не поместится в кэш узла. Больший объём UTXO-сета означает больше пропусков кэша, что замедляет проверку блоков, первоначальную их загрузку и скорость проверки транзакций. “Пылевой порог” (dust limit) — пример политики, ограничивающей создание UTXO, в частности, ограничивающей UTXO, которые могут быть никогда не потрачены, потому что имеют номинал, меньший, чем затраты на их расходование. Несмотря на это, “пылевые бури” с тысячами транзакций случались ещё в 2020 году.

Когда стало популярным использовать простые multisig выходы для публикации данных в блокчейне, определение стандартных транзакций было изменено, чтобы разрешить один OP_RETURN выход в качестве альтернативы. Люди поняли, что невозможно запретить пользователям публиковать данные в блокчейне, но, по крайней мере, таким данным не придётся вечно жить в UTXO-сете, если они будут опубликованы в выходах, которые никогда не могут быть потрачены. В Bitcoin Core 0.13.0 появилась опция запуска -permitbaremultisig, которую пользователи могут отключить, чтобы отклонять неподтверждённые транзакции с голыми multisig выходами.

Хотя консенсус допускает свободную форму скриптов выходов, ноды Bitcoin Core ретранслируют только несколько хорошо понятных шаблонов. Это облегчает рассуждения о многих проблемах в сети, включая стоимость проверки и механизмы обновления протокола. Например, скрипт входа, содержащий опкоды, P2SH-вход с более чем 15 подписями или P2WSH-вход с более чем 100 элементами в witness стеке, сделают транзакцию нестандартной. (Подробнее о применяемых политиках и причинах этого можно узнать здесь).

Наконец, протокол Биткойна — это живой программный проект, который должен постоянно развиваться, решая возникающие задачи и удовлетворяя потребности пользователей. Для этого существует ряд хуков для обновления, которые намеренно оставлены в консенсусе, но не используются — например, версии taproot листьев, версии witness, OP_SUCCESS и ряд опкодов помимо OP_. Но так же, как атакам препятствует отсутствие центральных точек отказа, обновление ПО в масштабах сети требует скоординированного усилия десятков тысяч независимых операторов узлов. Ноды не будут передавать транзакции, использующие любые зарезервированные хуки обновления, пока их значение не будет определено. Это препятствие создано для того, чтобы приложения воздерживались от самостоятельного создания конфликтующих стандартов, что сделало бы невозможным принятие в консенсус стандарта одного приложения без аннулирования стандарта другого. Кроме того, благодаря этому, когда изменение консенсуса всё же произойдёт, узлы, которые не обновились немедленно — и, следовательно, не знают новых правил консенсуса, — не рискуют принять в свои мемпулы уже недействительную транзакцию. Проактивное сдерживание помогает обеспечить восходящую совместимость для ПО нод и позволяет сети безопасно обновлять правила консенсуса без потребности в полностью синхронизированном обновлении ПО.

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

В следующей части мы рассмотрим политику мемпула как интерфейса для протоколов второго уровня и систем смарт-контрактов.

Политика как интерфейс

До сих пор мы исследовали мотивы и проблемы, связанные с децентрализованной передачей транзакций и создающие потребность в более жёстких, чем консенсус сети, правилах проверки транзакций на локальном (для защиты ресурсов ноды) и глобальном (для защиты ресурсов сети) уровнях. Поскольку изменения политики ретрансляции транзакций в Bitcoin Core могут повлиять на то, будут ли транзакции приложения передаваться по сети, они требуют согласования с широким биткойн-сообществом. Аналогично приложения и протоколы второго уровня, использующие ретрансляцию транзакций, должны разрабатываться с учётом правил политики, чтобы избежать создания транзакций, которые будут отклонены.

Протоколы контрактов ещё более тесно зависят от политик, связанных с приоритизацией, поскольку возможность исполнения ончейн зависит от возможности быстрого подтверждения транзакций. В агрессивной свободной среде недобросовестные контрагенты могут быть заинтересованы в задержке подтверждения транзакции, поэтому необходимо также подумать о том, как различные особенности в интерфейсе политики ретрансляции транзакций могут быть использованы против пользователя.

Транзакции Lightning Network придерживаются тех же правил стандартности, о которых говорилось выше. Например, peer-to-peer протокол указывает dust_limit_satoshis в своём сообщении открытия канала, чтобы определить пороговое значение “пыли”. Поскольку транзакция, содержащая выход со значением ниже этого пылевого порога, не будет ретранслирована из-за ограничений на пыль, применяемых узлами, такие платежи считаются “неисполнимыми ончейн” и отсекаются от commitment-транзакций (или транзакций-обязательств).

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

Однако у этого способа тоже есть ограничения. Как мы отмечали в предыдущей части, создание CPFP-транзакции неэффективно, если минимальные ставки комиссии в мемпулах поднимаются выше ставки commitment-транзакции, поэтому такие commitment-транзакции всё равно нужно подписывать с несколько завышенной ставкой комиссии — на случай, если минимальные комиссии в мемпулах вырастут. Кроме того, при разработке якорных выходов был учтён тот факт, что одна из сторон может быть заинтересована в задержке подтверждения. Например, Алиса, прежде чем уйти офлайн, может передать в сеть собственную commitment-транзакцию. Если ставка этой транзакции слишком низкая для немедленного подтверждения, и контрагент Алисы, Боб, не получит её транзакцию, то он может быть сбит с толку, когда его версия commitment-транзакции не будет успешно передана. Но каждая commitment-транзакция имеет два якорных выхода, так что любая из сторон может ускорить любую из commitment-транзакций через CPFP. Например, Боб может попытаться вслепую передать CPFP для алисиной версии commitment-транзакции, даже если не уверен, что она её передавала. Чтобы избежать раздувания UTXO-сета, каждому якорному выходу присваивается небольшое значение чуть выше пылевого порога, которое через некоторое время может быть истребовано любым из пользователей.

Однако гарантировать возможность для каждой стороны отправлять CPFP транзакции сложнее, чем дать каждой стороне по якорному выходу. Как мы говорили в предыдущей главе, Bitcoin Core накладывает ограничение на количество и общий размер транзакций-потомков, которые могут быть связаны с неподтверждённой транзакцией, в качестве защиты от DoS. Поскольку возможность прикреплять потомков к общей транзакции есть у каждого контрагента, один из них может заблокировать передачу CPFP-транзакции другого, исчерпав это ограничение. Наличие таких потомков, следовательно, “приковывает” commitment-транзакцию к её низкоприоритетному статусу в мемпулах.

Чтобы смягчить этот потенциальный вектор атаки, предложение по якорным выходам в LN блокирует все неякорные выходы относительным таймлоком, не позволяя их тратить, пока транзакция неподтверждена, а политика ограничения потомков транзакции в Bitcoin Core была скорректирована, чтобы разрешить одного дополнительного потомка, если этот новый потомок имеет небольшой вес и не имеет других предков. Это сочетание изменений в обоих протоколах обеспечило возможность для по крайней мере двух участников общей транзакции корректировать ставки во время передачи транзакции, не увеличивая при этом поверхность DoS-атак при ретрансляции.

Блокирование CPFP через исчерпание лимита на потомков — это пример пиннинга транзакций. Атаки пиннингом используют ограничения в политике мемпула, чтобы препятствовать попаданию в мемпул или подтверждению совместимых со стимулами транзакций. В данном случае политика мемпула представляет собой компромисс между устойчивостью к DoS-атакам и совместимостью со стимулами. На компромисс приходится идти: узел должен принимать замещающие транзакции с увеличением комиссии, но не может обрабатывать бесконечно много потомков. CPFP carve out (“исключение для CPFP”) уточняет этот компромисс для конкретного варианта использования.

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

Эти точки трения подчёркивают не только важность политики как интерфейса для приложений и протоколов в экосистеме Биткойна, но и аспекты, в которых она нуждается в улучшении. Далее мы обсудим предложения по изменению политики мемпулов и открытые вопросы.

Предложения в области политики мемпулов

В предыдущей главе мы говорили о якорных выходах и CPFP carve out как способах гарантировать любой из сторон канала возможность повышать комиссию совместных commitment-транзакций без необходимости в сотрудничестве. Этот подход по-прежнему имеет несколько недостатков: создание якорных выходов связывает средства канала, ставки комиссий за commitment-транзакции обычно устанавливаются с переплатой, чтобы обеспечить соответствие минимальным ставкам комиссии мемпулов (которые могут вырасти), а CPFP carve out позволяет создать только одного дополнительного потомка. Якорные выходы не могут обеспечить такую же возможность поднятия комиссии для транзакций, разделённых между более чем двумя сторонами — как, например, coinjoin или протоколы многосторонних контрактов. В этой части мы поговорим о текущих усилиях по устранению этих и других ограничений.

Package relay (пакетная передача) включает в себя изменения в P2P протоколе и политике, позволяющие передавать и валидировать группы транзакций. Это позволит commitment-транзакциям оплачиваться дочерними транзакциями, даже если сама commitment-транзакция не соответствует минимальной ставке комиссии мемпула. Кроме того, Package RBF — пакетная замена по комиссии — позволит дочерней транзакции с более высокой комиссией платить за замещение транзакций, с которыми конфликтует её родитель. Пакетная передача предназначена для устранения общего ограничения на уровне базового протокола. Однако благодаря своей полезности для ускорения совместных транзакций, она также породила ряд попыток устранить проблему пиннинга для конкретных вариантов использования. Например, package RBFпозволит commitment-транзакциям заменять друг друга при трансляции с их соответствующими дочерними замещающими транзакциями, устраняя необходимость в нескольких якорных выходах для каждой из commitment-транзакций.

Но есть нюанс: существующие правила RBF требуют, чтобы замещающая транзакция платила более высокую абсолютную комиссию, чем общая сумма комиссии, уплачиваемой всеми подлежащими замещению транзакциями. Это правило помогает предотвратить DoS-атаки многократным замещением, но позволяет злоумышленнику увеличить стоимость замены его транзакции, привязав к ней дочернюю транзакцию с высокой абсолютной комиссией, но низкой ставкой. Это препятствует подтверждению транзакции, несправедливо предотвращая её замену пакетом с высокой ставкой комиссии.

Разработчики тоже предлагали совершенно разные способы добавления комиссии к предподписанным транзакциям. Например, подписание входов транзакции с помощью SIGHASH_ANYONECANPAY | SIGHASH_ALL может позволить передающему транзакцию повышать комиссию, добавляя дополнительные входы в транзакцию без изменения выходов. Однако, поскольку в RBF нет правила, требующего, чтобы замещающая транзакция имела более высокий “майнинговый балл” (т. е. быстрее выбиралась для блока), злоумышленник может пиннингом блокировать эти типы транзакций, создавая замены, обременённые предками с низкой ставкой комиссии. Точная оценка майнингового балла отдельных транзакций и их пакетов осложняется тем, что существующие лимиты на предков и потомков недостаточны для ограничения вычислительной сложности этого расчёта. Любые связанные транзакции могут влиять на порядок, в котором транзакции попадают в блок. И полностью взаимосвязанный компонент, называемый кластером, с учётом текущих ограничений на предков и потомков, может быть любого размера.

Долгосрочное решение для устранения некоторых недостатков мемпулов и предотвращения атак пиннингом RBF содержит предложение об изменении структуры данных мемпула для отслеживания кластеров транзакций вместо просто наборов предков и потомков. Эти кластеры будут ограничены в размере. Ограничение на кластеры ограничит возможности пользователей по расходованию неподтверждённых UTXO, но позволит быстро линеаризовать весь мемпул с помощью майнингового алгоритма на основе оценки общего балла предков, быстро создавать шаблоны блоков и добавить требование, чтобы замещающие транзакции имели более высокий “майнинговый балл”, чем заменяемая транзакция (или транзакции).

Но и в этом случае возможно, что ни один набор политик не сможет удовлетворить широкому спектру потребностей и ожиданий в отношении ретрансляции транзакций. Например, в то время как получатели пакетной платёжной транзакции выигрывают от возможности потратить свои неподтверждённые выходы, послабление в лимите на потомков оставляет возможность для пиннинга пакетной RBF совместной транзакции через абсолютную сумму комиссии. Было разработано предложение третьей версии, v3, политики ретрансляции транзакций, позволяющее протоколам контрактов выбирать более строгий набор ограничений на пакеты. V3 транзакции будут разрешать пакеты транзакций, состоящие только из двух (один родительский и один дочерний) и ограничивать вес дочернего пакета. Эти ограничения призваны смягчить проблему пиннинга RBF через абсолютную комиссию и предоставят некоторые преимущества кластерного мемпула, не требуя его реструктуризации.

Ephemeral Anchors опираются на свойства v3 транзакций и пакетную передачу, чтобы ещё больше улучшить якорные выходы. Это предложение освобождает якорные выходы, принадлежащие v3 транзакциям без комиссии, от “пылевого порога”, если якорный выход тратится дочерней ускоряющей транзакцией. Поскольку транзакция с нулевой комиссией должна ускоряться ровно одним ребёнком (иначе у майнера не было бы стимула включать её в блок), этот якорный выход является “эфемерным” и не станет частью UTXO-сета. Предложение об “эфемерных якорях” неявно предотвращает расходование неподтверждённых неякорных выходов без 1 OP_CSV таймлока, поскольку единственная разрешённая дочерняя транзакция должна расходовать якорный выход. Это также откроет возможность для LN-симметрии с CPFP в качестве механизма предоставления комиссии за транзакции закрытия канала. Кроме того, это делает этот механизм доступным для совместных транзакций с более чем двумя коллаборативными участниками. Разработчики использовали для развёртывания эфемерных якорей bitcoin-inquisition и предложенные софтфорки для создания и тестирования этих многоуровневых изменений на signet.

Описанные здесь проблемы с пиннингом транзакций, среди прочего, вызвали активное обсуждение и множество предложений по улучшению политики RBF в прошедшем году — в списках рассылки, пулл-реквестах, в социальных сетях и в личном общении. Разработчики предлагали и реализовывали решения в диапазоне от небольших поправок до полной перестройки политики. Опция -mempoolfullrbf, предназначенная для решения проблем с пиннингом и расхождением в реализациях BIP125, показала сложность и важность сотрудничества в политике ретрансляции транзакций. Притом что были предприняты реальные усилия по привлечению сообщества с помощью обычных средств, включая обсуждение в списке рассылки bitcoin-dev за год до этого, ясно, что существующие методы коммуникации и принятия решений не дали желаемого результата и нуждаются в доработке.

Децентрализованное принятие решений — сложный процесс, но необходимый для поддержки разнообразной экосистемы протоколов и приложений, использующих сеть ретрансляции биткойн-транзакций.

В заключение

Надеемся, что эта статья даст читателям более детальное представление о процессах, происходящих в сети, пока они ждут подтверждения своей транзакции. Авторы начали с обсуждения того, как некоторые идеологические ценности Биткойна отражаются в структуре его сети и дизайне протокола. Распределённая структура одноранговой сети обеспечивает более высокую устойчивость к цензуре и конфиденциальность по сравнению с типичной централизованной моделью. Открытая сеть ретрансляции транзакций позволяет всем узнавать о транзакциях в блоках до их подтверждения, что повышает эффективность ретрансляции блоков, делает присоединение нового майнера более доступным и создаёт публичный аукцион за место в блоке. Поскольку идеальная сеть состоит из множества независимых анонимных субъектов, управляющих собственными узлами, ПО узлов должно иметь защиту от DoS-атак и в целом минимизировать эксплуатационные расходы.

Комиссии играют важную роль в сети Биткойна как “справедливый” способ разрешения конкуренции за место в блоке. Мемпулы с алгоритмами замещения, пакетной обработки и вытеснения транзакций используют совместимость стимулов для измерения полезности хранения транзакций и позволяют использовать RBF и CPFP как способы ускорить обработку транзакций для пользователей. Сочетание политик мемпулов, кошельков, строящих транзакции экономически рациональным образом, и хорошей оценки ставки комиссии создаёт эффективный рынок пространства блоков, от которого выигрывают все.

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

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

Как я перестал волноваться и полюбил мемпул

Новый всплеск роста ончейн-комиссий Биткойна под конец прошлого года вновь вызвал к жизни привычную дискуссию, вынеся на поверхность разные точки зрения на причины и последствия этой тенденции. Одна “партия” видит в таком росте комиссий стратегическое решение проблемы бюджета безопасности Биткойна, другая — серьёзную проблему на пути к его глобальному принятию.

Всплеск роста комиссий обусловлен в первую очередь ростом популярности ординалов, токенов BRC-20 и прочих подобных решений на основе Биткойна. При всём пространстве для экспериментов, открываемых этими практиками, они подразумевают запись в блокчейн произвольных данных через witness поле транзакций, повышая общий спрос на ограниченное пространство блоков и, как следствие, увеличивая комиссию за транзакции.

“Стандарт” токенов BRC-20, используемый для спекуляций и выпуска мемкойнов, способствовал ещё большей перегрузке сети. Такие токены требуют выполнения вычислительно сложных и зачастую объёмных транзакций. Совокупный эффект от этих транзакций усиливает нагрузку на сеть, ещё больше усугубляя проблему резкого роста комиссий в BTC.

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

Это также возродило к жизни старую дискуссию о размере блоков. Идея возобновления “войны за размер блоков”, часто предлагаемая некоторыми небиткойн-фракциями, не только контрпродуктивна, но и не учитывает нюансов, необходимых для решения текущей ситуации с ростом комиссий. Безопасность и эффективность сети Биткойна не требуют увеличения размера блоков, тем более в ответ на временные нагрузки, вызванные специфическим использованием, таким как запись JPEG или BRC-20.

Что касается майнинга, то рост интереса к Биткойну привёл к появлению новых подходов к работе майнинговых пулов, как, например, в случае с Ocean и Braidpool. Эти пулы позволяют майнерам создавать собственные шаблоны транзакций и активно влиять на управление загрузкой сети. В частности, Ocean отфильтровывает транзакции, которые считает спамом. Эта эволюция в стратегиях майнинга представляет собой поиск баланса между извлечением прибыли и ответственностью за сохранение эффективной сети.

Говоря о природе высоких комиссий в Биткойне имеет смысл делать различие между размером комиссий в долларовом выражении и в BTC. Рост комиссий в долларах отражает созревание Биткойна и рост его значения в мировой экономике — это свидетельство успеха сети. Напротив, высокие комиссии в BTC-выражении свидетельствуют о временном узком месте в сети, подчёркивая необходимость технологических инноваций в области повышения её эффективности и масштабируемости.

Рынок комиссий Биткойна представляет собой саморегулирующуюся экономику. Пользователи, ценящие быстрые и гарантированные транзакции, готовы довольно спокойно платить за это больше, поддерживая безопасность и развитие сети. Такое саморегулирование играет ключевую роль в устойчивости Биткойна, органично адаптируясь к динамике рынка.

Высокие комиссии, в свою очередь, способствуют более рациональному использованию пространства блоков и разработке новых решений на основе Биткойна. Особого внимания заслуживают решения второго уровня, такие как Lightning, Fedimint или Liquid, обещающие более быстрые транзакции при меньших затратах, хоть и с определёнными компромиссами.

По мере движения Биткойна к статусу глобальной валюты, неизбежность высоких в долларовом выражении комиссий на базовом слое — это не повод для тревоги, а веха в развитии, наступлению которой впору порадоваться. Когда транзакции со ставкой даже 1 sat/vB становятся дорогостоящими, это знаменует собой важную главу в успехе и усилении глобального влияния Биткойна. Сопротивляться этой тенденции не только бессмысленно, но противоречит самой идее роста и стабильности Биткойна.

  • Корреляция между высокими комиссиями за транзакции в долларовом выражении и ростом цены и спроса на Биткойн очевидна. По мере того как Биткойн укрепляет свои позиции в качестве жизнеспособного инвестиционного и денежного актива, готовность к более высоким комиссиям отражает рост его воспринимаемой полезности и ценности. Это “бычий” сигнал для устойчивости и долгосрочного успеха Биткойна.
  • То, что структура доходов майнеров смещается от награды за блок к комиссиям за транзакции, представляет собой здоровую эволюцию экономической модели Биткойна. По мере приближения к предельной эмиссии Биткойна высокие комиссии в долларовом выражении становятся определяющим фактором в вознаграждении майнеров, обеспечивающих безопасность и работоспособность сети.
  • Важно, что, в отличие от фиатных валют, дефляционный дизайн Биткойна предполагает, что его стоимость со временем будет расти. И высокие комиссии в долларовом выражении подтверждают эту дефляционную природу; по мере того как Биткойн становится всё более ценным, стоимость транзакций в BTC естественным образом растёт. Это ожидаемо и свидетельствует об успешности дефляционной модели Биткойна.

Одновременно с тем высокий размер комиссий в BTC напоминает об уникальных проблемах масштабирования сети, требующих тщательнейшего изучения.

  • Непомерно высокие комиссии в BTC-выражении представляют собой значительное препятствие, особенно для тех, кто живёт в “развивающихся” регионах или совершает небольшие транзакции. Общая привлекательность Биткойна как глобальной валюты неразрывно связана с его доступностью и стоимостью транзакций. Высокие комиссии в BTC-выражении подрывают идею Биткойна как инструмента финансовой свободы и расширения прав и возможностей человека.
  • Рост комиссий в BTC-выражений зачастую свидетельствует о перегрузке сети, приводящей к увеличению времени выполнения транзакций и снижению удобства сети для пользователей. Чтобы Биткойн процветал в качестве практичного повседневного средства совершения транзакций, он должен обеспечивать постоянную надёжность и эффективность. Высокие комиссии в BTC-выражении в последнее время указывают на узкое место в обработке транзакций, что может (и наверняка будет) отпугивать как потенциальных, так и часть существующих пользователей.
  • Любые высокие комиссии способствуют централизации, но комиссии в BTC имеют более выраженное влияние, потенциально смещая обработку транзакций в сторону более крупных субъектов сети, которые могут себе позволить платить такие комиссии. Эта тенденция ставит под сомнение децентрализованный этос Биткойна, что может сказаться на безопасности, целостности и общей его надёжности.

Распространённым заблуждением в отношении Биткойна являются опасения за “бюджет безопасности” сети или страх “майнинговой спирали смерти”. Эти опасения по поводу потенциальной недостаточности стимулов для майнеров в будущем зачастую являются следствием неверного понимания халвинга и сокращения субсидий на блок.

Однако подобные теории не учитывают такого важного фактора, как покупательная способность. Подумайте вот о чём: если цена биткойна достигнет 550 тысяч долларов, то даже постоянный объём комиссий на блок в размере около 25 миллионов сатоши превысит покупательную способность нынешней субсидии на блок в 6,25 BTC при сегодняшней цене около 40 тысяч долларов за BTC. Важнее не количество получаемых BTC, но покупательная способность, которую они представляют. Пока она продолжает расти, размер награда майнеров остаётся устойчивой и безопасной.

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

Очевидно, что блокчейн Биткойна в нынешнем его состоянии не может обрабатывать значительную часть глобального ежедневного объёма транзакций, да и не должен стремиться к этому. Реальное решение заключается в сочетании более совершенных решений второго уровня, пересмотра некоторых конвенций и, вероятно, частичного пересмотра механизмов консенсуса.

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

 


Подписывайтесь на BitNovosti в Telegram!
Делитесь вашим мнением об этой статье в комментариях ниже.

На основе источника

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here