Тестування смарт-контрактів на тестнеті

Уявіть: ви розгорнули 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 опубліковано та 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 дні. Для контрактів з багатьма інтеграціями — до тижня. Вартість розраховується індивідуально — зв'яжіться для оцінки вашого проєкту.

Отримайте консультацію з тестнет-стратегії та переконайтеся, що ваш контракт не поповнить список збиткових багів. Зв'яжіться з нами для обговорення вашого проєкту.