El código de Telegram Desktop ya está listo para conectar la billetera a un sitio web directamente desde la ventana de inicio de sesión de Telegram. Un sitio web al que inicie sesión con su cuenta de Telegram podrá solicitar la dirección de su billetera integrada en la misma petición. Una única confirmación le dará acceso al sitio y conectará su billetera a través de TON Connect. El código ha estado en la rama de desarrollo del cliente desde el 12-13 de octubre, y el mismo tipo de datos está presente en la beta de Telegram para macOS del 20 de octubre. La función aún no está disponible en las versiones publicadas ni en la documentación de la API.

Cómo se verá

La ventana de confirmación de inicio de sesión muestra actualmente qué sitio solicita acceso, desde qué dispositivo proviene la solicitud y el interruptor "Allow Messages" — para permitir que el bot del sitio le escriba. Según el código del cliente, si el sitio ha solicitado la billetera, aparecerá lo siguiente debajo:

  • una línea "Wallet" con la dirección de su billetera de Telegram, dividida en dos mitades (al tocarla se copia la dirección);
  • un interruptor "Connect Wallet", activado por defecto;
  • una explicación: «{bot} solicita conectar su billetera a este sitio. El sitio verá su dirección TON, saldo y operaciones, pero no podrá transferir fondos sin su permiso. La conexión firma una prueba de inicio de sesión, no una transferencia.»

Las seis nuevas líneas de la interfaz se añadieron en un solo commit el 12 de octubre con la descripción "Grant site wallet access from the login confirmation". Si el interruptor se deja activado, después de confirmar el inicio de sesión, el cliente solicitará desbloquear la billetera y solo entonces enviará el consentimiento al servidor.

La billetera solo se solicita al iniciar sesión mediante un enlace, cuando el sitio le redirige a Telegram para la confirmación. Los botones de inicio de sesión debajo de los mensajes de los bots en los chats no incluyen esta solicitud: en su rama de código, el campo de la billetera se envía vacío.

Qué obtiene el sitio

La conexión se realiza a través de TON Connect, un protocolo que los sitios web y las miniaplicaciones utilizan para conectar billeteras TON. En un escenario normal, el sitio muestra una lista de billeteras, el usuario elige la suya y confirma la conexión en la billetera. Aquí, este paso está integrado en la ventana de inicio de sesión: junto con la solicitud de inicio de sesión, el servidor de Telegram transmite al cliente el número de sesión de TON Connect y el identificador del sitio en ella.

Al confirmar el inicio de sesión, el cliente crea una sesión en el lado de la billetera, firma un ton_proof para ella y envía la firma junto con el consentimiento de inicio de sesión. Un ton_proof es una firma con la que la billetera demuestra al sitio que la dirección le pertenece; no autoriza transferencias. El texto de la firma se compone de tres valores: el identificador del bot del sitio, el identificador del sitio en TON Connect y el número de sesión, con el prefijo tc-login. De esta manera, la firma está vinculada a un inicio de sesión específico y no es válida para otro.

En el esquema de la API, se han añadido tres campos para esto en la respuesta a la solicitud de inicio de sesión (un indicador de "billetera requerida", el número de sesión, el identificador del sitio) y un campo en la confirmación de inicio de sesión — tonconnect_session con la firma de propiedad de la billetera. Según el historial del esquema, esto corresponde a la capa 231 del 12 de octubre. En core.telegram.org se describe la capa 225, y los campos de la billetera no están presentes allí.

Cadena de llamadas en el código del cliente
  1. El servidor responde a la solicitud de inicio de sesión urlAuthResultRequest con el indicador request_wallet y los campos tc_session_id, tc_client_id.
  2. Después de hacer clic en "Iniciar sesión", el cliente llama a wallet.tonConnectCreateSession con el identificador del sitio y la dirección del manifiesto.
  3. Espera a que el servidor lea el manifiesto: sondeo de wallet.tonConnectGetPending cada 5 segundos, no más de 12 veces, es decir, hasta un minuto.
  4. Registra la clave de sesión (wallet.tonConnectRegisterKey), recibe la llamada y firma la respuesta junto con el ton_proof.
  5. Envía messages.acceptUrlAuth con el campo tonconnect_session — el número de sesión, la respuesta a la llamada, el cuerpo y la firma de propiedad de la billetera.

Qué sitios no recibirán la billetera

El cliente no toma la dirección del manifiesto del sitio, sino que la construye él mismo: https://<domain>/tonconnect-manifest.json. El manifiesto es un pequeño archivo con el nombre y el icono del sitio que TON Connect muestra en la billetera. Si el servidor devuelve un manifiesto de otro host, el cliente lo rechaza con un error de manifiesto no válido. De esta manera, el sitio al que inicia sesión y el sitio que recibe la billetera siempre coinciden.

La billetera no se entrega en absoluto a dos dominios, y la ventana muestra "Wallet access can't be granted to this site". El primero es telegram.org. El segundo dominio lo obtiene el cliente del servidor: es el dominio que Telegram utiliza para verificar la propiedad de la billetera en la respuesta wallet.getProofChallenge. A juzgar por el código, la firma con la que la billetera confirma la propiedad a Telegram no puede obtenerse a través de un sitio de terceros.

Si la billetera se creó en otro dispositivo

La billetera integrada de Telegram guarda la clave en el dispositivo. Si la clave actual no está en este ordenador, la ventana de inicio de sesión mostrará "This device doesn't hold the current key of this wallet" y un enlace "Restore the key": la clave se puede restaurar sin cerrar la ventana de inicio de sesión. Sin la clave, el interruptor está inactivo y el inicio de sesión en el sitio se realiza como de costumbre, sin la billetera.

Dónde ya está disponible

DóndeQuéFecha
tdesktop, rama devventana de inicio de sesión con billetera, seis líneas de interfaz12 de octubre
tdesktop, rama devcorregidas las condiciones de carrera de la ventana, la billetera se carga previamente13 de octubre
Beta de Telegram para macOS 13.0.283345tipo inputTonConnectOauthSession en el código, sin líneas de interfaz20 de octubre
Última versión de Telegram Desktop 7.3.1no10 de octubre
TDLibno—

No es posible saber si la solicitud de billetera está activada en el servidor a través de los clientes: la ventana solo aparecerá cuando el sitio la solicite, y Telegram no ha publicado instrucciones para los sitios web. Hasta ahora, muchos sitios no podían verificar la firma ton_proof al conectarse a través de TON Connect con la billetera integrada de Telegram; para esto, a partir de la versión 5.0 de TON Connect, se necesita una rama de verificación separada.