Введение
Смарт-контракты — это код, который управляет миллиардами долларов, и ошибки в нём стоят очень дорого. Аудит и оптимизация газовых затрат — критически важные этапы разработки в Web3. Но что, если использовать большие языковые модели (LLM) как помощника? Они могут генерировать код, находить уязвимости, объяснять стандарты и даже предлагать gas-оптимизации. В этой подборке — 10 конкретных промтов, которые превратят LLM в вашего карманного эксперта по Solidity. Каждый промт проверен на практике и сопровождается примером использования. Вы сможете копировать их и адаптировать под свои задачи.
1. Генерация смарт-контракта по описанию
Задача: Быстро создать заготовку контракта на основе бизнес-логики.
Промт:
Напиши смарт-контракт на Solidity (версия ^0.8.0), который реализует следующую логику: [опишите логику]. Используй паттерн Ownable из OpenZeppelin для управления доступом. Добавь комментарии к каждой функции. Не включай функции, не описанные в задании.
Пример использования:
Вы хотите контракт для голосования с возможностью создавать предложения и голосовать за них. Опишите это в промте, и LLM сгенерирует код с функциями createProposal, vote, getWinner, используя Ownable для ограничения создания предложений только владельцем.
Пояснение: Промт задаёт версию Solidity, требует использования проверенной библиотеки и комментариев, что снижает количество ошибок и упрощает аудит.
2. Поиск уязвимостей в коде
Задача: Провести статический анализ контракта на наличие известных уязвимостей.
Промт:
Проанализируй следующий код Solidity на наличие уязвимостей из списка SWC (Smart Contract Weakness Classification). Особое внимание обрати на реентранси, переполнения, небезопасное использование delegatecall и проблемы с доступом. Для каждой найденной уязвимости укажи её тип, строку и рекомендации по исправлению.
Код:
```solidity
[вставьте код]
**Пример использования:**
Вставьте контракт с функцией `withdraw`, которая изменяет состояние после вызова `call`. LLM должна указать на реентранси (SWC-107) и предложить использовать паттерн Checks-Effects-Interactions.
**Пояснение:** Промт явно ссылается на классификацию SWC, что помогает модели структурировать ответ. Однако помните: LLM не заменяет профессиональный аудит.
## 3. Объяснение стандартов ERC
**Задача:** Понять, как реализовать или использовать стандарт ERC (например, ERC-20, ERC-721, ERC-1155).
**Промт:**
Объясни стандарт ERC-721 простыми словами: какие функции обязательны, какие события, и как реализовать минимальный контракт, соответствующий стандарту. Приведи пример кода на Solidity с комментариями.
**Пример использования:**
Вы хотите создать NFT-коллекцию, но не уверены в требованиях. Промт даст список обязательных функций (`ownerOf`, `balanceOf`, `transferFrom` и т.д.) и пример реализации с использованием OpenZeppelin.
**Пояснение:** Промт просит объяснить «простыми словами» и привести пример, что полезно для новичков.
## 4. Оптимизация газа в существующем контракте
**Задача:** Снизить стоимость транзакций за счёт оптимизации кода.
**Промт:**
Предложи способы оптимизации газа для следующего контракта. Укажи, какие изменения можно внести, и оцени примерную экономию газа. Учти, что контракт будет развернут в сети Ethereum.
Код:
[вставьте код]
**Пример использования:**
Контракт использует `uint256` для счётчика, который никогда не превысит 100. LLM предложит заменить на `uint8` (экономия на упаковке в storage) и использовать `unchecked` для инкремента в цикле.
**Пояснение:** Промт требует оценки экономии, что помогает приоритизировать изменения.
## 5. Написание тестов на Foundry
**Задача:** Сгенерировать тесты для контракта с использованием Foundry.
**Промт:**
Напиши тесты на Solidity для следующего контракта с использованием фреймворка Foundry. Покрой основные функции, включая граничные случаи. Используй forge-std/Test.sol.
Код контракта:
[вставьте код]
**Пример использования:**
Для контракта с функцией `transfer` LLM сгенерирует тесты на успешный перевод, недостаток баланса, перевод самому себе.
**Пояснение:** Foundry — популярный инструмент для тестирования, и промт явно указывает на использование `forge-std`.
## 6. Аудит доступа и ролей
**Задача:** Проверить, правильно ли настроены права доступа.
**Промт:**
Проанализируй контракт на предмет корректности настройки ролей и прав доступа. Проверь, что только авторизованные адреса могут вызывать привилегированные функции. Укажи на любые функции без модификаторов доступа или с избыточными правами.
Код:
[вставьте код]
**Пример использования:**
Контракт имеет функцию `mint`, доступную только владельцу, но модификатор `onlyOwner` забыт. LLM укажет на это.
**Пояснение:** Промт фокусируется на одной из самых частых уязвимостей — неправильный контроль доступа.
## 7. Генерация документации (NatSpec)
**Задача:** Автоматически создать комментарии NatSpec для контракта.
**Промт:**
Сгенерируй комментарии NatSpec для всех публичных функций и событий в следующем контракте. Используй формат @notice, @param, @return.
Код:
[вставьте код]
**Пример использования:**
LLM добавит комментарии к каждой функции, описывая её назначение и параметры.
**Пояснение:** NatSpec улучшает читаемость и используется для генерации документации.
## 8. Перевод контракта с другой платформы
**Задача:** Портировать контракт с Ethereum на другую EVM-совместимую сеть (например, Polygon).
**Промт:**
Адаптируй следующий контракт для развертывания в сети Polygon. Учти различия в стоимости газа и возможные ограничения. Если есть функции, зависящие от конкретных адресов или оракулов, предложи альтернативы.
Код:
[вставьте код]
**Пример использования:**
Контракт использует Chainlink оракул с адресом для Ethereum mainnet. LLM предложит адрес для Polygon.
**Пояснение:** Промт помогает избежать ошибок при миграции.
## 9. Поиск логических ошибок
**Задача:** Выявить ошибки в бизнес-логике, которые не являются уязвимостями, но приводят к неверной работе.
**Промт:**
Проанализируй логику работы следующего контракта. Найди возможные логические ошибки: неверные условия, отсутствие проверок, неправильный порядок операций. Опиши каждую ошибку и предложи исправление.
Код:
[вставьте код]
**Пример использования:**
В функции `bid` не проверяется, что ставка больше текущей. LLM укажет на это.
**Пояснение:** Логические ошибки часто пропускаются автоматическими анализаторами, но LLM может их найти.
## 10. Генерация скрипта развертывания
**Задача:** Создать скрипт для развертывания контракта с помощью Hardhat или Foundry.
**Промт:**
Напиши скрипт для развертывания контракта с использованием Hardhat. Скрипт должен развертывать контракт, выводить адрес и сохранять его в файл. Предположи, что контракт называется MyContract и находится в contracts/MyContract.sol.
```
Пример использования:
LLM сгенерирует JavaScript-скрипт с использованием ethers.js и hardhat.
Пояснение: Промт экономит время на написание шаблонного кода.
Заключение
Эти 10 промтов покрывают ключевые задачи разработчика смарт-контрактов: от генерации кода до аудита и оптимизации. Используйте их как отправную точку, адаптируя под свои проекты. Помните, что LLM — это инструмент, который усиливает ваши знания, но не заменяет профессиональный аудит. Экспериментируйте, комбинируйте промты и всегда проверяйте результаты. Удачи в создании безопасных и эффективных контрактов!
Комментарии