Первый смарт-контракт: Counter на Tact
Разберёшь Counter на Tact: состояние, receive, get-методы — и проверишь его сборкой в Blueprint.
Counter — минимальный полезный контракт
Counter хранит число в persistent storage, увеличивает его по сообщению Add и отдаёт значение через get-метод. Это стандартный первый контракт в шаблоне tact-counter.
На момент публикации ориентир: Tact 1.6.13, проект через npm create ton@latest.
Код контракта
С нуля:
Ожидаешь: компиляция без ошибок, тесты шаблона зелёные.
Как это работает
message Add— типизированное внутреннее сообщение; компилятор задаёт opcode.contract SimpleCounter(id, counter)— параметры = поля storage; задаются при деплое черезfromInit.receive()— обработчик пустого тела (деплой).receive(msg: Add)— увеличиваетcounterнаamount.cashback(sender())— возвращает остатокvalueпосле газа.get fun— только off-chain (Sandbox, RPC); другие контракты getters не вызывают.
Частые ошибки
Шлёшь Add без value → не хватает газа, состояние не меняется. В тестах: toNano("0.05").
Ждёшь return value из receive как из Solidity call → на TON ответ — отдельное сообщение (здесь — cashback), не синхронный return.
Меняешь поля storage, но не пересобираешь → тесты бьются со старым BoC. После правок: npx blueprint build && npm test.
Что дальше
- TON Sandbox: локальное тестирование — как писать свои кейсы поверх Counter
- Testnet и faucet — монеты для деплоя через
npx blueprint run - Первый контракт на Tact: структура файла — углубление в синтаксис Tact (раздел «Смарт-контракты»)
Материалы gramdocs.tech носят образовательный характер и не являются финансовой, юридической или инвестиционной рекомендацией. Работа с блокчейном TON и токеном Gram связана с рисками потери средств. Правовая информация