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

Проєктуємо та розробляємо блокчейн-рішення повного циклу: від архітектури смарт-контрактів до запуску DeFi-протоколів, NFT-маркетплейсів та криптобірж. Аудит безпеки, токеноміка, інтеграція з наявною інфраструктурою.
Показано 1 з 1Усі 1306 послуг
Налаштування Truffle для розробки
Простий
~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

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

Truffle Suite — один з найстаріших фреймворків для розробки смарт-контрактів: компілятор, міграції, тестовий раннер, та Ganache для локальної мережі. Незважаючи на те, що Hardhat та Foundry захопили більшість нових проектів, Truffle залишається у production у сотнях проектів, запущених до 2021 року. Налаштування з нуля виглядає інакше, ніж у туторіалах трирічної давності.

Конфігурація truffle-config.js під сучасний проект

Ключовий момент — мережа та провайдер. Для роботи з Infura або Alchemy:

const HDWalletProvider = require('@truffle/hdwallet-provider');

module.exports = {
  networks: {
    development: {
      host: "127.0.0.1",
      port: 8545,
      network_id: "*", // Ganache
    },
    sepolia: {
      provider: () => new HDWalletProvider(
        process.env.MNEMONIC,
        `https://sepolia.infura.io/v3/${process.env.INFURA_KEY}`
      ),
      network_id: 11155111,
      gas: 5500000,
      confirmations: 2,
      timeoutBlocks: 200,
      skipDryRun: true
    }
  },
  compilers: {
    solc: {
      version: "0.8.20",
      settings: {
        optimizer: { enabled: true, runs: 200 },
        viaIR: true  // через Yul IR — краще для складних контрактів
      }
    }
  },
  plugins: ["truffle-plugin-verify"]
};

runs: 200 — компроміс між вартістю розгортання та вартістю викликів. Для контрактів з високою частотою викликів збільшимо до 1000+.

Міграції: порядок має значення

Файли міграцій нумеруються: 1_initial_migration.js, 2_deploy_token.js. Truffle відслідковує виконані міграції через контракт Migrations он-чейн. Якщо міграція вже виконана — вона пропускається при повторному запуску.

Типова міграція з залежностями між контрактами:

const Token = artifacts.require("MyToken");
const Staking = artifacts.require("StakingContract");

module.exports = async function(deployer, network, accounts) {
  await deployer.deploy(Token, "MyToken", "MTK", web3.utils.toWei("1000000"));
  const token = await Token.deployed();
  
  await deployer.deploy(Staking, token.address, accounts[0]);
};

Інтеграція з Ganache

Ganache 7.x запускається як пакет (@ganache/core) або CLI (ganache). Для детерміністичних тестів — фіксуємо seed:

ganache --seed 42 --accounts 10 --defaultBalanceEther 1000

Або через ganache.fork для форкування mainnet — як hardhat node --fork.

Тесты на JavaScript та Mocha

Truffle використовує Mocha + Chai. Контракти доступні через artifacts.require. Async/await підтримується:

const Token = artifacts.require("MyToken");

contract("MyToken", accounts => {
  it("mints initial supply to deployer", async () => {
    const token = await Token.deployed();
    const balance = await token.balanceOf(accounts[0]);
    assert.equal(balance.toString(), web3.utils.toWei("1000000"));
  });
});

Верифікуємо контракт після розгортання через truffle-plugin-verify:

truffle run verify MyToken --network sepolia

Ориентири по терміну

Налаштування Truffle з нуля: 2-3 години. Включає конфігурацію мереж, Ganache, базові міграції, тестове окруження та плагін верифікації.