Настройка Truffle для разработки

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1 услугВсе 1306 услуг
Настройка Truffle для разработки
Простая
~2-3 часа
Часто задаваемые вопросы
Направления блокчейн-разработки
Этапы блокчейн-разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1258
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1170
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    873
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1092
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    563
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    830

Настройка 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 контракт on-chain. Если миграция уже выполнена — она пропускается при повторном запуске.

Типичная миграция с зависимостями между контрактами:

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, базовые миграции, тестовое окружение и плагин верификации.