Jetton Wallet
Контракт-кошелёк, хранящий баланс одного держателя одного jetton-токена. Деплоится на каждого пользователя отдельно — основа архитектуры jetton.
Синонимы: jetton wallet, кошелёк джеттона, wallet jetton
Jetton Wallet — индивидуальный смарт-контракт, который хранит баланс одного держателя одного jetton-токена. У каждого пользователя — свой собственный jetton-wallet под каждый токен, который у него есть. Если у вас USDT и NOT, у вас два отдельных jetton-wallet-а на TON.
Зачем такая модель
В Ethereum все балансы ERC-20 хранятся в одном контракте: чтобы перевести токен, обновляются две записи в общем mapping. Это узкое место для параллелизации.
В TON наоборот: переводы между двумя jetton-wallet-ами не трогают общий стейт. Каждый wallet — независимый контракт, и сеть может обрабатывать переводы в разных шардах одновременно. Это и есть архитектурный приём, который даёт TON высокую пропускную способность для токенов.
Что хранит
- Баланс. Сколько токенов у владельца.
- Адрес владельца. Чей это wallet.
- Адрес jetton-master. К какому токену относится.
- Код wallet. Эталонный код, скопированный с master при деплое.
Перевод
Когда Алиса шлёт токены Бобу, цепочка выглядит так:
- Алиса шлёт
transferна свой собственный jetton-wallet (через свой обычный wallet-контракт). - Её jetton-wallet списывает у себя баланс и шлёт
internal_transferjetton-wallet-у Боба. - Если у Боба jetton-wallet ещё не задеплоен, master деплоит его на лету.
- Jetton-wallet Боба зачисляет токены и шлёт
transfer_notificationобратно Бобу.
Каждый шаг — отдельная транзакция в шарде соответствующего контракта.
Tonscan / TonViewer
В UI кошелька вы видите «у меня 100 USDT». На цепочке это означает: «адрес моего USDT jetton-wallet — EQ…, и его баланс = 100». Эксплореры показывают и сам wallet, и его привязку к master-у.
Безопасность
Jetton-wallet деплоит сам master, и его код фиксирован. Поэтому, в отличие от классических кошельков, подменить логику jetton-wallet нельзя: если кто-то деплоит «фальшивый» wallet от своего имени, он просто не пройдёт проверку при internal_transfer от стандартного master-а.