Дизайн первого топливного сбора MOVE: как рассчитывается топливный сбор в блокчейне?
Измерение платы за топливо является основополагающей концепцией многих блокчейнов, оно определяет абстрактные вычисления, необходимые для выполнения и хранения транзакций в блокчейне. Планы по оплате за топливо определяют все затраты, понесенные при выполнении на блокчейне, и используются для расчета затрат на топливо, используемое во время выполнения транзакций.
процесс
Чтобы эффективно выполнить, процессы в блокчейне таковы:
определение принципов;
Подготовка оценочной рамки для определения цены каждого исполнения;
для MOVE создать систему учета топливных сборов и безопасную алгебру топливных сборов;
Импортировать структуру платы за топливо вверх по течению;
делает структуру платы за топливо осведомленной о хранении;
Более детализированный план расходов на топливо.
принцип
Определённый принцип:
Стоимость операций должна быть напрямую связана с доступными ресурсами в сети, такими как CPU, память, сеть, хранение I/O и использование пространства (. Когда технологии и процессы улучшаются, стоимость топлива должна соответственно снижаться.
Плата за топливо должна быть установлена в блокчейне управления и может быть бесшовно настроена.
Топливный сбор может предотвратить DoS-атаки на фиксированные ресурсы сети и может потребовать быстрого корректирования в зависимости от состояния сети через предложения по управлению.
Цена на топливо отражает желание ускоренного роста и обеспечения доступности блокчейна для всех.
Поощрение делать правильные выборы в дизайне - например, приоритет безопасности, модульности, утверждений и других событий.
) расчет топливных расходов
Когда пользователь отправляет транзакцию, они также должны указать два количества в транзакции:
Максимальное количество топливных сборов: измеряется в единицах топливных сборов. Это максимальное количество единиц топливных сборов, которое пользователь готов потратить на выполнение транзакции.
Цена топлива: рассчитывается в восьмеричной системе для каждой единицы топлива, где 1 восьмеричная = 0.00000001 APT###=$10^{-8}$(. Это цена, которую пользователь готов заплатить за топливо.
В процессе выполнения транзакции будет взиматься:
фиксированные затраты, фиксированная база плюс дополнительные расходы на крупные сделки.
стоимость выполнения, используемая для выполнения команды MOVE.
чтение затрат, используемых для чтения данных из постоянного хранилища.
стоимость записи, используемая для записи данных в постоянное хранилище.
Итоговая комиссия за транзакцию может быть рассчитана по общему количеству израсходованных единиц топлива ), умноженному на цену за единицу топлива. Например, если для одной транзакции было израсходовано 670 единиц топлива, а пользователь указал цену за единицу топлива в 100 Octa, то итоговая комиссия за транзакцию составит 670 * 100 = 67000 Octa = 0.00067 APT.
Если в процессе выполнения транзакции иссякнет топливо, отправитель будет взимать плату в соответствии с максимальным объемом топлива, и все изменения, внесенные этой транзакцией, будут отменены.
( Создание плана топливных сборов
1. Основная конфигурация
В плане топливных сборов есть несколько компонентов, не связанных с деталями одной операции, включая размер транзакции и максимальную единицу топливного сбора ), которая отличается от максимального объема топливного сбора, указанного пользователем в транзакции ###.
2. Масштаб сделки
Для большинства транзакций размер транзакции может находиться в пределах нескольких килобайт. Однако публикация модуля MOVE может легко достигать нескольких тысяч байт, а фреймворк составляет около 100 КБ. Размер большинства пользовательских модулей обычно составляет от 4 КБ до 40 КБ. Изначально мы установили значение размера транзакции на 32 КБ, но в ответ на отзывы сообщества, требующие предоставить больше места для упрощения разработки приложений, мы увеличили размер транзакции до 64 КБ.
Очень крупные сделки могут привести к увеличению затрат на пропускную способность всей сети и негативно сказаться на производительности. Если это будет злоупотреблено, пулы памяти будут побуждены игнорировать более крупные транзакции, поэтому наш подход заключается в том, чтобы найти баланс между размером и доступностью самых крупных транзакций.
3. Максимальная единица платы за топливо
Максимальная единица топливного сбора в плане топливных сборов определяет, сколько операций может быть выполнено в одной транзакции. Обратите внимание! Это отличается от максимального объема топливного сбора, указанного пользователем в транзакции.
Максимальное значение единицы топлива в плане топлива непосредственно влияет на то, как долго может выполняться транзакция, и установка его слишком высокого значения может негативно сказаться на производительности блокчейна. Например, пользователь может забыть о наличии инкремента в цикле while, что приведет к бесконечному циклу, что является распространенной ошибкой. Мы обнаружили, что даже после того, как мы провели максимальное обновление фрейма, мы все еще не достигли 90% от установленной максимальной единицы топлива плана топлива (, равной 1,000,000).
4. Выполнение
Чтобы оценить стоимость выполнения, мы создали базовую структуру и использовали Valgrind для анализа Move VM при выполнении этой структуры. Его выводом является набор аннотированных исходных кодов, который сообщает нам, сколько машинных инструкций генерирует каждая строка кода.
С помощью вышеуказанного анализа мы грубо оценили относительную стоимость всех команд MOVE и встроенных функций. Однако мы заметили, что у этого метода есть некоторые проблемы с инлайновыми функциями: они не включаются автоматически в подсчет вызывающего. Мы также увидели, что это происходит только при анализе некоторых команд MOVE, и мы можем решить эту проблему, сложив числа.
Затем, учитывая примеры кодирования, повышающие надежность и безопасность системы, команда пришла к количеству машинных инструкций для окончательного выполнения. Это число последовательно взвешивалось с учетом единиц хранения и максимальной стоимости топлива, чтобы определить их текущую стоимость в плане затрат на топливо.
5. Хранение
Каждый раз, когда узел обращается к состояниям учетной записи или данным, хранящимся в постоянном хранилище, он отправляет запрос на чтение или запись к устройству хранения. Общее количество доступов к данным в секунду зависит от пропускной способности устройства хранения и емкости IOPS. Подобно вычислению циклов ЦП для расчета топливных сборов, доступ к данным представляет собой мгновенную редкость, за которую конкурируют пользователи блокчейна на рынке сборов в условиях нагрузки на систему. Кроме того, стоимость занимаемого дискового пространства для записи данных в блокчейне является постоянной. Команда разрабатывает план топливных сборов для хранения, учитывая эти затраты.
Доступ и хранение любого элемента состояния влечет за собой затраты, связанные со структурой данных морской медузы Меркла, которая проверяет состояние всей блокчейн-сети. Эти затраты связаны с кардинальностью различных элементов состояния ($2^{256}$). Также существует затрата, пропорциональная размеру каждого элемента. Для выполнения операции с элементом состояния плата составляет (, за исключением случаев, описанных в следующем разделе ):
Доступ к элементам состояния относится к одному из следующих трех типов: чтение, создание или запись. Доступ взимается на основе стоимости элементов и стоимости байтов, как показано в вышеуказанном уравнении.
Чтение — это самая распространенная операция, которая ограничена только временной нехваткой ресурсов. Поэтому стоимость чтения калибруется в зависимости от IOPS диска ), стоимости проекта ### и пропускной способности, указанной в спецификациях оборудования.
create добавляет новый элемент в хранилище состояния. Поэтому create увеличивает структуру данных аутентификации, что делает все более дорогим, а следовательно, и стоимость максимально высокой. Стоимость создания калибруется в зависимости от ссылочного дискового пространства, имеющегося в сети. Таким образом, заполнение диска элементом (item_fee) и байтом (byte_fee) требует значительных затрат на топливо.
Запись обновляет существующие элементы в хранилище состояния. Таким образом, запись не создает дополнительных затрат в структуре данных аутентификации. Однако, модифицируя существующие записи на большие байты, все же можно повредить диск. Поэтому мы взимаем такую же плату за байты в обновленных элементах, как и при их создании.
Следует отметить, что затраты, связанные с хранением, оцениваются на основе каждой транзакции: даже если вы многократно читаете/записываете один и тот же ресурс, вы платите только один раз.
Учитывая вышеизложенное, мы определили 6 параметров топливного сбора, которые составляют часть общей стоимости топливного сбора. См. ниже:
per_item_read:Коррекция в соответствии с IOPs
per_byte_read: калибровка по фактической пропускной способности
per_item_create:Калибровка в соответствии с общей целью проекта
per_byte_create: Калибровка в зависимости от целевого общего размера - первый 1KB, содержащийся в каждом элементе.
per_item_write: То же, что и per_item_read
per_byte_write: То же, что и per_byte_create
( стабильная стоимость единицы топливного сбора
Независимо от того, какова рыночная стоимость выполнения операций в APT или фиатной валюте, каждая операция и сама сделка требуют фиксированной единичной стоимости по сравнению с затратами на хранение и выполнение. Фиксированная единичная стоимость топливного сбора помогает сохранить непостоянство плана топливного сбора и открепляет его от рыночной стоимости APT. Кроме того, правильный выбор точности единицы топливного сбора помогает сохранить план топливного сбора неизменным. С учетом этого команда представляет единицу топливного сбора с точностью примерно в 3 знака. Таким образом, стоимость перевода составляет примерно 700 единиц топливного сбора.
) участие сообщества
Хотя мы вложили много усилий в план затрат на топливо, этого все еще недостаточно для его совершенствования. Как проект сообщества, участники сообщества могут выбрать:
1### На основании вашего опыта, выявите нерациональные места в плане топливных расходов;
2### Выразите свои опасения по поводу плана топливных сборов и участвуйте в обсуждении в сообществе.
голосовать по предложению о治理, связанному с топливными расходами.
) Как настроить стоимость топливного сбора?
План топливных сборов хранится как конфигурация в блокчейне, но может быть изменен через предложения по治理, и новые инструкции или нативные функции могут быть добавлены без проблем.
План платы за топливо разработан как масштабируемый, что позволяет обновлять его через предложения по управлению. С постоянным улучшением Move VM и учетом отзывов пользователей параметры платы за топливо могут корректироваться с течением времени.
Иногда формулы топливных сборов могут требовать сложных изменений, выходящих за рамки конфигурации в блокчейне. Эти формулы топливных сборов обычно кодируются на Rust и различаются по признакам топливных сборов в блокчейне. Чтобы обновить эти формулы, необходимо обновить программное обеспечение узлов с новыми формулами и различать их с помощью других признаков топливных сборов. Затем необходимо выпустить программное обеспечение узлов и добиться его массового применения операторами узлов, и, наконец, необходимо опубликовать и утвердить предложение по управлению, чтобы использовать новую версию топливных сборов.
) Будущее работы
Это первая жизнеспособная структура комиссий за топливо для MOVE. Она требует значительных изменений в Move VM и Core. Мы надеемся, что эта работа проложит путь для будущей работы:
1### Снижение затрат на выполнение, наличие реальной модели топливных сборов показывает, где компилятор и виртуальная машина эффективны, команда может улучшить большинство из них для снижения затрат на выполнение.
2### Многоуровневый расчет топливных затрат, позволяет пользователям задавать отдельный бюджет для выполнения и хранения. Таким образом, пользователям не придется платить высокие цены за топливные затраты из-за длительного времени выполнения приложений с плохим кодом. Это также позволит более детально определять максимальную цену за топливные затраты для транзакций в блокчейне;
3) Устранение избыточного состояния, в настоящее время нет простого способа уменьшить набор состояния, кроме как явного удаления объектов контрактом ) или пользователем ). Платежи пользователей за удаление данных могут создать возможности для арбитража, когда пользователи создают хранилище, когда это дешево, и удаляют его, когда это дорого. Задержка в решении этой проблемы может ослабить мотивацию разработчиков удалять данные в блокчейне. Команда исследует концепцию TTL для каждого проекта, которая будет удалять неиспользуемые элементы состояния по истечении срока действия TTL.
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
4 Лайков
Награда
4
5
Репост
Поделиться
комментарий
0/400
PrivateKeyParanoia
· 8ч назад
Как вы оцениваете по сравнению с ETH, который стоит безумных денег?
Посмотреть ОригиналОтветить0
ImpermanentLossEnjoyer
· 08-11 10:13
Кто сможет справиться с этой дорогой ценой на топливо?
Посмотреть ОригиналОтветить0
rekt_but_resilient
· 08-11 10:11
Собаки знают, что газ для move ужасно дорогой
Посмотреть ОригиналОтветить0
0xSleepDeprived
· 08-11 10:07
move тоже начал забирать деньги, трудно терпеть
Посмотреть ОригиналОтветить0
EthSandwichHero
· 08-11 09:56
Всего лишь эти расходы на топливо? мир криптовалют новичок в шоке
Основной механизм оплаты за топливо в языке MOVE: как точно рассчитываются затраты на выполнение в блокчейне
Дизайн первого топливного сбора MOVE: как рассчитывается топливный сбор в блокчейне?
Измерение платы за топливо является основополагающей концепцией многих блокчейнов, оно определяет абстрактные вычисления, необходимые для выполнения и хранения транзакций в блокчейне. Планы по оплате за топливо определяют все затраты, понесенные при выполнении на блокчейне, и используются для расчета затрат на топливо, используемое во время выполнения транзакций.
процесс
Чтобы эффективно выполнить, процессы в блокчейне таковы:
определение принципов;
Подготовка оценочной рамки для определения цены каждого исполнения;
для MOVE создать систему учета топливных сборов и безопасную алгебру топливных сборов;
Импортировать структуру платы за топливо вверх по течению;
делает структуру платы за топливо осведомленной о хранении;
Более детализированный план расходов на топливо.
принцип
Определённый принцип:
Стоимость операций должна быть напрямую связана с доступными ресурсами в сети, такими как CPU, память, сеть, хранение I/O и использование пространства (. Когда технологии и процессы улучшаются, стоимость топлива должна соответственно снижаться.
Плата за топливо должна быть установлена в блокчейне управления и может быть бесшовно настроена.
Топливный сбор может предотвратить DoS-атаки на фиксированные ресурсы сети и может потребовать быстрого корректирования в зависимости от состояния сети через предложения по управлению.
Цена на топливо отражает желание ускоренного роста и обеспечения доступности блокчейна для всех.
Поощрение делать правильные выборы в дизайне - например, приоритет безопасности, модульности, утверждений и других событий.
) расчет топливных расходов
Когда пользователь отправляет транзакцию, они также должны указать два количества в транзакции:
Максимальное количество топливных сборов: измеряется в единицах топливных сборов. Это максимальное количество единиц топливных сборов, которое пользователь готов потратить на выполнение транзакции.
Цена топлива: рассчитывается в восьмеричной системе для каждой единицы топлива, где 1 восьмеричная = 0.00000001 APT###=$10^{-8}$(. Это цена, которую пользователь готов заплатить за топливо.
В процессе выполнения транзакции будет взиматься:
фиксированные затраты, фиксированная база плюс дополнительные расходы на крупные сделки.
стоимость выполнения, используемая для выполнения команды MOVE.
чтение затрат, используемых для чтения данных из постоянного хранилища.
стоимость записи, используемая для записи данных в постоянное хранилище.
Итоговая комиссия за транзакцию может быть рассчитана по общему количеству израсходованных единиц топлива ), умноженному на цену за единицу топлива. Например, если для одной транзакции было израсходовано 670 единиц топлива, а пользователь указал цену за единицу топлива в 100 Octa, то итоговая комиссия за транзакцию составит 670 * 100 = 67000 Octa = 0.00067 APT.
Если в процессе выполнения транзакции иссякнет топливо, отправитель будет взимать плату в соответствии с максимальным объемом топлива, и все изменения, внесенные этой транзакцией, будут отменены.
( Создание плана топливных сборов
1. Основная конфигурация
В плане топливных сборов есть несколько компонентов, не связанных с деталями одной операции, включая размер транзакции и максимальную единицу топливного сбора ), которая отличается от максимального объема топливного сбора, указанного пользователем в транзакции ###.
2. Масштаб сделки
Для большинства транзакций размер транзакции может находиться в пределах нескольких килобайт. Однако публикация модуля MOVE может легко достигать нескольких тысяч байт, а фреймворк составляет около 100 КБ. Размер большинства пользовательских модулей обычно составляет от 4 КБ до 40 КБ. Изначально мы установили значение размера транзакции на 32 КБ, но в ответ на отзывы сообщества, требующие предоставить больше места для упрощения разработки приложений, мы увеличили размер транзакции до 64 КБ.
Очень крупные сделки могут привести к увеличению затрат на пропускную способность всей сети и негативно сказаться на производительности. Если это будет злоупотреблено, пулы памяти будут побуждены игнорировать более крупные транзакции, поэтому наш подход заключается в том, чтобы найти баланс между размером и доступностью самых крупных транзакций.
3. Максимальная единица платы за топливо
Максимальная единица топливного сбора в плане топливных сборов определяет, сколько операций может быть выполнено в одной транзакции. Обратите внимание! Это отличается от максимального объема топливного сбора, указанного пользователем в транзакции.
Максимальное значение единицы топлива в плане топлива непосредственно влияет на то, как долго может выполняться транзакция, и установка его слишком высокого значения может негативно сказаться на производительности блокчейна. Например, пользователь может забыть о наличии инкремента в цикле while, что приведет к бесконечному циклу, что является распространенной ошибкой. Мы обнаружили, что даже после того, как мы провели максимальное обновление фрейма, мы все еще не достигли 90% от установленной максимальной единицы топлива плана топлива (, равной 1,000,000).
4. Выполнение
Чтобы оценить стоимость выполнения, мы создали базовую структуру и использовали Valgrind для анализа Move VM при выполнении этой структуры. Его выводом является набор аннотированных исходных кодов, который сообщает нам, сколько машинных инструкций генерирует каждая строка кода.
С помощью вышеуказанного анализа мы грубо оценили относительную стоимость всех команд MOVE и встроенных функций. Однако мы заметили, что у этого метода есть некоторые проблемы с инлайновыми функциями: они не включаются автоматически в подсчет вызывающего. Мы также увидели, что это происходит только при анализе некоторых команд MOVE, и мы можем решить эту проблему, сложив числа.
Затем, учитывая примеры кодирования, повышающие надежность и безопасность системы, команда пришла к количеству машинных инструкций для окончательного выполнения. Это число последовательно взвешивалось с учетом единиц хранения и максимальной стоимости топлива, чтобы определить их текущую стоимость в плане затрат на топливо.
5. Хранение
Каждый раз, когда узел обращается к состояниям учетной записи или данным, хранящимся в постоянном хранилище, он отправляет запрос на чтение или запись к устройству хранения. Общее количество доступов к данным в секунду зависит от пропускной способности устройства хранения и емкости IOPS. Подобно вычислению циклов ЦП для расчета топливных сборов, доступ к данным представляет собой мгновенную редкость, за которую конкурируют пользователи блокчейна на рынке сборов в условиях нагрузки на систему. Кроме того, стоимость занимаемого дискового пространства для записи данных в блокчейне является постоянной. Команда разрабатывает план топливных сборов для хранения, учитывая эти затраты.
Доступ и хранение любого элемента состояния влечет за собой затраты, связанные со структурой данных морской медузы Меркла, которая проверяет состояние всей блокчейн-сети. Эти затраты связаны с кардинальностью различных элементов состояния ($2^{256}$). Также существует затрата, пропорциональная размеру каждого элемента. Для выполнения операции с элементом состояния плата составляет (, за исключением случаев, описанных в следующем разделе ):
Хранение топливного сбора = item_fee + (байт_сбор * bytes)
( Чтение, создание и запись
Доступ к элементам состояния относится к одному из следующих трех типов: чтение, создание или запись. Доступ взимается на основе стоимости элементов и стоимости байтов, как показано в вышеуказанном уравнении.
Чтение — это самая распространенная операция, которая ограничена только временной нехваткой ресурсов. Поэтому стоимость чтения калибруется в зависимости от IOPS диска ), стоимости проекта ### и пропускной способности, указанной в спецификациях оборудования.
create добавляет новый элемент в хранилище состояния. Поэтому create увеличивает структуру данных аутентификации, что делает все более дорогим, а следовательно, и стоимость максимально высокой. Стоимость создания калибруется в зависимости от ссылочного дискового пространства, имеющегося в сети. Таким образом, заполнение диска элементом (item_fee) и байтом (byte_fee) требует значительных затрат на топливо.
Запись обновляет существующие элементы в хранилище состояния. Таким образом, запись не создает дополнительных затрат в структуре данных аутентификации. Однако, модифицируя существующие записи на большие байты, все же можно повредить диск. Поэтому мы взимаем такую же плату за байты в обновленных элементах, как и при их создании.
Следует отметить, что затраты, связанные с хранением, оцениваются на основе каждой транзакции: даже если вы многократно читаете/записываете один и тот же ресурс, вы платите только один раз.
Учитывая вышеизложенное, мы определили 6 параметров топливного сбора, которые составляют часть общей стоимости топливного сбора. См. ниже:
per_item_read:Коррекция в соответствии с IOPs
per_byte_read: калибровка по фактической пропускной способности
per_item_create:Калибровка в соответствии с общей целью проекта
per_byte_create: Калибровка в зависимости от целевого общего размера - первый 1KB, содержащийся в каждом элементе.
per_item_write: То же, что и per_item_read
per_byte_write: То же, что и per_byte_create
( стабильная стоимость единицы топливного сбора
Независимо от того, какова рыночная стоимость выполнения операций в APT или фиатной валюте, каждая операция и сама сделка требуют фиксированной единичной стоимости по сравнению с затратами на хранение и выполнение. Фиксированная единичная стоимость топливного сбора помогает сохранить непостоянство плана топливного сбора и открепляет его от рыночной стоимости APT. Кроме того, правильный выбор точности единицы топливного сбора помогает сохранить план топливного сбора неизменным. С учетом этого команда представляет единицу топливного сбора с точностью примерно в 3 знака. Таким образом, стоимость перевода составляет примерно 700 единиц топливного сбора.
) участие сообщества
Хотя мы вложили много усилий в план затрат на топливо, этого все еще недостаточно для его совершенствования. Как проект сообщества, участники сообщества могут выбрать:
1### На основании вашего опыта, выявите нерациональные места в плане топливных расходов;
2### Выразите свои опасения по поводу плана топливных сборов и участвуйте в обсуждении в сообществе.
) Как настроить стоимость топливного сбора?
План топливных сборов хранится как конфигурация в блокчейне, но может быть изменен через предложения по治理, и новые инструкции или нативные функции могут быть добавлены без проблем.
План платы за топливо разработан как масштабируемый, что позволяет обновлять его через предложения по управлению. С постоянным улучшением Move VM и учетом отзывов пользователей параметры платы за топливо могут корректироваться с течением времени.
Иногда формулы топливных сборов могут требовать сложных изменений, выходящих за рамки конфигурации в блокчейне. Эти формулы топливных сборов обычно кодируются на Rust и различаются по признакам топливных сборов в блокчейне. Чтобы обновить эти формулы, необходимо обновить программное обеспечение узлов с новыми формулами и различать их с помощью других признаков топливных сборов. Затем необходимо выпустить программное обеспечение узлов и добиться его массового применения операторами узлов, и, наконец, необходимо опубликовать и утвердить предложение по управлению, чтобы использовать новую версию топливных сборов.
) Будущее работы
Это первая жизнеспособная структура комиссий за топливо для MOVE. Она требует значительных изменений в Move VM и Core. Мы надеемся, что эта работа проложит путь для будущей работы:
1### Снижение затрат на выполнение, наличие реальной модели топливных сборов показывает, где компилятор и виртуальная машина эффективны, команда может улучшить большинство из них для снижения затрат на выполнение.
2### Многоуровневый расчет топливных затрат, позволяет пользователям задавать отдельный бюджет для выполнения и хранения. Таким образом, пользователям не придется платить высокие цены за топливные затраты из-за длительного времени выполнения приложений с плохим кодом. Это также позволит более детально определять максимальную цену за топливные затраты для транзакций в блокчейне;
3) Устранение избыточного состояния, в настоящее время нет простого способа уменьшить набор состояния, кроме как явного удаления объектов контрактом ) или пользователем ). Платежи пользователей за удаление данных могут создать возможности для арбитража, когда пользователи создают хранилище, когда это дешево, и удаляют его, когда это дорого. Задержка в решении этой проблемы может ослабить мотивацию разработчиков удалять данные в блокчейне. Команда исследует концепцию TTL для каждого проекта, которая будет удалять неиспользуемые элементы состояния по истечении срока действия TTL.