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







