Представьте: вы развернули AMM-пул на Sepolia, протестировали все функции локально — свапы, добавление ликвидности — и всё проходит. На mainnet пользователи жалуются, что при определённой комбинации токенов транзакции зависают. Оказывается, оракул Chainlink на тестнете возвращал цену с 6 знаками после запятой, а на mainnet — с 8. Разница в приоритете gas price привела к недооценке газа. Такой баг выявил бы тестнет за час, если бы тестировали с реальными адресами оракулов.
Локальные тесты на Foundry anvil или Hardhat node проходят — и команда считает контракт готовым к mainnet. Но тестнет регулярно выявляет то, что локальная среда пропускает: корректность ABI при взаимодействии через реальный кошелёк, поведение сторонних оракулов и протоколов, задержки транзакций, edge cases с gas estimation. Мы на практике убедились: без полноценного тестнет-цикла в mainnet вылетают баги, которые стоят минимум 15-30% от бюджета на доработку.
Какие тестнеты актуальны?
Для Ethereum-совместимых сетей на данный момент основными тестовыми сетями являются:
| Тестнет |
Чейн |
Особенности |
| Sepolia |
Ethereum L1 |
Основной ETH тестнет, PoS консенсус |
| Holesky |
Ethereum L1 |
Больший validator set, лучше для staking |
| Amoy |
Polygon |
Заменил Mumbai |
| Arbitrum Sepolia |
Arbitrum L2 |
ArbOS, L1→L2 messaging |
| Optimism Sepolia |
Optimism L2 |
OP Stack, fault proofs |
| Base Sepolia |
Base L2 |
OP Stack, Coinbase |
| BSC Testnet |
BNB Chain |
Параллельно с mainnet |
Goerli выведен из эксплуатации — не деплоить туда ничего нового.
Что проверяем на тестнете?
-
Верификация через Etherscan. Деплой без верификации — красный флаг для пользователей и аудиторов. Используем
forge verify-contract или hardhat verify. Важно: compiler version и optimization settings в конфиге должны точно совпадать с теми, что были при деплое. Расхождение в одну настройку — не верифицируется.
- Взаимодействие через Metamask/Safe. Сигнатуры функций, читаемые названия параметров в Etherscan UI, корректные события в Transaction logs. Проверяем, что ABI published и frontend корректно декодирует ответы.
- Gas estimation. Реальный газ на тестнете vs локальный. Foundry
gas_price в anvil по умолчанию 1 wei — на тестнете базовая комиссия плавающая. Тест с vm.txGasPrice() не всегда отражает реальность. Например, на Sepolia стандартная транзакция ERC-20 transfer стоит ~50 000 газа, а на локальном anvil — ~45 000. Разница в 10% может быть критичной для high-frequency трейдинга.
- Интеграция с протоколами. Если контракт использует Chainlink Price Feeds, Uniswap, Aave — на тестнете деплоим их адреса или используем официальные тестнет-деплои. Chainlink предоставляет Price Feeds на Sepolia (официальная документация). Uniswap V3 задеплоен на Sepolia. Aave V3 — на Sepolia.
Как мы выполняем тестнет-тестирование?
Мы применяем методику, отлаженную на 30+ проектах (5+ лет опыта в Solidity). Процесс включает:
- Анализ зависимостей — определяем все внешние протоколы, оракулы, мосты.
- Скрипт деплоя — пишем Foundry Script с
vm.broadcast() для воспроизводимого деплоя.
- Верификация — автоматическая верификация всех контрактов на Etherscan.
- Функциональное тестирование — проверяем все основные и граничные сценарии.
- Upgrade-тест — если контракт upgradeable, тестируем полный цикл прокси-имплементации.
- Регрессия — после исправления багов повторяем все шаги.
Что входит в нашу работу?
- Деплой и верификация на тестнете (Sepolia/Goerli/Holesky и других по запросу)
- Ручное тестирование всех публичных функций с помощью cast и Metamask
- Автоматизация сценариев на Foundry Script — до 50+ тестов на контракт
- Интеграционное тестирование с реальными протоколами (Chainlink, Uniswap, Aave)
- Документация результатов — таблица с пройденными тестами и скриншотами
- Поддержка фиксов — после исправления контракта повторное тестирование
Как автоматизировать тестирование на тестнете?
Для этого используем Foundry Script с параметром --broadcast и --verify. Например:
forge script script/DeployMyContract.s.sol:Deploy \
--rpc-url sepolia --broadcast --verify -vvvv
После деплоя скрипт может вызывать функции контракта через vm.prank и vm.expectRevert для проверки доступа.
Основные команды Foundry
| Команда |
Назначение |
forge script --rpc-url --broadcast --verify |
Деплой и верификация |
cast call <contract> <function> |
Чтение данных |
cast send <contract> <function> |
Отправка транзакции |
cast 4byte-decode <calldata> |
Расшифровка calldata |
Сроки и стоимость
Типовое тестнет-тестирование нового контракта среднего размера: 1-3 дня. Для контрактов с множеством интеграций — до недели. Стоимость рассчитывается индивидуально — свяжитесь для оценки вашего проекта.
Получите консультацию по тестнет-стратегии и убедитесь, что ваш контракт не пополнит список убыточных багов. Свяжитесь с нами для обсуждения вашего проекта.
Разработка смарт-контрактов
Мы столкнулись с ситуацией: контракт задеплоен, через две недели приходит сообщение — пул дренирован на $800k. Смотрим транзакцию в Tenderly: атакующий вызвал deposit(), внутри callback на ERC-777 повторно вызвал withdraw() — баланс обновился только после второго выхода. Классическая reentrancy, но не через ETH transfer, а через хук ERC-777. ReentrancyGuard стоял только на withdraw().
Такие случаи — не редкость. Смарт-контракт — это финансовая логика без возможности пропатчить её ночью. Наша команда разрабатывает контракты под ключ, встраивая защиту от reentrancy, MEV и gas-атак на ранних этапах.
Как мы разрабатываем смарт-контракты под ключ
Начинаем с аудита бизнес-логики и выбора стека. Solidity 0.8.x — стандарт для EVM-совместимых чейнов: Ethereum, Arbitrum, Optimism, Polygon, BSC, Avalanche C-Chain. Для Solana используем Rust и Anchor: модель аккаунтов и программ требует явного объявления всех ресурсов. Для проектов с формальной верификацией подходит Move (Aptos, Sui) — линейные типы языка исключают копирование ресурсов на уровне компилятора. Vyper выбираем для контрактов, где критична простота аудита (Curve Finance).
| Язык |
Модель исполнения |
Типичная область |
Риски |
| Solidity 0.8.x |
EVM, последовательное исполнение |
DeFi, NFT, токены |
Reentrancy, переполнение (unchecked) |
| Rust (Anchor) |
Solana, параллельное |
Высоконагруженные DEX, игры |
Неправильное объявление аккаунтов |
| Move |
Aptos/Sui, ресурсная |
Крупные протоколы |
Сложность экосистемы |
| Vyper |
EVM, ограниченный синтаксис |
Критические контракты (Curve) |
Зависимость от стабильности компилятора |
Gas optimization — не преждевременная оптимизация, а архитектурное решение. На Ethereum mainnet деплой плохо спроектированного контракта может стоить 2–5 ETH только из-за неоптимального storage layout. Переупаковка структуры Proposal с 7 слотов до 4 сэкономила 18k gas на каждом голосовании — около $1.5 при gas price 30 gwei. Экономия на масштабе протокола с тысячами голосований в день даёт ощутимую годовую выгоду.
Типичные ошибки в gas: передача массивов через memory вместо calldata в external функциях (дороже в 2–3 раза); использование require с длинными строками вместо custom error error InsufficientBalance(...). Кастомные ошибки дешевле на 50–200 gas на revert и передают структурированные данные фронтенду.
Почему аудит смарт-контрактов критичен для безопасности
Аудит — не разовая проверка, а встроенный этап разработки. Используем три уровня:
-
Статический анализ —
Slither (30 секунд в CI) выявляет reentrancy, неинициализированные переменные, опасный delegatecall.
-
Фаззинг и invariant тесты —
Foundry с --fuzz-runs 50000 находит edge cases, которые пропускают сотни unit-тестов. Реальный кейс: AMM контракт с кастомной математикой после 150 тестов в Hardhat — Foundry нашёл integer division truncation, позволявший пылевой атаке копить dust на контракте. Echidna проверяет инварианты («сумма всех балансов ≤ totalSupply»).
-
Ручной code review — наши инженеры с опытом 10+ лет в блокчейне выявляют логические ошибки, которые не ловят инструменты. Для протоколов с TVL > $1M обязателен внешний аудит со стороны Trail of Bits, Consensys Diligence или OpenZeppelin. Срок — 2–4 недели.
Любой апгрейдируемый протокол должен иметь timelock. TimelockController из OpenZeppelin: операция предлагается → ждёт минимальный delay (48–72 часа) → выполняется. Без timelock один скомпрометированный deployer wallet = потеря всего пула.
Какие паттерны апгрейда выбираем
| Паттерн |
Механизм |
Риск |
Когда использовать |
Наш опыт |
| Transparent Proxy (OZ) |
admin vs user разделение |
Storage collision, centralization |
Стандартные проекты |
15+ реализаций |
| UUPS |
Логика апгрейда в implementation |
Забыть _authorizeUpgrade → контракт навсегда сломан |
Газ-оптимизированные проекты |
7 проектов |
| Diamond (EIP-2535) |
Множество facets |
Сложность аудита |
Крупные протоколы с 10+ контрактами |
3 внедрения |
| Beacon Proxy |
Один beacon для множества proxies |
Beacon = single point of failure |
Фабрики однотипных контрактов |
5 фабрик |
Storage collision — главная опасность прокси. Implementation v2 не должен добавлять переменные перед существующими. OpenZeppelin Upgrades plugin для Hardhat и Foundry проверяет это автоматически, но только при использовании его API.
Как защитить контракт от MEV и front-running
На Ethereum mainnet транзакции в mempool видны всем. MEV-боты проводят sandwich-атаки на DEX, фронтраннинги минтинга и governance. Решение: commit-reveal scheme для аукционов, приватная отправка через Flashbots PROTECT RPC. EIP-7702 и PBS (proposer-builder separation) меняют картину, но пока не массово.
Процесс разработки
-
Аналитика — спецификация функций, диаграмма вызовов, анализ edge cases. Без этого кодинг начинается впустую.
-
Разработка — Solidity/Rust с тестами параллельно. Тест → код → рефакторинг. Используем Foundry для fuzz и invariant тестов.
-
Внутренний аудит — Slither + Echidna + ручной code review. Foundry invariant tests для протокольных инвариантов.
-
Внешний аудит — для проектов с реальными деньгами. Срок: 2–4 недели.
-
Деплой — Foundry scripts или Hardhat Ignition с verify на Etherscan. Gnosis Safe для ownership transfer сразу после деплоя.
-
Мониторинг — Tenderly alerts, OpenZeppelin Defender, Forta Network.
Что входит в работу
- Документация на архитектуру и спецификацию контракта (NatSpec).
- Исходный код с репозиторием и CI (Slither, Foundry, coverage).
- Развёрнутая версия контракта с verify на блокчейн-эксплорере.
- Результаты аудита (внутреннего и внешнего по запросу).
- Доступы к мониторингу и управлению (Gnosis Safe).
- Гарантия на код: фиксы критических багов в течение месяца после деплоя.
- Консультация по интеграции с веб-интерфейсом (wagmi, RainbowKit).
Сроки ориентировочно
- ERC-20 token с базовыми функциями: 1–2 недели
- Vesting контракт с cliff/linear schedule: 2–3 недели
- NFT ERC-721/1155 с маркетплейсом: 4–6 недель
- AMM или lending протокол: 2–4 месяца
- Мультичейн протокол с bridge: 4–7 месяцев
Аудит добавляет 3–6 недель и идёт параллельно с финальным тестированием где возможно. Стоимость рассчитывается индивидуально — свяжитесь с нами, и мы оценим ваш проект бесплатно.
Закажите разработку смарт-контракта — получите консультацию по архитектуре и защите от reentrancy, MEV и gas-атак. Хотите обсудить детали? Напишите нам — мы подберём оптимальный стек под вашу задачу.