Работа с дополнительными валютами сообщений (ExtraCurrency)
Соберёшь CurrencyCollection с ExtraCurrency в TypeScript и поймёшь, чем extracurrency отличается от jetton.
ExtraCurrency
Помимо Toncoin сообщение и баланс аккаунта могут нести ExtraCurrencyCollection — словарь currency_id → amount. Это нативные доп. валюты конфигурации сети, не jetton-контракты: их можно хранить и переводить, но у них нет произвольного кода.
На момент написания в mainnet набор extracurrency может быть пустым; код и exit code 38 (недостаточно extra currencies) уже заложены в TVM.
Сборка value с extracurrency в TypeScript
Как это работает
- TL-B:
CurrencyCollection = grams + ExtraCurrencyCollection; extracurrency —HashmapE 32 (VarUInteger 32). - Jetton — отдельные контракты и сообщения
transfer; extracurrency — поле value на уровне протокола. - Недостаток extracurrency на балансе → action phase exit code 38.
- В Tact для обычных приложений почти всегда достаточно Toncoin + jetton; extracurrency нужен, когда сеть/конфиг реально явно задаёт
currency_id.
Частые ошибки
Путаешь extracurrency с jetton master/wallet → разные модели; баланс jetton не появится в other dict.
Кладёшь extracurrency в body вместо value → получатель не увидит нативные units в CurrencyCollection.
Тестируешь на mainnet «наугад» с несуществующим id → перевод лишних валют не создать; сначала конфиг/testnet с объявленным id.
Что дальше
- Взаимодействие контракт-контракт — value как часть протокола
- Оценка газа перед деплоем — action fees при сложном value
- Работа с ячейками вручную в FunC — ручная сборка raw message
Материалы gramdocs.tech носят образовательный характер и не являются финансовой, юридической или инвестиционной рекомендацией. Работа с блокчейном TON и токеном Gram связана с рисками потери средств. Правовая информация