Wallet contract
Смарт-контракт, играющий роль кошелька в TON. Принимает подписанные владельцем сообщения и пересылает их в сеть. Существует несколько версий — от v3 до W5.
Синонимы: кошелёк-контракт, ton wallet contract, contract wallet
Wallet contract — это смарт-контракт, выполняющий роль кошелька пользователя в TON. В отличие от Ethereum, где «кошелёк» — это пара ключей (EOA), в TON кошелёк это полноценный смарт-контракт с собственным кодом и состоянием.
Зачем это нужно
Подход «кошелёк это контракт» решает несколько задач:
- Кастомизируемая логика подписи. Можно реализовать multisig, time-lock, ограничение по адресам, плагины — всё ончейн.
- Газ оплачивается из кошелька. Контракт сам платит за выполнение операций — нет отдельного «топлива» вне кошелька.
- Replay protection. Каждая транзакция нумеруется через
seqno— повторно использовать подписанное сообщение нельзя. - Нативная поддержка плагинов в новых версиях (W5) — позволяет подписать одну авторизацию для повторяющихся операций (DCA, авто-стейкинг).
Версии
Кошелёк-контракт прошёл несколько ревизий:
- v1, v2 — устарели, использовались на ранних этапах сети.
- v3, v4 — самые распространённые в 2022-2024 годах. Поддерживают seqno, базовые plugin-ы (v4).
- W5 (2024+) — новейшая версия от TON Foundation. Поддерживает gasless-транзакции, batch-сообщения, расширенные плагины. Используется по умолчанию в Tonkeeper и MyTonWallet.
Адрес кошелька зависит от версии контракта и публичного ключа. Один и тот же ключ даёт разные адреса для разных версий — поэтому при импорте сид-фразы кошельки спрашивают, какая версия использовалась.
Как работает транзакция
- Пользователь в UI кошелька жмёт «Send».
- Кошелёк (приложение) формирует внешнее сообщение — payload с новым seqno, получателем, суммой, и подписывает его приватным ключом.
- Сообщение отправляется в сеть через liteserver.
- Wallet contract принимает сообщение, проверяет подпись и seqno.
- Если всё ок — увеличивает seqno и пересылает внутреннее сообщение получателю.
Bounceable / non-bounceable флаг в адресе влияет на то, что произойдёт с TON, если получающий контракт не существует или не принял сообщение (см. термин bounce).
Адресные форматы
Один кошелёк имеет несколько эквивалентных представлений адреса:
- Bounceable (
EQ...) — стандартный, безопасный для отправки на контракты. - Non-bounceable (
UQ...) — для отправки на «новые» адреса (включая ещё не развернутые кошельки), чтобы средства не вернулись. - Raw form —
0:hex— внутренний формат TVM. - Mainnet vs testnet — отдельные префиксы, чтобы случайно не потерять монеты.
Современные кошельки автоматически выбирают правильную форму при отправке, но при копировании адресов с биржи стоит проверять формат.
Plugins (только v4 и W5)
Плагины — это вспомогательные контракты, которые от имени кошелька могут периодически инициировать операции:
- Subscription plugin — оплата подписок раз в месяц.
- Auto-staking plugin — авто-делегирование на номинатор.
Плагины активно поддерживаются с релиза W5 в 2024 году и постепенно приходят в массовые UX-сценарии.