21 октября Telegram включил перенос коллекционных подарков из профиля во встроенный кошелёк. Блокчейн показывает время: первый подарок пришёл на кошелёк Telegram в 07:10 UTC, и с 07:00 до 12:00 UTC подарки ушли в кошельки Telegram 2 624 раза. Всего из профилей в блокчейн за эти пять часов ушло 3 639 подарков. Ещё 195 раз подарок вернулся из кошелька Telegram обратно в профиль. 19 октября в те же часы через кошельки Telegram прошли четыре подарка.

Что включилось

Перенос был готов в клиентах до запуска. 16–17 октября в бетах Telegram для macOS и Android появились методы и строки интерфейса для переноса подарка из профиля в кошелёк и обратно, 18 октября строки переноса для iOS появились на платформе переводов. 20 октября те же методы вошли в схему API Telegram Desktop (слой 232):

  • payments.withdrawStarGift переносит подарок в кошелёк и отвечает просто «да» или «нет», без ссылки на сайт. В запросе есть поле tmp_password — судя по названию, пароль двухэтапной аутентификации, как при выводе звёзд, — и флаг keep_on_profile, по названию оставляющий подарок на виду в профиле;
  • payments.depositStarGift возвращает подарок из кошелька в профиль. Получатель задаётся полем peer, то есть, судя по схеме, им может быть и другой человек, а флаг hide_sender скрывает отправителя. Сервер в ответ отдаёт адрес NFT, полезную нагрузку и сумму — по всей видимости, для транзакции, которую затем отправляет сам кошелёк;
  • в истории кошелька у такой операции свой тип — walletTransactionPeerTelegramGift. В iOS у него две подписи: перенос из профиля и перенос в профиль.

Раньше вывести подарок в блокчейн можно было только через сайт Fragment и только во внешний кошелёк TON: Telegram выдавал ссылку на вывод (метод getStarGiftWithdrawalUrl в схеме остался). Новый метод ссылки не возвращает, перенос идёт из интерфейса самого Telegram.

Как это видно в блокчейне

Ссылки на сайт в переносе нет, а адрес, с которого подарки уходят в блокчейн, остался прежним. Подарки в блокчейн выпускает адрес, который TonAPI подписывает как Fragment Gift Minter. Это highload-кошелёк, через который и раньше шёл вывод через Fragment. Подарок уходит с него одним из двух способов:

  • выпуск — подарок ещё ни разу не был в блокчейне, и минтер разворачивает новый NFT в контракте коллекции (сообщение telemint_msg_deploy_v2);
  • перевод — подарок уже был в блокчейне, потом его вернули в Telegram, и всё это время NFT лежал на адресе минтера. Теперь минтер пересылает его обычным nft_transfer.

Обратный путь тоже идёт через этот адрес: NFT отправляют на минтер с комментарием вида Ref#…, и Telegram зачисляет подарок в профиль. Возвраты из кошелька Telegram устроены так же, как прежние возвраты через Fragment: адрес тот же, формат комментария тот же. Вероятно, этот комментарий и есть полезная нагрузка из ответа depositStarGift, но проверить это по блокчейну нельзя.

Кошелёк Telegram отличается от остальных кодом контракта: у tg-wallet свой хеш кода. По этому хешу получатель каждого подарка разделён на два вида: кошелёк Telegram или любой другой.

Первые пять часов

Время — UTC, 21 октября. «В кошелёк Telegram» — выпуски и переводы, у получателя которых код tg-wallet.

часушло из профилейиз них в кошелёк Telegramвернулось из кошелька Telegram
07:00–08:002931942
08:00–09:001 04477830
09:00–10:0080166256
10:00–11:0084556348
11:00–12:0065642759
всего3 6392 624195

Для сравнения, 19 октября с 07:00 до 12:00 UTC из профилей ушло 772 подарка, и только четыре из них — на адреса, у которых сейчас код кошелька Telegram. До запуска подарок попадал на такой адрес, видимо, обычным выводом через Fragment, где адрес получателя указывается вручную. Возвратов из кошельков Telegram в те часы не было ни одного.

Первый перевод на кошелёк Telegram прошёл в 07:10:31 UTC, первый выпуск — в 07:11:05 (подарок Fresh Socks), первый возврат в профиль — в 07:22:41.

Ещё 451 выпуск и 93 перевода за эти часы ушли на адреса без развёрнутого контракта. Такой адрес может принадлежать и кошельку Telegram, у которого ещё не было ни одной исходящей транзакции, и любому другому, поэтому в таблице они посчитаны только в первой колонке. Код получателя снят 21 октября в 12:02 UTC.

Кто переносит

Подарки получили 1 019 кошельков Telegram. 592 из них получили по одному подарку, а самый крупный — 36 подарков. Возвращали подарки в профиль 126 кошельков.

Чаще всего в кошельки Telegram выпускали Chill Flame (133 раза), Liberty Figure (117) и Vice Cream (115). Все три числа — выпуски: эти экземпляры попали в блокчейн впервые.

Что не видно из блокчейна

Блокчейн показывает только момент, когда минтер отправил подарок. Сколько прошло от нажатия кнопки в профиле до транзакции, по нему не узнать. Не видна и плата за перенос, если она есть: на каждый выпуск минтер сам отправляет в контракт коллекции 0,06 TON, а списывает ли Telegram что-то с владельца подарка, по блокчейну не видно. Перенос в интерфейсе для этой статьи не воспроизводился.