Ми допомагаємо проєктам розгорнути смарт-контракти в блокчейні TON: від розробки на FunC і Tact до деплою в testnet та mainnet з повною верифікацією. Наша команда — 5 років на ринку блокчейн-розробки та 20+ успішних проєктів на TON. Оцінимо ваш проєкт за один день.
TON — не EVM. Це принципово інша архітектура, і досвід деплою в Ethereum тут не переноситься. Контракти пишуться на FunC (або Tact — більш високорівнева мова), компілюються в TVM bytecode, і взаємодіють через асинхронні повідомлення. Синхронного виклику contract.someFunction() не існує — тільки відправка message та очікування відповідного повідомлення. Кожна транзакція споживає газ, і оптимізація газу критична для production.
Як деплоїти смарт-контракт у TON?
Деплой у TON використовує концепцію StateInit: контракт розгортається надсиланням повідомлення з init (code + initial data) на адресу, обчислену детерміновано з hash(code, data). Це означає, ви знаєте адресу до деплою. Для зручності використовуємо Blueprint — офіційний фреймворк (аналог Hardhat для EVM).
Покрокова інструкція:
- Створіть проєкт:
npm create ton@latest my-projectі встановіть залежності. - Напишіть контракт на Tact у папці
contracts/. - Зберіть код:
npx blueprint build. - Напишіть тести в
tests/і виконайте їх:npx blueprint test. - Для деплою в testnet виконайте
npx blueprint run --testnet. - Після успішного тестування деплойте в mainnet:
npx blueprint run --mainnet.
Отримайте консультацію, якщо потрібна допомога з налаштуванням середовища.
Що таке storage rent і як його враховувати?
На відміну від Ethereum, TON стягує оренду за зберігання даних. Контракт з нульовим балансом «заморожується» через ~6 місяців, а дані видаляються через кілька років. Для production:
- Закладайте 0.1–0.5 TON при деплої (простий контракт).
- Реалізуйте механізм поповнення балансу.
- Моніторте баланс через TonAPI.
Приклад розрахунку storage rent
Механізм стягнення оренди залежить від обсягу зайнятого storage (code + persistent data). Ставка фіксована: 1 KB даних ~0.015 TON/рік. Для контракту з 500 байтами даних оренда складе ~0.0075 TON/рік. Рекомендується закладати 0.1–0.5 TON, щоб контракт жив кілька років без поповнення.Порівняння FunC і Tact
| Критерій | FunC | Tact |
|---|---|---|
| Рівень | Низький | Високий |
| Швидкість розробки | Низька | Висока |
| Контроль газу | Повний | Обмежений |
| Помилки в storage | Часті | Мінімізовані |
| Для чого підходить | Gas-оптимізовані контракти | Типові проєкти (NFT, Jetton, DeFi) |
Для нових проєктів рекомендуємо Tact — синтаксис ближчий до TypeScript, швидше писати, менше багів. Приклад контракту на Tact:
contract Counter { counter: Int as uint32; init() { self.counter = 0; } receive("increment") { self.counter = self.counter + 1; } get fun value(): Int { return self.counter; } } Еквівалент на FunC зайняв би втричі більше рядків з явним store_uint/load_uint.
Що входить в роботу?
- Розробка смарт-контракту (FunC/Tact) під ваші бізнес-вимоги
- Написання модульних тестів на TypeScript з емулятором TVM
- Деплой в testnet з налагодженням через Tenderly (для TON)
- Деплой в mainnet з верифікацією на verifier.ton.org
- Документація та інструкція по взаємодії
- Пост-деплойна підтримка на 7 днів
Замовляйте розгортання — і ми запустимо ваш контракт у TON з гарантією працездатності.
Компіляція та тести
npx blueprint build npx blueprint test Тести працюють на локальному TVM емуляторі (@ton/sandbox), виконуються без доступу до мережі. Приклад тесту:
import { Blockchain, SandboxContract, TreasuryContract } from '@ton/sandbox'; import { Counter } from '../wrappers/Counter'; describe('Counter', () => { let blockchain: Blockchain; let deployer: SandboxContract<TreasuryContract>; let counter: SandboxContract<Counter>; beforeEach(async () => { blockchain = await Blockchain.create(); deployer = await blockchain.treasury('deployer'); counter = blockchain.openContract(await Counter.fromInit()); await counter.send( deployer.getSender(), { value: toNano('0.05') }, { $$type: 'Deploy', queryId: 0n } ); }); it('should increment', async () => { await counter.send(deployer.getSender(), { value: toNano('0.01') }, 'increment'); expect(await counter.getValue()).toBe(1n); }); }); Деплой в testnet і mainnet
import { toNano } from '@ton/core'; import { Counter } from '../wrappers/Counter'; import { NetworkProvider } from '@ton/blueprint'; export async function run(provider: NetworkProvider) { const counter = provider.open(await Counter.fromInit()); await counter.send( provider.sender(), { value: toNano('0.05') }, { $$type: 'Deploy', queryId: 0n } ); await provider.waitForDeploy(counter.address); console.log('Deployed at:', counter.address.toString()); } Запустіть npx blueprint run --testnet для testnet або --mainnet для mainnet. Blueprint запитає seed phrase або підключення Tonkeeper через QR.
Jetton (аналог ERC-20) і NFT
Стандартні токени TON реалізовані через TEP-74 (Jetton) та TEP-62 (NFT). Архітектура відрізняється від ERC-20: кожен власник має окремий контракт JettonWallet. Основний JettonMaster тільки мінтить і зберігає глобальну інформацію. Адреса гаманця обчислюється через getWalletAddress(ownerAddress). Blueprint надає готові обгортки від TON Foundation — не пишіть з нуля.
Верифікація та аудит контракту
Після деплою верифікуємо контракт на verifier.ton.org. Завантажуємо вихідні коди та proof-of-compilation — сервіс підтверджує відповідність bytecode. Після верифікації tonviewer.com і tonscan.org відображають код і дозволяють викликати getter-функції. Також проводимо аудит смарт-контрактів TON з використанням Slither і Mythril для виявлення вразливостей.
Орієнтири за термінами
| Тип контракту | Термін розробки |
|---|---|
| Простий (counter, storage) | 1–2 дні |
| Середній (Jetton, NFT) | 3–5 днів |
| Складний (AMM, стейкінг) | 1–2 тижні |
Деплой готового контракту (testnet + mainnet + верифікація) — від 2–4 годин. Вартість розраховується індивідуально під задачу. Зв'яжіться з нами — ми оцінимо ваш проєкт за 1 день.







