Налаштування Foundry для розробки смарт-контрактів

Налаштування Foundry для розробки смарт-контрактів Ми інтегруємо Foundry у ваш пайплайн розробки смарт-контрактів. На відміну від Hardhat, Rust-based Foundry дає виграш у швидкості до 50× на тестах, але вимагає грамотного налаштування профілів і залежностей. Без цього ви ризикуєте отримати нестаб

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

Часті запитання

Останні роботи

  • 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

Налаштування Foundry для розробки смарт-контрактів

Ми інтегруємо Foundry у ваш пайплайн розробки смарт-контрактів. На відміну від Hardhat, Rust-based Foundry дає виграш у швидкості до 50× на тестах, але вимагає грамотного налаштування профілів і залежностей. Без цього ви ризикуєте отримати нестабільні білди або пропустити реентерабельність на етапі тестування.

Життя блокчейн-розробника — це нескінченні ітерації: скомпілювали, запустили тести, знайшли баг, виправили, знову запустили. Foundry робить цей цикл у десятки разів швидше, але щоб розкрити його потенціал, потрібно правильно налаштувати конфігурацію. Ми допоможемо вам зробити це під ключ. За 5 років роботи ми налаштували Foundry для 50+ проєктів — від простих ERC-20 до складних DeFi-протоколів на L2.

Чому Foundry швидше за Hardhat?

Foundry написаний на Rust і компілює Solidity через solc безпосередньо, без зайвих проміжних шарів. Тести виконуються в нативному середовищі, fuzzing працює з коробки. Результат — швидкість компіляції та тестів у 10–50 разів вища на типових DeFi-проєктах. Як зазначено в документації Foundry, benchmark на проєкті з 200 тестами показує 3 секунди проти 45 секунд у Hardhat.

Установка та базова конфігурація

Команда foundryup встановлює останню версію toolchain. Проєкт ініціалізується через forge init my-project. Базова структура:

my-project/ ├── foundry.toml ├── src/ ├── test/ ├── script/ └── lib/ 

Файл foundry.toml — серце конфігурації. Ми налаштовуємо два профілі: швидкий для локальної розробки і більш глибокий для CI.

Параметр [profile.default] [profile.ci]
fuzz.runs 1000 10000
invariant.runs 256 1000
invariant.depth 500 1000

Такий підхід дозволяє за хвилини тестувати базову логіку локально і отримувати надійні результати на CI.

[profile.default] src = "src" out = "out" libs = ["lib"] solc = "0.8.24" optimizer = true optimizer_runs = 200 fuzz = { runs = 1000 } invariant = { runs = 256, depth = 500 } [profile.ci] fuzz = { runs = 10000 } invariant = { runs = 1000, depth = 1000 } 

Як налаштувати профіль CI у Foundry?

Профіль CI вимагає більш агресивного fuzzing та depth для invariant тестів. Налаштуйте його окремо в foundry.toml і запускайте через forge test --profile ci -vvv. У CI-пайплайні ми також включаємо --gas-report і додаткові перевірки Slither.

Залежності через forge install

Підключаємо OpenZeppelin, forge-std та інші бібліотеки.

forge install OpenZeppelin/openzeppelin-contracts forge install foundry-rs/forge-std 

Після встановлення додаємо remappings:

remappings = [ "@openzeppelin/=lib/openzeppelin-contracts/", "forge-std/=lib/forge-std/src/", ] 

Залежності зберігаються як git submodules — це стандарт для Foundry, що забезпечує відтворюваність.

Порада: як уникнути конфліктів remappings

Якщо кілька бібліотек експортують однакові шляхи, використовуйте пріоритет у foundry.toml: remappings обробляються в порядку оголошення. Завжди перевіряйте компіляцію після встановлення нової залежності.

Як налаштувати форк-тестування з Anvil?

Anvil — локальна нода з можливістю форку mainnet. Це ключова фіча для інтеграційних тестів.

anvil --fork-url $MAINNET_RPC --fork-block-number 19000000 --chain-id 1 

Ви отримуєте копію стану mainnet на конкретному блоці без моків. Наш досвід показує, що саме форк-тести виявляють неочевидні помилки, які не ловляться юніт-тестами. В одному проєкті invariant тест за 20 хвилин знайшов три логічні помилки, які вислизали від ручних тестів: при ланцюжку deposit → withdraw → deposit totalSupply розходився на 1 wei через округлення.

Fuzz та invariant тести

Fuzzing працює автоматично — достатньо передати випадковий параметр у тест.

function testFuzz_Deposit(uint256 amount) public { amount = bound(amount, 1, 1e27); token.mint(alice, amount); vm.prank(alice); vault.deposit(amount); assertEq(vault.balanceOf(alice), amount); } 

Invariant тести перевіряють, що системні інваріанти зберігаються після будь-яких послідовностей викликів.

function invariant_TotalSupplyEqualsDeposits() public { assertEq(vault.totalSupply(), vault.totalDeposits()); } 

Інтеграція з CI (GitHub Actions)

Ми налаштовуємо пайплайн, який запускає тести з профілем CI на кожному коміті.

- name: Install Foundry uses: foundry-rs/foundry-toolchain@v1 - name: Run tests run: forge test --profile ci -v env: FOUNDRY_ETH_RPC_URL: ${{ secrets.MAINNET_RPC }} 

Що входить у налаштування

  • Конфігурація foundry.toml з профілями default/ci
  • Встановлення та ремапінг залежностей (OpenZeppelin, forge-std)
  • Налаштування Anvil з форком mainnet для інтеграційних тестів
  • Написання базових fuzz та invariant тестів
  • CI пайплайн з GitHub Actions (GitLab, CircleCI за запитом)
  • Документація щодо використовуваних флагів та команд

Строки

Налаштування Foundry з залежностями, профілями та CI — від 2 до 6 годин залежно від складності проєкту. Час включає написання шаблонних тестів та налагодження форку. Вартість розраховується індивідуально.

Чому обирають наше налаштування?

Ми не просто копіюємо шаблонні конфіги — ми аналізуємо структуру вашого проєкту, підбираємо оптимальні параметри fuzzing та invariant, налаштовуємо gas-репортинг. Понад 5 років досвіду в блокчейн-розробці та 50+ успішних проєктів — це гарантія, що ваша конфігурація буде працювати стабільно.

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

Примітка: ціни на налаштування залежать від обсягу робіт і обговорюються індивідуально.