Механизм комиссий в Биткоине и зачем дружить с майнерами
В этой статье мы постараемся детально описать основную задачу комиссий в Биткоине, как они работают и на что влияют. Мы объясним причины волатильности комиссий, задержки в подтверждении транзакций и опишем подходы к решению этих проблем. Кроме того, проясним, как именно обновление Segregated Witness способствует снижению стоимости транзакций. А в качестве бонуса поделимся мыслями по поводу того, как дружба с майнерами снижает комиссии до нуля и к чему такая тенденция может привести в будущем. Итак, приступим.
Время полного подтверждения транзакции
Важно отличать процесс обработки транзакций (verification) от процесса их подтверждения (confirmation). В сети Bitcoin транзакции обрабатываются практически мгновенно, а подтверждаются — целый час. В других цифровых валютах все может осуществляться в течение пары секунд. От чего же зависит время полного подтверждения транзакции в децентрализованной среде? Главным образом, от механизма достижения консенсуса.
В чистом виде PoW не может обеспечить достижение консенсуса менее, чем за один час. В свою очередь протоколы достижения консенсуса, основанные на PBFT, и протоколы на основе DPoS могут обеспечивать достижение консенсуса за несколько секунд. Однако уровень децентрализации и независимости таких систем гораздо меньше, чем в Биткоине.
Согласно правилам протокола Bitcoin владельцы большей части вычислительной мощности должны подтвердить транзакцию (блок в котором содержится эта транзакция), чтобы она считалась полностью подтвержденной. То есть, на основании блока, в котором транзакция получила первое подтверждение, должно быть построено еще несколько блоков. Причем эта цепочка должна быть самой длинной, а конкурентных цепочек быть не должно. Количество этих блоков (подтверждений транзакции) определяет сам получатель платежа на свое усмотрение. Он руководствуется правилом, которое гласит, что чем больше подтверждений у транзакции, тем меньше вероятность ее последующей отмены.
Ограниченность пропускной способности
С ростом популярности Биткоина значительно увеличился поток новых транзакций в сети. Известно, что размер блока определен правилами протокола и строго ограничен. В Биткоине максимальный размер блока составляет 1 MB, следовательно, пропускная способность ограничена (1.7 KB/s). Если поток новых транзакций превысит пропускную способность, то не все из них будут обработаны. И такие ситуации случаются нередко. Какие транзакции получат подтверждение первыми, а какие останутся ждать — это вопрос, который требует четкого ответа. Суть его в том, что транзакции должны конкурировать друг с другом.
Роль комиссий
Механизм комиссий в Биткоине необходим для оплаты услуг распределенной сети, где услугой сети, по сути, является надежное хранение данных. Пользователи сети Биткоин фактически платят за каждый байт данных, добавленных в общую базу. В силу того, что пропускная способность этой базы данных ограничена, пользователи конкурируют между собой за приоритет записи.
Формируя транзакции, пользователи устанавливают комиссию в виде некоторого количества satoshi за один байт данных. При этом каждый узел-валидатор выстраивает все неподтвержденные транзакции в очередь таким образом, что сначала он подтверждает транзакции, которые платят большую комиссию за единицу своего веса. Очевидно, что те транзакции, которые попадают в конец очереди, могут долго оставаться неподтвержденными.
Еще одна важная задача, которую решает механизм комиссий, — это «трагедия общин». В контексте Биткоина подразумевается защита от спама транзакциями. Наличие обязательных комиссий означает, что злоумышленнику дорого обойдется на протяжении длительного времени засорять сеть фейковыми транзакциями, если у него будут такие намерения.
Волатильность цены записи
Пользователи сети Биткоин время от времени сталкиваются с непривычно высокой волатильностью комиссий. Например, в 2017 году усредненная цена записи одного байта данных в блокчейн Биткоина колебалась в диапазоне от 1 до 500 satoshi. А очередь неподтвержденных транзакций варьировалась от нескольких KiB до десятков, и даже сотен, MiB.
По причине того, что цена на запись данных может резко изменится, пользователи вынуждены конкурировать друг с другом почти вслепую. Это обусловлено тем, что фактически транзакция будет подтверждена в среднем в течение 8 минут, тогда как комиссию за обработку нужно установить еще до ее подписания. Поэтому вопрос правильно установленной комиссии все равно остается актуальным, потому что все хотят быстрого подтверждения своих транзакций с минимальными затратами. Естественно, платить больше 50 USD за типичную транзакцию — не лучший вариант, особенно, когда можно сэкономить до 90% этой суммы, если грамотно рассчитать комиссию.
Последствиями резкого увеличения потока новых транзакций является возникновение большой очереди ожидающих записи в блокчейн транзакций. Среди них и те транзакции, отправители которых либо не обратили внимание на изменение цены записи, либо сформировали транзакцию в момент перед резким повышением. Зачастую проблема кроется не в самом пользователе, а в программном обеспечении кошелька или сервисов управления биткоинами. Активному пользователю часто встречаются программные продукты для работы с Биткоином, в которых управление комиссиями вообще скрыто.
Решение проблемы с волатильностью комиссий
Вне зависимости от наличия возможности ручного управления приоритетом записи формируемых транзакций, Биткоин кошельки могут использовать механизмы оценки текущей цены записи данных, вместо использования константных или обновляемых вручную значений. Это дает большое преимущество кошельку с точки зрения управления приоритетом записи транзакции в общую базу и экономии средств на комиссию.
Стоит отметить, что прогнозирование цены на запись также возможно, но зачастую такие прогнозы работают только на очень коротких промежутках времени (в среднем несколько минут). Если же прогноз устарел, а транзакция не подтвердилась, то вполне вероятно, что ожидать ее подтверждения можно еще долго — чаще всего несколько часов, а иногда и суток.
transaction fee = transaction size * byte price
Динамический или адаптивный расчёт комиссии за транзакцию означает автоматическую оценку итогового размера транзакции в байтах и оценку цены записи одного байта в блокчейн Биткоина на ближайшие несколько часов. Для обоих оценок существуют специфические алгоритмы анализа транзакций и активности в сети. После получения оценки размера транзакции в байтах и цены записи одного байта эти значения перемножаются, и получается фактическая сумма в биткоинах, которую нужно добавить в транзакцию в качестве комиссии.
Преимуществом подхода с адаптивной оценкой является включение в транзакцию более точной комиссии, которая будет выше минимального порога, но не слишком высокой, что экономит средства пользователя. Более того, вероятность, что транзакция окажется глубоко в очереди неподтвержденных, минимальная. Тем не менее бывают исключения. Поэтому рассмотрим подробнее, что важно делать в экстренной ситуации.
Повышение комиссии после отправки транзакции
Отметим, что протокол Биткоин весьма гибкий и в отношении комиссий. Например, есть два улучшения протокола: replace-by-fee и child-pays-for-parent, — которые позволяют повысить комиссию уже сформированной и отправленной транзакции. К сожалению, очень немногие кошельки реализуют эту функциональность для удобства своих пользователей, хотя со временем их становится больше.
Кроме того, эта особенность имеет ряд технических нюансов и организационных требований для ее корректного использования. Одно из таких требований состоит в том, что пользователь (или ПО в автоматическом режиме) должен заново переоценить комиссию транзакции, сформировать и подписать новую (альтернативную) транзакцию, распространить ее в сеть и продолжить наблюдение за ее состоянием.
Как помогает Segregated Witness
Одним из изменений протокола, которое внесло обновление Segregated Witness, является введение нового формата транзакции и ее веса (transaction weight). До появления Segregated Witness при расчете комиссии обычно учитывали только размер транзакции. Теперь важными являются и размер, транзакции и ее вес. Новая транзакция хранит доказательства владения монетами в отдельной структуре (witness data). Чтобы перевести размер транзакции (total size) в ее вес, размер witness data умножается на меньший коэффициент, чем остальные данные транзакции. Вес транзакции рассчитывается по специальной формуле:
weight = base size * 3 + total size.
В этом случае base size — это размер транзакции без учета размера witness data. Как можно догадаться, любые данные, которые включаются в witness data, требуют в 4 раза меньшей комиссии, чем остальные данные транзакции. Подобный подход позволяет майнерам определить более выгодную транзакцию в отношении занимаемого в блоке места и получаемого вознаграждения.
Известно, что около 60% всех данных транзакции составляют именно данные доказательства владения монетами (т. е. такие, которые можно записать в witness data). Соответственно, вес транзакций нового формата значительно уменьшится. Таким образом, пользователь может платить меньше за подтверждение новой транзакции, при этом она будет иметь тот же приоритет у майнеров при включении в блок, что и старая транзакция с большей комиссией.
На схеме отображена зависимость цены записи одного байта данных в блокчейн Биткоина от нагрузки (потока неподтвержденных транзакций), выраженной в байтах за секунду. Вывод можно сделать очень простой: если поток новых транзакций ниже или равен пропускной способности учетной системы, то цена записи практически нулевая. А если поток новых транзакций превысит пропускную способность, то цена резко устремляется вверх.
Вариант с другом-майнером
Представьте, что у вас есть друг, который занимается майнингом и контролирует 10% всей вычислительной мощности, задействованной в сети Биткоин. В среднем он генерирует блок один раз в 100 минут. В этом случае вы можете сформировать свою транзакцию, в которой установите нулевую комиссию, после чего отправите эту транзакцию своему другу для подтверждения.
Первое подтверждение ваша транзакция с вероятностью 50% получит в течение 50 минут, а полное подтверждение — в среднем через 50 минут после первого. В итоге ваши транзакции будут получать полное подтверждение приблизительно в течение 100 минут. Если бы у вас такого друга не было, полное подтверждение транзакция получала бы приблизительно в течение 60 минут, но уже с оплатой полноценной комиссии.
Как видите, если речь идет об экономии средств, то вам повезло, если у вас есть друг майнер. Но если такого друга нет, то могут существовать альтернативные варианты оплаты места в блоке.
Вариант с токенизацией места
Обычно майнер действует по стандартной схеме и сортирует транзакции по цене записи 1 байта данных в блокчейн. Похоже, что сейчас так делают все. Однако не исключено, что у майнера может быть лучшая мотивация. Он может самостоятельно формировать политику монетизации своей активности. Иначе говоря, он может действовать нестандартно в отношении транзакций, которые он будет записывать в свой блок. Если найдутся более выгодные условия, чем просто взять комиссию за вашу транзакцию, вероятнее всего, он изменит свою политику.
Такой подход предполагает, что пользователи будут платить майнеру за подтверждение своих транзакций не через заранее установленную комиссию, а непосредственно (по собственной схеме).
На практике любой достаточно крупный майнинговый пул может вести свою кампанию с целью повышения прибыльности и использовать для этого нехитрые механизмы, например:
- определить свои приоритеты сортировки транзакций;
- заключить партнерство с некоторым сервисом (биржа, магазин, браузер);
- продавать гарантии на некоторое место в блоке в будущем.
Более того, пул может даже токенизировать свободное место в своих блоках (да, чтобы токены продавать).
Заключение
Вероятно, в будущем мы увидим множество разных способов оплатить запись в «самую надежную базу данных на Земле». Учитывая интерес многих сервисов и приложений к свойствам этой базы данных, уже давно существуют сторонние решения по добавлению в блокчейн Биткоина произвольных данных с целью их надежной «фиксации» (timestamping). Но такие решения плохо вписываются в экосистему приложений, а разработчикам сложно их монетизировать.
На данный момент вариант проталкивания транзакций «по дружбе» и вариант токенизации свободного места в блоках может показаться шуточным, но при текущем темпе развития индустрии такие сценарии могут оказаться вполне осуществимыми. Более того, они могут стать основными во взаимоотношениях между пользователями и валидаторами, но это не точно.