rends_east
🔥 Смотрим на костыли. Часть 1.
В прошлом посте мы рассказывали про config блокчейна, какая информация там хранится. Одно из полей в конфиге отвечает за все стандартные значения, связанные с тратой газа. Gas price — стоимость 1 единицы газа в nanoTON (на данный момент это 400). Gas limit — максимальное количество газа, которое может потратить контракт (на данный момент это 1 000 000 газа или 0.4 TON).
Параметр gas limit можно поменять внутри контракта с помощью TVM опкода SETGASLIMIT (в tolk функция setGasLimit), но есть нюанс — только в меньшую сторону. Установить gas limit больше миллиона невозможно.
Но нет ничего невозможного! В ноде блокчейна есть отдельные адреса, для которых этот параметр увеличен. Для этого даже устраивали голосование валидаторов (нашлось только это), и это зафиксировано в коде ноды (обратите внимание на номер строки). Как можно заметить по коду, время этих увеличенных параметров вышло 9 месяцев назад, но код пока что остается, хоть и, вероятно, уже не работает (UPD код остаётся для валидации блоков от самого начала блокчейна).
Вот, например, контракт потратил на трансфер 20 000 000 газа (или 83 TON).
Про gas limit понятно, а что насчет gas price? Их есть у нас. В 31 параметре config TON блокчейна есть отдельные адреса, для которых gas price обнулён. Это означает, что эти контракты исполняются бесплатно. Понятно, зачем это нужно — всякие системные контракты лежат в мастерчейне, и их регулярные вызовы (например, tick-tock на Elector контракте) требуют много TON.
Многие задавались вопросом — зачем tgBTC нужно было менять что-то в config блокчейна? Ответ — они обнулили gas_price для своего адреса. Вот пример транзакции tgBTC (не трансфер жетонов), которая не потратила газ (все значения равны 0, мечта!).
Следим.
@TheOpenDevBlog
10 · 2.3K ·