El 13 de octubre, el equipo de TON Core publicó recomendaciones para el ecosistema sobre el monedero de Telegram. Se ha sugerido a las aplicaciones de monedero independientes que sigan creando nuevos monederos con el contrato W5 (wallet-v5r1), porque el contrato del monedero de Telegram, WalletTg, está diseñado para el propio Telegram, pero que aprendan a abrir los monederos de Telegram ya existentes utilizando su frase secreta. Esto afecta a todos los que deseen tener su monedero de Telegram también en una aplicación independiente: My Wallet y Gram Wallet ya soportan esta importación, y el código para ello apareció en la versión 26.10.0 del 6 de octubre.
Cómo abrir un monedero de Telegram en otra aplicación
- Anote la dirección del monedero de Telegram. La usará más tarde para verificar si se abrió el monedero correcto.
- Obtenga la frase actual. Según la documentación, en Telegram Desktop se encuentra en el menú del monedero: Keys & Backup → Show Recovery Phrase. Si la clave no se ha cambiado, son 12 palabras. Después de un cambio de clave, la frase pasa a ser de 24 palabras, y debe introducir las 24. Cómo almacenar la frase se explica por separado.
- Importe la frase en My Wallet o Gram Wallet: Import Existing Wallet → Secret Words. Ambos programas se compilan a partir del mismo código abierto, y en la App Store y en wallet.ton.org la versión actual es la 26.10.4, que ya incluye este soporte.
- Verifique la dirección. Si coincide con la dirección de Telegram, el monedero se ha abierto completamente, con su saldo e historial. Si no coincide, la aplicación ha abierto otro monedero con la misma clave, y la razón suele ser una de las tres siguientes.
Todavía no se ha enviado nada desde el monedero. El contrato en TON aparece en la dirección con la primera transacción saliente: antes de eso, la dirección puede contener monedas, pero no hay código. La aplicación reconoce una dirección como monedero de Telegram solo si ya hay un contrato con el código de Telegram y la clave correcta funcionando en ella. Para un monedero no desplegado, 12 palabras abrirán un monedero W5 vacío, y 24 palabras resultarán en un error: la aplicación informará que no hay un contrato de monedero de Telegram en esa dirección. Lógicamente, la solución es enviar al menos una transferencia desde Telegram primero y luego repetir la importación.
La clave se cambió, pero se introdujeron las primeras 12 palabras. Después de un cambio de clave, la primera mitad de la frase sigue definiendo la dirección, pero ya no puede firmar. La aplicación ve que la clave en el contrato es diferente y muestra un monedero W5 vacío en lugar del suyo. Se necesitan las 24 palabras de la frase actual.
La frase está desactualizada. Si la clave se cambió más de una vez y usted tiene registrada una versión anterior de la frase, la aplicación responderá que la clave pública no coincide con la frase y que el monedero, posiblemente, ha cambiado de clave. Solo una frase actualizada de Telegram ayudará.
Una aplicación que no soporta el monedero de Telegram, en la mayoría de los casos, aceptará 12 palabras como una frase BIP-39 normal y mostrará un monedero con una dirección diferente y saldo cero, y puede que no acepte en absoluto 24 palabras compuestas de dos mitades. Las monedas, sin embargo, permanecen en la dirección de Telegram: la aplicación simplemente no sabe cómo calcular esa dirección a partir de la frase ni cómo firmar transferencias en formato WalletTg.
Después de la importación, la clave reside en dos lugares. Telegram, por defecto, guarda una copia cifrada de la clave, dividida en tres partes en centros de datos de tres continentes, y ahora la clave también reside en la aplicación. Si el objetivo es migrar a la auto-custodia, la documentación describe la solución: Keys & Backup → Disable Backup con la opción Update Secret Phrase. Telegram cambiará la clave de firma, mostrará una nueva frase de 24 palabras y desactivará la copia en la nube solo después de que el cambio se haya realizado en la red. Se cobra una comisión en Gram por el cambio de clave. La dirección permanece igual, la frase antigua deja de firmar transferencias, y después de esto, deberá introducir las nuevas 24 palabras en la aplicación.
Una frase, tres direcciones
La dirección de un monedero en TON no se calcula a partir de la clave, sino del hash del estado inicial del contrato: código y datos de inicio. La clave forma parte de estos datos, pero el código es diferente para cada tipo de monedero. Por lo tanto, una misma clave da tantas direcciones como tipos de contrato existan, y cada una puede contener algo diferente.
La clave de la frase del monedero de Telegram se deriva según el estándar general BIP-39 con la ruta m/44'/607'/0', la misma que My Wallet utiliza para derivar la clave de su frase de 12 palabras. A partir de ahí, los caminos se bifurcan. El estado inicial del monedero de Telegram contiene el código del contrato trampolín y cuatro campos: el número de revisión del almacenamiento, el contador seqno, el número de submonedero 0x7FFF7F11 y la clave pública. W5 tiene un código diferente y su propio identificador de monedero.
Cómo se ve esto en la práctica, se verificó con una frase desechable de 12 palabras generada para este artículo: siguiendo el algoritmo de la documentación, se obtuvo una clave y a partir de ella, tres direcciones.
| Contrato | Dirección de una misma frase |
|---|---|
| WalletTg, monedero de Telegram | UQAgG-WT…P_gXad |
| W5 (wallet-v5r1) | UQA7s7tH…boDdkIc |
| v4R2 | UQBVSR_U…djLee01 |
Qué dirección mostrará la aplicación lo decide su código. My Wallet y Gram Wallet, para una frase de 12 palabras, iteran sobre todas las versiones de contrato conocidas, desde las más antiguas hasta W5 y telegram, en los dos primeros índices de la ruta. El monedero de Telegram solo entra en esta lista si hay un contrato con un trampolín funcionando en la dirección, el número de submonedero es 0x7FFF7F11, y la clave del método get_public_key coincide con la clave de la frase. De los encontrados, se selecciona W5 si tiene historial; de lo contrario, la dirección con el mayor saldo; de lo contrario, la dirección con la última transacción; si todo está vacío, W5. De ahí el W5 vacío en las trampas mencionadas: cuando el monedero de Telegram no pasó la verificación, simplemente no está entre los candidatos.
La frase de 24 palabras sigue una rama separada. Si cada mitad de 12 palabras pasa la verificación BIP-39, la primera mitad da la clave-ancla y de ella la dirección, y la segunda, la clave de firma, que se compara con la clave en el contrato. Esta rama es necesaria porque las 24 palabras también pueden pertenecer a monederos TON antiguos, derivados según las reglas propias de la red. La documentación indica que, en caso de duda, se deben mostrar ambos candidatos al usuario y no elegir en silencio; My Wallet primero intenta la rama de Telegram y, si no hay un contrato de Telegram en la dirección y la frase es válida como una normal, la importa como tal.
Cómo el monedero de Telegram cambia la clave sin cambiar la dirección
En el almacenamiento del contrato WalletTg, la clave de firma es un campo modificable, mientras que la dirección se calcula permanentemente a partir del estado inicial, donde se encontraba la primera clave, la clave-ancla. El cambio de clave es una solicitud, firmada con la clave actual, con una prueba firmada con la nueva. El contrato sobrescribe el campo, y el método get_public_key a partir de ese momento devuelve la nueva clave. La clave-ancla sigue siendo necesaria para recalcular la dirección, pero ya no puede firmar. Para que los comentarios cifrados recibidos antes del cambio de clave sigan siendo legibles, el contrato publica en cada cambio la clave privada anterior, cifrada con la nueva: a través de una cadena de tales eventos, la aplicación restaura todas las claves anteriores, teniendo en sus manos solo la actual.
Por qué los nuevos monederos permanecen en W5
La justificación en la recomendación de TON Core es una: WalletTg está hecho específicamente para Telegram. La estructura del contrato muestra lo que hay detrás de esto.
El código del monedero es común y se cambia por votación. En cada dirección de monedero de Telegram hay un trampolín inmutable que transfiere el control al código del parámetro −123 de la configuración de la red. La nueva versión de este código es aprobada por los validadores, según la documentación se necesita más del 75% de su peso total, y se distribuye a todos los monederos de Telegram a la vez. El propietario del monedero no puede fijar una versión ni rechazar una actualización. El código W5 reside en cada cuenta de forma individual y no cambia.
Sin extensiones. W5 soporta extensiones: contratos separados a los que la cartera permite actuar en su nombre, sobre los cuales se construyen suscripciones y verificaciones adicionales. La autenticación de dos factores en My Wallet se busca precisamente como una extensión de la cartera W5. En WalletTg no hay extensiones; según el diseño de los autores, la autenticación de dos factores y las suscripciones aparecerán como funciones integradas.
Formato de solicitud propio. En WalletTg, la firma precede al cuerpo de la solicitud; el envío de un solo mensaje tiene un formato corto separado, y para pagar la comisión en nombre del usuario, la solicitud se transmite a través de un intermediario que adjunta Gram para su ejecución. Una aplicación que no solo quiera mostrar el saldo de la cartera de Telegram, sino también enviar desde ella, tendrá que implementar este formato por separado de W5.
La razón principal por la que WalletTg está diseñado de manera diferente es la rotación de claves sin cambiar la dirección. La descripción del contrato lo dice claramente: Telegram crea la cartera, pero permite la transición a la autocustodia. La importación a aplicaciones de terceros es la segunda mitad de esta transición.
Qué se recomienda a los demás
A las aplicaciones con inicio de sesión a través de la cartera, TON Core les aconseja actualizar TON Connect y verificar la firma ton_proof tal como requiere la especificación: la clave de la cartera de Telegram se obtiene de la red, no del estado inicial. Esta parte se explica en el artículo sobre TON Connect 5.0.
A los exploradores de blockchain se les sugiere reconocer las carteras de Telegram, mostrar la rotación de claves y marcar las transferencias cuya comisión no fue pagada por el propietario. La API de Toncenter ha aprendido a distinguir el contrato de la cartera de Telegram y devuelve la rotación de claves como una acción separada con la nueva clave y la antigua cifrada, y tonscan.org ya etiqueta las carteras de Telegram y las transferencias con la marca "Fee paid by Telegram" basándose en estos datos.




