Тестирование смарт-контрактов на тестнете

Представьте: вы развернули AMM-пул на Sepolia, протестировали все функции локально — свапы, добавление ликвидности — и всё проходит. На mainnet пользователи жалуются, что при определённой комбинации токенов транзакции зависают. Оказывается, оракул Chainlink на тестнете возвращал цену с 6 знаками пос

Направления блокчейн-разработки

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1441
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    998
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1267
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    713
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    1003

Представьте: вы развернули 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). Процесс включает:

  1. Анализ зависимостей — определяем все внешние протоколы, оракулы, мосты.
  2. Скрипт деплоя — пишем Foundry Script с vm.broadcast() для воспроизводимого деплоя.
  3. Верификация — автоматическая верификация всех контрактов на Etherscan.
  4. Функциональное тестирование — проверяем все основные и граничные сценарии.
  5. Upgrade-тест — если контракт upgradeable, тестируем полный цикл прокси-имплементации.
  6. Регрессия — после исправления багов повторяем все шаги.

Что входит в нашу работу?

  • Деплой и верификация на тестнете (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 дня. Для контрактов с множеством интеграций — до недели. Стоимость рассчитывается индивидуально — свяжитесь для оценки вашего проекта.

Получите консультацию по тестнет-стратегии и убедитесь, что ваш контракт не пополнит список убыточных багов. Свяжитесь с нами для обсуждения вашего проекта.