Мы помогаем проектам развернуть смарт-контракты в блокчейне 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: каждый holder имеет отдельный контракт 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 день.







