Как будет работать Telegram Wallet?
Обычный кошелёк в Тоне - это программа, навсегда зашитая в конкретный адрес.
V3, V4 и V5 отличаются кодом, форматом данных и интерфейсами. Чтобы перейти на следующую версию, пользователю фактически нужно задеплоить новый контракт, получить новый адрес и перенести туда активы. Старый V4 не превратится в V5 после обновления клиента - код аккаунта уже находится в блокчейне и останется прежним.
Создание нового кошелька, миграция всех активов и запись новой мнемоники - сложная для юзера операция (+помним про сбт). Даже спустя два года после релиза V5, только ~25% кошельков перешли на эту версию, против ~50% на V4.
У Telegram Wallet другой стиль, архитектура без painful migrations.
Валидаторы приняли пропоузал о добавлении нового отрицательного параметра config[-123]. Внутри него лежит ячейка с кодом контракта TgWallet (не либа или хэш, именно полный код). То есть реализация кошелька теперь хранится там же, где адреса системных контрактов, настройки консенсуса и другие параметры, изменяемые голосованием валидаторов.
Как это работает?
При создании кошелька на адрес пользователя будет деплоится не полный код, а небольшой неизменяемый контракт-трамплин. При получении любого сообщения он достаёт актуальный код кошелька из config[-123] и передаёт ему управление.
Из этого следуют несколько интересных свойств:
• адрес кошелька не меняется при обновлении логики
• пользователю не нужно создавать новый кошелёк и переносить туда свои ассеты
• сторадж фи платятся только за небольшой код трамплина
• старые данные остаются в каждом юзер контракте и при необходимости лениво мигрируются при первой валидной операции
При этом сам трамплин остаётся неизменным. Его ончейн код хэш не обновляется, он всегда исполняет код, находящийся в config[-123].
Так Telegram Wallet - обновляемая через консенсус часть инфраструктуры TON.
Код: https://github.com/ton-blockchain/tg-wallet-contract






