Как я оптимизировал расходы на бензин на 75%

В блокчейне Ethereum каждая транзакция обходится в определенную сумму денег в виде «платы за газ». Как разработчики, мы стремимся к тому, чтобы стоимость транзакций была как можно ниже.

В этой статье я расскажу о том, как настроить hardhat на отчет о стоимости газа и как настроить встроенный оптимизатор Solidity на снижение стоимости газа.

Я буду оптимизировать пример проекта NFT из моей готовящейся к изданию книги «Руководство разработчика по запуску коллекции NFT».

Газовый репортер

Прежде чем мы включим оптимизатор, давайте начнем с измерения наших текущих расходов на газ, чтобы получить эталон для сравнения. Сначала нам нужно установить и настроить плагин hardhat-gas-reporter.

Плагин hardhat-gas-reporter переопределяет команду npx hardhat test и отслеживает среднюю стоимость газа для каждой функции, вызываемой в ваших тестах.

Вы, наверное, догадались — наличие автоматизированных тестов для вашего проекта необходимо для использования газового репортера!

Установите плагин, выполнив команду npm install hardhat-gas-reporter.

В конфигурационном файле hardhat импортируйте плагин в верхней части файла, добавив require("hardhat-gas-reporter").

Добавьте следующий блок в настройки, экспортированные из этого файла:

gasReporter: {
  outputFile: "gas-report.txt",
  enabled: process.env.REPORT_GAS !== undefined,
  currency: "USD",
  noColors: true,
  coinmarketcap: process.env.COIN_MARKETCAP_API_KEY || "",
  token: "ETH"
}
Войти в полноэкранный режим Выйти из полноэкранного режима

Для того чтобы газовый репортер выдавал нам денежную стоимость каждой транзакции, нам понадобится API-ключ CoinMarketCap, который можно получить бесплатно на их сайте.

Добавьте следующие строки в файл .env:

REPORT_GAS=true
COIN_MARKETCAP_API_KEY=[YOUR-API-KEY]
Войти в полноэкранный режим Выйти из полноэкранного режима

Давайте снова запустим наши тесты через npx hardhat test. Плагин gas reporter возьмет на себя управление и будет регистрировать газ, используемый при каждом вызове функции, и выводить результаты в файл gas-report-txt.

Этот отчет очень полезен для оценки того, сколько будет стоить развертывание вашего контракта в производство, и сколько будет стоить каждая транзакция после развертывания.

Он также дает нам эталон, который мы можем использовать для оценки наших усилий по оптимизации газа!

Оптимизатор Solidity

Давайте настроим компилятор solidity на оптимизацию нашего кода для нас, изменив строку solidity в нашей конфигурации hardhat в hardhat.config.js:

solidity: {
    version: "0.8.9",
    settings: {
        optimizer: {
            // Toggles whether the optimizer is on or off. 
            // It's good to keep it off for development 
            // and turn on for when getting ready to launch.
            enabled: true,
            // The number of runs specifies roughly how often 
            // the deployed code will be executed across the 
            // life-time of the contract.
            runs: 300,
        }
    },
}
Войти в полноэкранный режим Выйти из полноэкранного режима

Кроме включения оптимизатора, единственным параметром конфигурации, который у нас есть, является параметр runs.

Из документации по Solidity:

Количество запусков определяет, как часто будет выполняться каждый опкод развернутого кода в течение всего времени жизни контракта. Это означает, что это компромиссный параметр между размером кода (стоимость развертывания) и стоимостью выполнения кода (стоимость после развертывания).

200 или 300 запусков — это разумное значение по умолчанию, но я рекомендую вам поэкспериментировать с различными значениями, чтобы увидеть, как это влияет на стоимость развертывания и транзакций, и выбрать наиболее подходящее значение для вашего проекта.

Вот тот же отчет, но с включенным оптимизатором. Обратите внимание на снижение цен на газ:

Что дальше?

Следите за мной в twitter, чтобы узнать больше советов и рекомендаций, связанных с блокчейном, и быть в курсе предстоящего выхода моей книги: «Руководство разработчика по запуску коллекции NFT».

Оцените статью
devanswers.ru
Добавить комментарий