Представьте: вы развернули 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 дня. Для контрактов с множеством интеграций — до недели. Стоимость рассчитывается индивидуально — свяжитесь для оценки вашего проекта.
Получите консультацию по тестнет-стратегии и убедитесь, что ваш контракт не пополнит список убыточных багов. Свяжитесь с нами для обсуждения вашего проекта.







