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

Проєктуємо та розробляємо блокчейн-рішення повного циклу: від архітектури смарт-контрактів до запуску DeFi-протоколів, NFT-маркетплейсів та криптобірж. Аудит безпеки, токеноміка, інтеграція з наявною інфраструктурою.
Показано 1 з 1Усі 1306 послуг
Налаштування Foundry для розробки
Простий
~2-3 години
Часті запитання

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

Етапи блокчейн-розробки

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

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1308
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1221
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    921
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1149
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    612
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    886

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

Foundry — це Rust-based toolchain для розробки смарт-контрактів: Forge (тесты й компіляція), Cast (взаємодія з чейном), Anvil (локальна нода), Chisel (REPL для Solidity). За швидкістю компіляції й виконання тестів випереджає Hardhat у 10-50 разів на типових проектах.

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

curl -L https://foundry.paradigm.xyz | bash
foundryup  # установка/оновлення до останньої версії

Структура нового проекту (forge init my-project):

my-project/
├── foundry.toml       # основний конфіг
├── src/               # контракти
├── test/              # тесты (.t.sol)
├── script/            # деплой-скрипти (.s.sol)
└── lib/               # залежності (git submodules)

foundry.toml — конфігурація компілятора й тестів:

[profile.default]
src = "src"
out = "out"
libs = ["lib"]
solc = "0.8.24"
optimizer = true
optimizer_runs = 200
via_ir = false        # включити для складних контрактів з Stack too deep
fuzz = { runs = 1000 }
invariant = { runs = 256, depth = 500 }

[profile.ci]
fuzz = { runs = 10000 }
invariant = { runs = 1000, depth = 1000 }

Окремий [profile.ci] дозволяє запускати складніше fuzzing у CI без уповільнення локальної розробки.

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

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

Залежності — git submodules у lib/. Ремаппінги у foundry.toml:

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

Anvil — локальна нода

# Запуск з форком mainnet
anvil --fork-url $MAINNET_RPC --fork-block-number 19000000 --chain-id 1

# З передустановленими аккаунтами й балансами
anvil --accounts 10 --balance 1000

Fork mainnet — ключова фіча для тестування інтеграцій. Контракт взаємодіє з реальними Uniswap, Aave, Chainlink — без моків, на реальному стані чейну на конкретному блоці.

Fuzz й invariant тесты

Foundry 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());
}

Саме invariant тест за 20 хвилин знаходить edge case, який ускользав від ручних тестів: при конкретній послідовності deposit → withdraw → deposit з конкретними сумами totalSupply розходилась на 1 wei з-за rounding.

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

- 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 з залежностями, конфігурацією профілів й CI інтеграцією: 2-3 години для стандартного проекту. Якщо потрібна налаштування fork-тестування з конкретними протоколами й написання базових invariant тестів — до одного дня.

Вартість розраховується індивідуально.