12 промтов для Foundry и Hardhat: фаззинг, инварианты и газ-оптимизация смарт-контрактов

Промты для Solidity: как аудировать, деплоить и защищать смарт-контракты без ошибок на миллион

Смарт-контракты — это код, который управляет миллиардами долларов. Одна ошибка может стоить целое состояние: вспомните взлом The DAO (2016), Parity Wallet (2017), Poly Network (2021) или Ronin Bridge (2022). По данным Chainalysis, в 2022 году ущерб от взломов DeFi превысил 3 миллиарда долларов. Многие из этих атак эксплуатировали простые уязвимости: reentrancy, integer overflow, неправильный контроль доступа.

Хорошая новость в том, что современные AI-инструменты (ChatGPT, Claude, Gemini) могут помочь как в написании кода, так и в его аудите. Но чтобы получить качественный результат, нужны правильные промты. В этой статье я собрал проверенные промты для Solidity, которые использую сам. Они разделены на три категории: базовые, продвинутые и экспертные. Каждый промт сопровождается задачей, примером и пояснением.

Базовые промты

1. Генерация безопасного ERC-20 токена

Задача: Создать стандартный ERC-20 токен с фиксированным supply и возможностью сжигания.

Промт:

Напиши смарт-контракт на Solidity ^0.8.0 для токена ERC-20 с названием "MyToken" (символ MTK), decimals 18. Общее предложение 1 000 000 токенов. Добавь функции burn и burnFrom. Используй OpenZeppelin Contracts v4.x. Предусмотри защиту от переполнения (встроена в 0.8+). Код должен быть готов к деплою в Remix. Прокомментируй ключевые моменты.

Пример результата: AI сгенерирует контракт, наследующий ERC20 и ERC20Burnable из OpenZeppelin. Вы получите готовый код с конструктором, который минтает все токены на адрес деплоера. Важно: всегда проверяйте, что AI не использует устаревшие версии библиотек.

2. Написание простого ERC-721 (NFT) с метаданными

Задача: Создать NFT-коллекцию с возможностью минта по цене и хранением метаданных на IPFS.

Промт:

Создай контракт ERC-721 на Solidity 0.8.9 с использованием OpenZeppelin. Название коллекции "CryptoArt", символ CAT. Максимальное количество токенов 10 000. Функция mint(uint256 quantity) payable, цена 0.05 ETH за токен. baseURI указывает на IPFS-папку. Добавь функцию withdraw для вывода средств владельцем. Ограничь минт не более 5 токенов за транзакцию. Прокомментируй безопасность.

Пример результата: AI предложит контракт с ERC721Enumerable, Ownable, и функцией mint с проверками. Обратите внимание на возможные уязвимости: отсутствие проверки переполнения при quantity * price (хотя в 0.8+ это безопасно), недостаточный контроль доступа для withdraw.

3. Написание тестов на Foundry для простого контракта

Задача: Протестировать контракт ERC-20 на базовые сценарии.

Промт:

Напиши тесты на Solidity для Foundry для контракта ERC-20 (файл MyToken.sol). Проверь: начальный баланс деплоера, перевод токенов между аккаунтами, сжигание токенов, approve и transferFrom. Используй forge-std. Создай файл MyToken.t.sol. Покажи команды для запуска.

Пример результата: AI сгенерирует тестовый контракт с использованием DSTest, функции testTransfer, testBurn и т.д. Вы сможете запустить forge test -vvv и увидеть результаты.

Продвинутые промты

4. Аудит на reentrancy (повторный вход)

Задача: Проверить контракт на наличие уязвимости reentrancy.

Промт:

Проанализируй следующий контракт на Solidity на предмет уязвимости reentrancy. Объясни, какие функции могут быть атакованы, и как эксплойт может быть реализован. Предложи исправление с использованием паттерна Checks-Effects-Interactions или мьютекса (ReentrancyGuard). Вот код: [вставьте код]

Пример результата: AI укажет, что функция withdraw, которая отправляет ETH до обновления баланса, уязвима. Предложит добавить nonReentrant модификатор или изменить порядок операций. Пример исправления:

function withdraw() external nonReentrant {
    uint256 balance = balances[msg.sender];
    balances[msg.sender] = 0;
    (bool success, ) = msg.sender.call{value: balance}("");
    require(success, "Transfer failed");
}

5. Поиск integer overflow/underflow (для версий <0.8)

Задача: Проверить контракт на Solidity 0.7 на переполнение.

Промт:

Проверь контракт на Solidity 0.7.6 на наличие уязвимостей integer overflow/underflow. Укажи места, где могут произойти переполнения, и предложи использовать SafeMath или обновиться до 0.8. Вот код: [вставьте код]

Пример результата: AI найдет операции сложения/вычитания без SafeMath. Например, balances[msg.sender] -= amount; может привести к underflow. Предложит заменить на balances[msg.sender] = balances[msg.sender].sub(amount);.

6. Газ-оптимизация контракта

Задача: Уменьшить стоимость газа при выполнении операций.

Промт:

Проанализируй контракт на Solidity с точки зрения газ-оптимизации. Предложи конкретные изменения: упаковка переменных, использование calldata вместо memory, кэширование storage-переменных, оптимизация циклов. Приведи примеры до и после. Вот код: [вставьте код]

Пример результата: AI предложит заменить uint256 a; uint256 b; на uint128 a; uint128 b; для упаковки в один слот, использовать calldata для аргументов внешних функций, вынести чтение storage в локальную переменную. Например:

// До
for (uint i = 0; i < array.length; i++) {
    sum += array[i];
}
// После
uint len = array.length;
for (uint i = 0; i < len; ) {
    sum += array[i];
    unchecked { ++i; }
}

7. Написание тестов на Hardhat с использованием ethers.js

Задача: Протестировать сложный контракт с несколькими аккаунтами.

Промт:

Напиши тесты на Hardhat (JavaScript) для контракта DeFi, который позволяет вносить ETH и получать проценты. Проверь: деплой, внесение средств, начисление процентов, вывод. Используй ethers.js, chai. Покажи настройку hardhat.config.js.

Пример результата: AI создаст файл test/DeFi.test.js с describe/it блоками. Вы увидите, как использовать ethers.getSigners(), contract.connect(signer).deposit(). Также получите пример конфига с сетью hardhat.

Экспертные промты

8. Комплексный аудит смарт-контракта

Задача: Провести полный аудит контракта перед деплоем.

Промт:

Ты — эксперт по безопасности смарт-контрактов. Проведи аудит следующего контракта на Solidity. Проверь: reentrancy, overflow/underflow, access control, front-running, DoS, unchecked external calls, неправильное использование delegatecall, случайные числа. Для каждой найденной уязвимости укажи уровень критичности (Critical/High/Medium/Low), опиши эксплойт и предложи исправление. Вот код: [вставьте код]

Пример результата: AI выдаст структурированный отчет. Например: "Critical: Функция withdraw уязвима к reentrancy. Эксплойт: злоумышленник вызывает withdraw, которая отправляет ETH до обновления баланса, и в fallback-функции снова вызывает withdraw. Исправление: использовать ReentrancyGuard или паттерн Checks-Effects-Interactions."

9. Формальная верификация с помощью инструментов

Задача: Подготовить контракт к формальной верификации.

Промт:

Помоги подготовить контракт на Solidity к формальной верификации с помощью инструментов Certora или Scribble. Напиши спецификации на языке CVL (Certora Verification Language) для проверки инварианта: "сумма балансов всех пользователей равна totalSupply". Объясни, как запустить проверку.

Пример результата: AI сгенерирует spec-файл с правилами. Например:

invariant totalSupplyEqualsSumOfBalances()
    totalSupply() == sumOfBalances()

И покажет команду certoraRun MyToken.sol --verify MyToken:MyToken.spec.

10. Разработка безопасного стейкингового контракта

Задача: Создать стейкинг-контракт с защитой от основных атак.

Промт:

Создай контракт стейкинга на Solidity 0.8.19. Пользователи могут стейкать ERC-20 токены и получать вознаграждение в размере 10% годовых. Учти: защита от reentrancy, точное вычисление награды с учетом времени, возможность экстренного вывода (с штрафом). Используй OpenZeppelin. Напиши тесты на Foundry, проверяющие начисление награды и вывод.

Пример результата: AI сгенерирует контракт с использованием ReentrancyGuard, Ownable, SafeERC20. Функция расчета награды будет использовать block.timestamp и rewardRate. Тесты покроют сценарии: стейкинг, вывод через 30 дней, экстренный вывод.

11. Оптимизация кода для L2 (Arbitrum, Optimism)

Задача: Адаптировать контракт для работы на L2 с учетом особенностей.

Промт:

Оптимизируй контракт для деплоя на Arbitrum. Учти особенности L2: стоимость газа ниже, но есть задержки. Предложи изменения: использование calldata, уменьшение размера кода, отказ от ненужных проверок. Приведи примеры.

Пример результата: AI предложит заменить строковые ошибки на кастомные (экономия газа), использовать библиотеки для уменьшения размера, избегать циклов с большим количеством итераций.

12. Написание скрипта для деплоя с использованием Hardhat и verify

Задача: Автоматизировать деплой и верификацию контракта.

Промт:

Напиши скрипт на Hardhat (JavaScript) для деплоя контракта MyToken в сеть Sepolia. После деплоя автоматически верифицируй контракт на Etherscan. Используй hardhat-deploy или стандартные скрипты. Покажи необходимые переменные окружения.

Пример результата: AI создаст скрипт deploy.js, который использует ethers.getContractFactory, contract.deploy(), ждет подтверждения и вызывает hre.run("verify:verify", { address, constructorArguments }). Также напомнит добавить API-ключ Etherscan в .env.

Заключение

Промты для Solidity — это не замена аудитору, но мощный инструмент для ускорения разработки и первичной проверки. Используйте их для генерации кода, тестов и поиска уязвимостей. Однако всегда помните: AI может ошибаться, поэтому критически важно проверять код вручную и использовать профессиональные инструменты (Slither, MythX, Certora). Безопасность — это процесс, а не одноразовое действие. Начните с базовых промтов, постепенно переходите к экспертным, и вы сможете создавать надежные Web3-проекты. Удачи в разработке!

← Все статьи

Комментарии

Читайте также

Zigbee + AI-агент: как подключить умный дом к ASI Biont через Zigbee2MQTT и управлять через чат

15 июля 2026

Визуализация данных с TFT LCD (ILI9341, ST7789) и AI-агентом ASI Biont: интеграция без кода

20 июля 2026

Промты для DevOps: как я поднял CI/CD, Terraform и Kubernetes, не открывая документацию

21 сентября 2026

Show HN: Каким должен быть GUI для AI-агентов? Разбираем тренды и кейсы

31 июля 2026

Государственные закупки (44-ФЗ, 223-ФЗ): Почему обучение с ИИ — самый умный путь к карьере в госзаказе в 2026 году

29 июня 2026

Разработка бэкенда на Node.js: создание бэкендов для чатов в реальном времени с Socket.IO, JWT и Redis

27 сентября 2026

От руды до экономики: почему курс «Геология и горное дело» на Asibiont.com меняет правила игры для специалистов по ресурсам в 2026 году

14 июля 2026

Nscale покупает Anyscale: новый этап в гонке за вертикальный AI-стек

30 июля 2026

Как выигрывать государственные контракты: Курс по государственным закупкам (44-ФЗ, 223-ФЗ) с ИИ на Asibiont

26 июня 2026