Em 13 de outubro, a equipe do TON Core publicou recomendações para o ecossistema sobre a carteira Telegram. Foi sugerido que aplicativos de carteira independentes continuem a criar novas carteiras usando o contrato W5 (wallet-v5r1), pois o contrato da carteira Telegram, WalletTg, foi desenvolvido especificamente para o Telegram. No entanto, eles devem aprender a abrir carteiras Telegram já existentes usando sua secret recovery phrase. Isso se aplica a todos que desejam manter sua carteira Telegram também em um aplicativo separado: My Wallet e Gram Wallet já suportam essa importação, e o código para isso apareceu na versão 26.10.0, lançada em 6 de outubro.
Como abrir a carteira Telegram em outro aplicativo
- Anote o endereço da carteira do Telegram. Você o usará para verificar se a carteira correta foi aberta.
- Obtenha a secret recovery phrase atual. De acordo com a documentação, no Telegram Desktop, ela está no menu da carteira: Keys & Backup → Show Recovery Phrase. Se a chave não foi alterada, a frase tem 12 palavras. Após uma key rotation, a frase passa a ter 24 palavras, e todas as 24 devem ser inseridas. Como armazenar a frase é explicado separadamente.
- Importe a frase para My Wallet ou Gram Wallet: Import Existing Wallet → Secret Words. Ambos os programas são construídos a partir do mesmo código-fonte aberto, e a versão 26.10.4, que já inclui o suporte, está disponível na App Store e em wallet.ton.org.
- Verifique o endereço. Se coincidir com o endereço do Telegram, a carteira está totalmente aberta, com saldo e histórico. Se não coincidir, o aplicativo abriu outra carteira com a mesma chave, e a razão geralmente é uma das três abaixo.
Nada foi enviado da carteira ainda. Um contrato em TON aparece em um endereço com a primeira transação de saída: antes disso, moedas podem estar no endereço, mas não há código. O aplicativo reconhece um endereço como carteira Telegram somente se um contrato com o código Telegram e a chave correta já estiver operando nele. Para uma carteira não implantada, 12 palavras abrirão uma carteira W5 vazia, e 24 palavras resultarão em um erro: o aplicativo informará que não há contrato de carteira Telegram para esse endereço. Pela lógica do código, a solução é enviar pelo menos uma transferência do Telegram primeiro e, em seguida, repetir a importação.
A chave foi alterada, mas as primeiras 12 palavras foram inseridas. Após uma key rotation, a primeira metade da frase ainda define o endereço, mas não pode mais assinar. O aplicativo vê que a chave no contrato é diferente e mostra uma carteira W5 vazia em vez da sua. São necessárias todas as 24 palavras da secret recovery phrase atual.
A frase está desatualizada. Se a chave foi alterada mais de uma vez e você tem uma versão anterior da frase registrada, o aplicativo responderá que a chave pública não corresponde à frase e que a carteira, possivelmente, mudou de chave. Somente uma frase atualizada do Telegram ajuda.
Um aplicativo que não suporta a carteira Telegram geralmente aceitará 12 palavras como uma frase BIP-39 comum e mostrará uma carteira com um endereço diferente e saldo zero, e pode não aceitar 24 palavras de duas metades. As moedas, no entanto, permanecem no endereço Telegram: o aplicativo simplesmente não consegue calcular esse endereço a partir da frase e assinar transferências no formato WalletTg.
Após a importação, a chave vive em dois lugares. O Telegram, por padrão, mantém uma cópia criptografada da chave, dividida em três partes em data centers em três continentes, e agora a chave também está no aplicativo. Se o objetivo é migrar para self-custody, a documentação descreve a solução: Keys & Backup → Disable Backup com a opção Update Secret Phrase. O Telegram mudará a chave de assinatura, mostrará uma nova frase de 24 palavras e desativará a cópia na nuvem somente depois que a alteração for concluída na rede. Uma taxa em Gram é cobrada pela key rotation. O endereço permanece o mesmo, a frase antiga deixa de assinar transferências, e as novas 24 palavras devem ser inseridas novamente no aplicativo.
Uma frase, três endereços
O endereço da carteira em TON não é calculado a partir da chave, mas sim do hash do estado inicial do contrato: código e dados iniciais. A chave faz parte desses dados, mas o código é diferente para cada tipo de carteira. Portanto, a mesma chave gera tantos endereços quantos tipos de contrato existirem, e cada um pode conter algo diferente.
A chave da frase da carteira Telegram é derivada de acordo com o padrão geral BIP-39 com o caminho m/44'/607'/0', o mesmo que My Wallet usa para derivar a chave de sua frase de 12 palavras. A partir daí, os caminhos se separam. O estado inicial da carteira Telegram contém o código de um trampoline contract e quatro campos: o número de revisão do armazenamento, o contador seqno, o subwallet id 0x7FFF7F11 e a chave pública. O W5 tem um código diferente e seu próprio identificador de carteira.
Como isso funciona na prática foi verificado com uma frase descartável de 12 palavras, gerada para este artigo: usando o algoritmo da documentação, uma chave e três endereços foram obtidos a partir dela.
| Contrato | Endereço de uma frase |
|---|---|
| WalletTg, carteira Telegram | UQAgG-WT…P_gXad |
| W5 (wallet-v5r1) | UQA7s7tH…boDdkIc |
| v4R2 | UQBVSR_U…djLee01 |
Qual dos endereços o aplicativo mostrará é decidido pelo seu código. My Wallet e Gram Wallet, para uma frase de 12 palavras, iteram por todas as versões de contrato conhecidas por eles, das mais antigas até W5 e telegram, nos dois primeiros índices do caminho. A carteira Telegram entra nesta lista somente se um contrato com o trampoline contract estiver operando no endereço, o subwallet id for 0x7FFF7F11, e a chave do get method get_public_key coincidir com a chave da frase. Dos encontrados, o W5 é escolhido se tiver histórico; caso contrário, o endereço com o maior saldo; caso contrário, o endereço com a última transação; se estiver vazio em todos os lugares, o W5. Daí o W5 vazio nas armadilhas acima: quando a carteira Telegram não passou na verificação, ela simplesmente não está entre os candidatos.
A frase de 24 palavras segue um caminho separado. Se cada metade de 12 palavras passar na verificação BIP-39, a primeira metade fornece a anchor key e, a partir dela, o endereço, enquanto a segunda fornece a chave de assinatura, que é verificada com a chave no contrato. Este caminho é necessário porque 24 palavras também podem ser encontradas em carteiras TON antigas, derivadas de acordo com as regras próprias da rede. A documentação instrui que, em caso de dúvida, ambos os candidatos sejam mostrados ao usuário e que não se escolha silenciosamente; My Wallet primeiro tenta o caminho do Telegram e, se não houver contrato Telegram no endereço e a frase for válida como uma frase comum, a importa como tal.
Como a carteira Telegram muda a chave sem mudar o endereço
No armazenamento do contrato WalletTg, a chave de assinatura é um campo mutável, enquanto o endereço é calculado permanentemente a partir do estado inicial, onde estava a primeira chave, a anchor key. A key rotation é uma solicitação, assinada pela chave atual, com uma prova assinada pela nova. O contrato sobrescreve o campo, e o get method get_public_key a partir desse momento retorna a nova chave. A anchor key ainda é necessária para recalcular o endereço, mas não pode mais assinar. Para que os comentários criptografados, recebidos antes da key rotation, permaneçam legíveis, o contrato publica a chave privada anterior, criptografada com a nova, a cada alteração: por meio de uma cadeia de tais eventos, o aplicativo restaura todas as chaves anteriores, tendo em mãos apenas a atual.
Por que as novas carteiras permanecem em W5
A justificativa na recomendação do TON Core é única: WalletTg foi feito especificamente para o Telegram. A estrutura do contrato mostra o que está por trás disso.
O código da carteira é comum e muda por votação. Em cada endereço da carteira Telegram, há um trampoline contract imutável que transfere o controle para o código do parâmetro −123 da configuração da rede. Uma nova versão desse código é aprovada pelos validadores, de acordo com a documentação, exigindo mais de 75% de seu peso total, e é distribuída a todas as carteiras Telegram imediatamente. O proprietário da carteira não pode fixar uma versão ou recusar uma atualização. O código W5 está em cada conta individual e não muda.
Sem extensões. W5 suporta extensões: contratos separados que a carteira autoriza a agir em seu nome, e sobre os quais são construídas assinaturas e verificações adicionais. A autenticação de dois fatores no próprio My Wallet é buscada especificamente como uma extensão da carteira W5. No WalletTg, não há extensões; de acordo com o design dos autores, a autenticação de dois fatores e as assinaturas aparecerão como funcionalidades integradas.
Formato de requisições próprio. No WalletTg, a assinatura precede o corpo da requisição; o envio de uma única mensagem tem um formato curto separado, e para pagar a taxa em nome do usuário, a requisição é transmitida através de um intermediário que anexa Gram para execução. Um aplicativo que deseja não apenas exibir o saldo da carteira do Telegram, mas também enviar fundos a partir dela, precisa implementar esse formato separadamente do W5.
O principal motivo pelo qual o WalletTg é estruturado de forma diferente é a rotação de chave sem mudança de endereço. Na descrição do contrato, é dito explicitamente: o Telegram cria a carteira, mas permite a transição para o self-custody. A importação para aplicativos de terceiros é a segunda metade dessa transição.
O que é recomendado aos demais
Para aplicativos com login via carteira, o TON Core aconselha atualizar o TON Connect e verificar a assinatura ton_proof conforme a especificação exige: a chave da carteira do Telegram é obtida da rede, e não do estado inicial. Esta parte é detalhada no artigo sobre TON Connect 5.0.
Foi sugerido aos exploradores de blockchain que reconheçam as carteiras do Telegram, exibam a rotação de chave e marquem as transferências cuja taxa não foi paga pelo proprietário. A API do Toncenter aprendeu a distinguir o contrato da carteira do Telegram e retorna a rotação de chave como uma ação separada com a nova chave e a antiga criptografada, e o tonscan.org, com base nesses dados, já identifica as carteiras do Telegram e as transferências com a etiqueta "Fee paid by Telegram".




