Данный текст представляет собой полный перевод исследования Виталика Бутерина на тему проблемы определения стоимости ресурсов в Блокчейн и в сети Ethereum в частности.
Одна из самых сложных проблем в разработке протокола блокчейна — как ограничить и оценить отправку транзакций, которые включаются в цепочку. Каждая транзакция приносит некоторую личную выгоду ее отправителю, но транзакции также несут социальные издержки для сети в целом, поскольку каждый узел в сети должен обрабатывать каждую транзакцию.
Это приводит к классическому примеру проблемы «трагедии общин». В таких случаях экономическая теория обычно диктует цены на рассматриваемые ресурсы и устанавливает цену, равную социальным издержкам, которые акт потребления каждого ресурса налагает на сеть. Однако разнородный характер задействованных вычислительных ресурсов, пропускной способности и ресурсов хранения, большая часть социальных издержек, которые существуют в форме нематериального и трудно поддающегося оценке вреда, такого как риск централизации и необходимость создания автоматизированного алгоритма, который может устанавливать цены в широком диапазоне будущих сценариев без вмешательства человека, — все это очень затрудняет установление оптимальных ограничений. В этой статье мы обсуждаем компромиссы между различными подходами
I. Введение и модель
Блокчейн — это децентрализованная сеть, состоящая из большого количества компьютеров, каждый из которых должен обрабатывать транзакции, которые отправители транзакций загрузить в цепочку. Следовательно, транзакция, которая публикуется в блокчейне, приносит некоторую личную выгоду ее отправителю, но также приносит внешние социальные издержки участникам сети. Чтобы учесть эти социальные издержки и предотвратить злоупотребление блокчейном как ресурсом общего пула, необходим некоторый экономический механизм ограничения включения транзакций. Однако существует много типов экономических механизмов, которые можно использовать для решения подобных проблем ценообразования ресурсов, и понимание того, какой из них оптимальный требует более глубокого понимания природы и видов рассматриваемых социальных издержек.
Социальные расходы можно разделить двумя способами. Во-первых, можно классифицировать по фундаментальному типу расходования ресурсов:
Стоимость пропускной способности: стоимость загрузки всеми узлами каждой отправленной транзакции, объединения ее в блок, а затем ретрансляции транзакции как части некоторого блока.
Вычислительная стоимость: стоимость каждого узла, проверяющего каждую транзакцию. Стоимость хранения истории: стоимость хранения транзакции для всех узлов, хранящих историю блокчейна, за время, за которое история хранится (возможно, бесконечность).
Стоимость хранения состояния: предельная стоимость влияния транзакции на размер состояния (например, код контракта, остатки на счетах), которое каждый узел должен хранить, чтобы иметь возможность обрабатывать дальнейшие транзакции.
Обратите внимание, что первые две стоимости — это затраты, которые оплачиваются узлами, которые находятся в сети в точное время, когда включена транзакция, третья стоимость оплачивается узлами, которые находятся в сети в это время или в ближайшем будущем, а четвертая стоимость должны быть оплачены всеми узлами навсегда, если не будет введена схема что делает все записи состояний временными.
Во-вторых, можно классифицировать по разным типам эффектов первого и второго порядка.
Мы можем понять эти эффекты следующим образом. Мы можем рассматривать цепочку блоков как сеть из n компьютеров, C1…Cn, где любая транзакция, включенная в цепочку блоков, должна обрабатываться всеми узлами, которые все еще находятся в сети в сети. Некоторые транзакции более сложны, чем другие; каждая транзакция имеет некоторый «вес» W, который представляет собой количество ресурсов, необходимых для ее обработки.
У каждого пользователя Ui есть некоторая функция прямой стоимости ресурсов Ri(W), представляющая затраты пользователя на выполнение определенного количества работы. Эти затраты могут включать расходы на электроэнергию и пропускную способность, предельный износ диска, неудобства из-за более медленной работы других приложений пользователя, сокращение времени работы от батареи и др. При достаточно высоком (w) в какой-то момент затраты становятся неприемлемыми для любого данного пользователя, и в этот момент пользователь выходит из сети (мы предполагаем, что Ri(W) выше этой точки не изменяется). Пусть NodeCount(W) будет числом пользователей, все еще находящихся в сети с весом W. Обратите внимание, что разные пользователи могут выходить из сети в разное время по двум причинам: (i) некоторые пользователи имеют более низкую стоимость ресурсов, чем другие, и (ii) некоторые пользователи ценят подключение к блокчейну больше, чем другие.
Существует некоторая функция полезности D(k), отражающая социальную ценность уровня децентрализации, достигнутого за счет количества онлайн-узлов, которую можно перевести в функцию D(W) от общей транзакционной нагрузки. Также может существовать некоторая функция стоимости A(W), отражающая повышенную легкость атаки сети по мере включения большего количества транзакций. Мы можем суммировать все эти затраты как комбинированную функцию затрат C (W) = Pi Ri (W) + (A (W) — A (0)) — (D (W) — D (0)).
Вышеизложенного достаточно в качестве модели блокчейна для целей этой статьи; нам не нужно заботиться о деталях доказательства работы, доказательства доли, структуры блока и т. д., за исключением деталей этих алгоритмов консенсуса и как патерны блокчейна влияют на NodeCount и A, и, следовательно, на C.
II. Предварительная работа
В Биткойне и Эфириуме ресурсы оцениваются с использованием простой схемы «ограничения и торговли». Метрика определяется для количества ресурсов (называемых «весом» или «газом»), потребляемых транзакцией, и существует максимальное значение, определяемое протоколом общее количество ресурсов, которое будут потреблять транзакции, содержащиеся в блоке. Валидаторы имеют полную свободу выбора транзакций, если общий вес блока ниже этого предела. Устанавливается равновесие, когда пользователи добавляют комиссию к своим транзакциям, которые передаются валидатору, который включает транзакцию в блок, а валидаторы выбирают транзакции, уплачивающие самую высокую комиссию за единицу веса. В биткойне, например, ограничение веса является статическим 4 ∗ 106, а вес определяется следующим образом:
weight(block) = 4 ∗ len(block.nonsignature data) + len(block.signature data) (1)
Где len(x) возвращает количество байтов в x. По техническим причинам, связанным с попыткой оценить историю и стоимость хранения состояния, байты в подписях транзакций оцениваются дешевле, чем неподписанные данные в транзакциях. В Эфириуме есть показатель под названием «газ», который включает в себя размер блока, а также вычислительные затраты как на проверку транзакций так и на выполнение кода смарт-контракта. Для простоты изложения это можно аппроксимировать так:
weight(block) = 68 ∗ len(block) + 3 ∗ num computational steps in block (2)
Газовая функция на самом деле гораздо сложнее, но похожа по духу. Существует лимит газа на блок, за который могут голосовать валидаторы (при создании блока майнер может «проголосовать за» или «против» лимита газа максимум на ∼0,1%), и на момент написания этой статьи большинство валидаторы голосуют за лимит газа в 8 миллионов.
Основная проблема с этим подходом заключается в том, что априори было трудно определить разумный предел веса, и этот вопрос часто становился источником споров. Целью этой статьи будет попытка выйти за пределы одномерного пространства дизайна «должен быть какой-то предел, каким он должен быть?» и исследовать гораздо большее пространство политик, которые пытаются устранять внешние факторы, связанные с потреблением транзакционных ресурсов, и пытаться разработать политику, которая будет как ближе к оптимальной в настоящее время, так и более устойчивой к изменениям экономических обстоятельств в долгосрочной перспективе, уменьшая потребность во «внепротокольных вмешательствах», таких как жесткие вилки.
III. Ценообразование ресурсов в неопределенности
Ценообразование ресурсов блокчейна имеет много параллелей с регулятивными мерами по борьбе с загрязнением окружающей среды. В частности, хотя валидатор блока получает компенсацию за публикацию транзакций, стоимость публикации этого блока ложится на все полные узлы, подобно тому, как загрязнение производится одним заводом, но должен страдать каждый проживающий на деревне (если не на еще большей площади). Эта стоимость, которую несут все полные узлы, является отрицательным внешним эффектом, который мы хотим ограничить. И блокчейны, и природоохранные органы используют экономическое вмешательство для ограничения деятельности с отрицательными внешними эффектами, когда отрицательные внешние эффекты имеют как измеримые компоненты, так и компоненты с высокой найтовской неопределенностью (т. е. «неизвестные неизвестные»). Многие результаты экономики окружающей среды напрямую применимы к блокчейнам. В статье Вейцмана 1974 года «Цены против количества» описывается компромисс между регулированием по цене (например, налогами на выбросы углерода) и регулированием по количеству (например, выдача фиксированного количества разрешений и предоставление им возможности торговать на рынке). Одно важное открытие, на которое ссылается Вейцман, заключается в том, что если у политика есть полная информация о функции социальных издержек и кривой спроса на ресурс (она же «функция выгоды»), эти два подхода эквивалентны: при любой желаемой цене можно выбрать политику, основанную на эквивалентном количестве, путем выдачи точного количества разрешений, равного равновесному количеству, которое было бы куплено по этой цене.
Рассмотрим мир, в котором предельные социальные издержки (отрицательные внешние эффекты) потребления ресурса фиксированы, но функция предельной выгоды быстро уменьшается. Если директивный орган устанавливает слишком низкий количественный предел, то количественный предел пересекает кривую предельной выгоды в точке, где издержки и выгоды намного выше социальных издержек, а потребители несут очень большие альтернативные издержки из-за непотребления. Но если вместо этого цену устанавливает политический деятель, то ущерб от просчета намного меньше.
Если, с другой стороны, частные издержки воздержания фиксированы, а предельные общественные издержки потребления быстро растут, то установление цены сопряжено с большим риском. Например, рассмотрим сценарий, в котором социальная стоимость потребления менее 1000 единиц ресурса приемлема, но превышение 1000 может привести к катастрофическим последствиям (например, некоторые теории «переломного момента» глобального потепления). Предельные социальные издержки потребления дополнительной единицы ресурса в мире, где люди уже потребляют 1050 единиц ресурсов, будут намного выше, чем предельные социальные издержки в мире, где люди просто потребляют 900 единиц. 900 и нацелены на налог, равный предельным социальным издержкам на уровне 900, то политика будет в значительной степени недооценивать дополнительный социальный вред, причиняемый дополнительным расходом ресурсов. С другой стороны, политический деятель, который просто выдает 900 разрешений и позволяет им торговать на рынке, увидит, что риск снижен.
На рисунках (а)–(б) показан первый сценарий, в котором лучше установить цену. На рисунках (c)–(d) показан второй сценарий, в котором лучше задавать количество. В совокупности, если предельные частные издержки потребителя увеличиваются с увеличением количества быстрее, чем предельные общественные издержки, то это когда
тогда лучше устанавливать цены, а в других случаях лучше устанавливать количество.
Обратите внимание, что нам нужно использовать вторую производную, потому что мы конкретно говорим о скорости изменения предельных издержек. Приведенный выше аргумент применим только в том случае, если затраты и выгоды распределяются независимо. Если изменения кривых затрат и выгод коррелированы, то в правило выбора необходимо добавить дополнительный аргумент, увеличивающий относительную привлекательность предельного количества. Чтобы увидеть это интуитивно, рассмотрим крайний случай, когда неопределенность в затратах и выгодах полностью коррелирует; в таком сценарии, если первоначальные оценки затрат и выгод окажутся неверными, обе кривые будут двигаться вверх или вниз синхронно, и поэтому новое равновесие будет прямо выше или ниже первоначально оцененного; следовательно, политика таргетинга на количество была бы совершенно правильной, а политика таргетинга на цену была бы пессимистичной. Этот анализ охватывает только две возможные политики, но доступно гораздо большее количество вариантов. Пространство политики можно представить как пространство возможных кривых предложения для данного ресурса, где политика ценообразования представляет собой горизонтальную кривую предложения, а схема ограничения и торговли представляет собой вертикальную кривую предложения. Возможны также различные формы диагональных кривых предложения, и в большинстве случаев оптимальна та или иная форма не строго горизонтальной или вертикальной кривой предложения.
Должны ли блокчейны иметь ограничение на размер блока, или они должны не иметь ограничения, а вместо этого взимать фиксированную плату за единицу потребленного ресурса, или должна быть какая-то промежуточная политика, которая взимает плату как функцию F(w) от веса, включенного в блок, где F0(w) возрастает и, возможно, достигает асимптоты, быть оптимальным? Чтобы оценить оптимальную политику в рамках модели «цены/количество», мы начнем с попытки оценить функцию социальных издержек.
Исследование Корнелла предоставило оценку количества узлов в ответ на весовую нагрузку блокчейна. Исследование проводилось в то время, когда формула веса Биткойна была просто одной единицей веса на байт с пределом веса 106. Исследование показало, что 90% узлов останутся в сети.
при W = 4 ∗ 10^6, а 50% узлов останутся в сети при W = 3,8 ∗ 10^7
В качестве первого приближения к количественной оценке значения децентрализации от наличия большего количества узлов мы можем использовать logarithmic utility: D(W) = log(NodeCount(W)). Мы обнаруживаем, что NodeCount(W) примерно пропорционален 1/W, что, в свою очередь, подразумевает, что D(W) = −log(W). Это, в свою очередь, означает, что D0 (W) = 1/W: функция предельных социальных издержек убывает.
Однако эта модель не учитывает другие виды вреда, возникающие в результате того, что для распространения больших блоков требуется больше времени. Исследование, проведенное Декером и Ваттенхофером в 2013 году, показало, что время, необходимое блоку для распространения по сети, примерно линейно зависит от размера блока. Зохар и Сомполинский показывают, что при сетевой задержке t и времени блока T скорость создания честных блоков уменьшается с 1/T
до 1/(T +t), уменьшая устойчивость к «атакам 51%» с 1/2 до q, где q/(1−q)∗ 1/T = 1/(T +t), т. е. q = T/( 2Т+т). Кажется разумным определить функцию стоимости A(x) = 1/(MinAttack(x)), где MinAttack(x) — минимальный размер атаки, которая может быть успешной; поскольку MinAttack(x) = T/(2T +t), это означает, что A(x)=2 + t/T. t является функцией W; если t линеен в W, то это означает, что A(W) = 2 + k ∗ W для некоторой константы k, поэтому функция социальных издержек линейна.
В случае с Эфириумом мы можем попытаться посмотреть на корреляцию между использованием блочного газа и «дядиной ставкой», мерой процента произведенных блоков, которые не попадают в каноническую цепочку и, следовательно, не вносят вклад в цепочку безопасности.
Нелинейность на этом рисунке частично является артефактом данных; в конце 2017 года состав транзакций изменился со вариантов использования смарт-контрактов в сторону передачи токенов ERC20, которые влияют на uncle rate больше, чем использование смарт-контрактов, поскольку их потребление газа в основном связано с затратами на пропускную способность и вычисления, а не на код и хранение. Точки в левом верхнем углу — DoS-атака 2016 года. Вот тот же график, масштабированный с точками конца 2017 года и удаленными DoS-атаками 2016 года:
Однако существуют и сверхлинейные издержки. Клиентам необходимо обрабатывать как основную цепочку, так и блоки, не вошедшие в каноническую цепочку; следовательно, если уровень пропускной способности канонической цепочки x приводит к увеличению числа uncle p, то фактический уровень вычислительной нагрузки равен x/(1−p) со знаменателем, который продолжает уменьшаться к нулю по мере увеличения пропускной способности канонической цепочки. Кроме того, при высоких показателях дяди атаки эгоистичного майнинга становятся намного проще, а сокращение количества узлов само по себе приводит к объединению в пулы, что делает эгоистичный майнинг более вероятным. Таким образом, в качественном смысле социальные издержки увеличения W до точки, где t = T, более чем в десять раз превышают издержки установления W таким образом, чтобы t = T ∗ 0,1.
Однако даже если функция стоимости является суперлинейной в крайних точках, она кажется линейной в нижней части распределения, а аргументы исследования Корнелла предполагают, что она может быть даже сублинейной. Если размер блока увеличивается с 10 КБ до 1000 КБ, возникают значительные социальные издержки, поскольку устройствам IoT, смартфонам, Raspberry Pi и т. д. гораздо труднее оставаться на связи, но увеличение с 1000 КБ до 1990 КБ не имеет таких высоких затрат, потому что диапазон вариантов использования, которые становятся непригодными для использования в течение этого интервала, намного меньше. Следовательно, кажется вероятным, что кривая социальных издержек имеет U-образную форму:
III.I Оценка кривой частной выгоды
Кривую частных выгод, спрос на отправку транзакций, оценить гораздо сложнее. Мы попытаемся сделать некоторые оценки одной переменной, эластичности спроса (т. е. на сколько процентов увеличивается спрос при снижении цены на 1%), рассмотрев некоторые «естественные эксперименты» в блокчейнах Биткойн и Эфириум.
Один тип естественного эксперимента состоит в том, чтобы посмотреть на ежедневные изменения комиссии за транзакцию в ситуации, когда емкость блокчейна внезапно меняется из-за какого-то внешнего фактора; изменения лимита газа Ethereum и нестабильность времени блока биткойнов из-за эффектов взаимодействия между майнингом биткойнов и биткойн-кэш — два самых простых случая. Графики показывают корреляцию между снижением пропускной способности блокчейна Биткойн из-за временного увеличения времени блока и пиками комиссий за транзакции:
Более тщательный анализ аналогичных данных дает эластичности 0,4-0,7 для Биткойна и 1-2 для Эфириума.
Кроме того, важно отметить, что это измеряет только краткосрочную кривую спроса, рассматривая действия, предпринятые в течение нескольких дней или месяцев, и не принимает во внимание долгосрочные корректировки, которые могут произойти на рынке только через пару лет; в реальном мире, например, установлен факт, что долгосрочная эластичность спроса на бензин выше, чем краткосрочная эластичность; и это, вероятно, верно и для комиссий за транзакции в биткойнах, а также для газа Ethereum.
На данный момент эта модель предлагает кривую выгоды с наклоном от -0,4 до -2 (если масштабировать так, чтобы текущее пересечение спроса и предложения находилось в точке (1, 1)), и кривую социальных издержек с (перемасштабированным) наклоном, который трудно определить, но при текущей марже в различных блокчейнах, вероятно, она будет низкой и может быть положительной или отрицательной. Это говорит о том, что фиксированная плата за транзакцию в расчете на единицу веса в сочетании с жестким ограничением в точке, где предельные социальные издержки начинают быстро расти, превосходит режим, основанный на чистом ограничении веса.
IV. Цены криптовалюты
В краткосрочной перспективе можно предположить, что движение цен, изменения в функциях социальных издержек и изменения в использовании являются случайными и независимыми. Однако в долгосрочной перспективе эти три фактора тесно переплетаются. В частности, (i) цена криптовалюты; (ii) кривая социальных издержек [по мере увеличения числа бенефициаров системы, а также увеличения числа полных узлов]; и (iii) кривая выгоды [поскольку количество пользователей, отправляющих транзакции] сильно коррелирует с одной переменной, которую мы могли бы назвать «принятие».
Мы можем сделать модель следующим образом. Предположим, что увеличение числа пользователей с k-фактором приводит к:
• Увеличение цены в k-факторе.
• K-фактор увеличения числа пользователей транзакций, т.е. k-фактор горизонтального растяжения кривой спроса.
• K-фактор увеличения количества пользователей и количества полных узлов.
Предположим для простоты, что эластичность спроса равна 1, а полезность децентрализации N полных узлов равна D(N) = log(N), поэтому увеличение числа полных узлов k-фактором просто добавляет полезность log(k); k-фактор увеличения числа пользователей увеличивает кривую общественных издержек в k раз, а кривую частных выгод масштабирует в k раз. Это приводит к тому, что принятие, выраженное в рассматриваемой криптовалюте, оставляет без изменений кривые частной выгоды и общественных издержек, а значит, и корреляции (!!).
Реальность, конечно, сложнее, чем эта простая модель, но этой модели достаточно, чтобы показать, что из-за счастливого совпадения необходимости деноминировать сборы в криптовалюте, цена которой сама пропорциональна принятию, по крайней мере, нет очень сильного первоочередного основания ожидать положительной корреляции между кривыми номинальной выгоды и затрат. Следовательно, аргументы в пользу использования фиксированных сборов в дополнение к ограничениям на газ остаются в силе.
Возможно, одна из ключевых причин неинтуитивности фиксированных комиссий заключается в том, что на протяжении большей части истории протоколов блокчейна блокчейны работали в режиме «неполных блоков», когда в блоке всегда было место для включения большего количества транзакций. Плата, которую необходимо было заплатить, представляла собой лишь минимальное значение, установленное по умолчанию в программном обеспечении. Когда криптовалюта испытывает значительный рост цен, это приводит к значительному росту комиссий пользователей, пока в конечном итоге значения по умолчанию не будут скорректированы вручную в сторону понижения. Таким образом, транзакционные сборы искусственно поддерживались на стабильном уровне из-за политических ограничений, в то время как для цен на криптовалюту такого стабилизирующего эффекта не существовало.
Однако недавно Биткойн перешел в режим «полных блоков», когда транзакции постоянно конкурируют друг с другом за право включения, а Эфириум перешел в этот режим во время интенсивных продаж токенов. В этом режиме сборы становятся более волатильными, а рост числа пользователей способствует еще большей волатильности. В биткойне это привело к увеличению комиссий примерно в 10 раз менее чем за год; в Ethereum комиссия увеличивается на аналогичный коэффициент при продаже токенов. Даже в среднем за последний год комиссии за транзакции стали значительно более волатильными, чем цена ETH:
В отсутствие политического давления на майнеров с целью дальнейшего увеличения лимита газа мы не видим причин для того, чтобы такое положение дел не сохранялось; и если политическое давление может быть использовано для увеличения лимитов на газ, когда это необходимо, то те же самые процессы могут быть использованы для корректировки фиксированного уровня.
V. Комиссии за транзакции и теория аукционов
До сих пор мы обсуждали политику ценообразования ресурсов абстрактно, но не обсуждали конкретный механизм, который используется для ее реализации. В области дизайна механизмов было сделано много открытий о том, какие типы аукционов работают лучше и при каких обстоятельствах, и многое из этого актуально на рынке транзакционных комиссий. На сегодняшний день почти во всех блокчейнах рынки комиссий за транзакции работают следующим образом. Отправители транзакций могут указать любую комиссию, которую они хотят, как часть своей транзакции, когда они транслируют ее. Транзакции включаются в блоки авторами блоков, которые, как мы можем здесь предположить, выбираются случайным образом для каждого блока. Разработчики блоков ограничены пределом веса, который указывает, сколько они могут включить в каждый блок. Естественно, авторы блоков будут включать транзакции, которые приносят им наибольшую прибыль, и в рамках протокола они собирают комиссии, указанные в транзакции.
Говоря языком дизайна механизма, это аукцион первой цены, характеризующийся ключевым свойством: «вы платите столько, сколько указываете, и только в случае выигрыша». Этот вид аукциона обычно считается крайне неоптимальным, поскольку требует сложных и неэффективных стратегий со стороны покупателей (здесь — отправителей транзакций). Например, предположим, что данный покупатель оценивает свои транзакции в $1. Сколько он должен предложить? Ответ определенно меньше 1 доллара; но насколько меньше? Если все остальные предлагают 0,05 доллара, то очевидно, что 0,06 доллара будет достаточно. Если все остальные предлагают комиссионные сборы, которые имеют какое-то сложное распределение со средним значением 0,10 доллара и стандартным отклонением 0,05 доллара, с толстым хвостом в правой части, тогда расчет становится чрезвычайно сложен, и очень часто эффективное равновесие отсутствует.
Типичной альтернативой является продажа многих предметов на аукционе по k-й цене: каждый платит столько же, сколько самая низкая комиссия, которая включена. Этот механизм обеспечивает очень простую и оптимальную стратегию на стороне покупателя: если отправитель транзакции ценит включение своей транзакции в $x, он предлагает $x. Если минимальная ставка в блоке оказывается меньше x долларов, они входят (и платят меньше, чем x долларов, поэтому они довольны тем, что попали), но их более высокая ставка незначительно влияет на сумму, которую они платят. Если минимальная ставка в блоке окажется больше, чем $x, отправитель транзакции не будет включен и будет рад, что он не был включен, потому что, если бы он был включен, он бы должен был заплатить более высокую комиссию, чем он был готов платить.
Однако аукционы по k-й цене имеют серьезный недостаток другого рода: они несовместимы с стимулами для аукциониста (т. е. для предлагающего блок). Во-первых, если предлагающий блок имеет достаточно крутую кривую спроса, в его интересах заполнить блок хотя бы несколькими «фиктивными транзакциями» с высокой комиссией, вытеснив транзакции с низкой комиссией и пожертвовав доход от этих транзакций, но в то же время резко повышая комиссию, которую должны платить все остальные.
Более серьезной проблемой является сговор между предлагающим и некоторыми отправителями транзакций. Предлагающий потенциально может вступить в сговор с отправителями транзакций с низкой комиссией (например, предположим, что есть один объект, такой как биржа или майнинговый пул, который отправляет такие транзакции и с которым можно легко договориться), которые отправляют транзакции с некоторой комиссией f low. Предлагающий может вместо этого попросить их отправить свои транзакции с комиссией f high и возместить им f high — f low. Доход предлагающего теперь еще выше: предлагающий получает выгоду от увеличения высоты «прямоугольника» комиссионного дохода, который он получил бы с помощью описанной выше стратегии «фиктивной транзакции», но он также получил бы часть дохода от транзакций, которыми они в противном случае пожертвовали бы.
Следовательно, аукционы как первой, так и второй цены имеют недостатки. Однако обратите внимание, что эти выпуски являются исключительно свойствами аукционов, а не свойствами продажи с фиксированной ценой. Если для включения в блокчейн просто необходимо заплатить некоторую минимальную комиссию, то у отправителей транзакций есть простая стратегия, которую они могут использовать для установления комиссии за свою транзакцию. Пусть v будет частной оценкой пользователя для транзакции, включенной в следующий блок. Пользователь должен проверить, если v > minFee; если это так, они сделают ставку minFee + tip (чтобы создать небольшой стимул для производителя блока включить транзакцию); если v < minFee, они не будут отправлять транзакцию. Это очень простая стратегия, не требующая знания чужих оценок и оптимальная для отправителя транзакции.
VI. Улучшение второго лучшего
На данный момент данные свидетельствуют о том, что жесткие ограничения количества используются чрезмерно, а минимальные цены используются недостаточно. Но как нам хотя бы начать пытаться установить минимальную цену?
В этом разделе мы покажем, что в тех случаях, когда минимальная цена лучше, можно улучшить жесткое ограничение количества таким образом, чтобы облегчить проблему безвозвратных убытков от краткосрочной волатильности комиссии за транзакцию, без необходимости установить конкретную цену в качестве параметра протокола. Ясно, что существуют большие безвозвратные потери из-за краткосрочной волатильности комиссии за транзакцию: комиссия за транзакцию Ethereum иногда составляет 2 гвей, а иногда 100 гвей, но совершенно неверно, что предельные социальные издержки блока, содержащего 8 000 001 газа, а не 8 000 000, в 50 раз выше. в том случае, когда верно последнее
Предположим, что мы начинаем с существующей политики, которая устанавливает ограничение веса wmax. Мы нормализуем единицы веса так, чтобы оптимальный предел веса и уровень комиссии за транзакцию были равны 1. Для простоты мы предполагаем линейность функции предельных социальных издержек и спроса: C’ (1 + x) = 1 + C» ∗ x и D'(1 + x) = 1 − D» ∗ x, где D» также можно рассматривать как эластичность спроса. Предположим, что wmax задано неправильно, равное 1 + r для некоторого r (на самом деле, wmax, конечно, неизбежно будет установлено неправильно, хотя мы, вероятно, не будем знать значение r и даже положительное оно или отрицательное). Мы можем нарисовать треугольник безвозвратных потерь, чтобы рассчитать размер экономической неэффективности:
Площадь треугольника, представляющая общие экономические потери от избыточного (или, если r отрицательно, недостаточного) количества включенных сделок, равна 1/2 ∗ r^2 ∗ (C‘’ + D’’); для простоты мы назовем это значение A. Теперь мы включим в модель тот факт, что спрос по своей природе нестабилен. Мы аппроксимируем это простой моделью, где D'(1 + х) в половине случаев равно 1 + D» ∗ x + δ, а другая половина времени равна 1 + D» ∗ x−δ. В период −δ высота треугольника увеличивается от r∗ (C» + D») до r∗ (C» + D») + δ, или отношение 1 + δ/( r∗(C»+D»))
По аналогичным законам треугольника ширина увеличивается в той же пропорции, поэтому площадь увеличивается от A до A ∗ (1 + δ/(r∗(C»+D») ))^2 . В период +δ площадь уменьшается до A∗(1 − δ/(r∗(C»+D»)))^2 . Среднее значение (1 + x)^2 + (1 − x)^2 равно 1 + x^2 , поэтому среднее значение двух площадей равно A ∗ (1 + (δ/(r∗(C»+D»)))^2 ).
Теперь предположим, что мы используем другой алгоритм. Протокол нацелен на долгосрочный средний вес 1 + r, но он делает это, устанавливая цену для транзакций, которая медленно корректируется с течением времени. Цена, на которую он будет ориентироваться, в этом случае равна 1 − D» ∗ r. Теперь давайте рассмотрим средние безвозвратные потери. Перемещение спроса вверх на δ сдвинет треугольник вправо на δ/D» , что увеличит его высоту на δ∗C»/D» .
Исходная высота была r∗(C» + D»), поэтому высота увеличивается в соотношении 1 + (δ∗C»/D»)/(r∗(C»’+D»)) . По аналогичным законам треугольника ширина увеличивается в той же пропорции, и в случае -δ мы меняем знак аналогичным образом; конечным результатом является то, что средняя площадь равна A ∗ (1 + ((δ∗C»/ D»)/(r∗(C»+D»))) \^2 ). Должно быть ясно, что средняя площадь во втором случае меньше (т.е. меньше неэффективности), чем средняя площадь в первом случае, если и только если (δ∗C»/ D»)/(r∗(C»+D»)) < δ/r∗(C''+ D'') , или же δ∗C''/ D'' < δ, или еще проще C'' < D'', а в остальных случаях средняя площадь во втором случае больше. Таким образом, это доказывает своего рода предельный аналог результата Вайцмана 1974 г., где в том же самом случае, когда выбор цены лучше, чем выбор количества, предел количества можно улучшить на пределе, заменив его на « гибкий лимит», который на самом деле представляет собой просто уровень цен, который корректируется в среднесрочной перспективе для достижения ограничения количества. Теперь мы предлагаем альтернативное правило ценообразования/ограничения ресурсов, которое, по нашему мнению, обеспечивает превосходные свойства по сравнению с жестким ограничением wmax:
Определите постоянно настраиваемый внутрипротокольный параметр minFee. С отправителей транзакций взимается комиссия в размере minFee за единицу веса; эта плата либо сгорает, либо перераспределяется среди участников консенсуса, отличных от инициатора блока, включающего эту транзакцию; это предотвращает выгодные побочные сделки, когда отправителям транзакций возмещается эта комиссия.
Определите новый предел веса, wnewmax = 2 ∗ wmax.
Определите параметр скорости регулировки adjSpeed, где 0 < adjSpeed <2.
В любом конкретном блоке пусть wprev будет количеством веса, потребленным в предыдущем блоке, а minFeeprev будет значением minFee предыдущего блока. См. minFee, чтобы этот блок был равен minFeeprev ∗ (1 + ( wprev/wnewmax − 1/2) ∗ adjSpeed.
Это правило, вероятно, превзойдет простые ограничения с точки зрения эффективности распределения по причинам, указанным выше, а также (за исключением внезапных и экстремальных скачков) устраняет проблемы с аукционами первой и второй цены, описанные выше.
В качестве философского замечания, комплексная политика в отношении газа и сборов часто подвергается критике как форма экономического «централизованного планирования», на которую не одобряют, поскольку планировщики могут не иметь согласованных стимулов и иметь меньше информации, чем участники, более близкие к повседневным экономическим процессам.
При этом обратите внимание, что любая политика ценообразования транзакций, будь то комиссионная или лимитная, обязательно имеет централизованно планируемые параметры. Я бы сказал, что правильный способ применить хайековскую интуицию против централизованного планирования состоит в том, чтобы трактовать ее как высказывание о том, что централизованные планы менее плохи, если эти планы имеют меньшую холмогоровскую сложность, и идеальным примером является простое строгое ограничение веса. Планы с низкой холмогоровской сложностью идеальны, потому что в них меньше движущихся частей, которые могут выйти из строя, с меньшей вероятностью переобучения, а поскольку в спецификации и параметризации плана так мало энтропии, очень трудно кодировать попытки в выигрыш или проигрыш.
Конкретные пользователи или приложения Это помогает сформировать общее впечатление о справедливости. По этой причине мы будем выступать за максимально простую политику, но в то же время являющуюся существенной и требующей улучшения статус-кво.
VII. Гетерогенные ресурсы в вычислениях и пропускной способности
Вышеупомянутый анализ ограничения веса предполагает, что один скаляр может достаточно количественно оценить нагрузку, которую транзакция возлагает на сеть. В действительности, однако, транзакция потребляет несколько разнородных ресурсов: вычисления и ввод-вывод состояния (здесь они сгруппированы в «вычисление»), пропускная способность и хранилище состояний. Каждый из них имеет разные свойства, и оптимальная схема ценообразования, скорее всего, должна учитывать эти различия. Мы начнем с рассмотрения вычислений и пропускной способности. Вычисления и пропускная способность вносят свой вклад в вычислительную нагрузку узла, и оба вносят свой вклад в «скорость дяди»; следовательно, оба они, по-видимому, подчиняются одной и той же механике линейных или сублинейных социальных издержек при более низких весах и сверхлинейных социальных издержек при более высоких весах. Если факторы, создающие сверхлинейные социальные издержки, независимы, может быть разумным иметь отдельный предел газа для вычислений и предел размера блока для пропускной способности; однако, поскольку большая часть сверхлинейности исходит из самой скорости удаления, а влияние вычислений и пропускной способности на скорость удаления кажется аддитивным, кажется более вероятным, что единый комбинированный предел на самом деле является оптимальным. Стоит задать один вопрос: можем ли мы каким-то образом измерить в протоколе социальную стоимость вычислений и пропускной способности или, по крайней мере, более ограниченную статистику, такую как максимальный уровень вычислений и пропускной способности, с которыми средний клиент может безопасно работать? Сложность майнинга Proof of Work очень прямо указывает обменный курс между собственной криптовалютой блокчейна и по крайней мере одним видом вычислений: если вознаграждение за блок блокчейна равно R, его алгоритм майнинга — H, а сложность — D, то в целом мы должны ожидаемая стоимость(H) ≈ R/D .
Однако этот подход чрезвычайно хрупок по отношению к достижениям в области технологий, таких как специализированное оборудование предполагают примерно 1000-5000-кратную разницу между эффективностью майнинга ASIC и оборудования GPU для майнинга биткойнов в настоящее время, и существует еще большее несоответствие между GPU и CPU. Это говорит о том, что, если бы сложность майнинга использовалась в качестве прокси для определения вычислительной мощности клиентов, чтобы определить ограничения на размер блока Биткойн, ограничение размера блока, первоначально нацеленное на 1 МБ, к настоящему времени выросло бы до многих гигабайт. Ограничение веса блока, нацеленное на оптимальное значение, основанное на предположении о 10000-кратном несоответствии между ASIC и CPU сегодня, напротив, может привести к тому, что предел станет в 100-10000 раз ниже оптимального, если преимущество специализации уменьшится в будущем либо из-за более широкого использования адаптивного полуспециализированного оборудования, такого как FPGA в потребительском оборудовании, либо из-за того, что специализированное оборудование не может выжать больше эффективность, когда даже аппаратное обеспечение общего назначения начинает приближаться к гермодинамическим пределам. Метрика стоимости на основе доказательства работы имеет дополнительный недостаток: стоимость (H) — это только стоимость однократного вычисления. Фактическая социальная стоимость также сильно зависит от количества узлов в сети, поскольку каждый узел должен будет выполнять вычисления, и это также чрезвычайно сложно измерить. Эту проблему можно обойти, изменив механизм, вместо этого потребовав от майнеров вычислить неаутсорсинговое доказательство работы и установив лимит вычислительного газа на основе наибольшего объема работы, представленной в течение некоторого периода времени, но это не получает вокруг специализированных аппаратных проблем. Можно попытаться стимулировать отправителей транзакций к представлению этих доказательств, но это сопряжено с высоким риском побуждения пользователей к использованию кошельков с централизованным хранением закрытых ключей. Аналогичным образом можно попытаться измерить пропускную способность с помощью доказательств пропускной способности, но это также сопряжено с высоким риском стимулирования концентрации. По сути, совместимое с поощрением измерение уровня возможностей узла требует стимулирования их к раскрытию возможностей с более высокими вознаграждениями за более высокие уровни раскрытых возможностей, и это по своей сути стимулирует специализированную и концентрированную аппаратную централизацию.
VIII. Хранение состояния ценообразования
Хранение состояния ценообразования — это совершенно иная нагрузка по сравнению с вычислениями, пропускной способностью и вводом-выводом состояния (рассматриваемые выше как просто еще один вид вычислений) по одной простой причине: в то время как эти затраты являются единовременной нагрузкой для валидаторов и узлов, которые в это время находятся в сети. В определенное время пространство состояний должно храниться и, таким образом, обременять все полные узлы навсегда.
В Биткойне нет явной платы за заполнение хранилища; транзакции просто тарифицируются побайтно, а заполнение хранилища оплачивается косвенно, потому что заполнение нового слота хранилища (потребление в среднем 61 байта) требует добавления около 34 байтов к транзакции (по крайней мере, для «обычных» выходов; нестандартные выходные данные могут быть сделаны всего за 9 байт), поэтому существует максимальная величина, на которую можно увеличить размер набора UTXO в одном блоке. Недавний форк Segregated Witness включает в себя модификацию, в которой данные подписи оплачиваются как 1 единица веса за байт, а данные без подписи — как 4 единицы веса за байт, максимум до 4 миллионов единиц веса; это относительно снижает стоимость расходования UTXOs и увеличивает стоимость создания новых UTXOs.
В Ethereum существует более сложный график затрат на газ для операций, влияющих на хранение. Существует два типа операций, которые могут повлиять на размер хранилища:
Опкод sstore, который сохраняет значение в хранилище контракта. Если sstore перезаписывает существующее значение, оно стоит 5 000 газа, но если оно добавляет новое значение в хранилище, оно стоит 20 000 газа. Если sstore используется для очистки существующего значения (чтобы его больше не нужно было сохранять в хранилище), то контракт стоит 5 000 газа, но отправителю транзакции предоставляется «возврат» в размере 15 000 газа.
Создание учетной записи. Аккаунты можно создавать тремя способами:
• создание контракта с использованием опкода create (32 000 газа, плюс 200 за байт кода)
• создание контракта с помощью транзакции (53 000 газа или 32 000 + 21 000 базовых затрат на отправку транзакции)
• отправка эфира на ранее несуществующий счет (25 000 газа, если это делается с контракта; если это делается с транзакции, базовая стоимость 21 000 газа).
Затраты на газ были рассчитаны путем принятия в качестве цели стоимости ≈ 200 газа на байт в хранилище, оценки количества байтов, добавляемых в пространство хранения каждым конкретным типом операции заполнения хранилища, умножения двух значений, а затем добавления дополнительного срока, чтобы принять во внимание другие затраты, такие как вычисления и вклад в размер истории.
Тем не менее, подходы как к Биткойну, так и к Эфириуму имеют четыре большие проблемы, которые приводят к очень неоптимальным результатам:
Хранение слишком дешево в абсолютном смысле. Например, чтобы заставить текущих пользователей сети Ethereum загрузить и обработать байт, требуется 68 газов, но 200 газов достаточно, чтобы заставить всех нынешних и будущих пользователей делать то же самое (и хранить данные вечно).
Социальная стоимость хранения гораздо более линейна, особенно в краткосрочной и средней перспективе, чем затраты на вычисления, пропускную способность и дисковый ввод-вывод. Если хранилище обычно увеличивается на 1 МБ в день, но за один месяц оно увеличивается на 100 КБ в день большую часть дней, за исключением последнего дня, когда оно внезапно увеличивается на 27 МБ, дополнительная волатильность в росте хранилища на самом деле никому не повредит.
Нет достаточных стимулов для очистки хранилища. В крайнем случае, в зависимости от ставок комиссии, 10-60% UTXO в состоянии Биткойн имеют достаточно низкую стоимость, чтобы их клиринг стоил больше денег, чем содержится в UTXOs.
Большинство создаваемых контрактов Ethereum не уничтожаются, и многие из них не имеют эффективной «гигиены хранения».
Нет стимула очищать хранилище раньше, чем позже. Даже если возмещение за очистку хранилища существует, в настоящее время оно не зависит от времени.
Первую проблему, возможно, можно решить, просто удорожив хранение. Однако если сделать хранение более дорогим и ничего больше не делать, то использование хранилища в течение очень коротких периодов времени станет непомерно дорогим. Можно было бы предложить возмещение на основе времени, возвращая больше, если слот для хранения очищается раньше, чем позже; единственная безарбитражная схема для этого состоит в том, чтобы определить некоторую убывающую неотрицательную функцию F(t) (например, F(t) = h ∗ e^−kt) текущего времени и взимать плату F(t) за заполнение слота хранения в время t и возместить F(t) за очистку слота хранилища в момент времени t.
Однако этот подход очень неэффективен с точки зрения капитала, требует больших депозитов для использования хранилища и, кроме того, основан на предположении, что общественная стоимость хранения будет продолжать постоянно уменьшаться достаточно быстро, чтобы интеграл сошелся.
Решением, которое не имеет этих проблем, является введение повременной платы за обслуживание хранилища (иногда также называемой «арендной платой»). Простейший способ реализовать это прост: с каждого объекта учетной записи взимается X монет за блок за байт, который он потребляет в состоянии. Если на учетной записи меньше монет, чем требуется для оплаты пороговых блоков pokeThreshold (скажем, pokeThreshold = 500), то любой может «подсунуть» учетную запись, удалить ее из хранилища и потребовать арендную плату за k ∗ pokeThreshold пороговых блоков как вознаграждение, где k ∈ (0, 1]. Реализация вышеизложенного нецелесообразна, поскольку каждый блок, проходящий через каждую учетную запись и уменьшающий его баланс, имеет огромные накладные расходы. Однако это можно довольно практически вычислить с помощью ленивых вычислений:
Во всех учетных записях хранится дополнительное поле данных LastBlockAccessed.
Текущий баланс учетной записи может быть рассчитан как balance — perBlockFee * sizeOf(account) * (curBlock-LastBlockAccessed)
Аккаунт может быть взломан, если это значение ниже perBlockFee ∗ sizeOf(account) ∗ pokeThreshold
Когда состояние учетной записи изменяется, ее баланс обновляется на основе приведенной выше формулы, а LastBlockAccessed устанавливается равным текущему номеру блока.
Предположим, мы хотим, чтобы плата за обслуживание могла меняться с течением времени. Затем для всех высот блоков h мы сохраняем в памяти totalFee[h] = totalFee[h − 1] + Fee[h]. Мы вычисляем текущий баланс как balance-sizeOf(account)*(totalFee[curBlock]-totalFee[LastBlockAccessed]), где totalFee[curBlock] — totalFee[LastBlockAccessed] можно понимать как
Однако мы будем выступать за то, чтобы просто установить плату за обслуживание на одно конкретное значение (например, 10^-7 ETH за байт в год) и оставить так навсегда. Во-первых, социальные издержки использования хранилища явно почти идеально линейны в краткосрочной и среднесрочной перспективе, но они также гораздо более линейны в долгосрочной перспективе. Нет аналога естественной асимптоте пропускной способности и стоимости вычислений в блокчейнах, где в какой-то момент ставка дяди достигает 100%; даже если хранилище блокчейна Ethereum начнет увеличиваться на 10 ГБ в день, тогда узлы блокчейна будут быстро переведены только в центры обработки данных, но блокчейн по-прежнему будет в основном функциональным. На самом деле, если предположить, что емкость хранилища узла распределена среди того же распределения, что и исследование Корнелла [6], показывает, что пропускная способность равна, поэтому NodeCount(W) = 1 W и предполагается логарифмическая функция полезности для количества узлов, поэтому D(x) = log(x) = -log(W) тогда компонент социальных издержек от централизации узла примерно равен C(W) = log(W) или C’ (W) = 1/W — имеет крутую сублинейность.
Во-вторых, опыт разработчиков и пользователей значительно улучшится, если разработчики и пользователи смогут точно определить минимальное «время жизни» для любого конкретного контракта заранее. Переменные сборы не обладают этим свойством; фиксированная обладает. В-третьих, поскольку цены на криптовалюту более стабильны, чем комиссии за транзакции, фиксированная комиссия повышает предсказуемость цен как в криптовалюте, так и в фиатных деньгах. В-четвертых, фиксированная плата проста как интуитивно, так и в полуформальном смысле низкой Холмогоровской сложности.
IX. Цены на хранилище и пользовательский опыт
Для простой криптовалюты ущерб от удаления одного конкретного UTXOs или учетной записи из-за того, что ее баланс был полностью опустошен за счет платы за обслуживание хранилища, очень прост для понимания, и нет никаких сложных эффектов взаимодействия между различными учетными записями или UTXOs, которые могут возникнуть. Для более сложного блокчейна смарт-контрактов аренда действительно создает больше сложностей, поскольку будут контракты, которые очень ценны по причинам, отличным от ETH (или другой базовой валюты уровня протокола), содержащейся в них, например, их функции в качестве программных библиотек, определенные пользователем активы (ERC20, ERC721 и т. д.), которые они держат, активные отношения с другими смарт-контрактами и т. д. Следовательно, существует больший риск того, что приложение внезапно станет непригодным для использования, потому что кто-то забыл заплатить плату за обслуживание. Такие ситуации, как правило, можно обнаружить заблаговременно, но если это произойдет, то можно добавить вторую резервную копию, которая смягчит последствия удалений, возникающих из-за неуплаты платы за обслуживание по небрежности: схема гибернации/пробуждения. Учетные записи, у которых заканчиваются средства для оплаты их обслуживания, удаляются из штата, но не удаляются; скорее, они впадают в спячку. Для любого спящего контракта любой может представить доказательства Меркла, подтверждающие два утверждения:
Данный спящий контракт существует
Этот конкретный экземпляр спящего режима еще не использовался для пробуждения контракта.
Условие (2) необходимо для предотвращения атаки двойного пробуждения, когда контракт один раз переходит в спящий режим, а затем используется доказательство его спящего режима для двойного пробуждения старого контракта:
Если контракт содержит больше средств во время более старой гибернации, чем во время новой гибернации, то такая атака может быть использована для создания средств из ниоткуда. Доказательство второго типа можно провести следующим образом. Определите MinInterval как минимальное время, в течение которого слот хранилища может использоваться (например, 1 неделя):
• Добавить условие в логику оплаты комиссии: при пробуждении контракта он должен быть заполнен как минимум (MinInterval + pokeThreshold) ∗ sizeOf(contract) ∗ FePerBlock эфира. Контракт также не может снять столько, чтобы его остаток после снятия упал ниже этого порога.
• Доказательство отсутствия предварительного пробуждения состоит из ветки Merkle, указывающей на адрес контракта один раз в каждый MinInterval.
Настройка MinInterval является компромиссом: меньшие значения позволяют дешево запускать контракты на более короткие периоды времени, но большие значения уменьшают размер свидетеля, необходимого для пробуждения, а также уменьшают количество постоянно растущих корней исторических состояний, которые необходимо хранить. . Для MinInterval в одну неделю, а в штате с 230 учетными записями для пробуждения контракта десятилетней давности потребуется 32 ∗ log(2 < sup > 30 < /sup >) ∗ 10 ∗ 365,242 / 7 ≈ 500 000 байт; MinInterval, равный одному месяцу, уменьшает это значение до 115 200 байт.
X. Заключение
Экономический анализ может быть использован для значительного улучшения мотивации использования ресурсов внутри публичных блокчейнов. Упрощенные модели одномерных пределов веса часто приводят к сильному несоответствию цен по сравнению с социальными издержками, а несколько более сложные методы, включающие комбинацию «пиговианских налогов» и механики ограничения и торговли, такие как ограничения веса, могут значительно улучшить статус-кво. В частности, хранилище — это рынок ресурсов, сильно отличающийся от других типов рынков ресурсов, и его следует рассматривать отдельно. Можно использовать дополнительный экономический анализ и эконометрические исследования, чтобы помочь определить дополнительные механизмы, которые можно использовать для лучшего снижения затрат, одновременно препятствуя расточительному использованию общедоступных ресурсов блокчейна.