Что такое кошельки TON?
Описание Telegram Open Network если его внимательно читать со временем начинает затягивать все сильнее и сильнее.
Еще только вчера задавал себе вопросы - как же так получается, что адрес смарт-контракта оказывается известен до его публикации? Как на свежеопубликованном контракте уже есть транзакции недельной давности? Если кошелек пользователя и смарт-контракт это одно и тоже, а за хранения смарт-контракта сеть берет комиссию, то кто платит комиссию если я только что создал кошелек баланс на котором ноль?
Оказывается, кошелек в сети TON это действительно смарт-контракт, причем довольно простой.
Чтобы понять как адресуются данные в блочейне TON нужно знать как они хранятся. Для хранения всех данных TON использует дерево ячеек. Каждая ячейка может хранить до 1023 бит информации и до четырех ссылок на другие ячейки. Адресом ячейки является ее sha256 хеш. То есть для содержимого ячейки, находится sha256 хеш, этот хеш и является адресом ячейки. Если две ячейки содержат одинаковые данные, то они имеют одинаковый адрес. Это позволяет экономить место не сохраняя дублирующиеся данные. Такой способ хранения информации называется направленным ациклическим графом.
Часть ячеек хранят код смарт-контракта, а часть ячеек хранят данные смарт-контракта. Поскольку для большинства кошельков в сети используется один и тот же смарт-контракт, то получается для его хранения используются одни и те же ячейки!
Адрес смарт-контракта это sha256 хеш от кода смарт-контракта и его исходных данных. Когда пользователь устанавливает приложение кошелька, при первом запуске приложение предлагает создать пользователю пару ключей - закрытый и открытый. В этот момент смарт контракт кошелька еще не опубликован в сети TON. Однако, адрес будущего смарт контракта приложение уже знает - поскольку код смарт контракта и публичный ключ уже известны. Этот адрес пользователь может использовать, чтобы послать не него криптовалюту.
Когда на адрес, который еще не был инициализирован в блокчейне приходит перевод, то создается пустой смарт контракт, который и хранит баланс адреса. Код смарт контракта нужен только для совершения перевода, для хранения баланса он не обязателен. Пользователь может сколько угодно долго использовать "пустой" кошелек для получения платежей не инициализируя код смарт контракта в блокчейне.
Как только приложение кошелька видит, что баланс адреса ненулевой оно посылает в сеть сообщение с кодом смарт контракта вместе с публичным адресом пользователя. Только в этот момент в блокчейне сохраняется публичный ключ пользователя с привязанным к нему кодом смарт-контракта.
Как только у пользователя возникнет необходимость заплатить со своего адреса пользователь посылает в свой смарт контракт сообщение кому и сколько нужно перевести средств. Если на смарт-контракте достаточный баланс и сообщение пришло от владельца смарт-контракта, то смарт-контракт инициирует перевод по запрошенному адресу.
Смарт-контракт может не иметь уникальной части в виде публичного ключа пользователя, в этом случае код смарт контракт однозначно определяет свой адрес. Например, вот этот простейший смарт-контракт может быть опубликован только на одном уникальном адресе так как его код является единственной уникальной характеристикой.
Примечательно, что если кошелек не используется долгое время, то с него начинает браться повышенная комиссия и как только баланс кошелька становится нулевым смарт-контракт сначала замораживается а потом и вовсе удаляется из блокчейна.
разрешены только теги br, font, span, p, strong, u, p, blockquote, a, div, img - остальные будут безжалостно удаляться
комментарии: