Таймауты и отложенные сообщения
Реализуешь time-lock на now() и двухфазное действие с timeout — без иллюзии «сообщение выполнится само через N секунд».
Таймауты на TON
TVM не планирует будущие транзакции сам по себе. «Отложить действие» = записать unlockAt в storage и принять второе сообщение после now() >= unlockAt. Внешний бот, кошелёк или другой контракт должен пнуть контракт, когда время пришло.
Vesting-claim с задержкой
Как это работает
now()— unix-время валидатора в секундах; для storage сериализуй какuint32, если хватает диапазона.Scheduleтолько записывает намерение; деньги для выплаты должны уже быть на балансе контракта (или прийти отдельным пополнением).Claim— триггер после дедлайна; без него средства так и останутся на контракте.- Тот же паттерн используют delayed-upgrade:
Upgrade→ жди timeout →Confirm. - Не путай с
created_atв заголовке сообщения: это метаданные сети, не таймер исполнения.
Частые ошибки
Ждёшь, что контракт «сам проснётся» в unlockAt → нужен внешний claim/keeper.
Сравниваешь now() с миллисекундами из JS → в TON секунды; раздели Date.now() на 1000.
bounce: true на финальном payout бенефициару-кошельку → при редких сбоях деньги вернутся на timelock; для простых выплат часто ставят bounce: false осознанно.
Что дальше
- Апгрейд кода контракта (set_code) — delayed confirm для смены кода
- Взаимодействие контракт-контракт — кто может быть keeper’ом
- Обработка bounce-сообщений — если отложенный шаг шлёт сообщение дальше
Материалы gramdocs.tech носят образовательный характер и не являются финансовой, юридической или инвестиционной рекомендацией. Работа с блокчейном TON и токеном Gram связана с рисками потери средств. Правовая информация