Расчёт затрат в эфириум контрактах

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

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

Как видно, требуется невероятный избыточный объём вычислений даже для маленького количества обрабатываемой информации (маленького обрабатываемого события) в сети. А именно, каждый узел должен проверять результаты каждой транзакции — читай: каждый узел дублирует все вычисления.

Удивительно то, что, люди, даже независимо от опыта работы с блокчейн приложениями и зная вышеназванный факт, очень редко прямо говорят о нём, или вообще никогда не упоминают его. Как только люди касаются технической стороны дела, такое свойство блокчейн становится очевидной особенностью системы. Но если человек «менее посвящён», то такое свойство системы не и представляется ему столь очевидным. Закономерен вопрос: разве такой подход не является более затратным, например, по сравнению с обычными серверными вычислениями? Да, является, и характер протокола диктует именно такой затратный подход . Следующий постулат, вероятно, является основополагающим принципом экономики криптовалют и связанных с ними вычислений, или, того, и другого:

«Чем больше машин, обрабатывающих код, тем больше денежных затрат, уходящих на обработку кода».

Мы должны помнить, что выполнение кода и обновление состояния блока (-ов) на эфириуме происходит далеко не так же, как на простом сервере. Результирующие изменения состояния блока в сети эфириум имеют иные свойства, чем подобные же изменения, получаемые при помощи вычислений на сервере, а именно – свойства неизменяемости и публичной проверяемости. Давайте сначала посмотрим, сколько в действительности стоят вычисления в сети, а затем мы сможем попытаться решить, «стоит ли оно того».

Итак, сколько это стоит?

Газ

Все операции низкого уровня, доступные в EVM (виртуальная машина Ethereum), называются OPCODE. К ним относятся такие операции, как ADD — добавление двух целых чисел, BALANCE — получение баланса учётной записи, CREATE — создание нового контракта с предоставленным кодом, и др. Каждая из этих OPCODE имеет связанное (с соотв. операцией) число, называемое «газ». Газ — это абстрактное число, которое воплощает в себе относительную сложность операций. Например, операция ADD использует 3 газа, в то время как операция MUL (умножение двух целых чисел) использует 5 газов, поэтому MUL — сложнее, чем ADD.

Здесь собраны газы, необходимые для каждого OPCODE в EVM. Эта информация взята из самой последней версии «Yellow Paper» эфириума (EIP-150 Revision) — официальной спецификации протокола эфириум.

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

Цена газа

В то время как количество газа прикреплено к операции, сумма, оплачиваемая пользователем за единицу газа – цена газа — динамична и диктуется рыночными условиями. Цена газа — это значение, показывающее, сколько эфира пользователь готов заплатить за газ. Когда пользователь отправляет транзакцию, он указывает цену на газ в Gwei / Gas (1 Gwei равна 0,000000001 ETH), а сумма пошлины, которую он платит, равна произведению цены газа на количество использованного газа (gas_price * gas_used). Эта пошлина выплачивается майнерам, и поэтому они отдают предпочтение сделкам с более высокой ценой на газ. Чем выше цена за газ, которую пользователь готов заплатить, тем быстрее будет обрабатываться его транзакция.

ETH Gas Station является отличным ресурсом для понимания текущих условий газового рынка. Раздел «Рекомендуемые цены на газ для потребителя» (“Recommended User Gas Prices”) показывает диапазон цен на газ и ожидаемое время транзакций.

Сколько это стоит в действительности?

Стоимость операции в эфириуме вычисляется как gas_price * gas_used, но как это перевести в эфир и доллары? Здесь таблица некоторых примерных операций и связанных с ними расходов по текущей срединной цене на газ (28 Gwei) и текущему обменному курсу USD / ETH ($295 / ETH).

Каждая строка показывает:

  • задачу и требуемое количество газа для выполнения;
  • затраты на выполнение задачи в ETH и в USD;
  • количество задач, приходящихся на 1 ETH и $1;
  • количество задач, приходящихся на каждый блок;
  • количество блоков для завершения этой задачи.

Сложение чисел

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

Мы видим, что затраты на сложение двух чисел 1 млн. раз составляют 0.09 ETH или $26.55. По сравнению с локальным компьютером или сервером это довольно дорого. Давайте сравним цены с AWS.

Можно сложить два числа вместе 1 миллион раз при помощи python за 0,04 секунды. Amazon взимает $0.0059 за час за самый дешёвый виртуальный узел t2.nano на облачном сервере EC2. За секунду это будет стоить $0,000001639  ( $0,000000066 за операцию). Это значит, что $26,55 (за 1 млн. операций) окажутся более чем в 400 млн. раз дороже серверных вычислений (и дороже в 40 млн. раз, если вы хотите платить самую низкую цену на газ). Вау!

Хранение данных

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

Из приведенной таблицы видно, что хранение данных в блокчейне чрезвычайно дорого, но это не зря! Когда вы храните данные в блокчейне, особенность в том, что вы храните данные в неизменяемой базе данных, тиражируемой в десятках тысяч узлов. Например, загрузка вашего любимого фильма на блокчейн будет стоить невероятно дорого, т.к. при росте объёма информации в блокчейне он не должен потерять управляемость. Как видно из таблицы, для хранения всего лишь одного 256-битного слова требуется 20000 газов, что в 6000 раз дороже, чем сложение чисел.

Ещё одним узким местом хранения больших объёмов данных является текущий лимит используемого газа для блока — равный приблизительно 4700000 газов. При таком «потолке» для записи 1 МБ данных на блокчейн потребовалось бы более 132 блоков – это означает, что вы потратите весь газ на один блок, даже не считая других операций!

Что всё это значит?

Справедливости ради надо заметить, что сложение двух чисел 1 миллион раз — немного надуманная операция. Хороший код контракта, скорее всего, переместит такие ??вычислительные сложности вне блокчейна и лучше позаботится об обновлённом состояния контракта. Хранение огромных объёмов данных также не является обычной задачей для блокчейна, и в зависимости от того, что именно требуется, пользователь, скорее всего, сохранит в блокчейне криптографическую ссылку на данные (хеш) и будет хранить остальную часть данных вне блокчейн сети.

Тем не менее, если вы разработчик, то обязаны знать об этих затратах и в соответствии с этим разрабатывать dApps. Следует найти баланс между сложностью «в блокчейне» и «вне блокчейна», при этом оптимально используя децентрализованные возможности блокчейна.

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

 

Источник

Добавить комментарий