Газ в сети ETH. Что это такое и с чем его едят?

Если вы пользовались криптовалютой Эфириум, то вы наверняка сталкивались с таким понятием, как газ (gas). Что это? Ответ даст предлагаемая статья.

Операции в Ethereum

Прежде чем поговорить о gas, надо разобраться в том, что означает транзакция и как она проводится. Перевод в сети Ethereum – это процесс передачи пакета данных от одного пользователя сети к другому. Эта операция позволяет:

  • переводить денежные средств;
  • выполнять смарт-контракты или же программы в сети Ethereum.

Для проведения нужна вычислительная мощность. Ее обеспечивают компьютеры, которые являются участниками сети Эфириум. Кроме этого, чтобы денежный перевод или смарт-контракт выполнился успешно, необходим так называемый газ. Что это такое, и какое у него предназначение? Ответы получите в следующем разделе.

Газ. Что это?

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

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

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

Важно! Wei – это самая малая доля от ETH (1/1018 часть от одной монеты). Отсюда один Gwei эквивалентен 1 миллиарду Wei (0.000000001 Эфира).

Появляется вполне закономерный вопрос: а как рассчитывается сумма газа, расходуемая на одну операцию? Чтобы ответить, необходимо рассмотреть структуру пакета данных, чем и мы займемся далее.

Структура пакета данных

Любой перевод – процесс передачи пакета данных, который обладает следующей структурой:

  1. Адрес получателя, на кошелек которого поступят средства.
  2. Подпись того, кто отправляет деньги, она нужна для подтверждения подлинности перевода.
  3. Поле VALUE, определяющее, сколько средств адресант хочет переслать. Определяется в единице газа — Wei (1/1018 часть от одного Эфира).
  4. Параметр GASLIMIT определяет предельное количество операций для проведения текущей транзакции.
  5. Поле GASPRICE определяет количество средств, которое адресант готов затратить на выполнение одной вычислительной (атомарной) операции.
  6. Параметр DATA, содержащее в себе текстовое сообщение. Заполнять поле параметр вовсе не обязательно.

Легко догадаться, что величина комиссии будет определена за счет параметров GASLIMIT и GASPRICE. Для лучшего понимания рассмотрим конкретный пример.

Проведение операций в сети Ethereum

Представим, что вы решили перевести монетки на другой кошелек. Вы определили значение параметров GASLIMIT и GASPRICE как 60 000 и 30, соответственно. Это значит, на выполнение перевода вы готовы затратить не более 60 000 * 30 Gwei = 0.0018 ETH.

Важно! Запомните, что параметр GASLIMIT определяет максимальное количество gas, которое вы готовы отдать сети. Если на счету недостаточно средств, вы получите соответствующее уведомление и перевод будет отменен.

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

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

В чем цель сбора?

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

Само собой, никто не будет заниматься этим за спасибо. Ведь оборудование и электроэнергия требуют немалых денег. Именно по этой причине майнеры получают вознаграждение за свою деятельность. А откуда берутся эти деньги? Правильно – с комиссий. То есть, отдавая gas вы, по сути, оплачиваете вычислительную мощность, которая нужна для выполнения вашего денежного перевода или же умного контракта. Газ также используется в качестве оплаты за хранение данных. Сумма, которую снимут у вас со счета, напрямую зависит от объема сберегаемой информации.

Можно ли не платить?

Система взимает за одну транзакцию не так уж и много монет. Однако если вы ежедневно проводите десятки и сотни переводов, то затраты на комиссию могут стать существенными. Поэтому назревает вполне закономерный вопрос: а можно ли вообще не платить? Ответ – нет. Тем не менее, можно уменьшить размер расходуемого газа до минимума, благодаря чему транзакции будут стоить сущие копейки (цена газа может снизиться до 1 цента).

Люди, интересующиеся криптовалютой, знают, что у Эфириума размер ноды измеряется не в байтах, как у BTC, а в газе. В узел может влезть около 8 000 000 Gas. Тем не менее зачастую блоки заполнены не полностью. Пул с транзакциями у Эфириума не такой уж и большой. Еще два-три месяца назад можно было произвести перевод с ценой в 1 Wei. При таком GASPRICE, независимо от количества операций, транзакция будет стоить сущие копейки.

Сейчас нагрузка на сеть возросла. Поэтому произвести транзакцию с такой низкой стоимостью навряд ли удастся. Несмотря на это, описанный метод экономии газа все еще работает. Чтобы сэкономить на переводах криптовалюты просто установите маленькое значение GASPRICE (к примеру, 10-20 Wei).

Важно! Чтобы транзакция прошла успешно, следите за загруженностью сети Ethereum. Если количество проводимых в текущий момент операций слишком велико, то не стоит устанавливать маленькое значение GASPRICE (денежный перевод будет выполняться очень долго, либо вообще будет отменен).

Как обмануть систему?

Итак, чтобы сэкономить на операциях в сети, нужно поставить очень маленькое значение GASPRICE (параметр GASLINIT при этом надо установить в 21 000). Но как это сделать? Ведь в официальном кошельке Эфириума параметр определяется с помощью ползунка. А минимально допустимое значение – 1 Gwei.

Есть два способа, как уменьшить стоимость газа в кошельке MyEtherWallet:

  1. Перейдите в раздел под названием Send Offline (в российской локализации «Оффлайн-перевод»). Там установите желаемую стоимость в Wei.
  2. Активируйте инструмент разработчика (в Гугл Хроме запускается горячей комбинацией Ctrl + Shift + I). Клацните на ползунок и в появившейся панели замените первоначальное значение gas.value min с 1 на 0.00000001 (т.е. эквивалент 10 Wei).

Блоки

Можно подумать, что Эфириум – это огромный «клубок», состоящий различных транзакций. Но это не так. Сеть выстроена по принципу блокчейна. Что это значит? Мы уже разобрались с тем, что значит транзакция. Так вот, каждая из них объединяется с другими в «блок» (ноду или узел). Это список транзакций, которые были завершены.

Блоки также объединены между собой. У любой ноды есть родитель и потомок. Таким образом получается своеобразная цепочка. Это и есть так называемый блокчейн.

У ноды есть определенная структура. Каждый узел блокчейна состоит из:

  • хедера;
  • информации о переводах, которые включены в узел;
  • набор хедеров других нод для оммеров текущей ноды.

Возникает вопрос: а что такое оммеры и для чего они вообще нужны? Ответ вы получите в следующем разделе статьи.

Оммеры. Что это и для чего они нужны?

В сети BTC истинной историей транзакций считается самая длинная цепочка. Если блок не принадлежит к ней, то он является недействительным или потерянным (орфан). В каких случаях нода не присоединяется к основной цепи? Подобное происходит при создании двух узлов со слишком маленьким временным интервалом.

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

В сети Эфириум проблема с орфанами была решена посредством протокола GHOST. Потерянные ноды (uncle-блоки или оммеры) имеют ценность. То есть за них также предоставляют награждение. Ссылку на анкл-узлы включат в шапки основных блоков цепочки. Благодаря этому увеличивается вес ноды. В сети Эфириум главной считается не самая длинная, а наиболее тяжелая цепочка. Таким образом разработчики сразу убили двух зайцев. С одной стороны они привлеки майнеров наградой за орфаны, а с другой – увеличили безопасность сети.

Заголовок блока

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

  • parentHash. По сути, это ссылка на родительский блок. Благодаря ей набор отдельных узлов превращается в полноценную цепочку.
  • ommersHash. Список неподтвержденных нод. То есть ссылки на uncle-блоки, которые увеличивают вес ноды.
  • beneficiary. Уникальный адрес кошелька, на который будет перечислено определенное количество газа за майнинг узла.
  • stateRoot. Переменная, указывающая на состояние сети.
  • transactionRoot. Поле, включающее в себя список переводов, которые закреплены за узлом.
  • receiptsRoot. Переменная, содержащая в себе квитанции обо всех переводах, что включены в ноду.
  • logsBloom. Тип данных под названием фильтр Блума. Состоит из лог-файлов.
  • difficulty. Переменная, сберегающая значение сложности текущего узла.
  • number. Номер ноды. Генезисный узел (самый первый в цепи) обозначается цифрой 0. Для последующих элементов параметр number инкрементируется на единицу.
  • gasLimit. Предельное значение gas, которое может быть израсходовано на подтверждение текущего узла.
  • gasUsed. Общее количество gas, которое было израсходовано для выполнения атомарных операций в оде.
  • timestamp. Временная метка для создания узла.
  • extraData. Дополнительная информация касательно ноды.
  • mixHash и nonce. Переменные, используемые для подтверждения того, что для обработки текущего узла было выполнено необходимое количество операций.

Логи и квитанции. Что это?

Для отслеживания переводов сеть Эфириум записывает всю инфу в логи. Это файлики, в которых в хронологическом порядке описаны события, происходящие в blockchain. Любой перевод генерирует лог. В нем содержатся следующие данные:

  • уникальный адрес кошелька, который инициализировал перевод;
  • действия, которые были выполнены для произведения транзакции;
  • дополнительные данные.

Все логи сберегаются в фильтре Блума. Эта структура данных способна хранить бесконечное количество лог-файлов наиболее эффективным способом.

Логи, сберегающиеся в хедерах, генерируются за счет других лог-файлов, которые можно найти в квитанции. Что это такое? Предположим, что вы зашли в магазин и купили продуктов. Кассир выдал вам чек, в котором содержится инфа о приобретенных товарах. Аналогично и с сетью Эфира. Для любого перевода генерируется квитанция, которая представляет собой небольшой файл с инфой о произведенной операции. В нем сберегаются такие данные:

  • номер ноды;
  • хэш узла;
  • хэш перевода;
  • общая сумма Gwin, которая была задействована, чтобы завершить выполнение операции;
  • суммарное количество Gwin, которое «сгорело» в ноде;
  • логи, которые были созданы при выполнении рассматриваемой транзакции;
  • дополнительная информация.

Связь между сложностью ноды и скоростью подтверждения

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

Если не вдаваться в расчёты, то если один блок был подтвержден быстрее предыдущего, то сложность последующего возрастет. Таким образом, сеть самостоятельно регулирует свою пропускную способность. Благодаря этому одна нода, в среднем, генерируется каждые 15 секунд.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: