Saltar al contenido principal

Incorporación sin fricciones con zkLogin

· 7 min de lectura
Dora Noda
Software Engineer

Cómo eliminar la fricción de la billetera, mantener el flujo de usuarios y prever el potencial de crecimiento

¿Qué pasaría si tu aplicación Web3 tuviera el mismo flujo de registro fluido que un servicio Web2 moderno? Esa es la promesa central de zkLogin en la blockchain Sui. Funciona como OAuth para Sui, permitiendo a los usuarios iniciar sesión con cuentas conocidas de Google, Apple, X y más. Una prueba de conocimiento cero (ZKP) vincula de forma segura esa identidad Web2 a una dirección de Sui en la cadena — sin ventanas emergentes de billeteras, sin frases semilla y sin deserción de usuarios.

El impacto es real e inmediato. Con cientos de miles de cuentas zkLogin ya activas, los casos de estudio informan ganancias masivas en la conversión de usuarios, saltando de un desastroso 17 % a un saludable 42 % después de eliminar las barreras tradicionales de las billeteras. Analicemos cómo funciona y qué puede hacer por tu proyecto.


Por qué las billeteras matan la conversión inicial

Has construido una dApp innovadora, pero tu embudo de adquisición de usuarios tiene fugas. El culpable es casi siempre el mismo: el botón "Connect Wallet". El onboarding estándar de Web3 es un laberinto de instalaciones de extensiones, advertencias de frases semilla y cuestionarios de jerga cripto.

Es una barrera masiva para los recién llegados. Los investigadores de UX observaron una asombrosa caída del 87 % en el momento en que aparecía un aviso de billetera. En un experimento revelador, simplemente redirigir ese aviso a una etapa posterior en el proceso de pago cambió la tasa de finalización al 94 %. Incluso para los usuarios curiosos por las criptomonedas, el temor principal es: "Podría perder mis fondos si hago clic en el botón equivocado". Eliminar ese único e intimidante paso es la clave para desbloquear el crecimiento exponencial.


Cómo funciona zkLogin (en lenguaje sencillo)

zkLogin esquiva elegantemente el problema de la billetera utilizando tecnologías en las que todos los usuarios de Internet ya confían. La magia ocurre entre bastidores en unos pocos pasos rápidos:

  1. Par de claves efímeras: Cuando un usuario quiere iniciar sesión, se genera localmente en su navegador un par de claves temporales para una sola sesión. Piensa en ello como una clave de acceso temporal, válida solo para esta sesión.
  2. Proceso OAuth: El usuario inicia sesión con su cuenta de Google, Apple u otra cuenta social. Tu aplicación inserta hábilmente un valor único (nonce) en esta solicitud de inicio de sesión.
  3. Servicio ZKP: Después de un inicio de sesión exitoso, un servicio ZKP (Zero-Knowledge Proof) genera una prueba criptográfica. Esta prueba confirma: "Este token de OAuth autoriza al propietario de la clave de acceso temporal", sin revelar nunca la identidad personal del usuario en la cadena.
  4. Derivar dirección: El JWT (JSON Web Token) del usuario proporcionado por el proveedor de OAuth se combina con un salt único para generar de manera determinista su dirección permanente de Sui. El salt se mantiene privado, ya sea en el lado del cliente o en un backend seguro.
  5. Enviar transacción: Tu aplicación firma las transacciones con la clave temporal y adjunta la prueba ZK. Los validadores de Sui verifican la prueba en la cadena, confirmando la legitimidad de la transacción sin que el usuario necesite nunca una billetera tradicional.

Guía de integración paso a paso

¿Listo para implementar esto? Aquí tienes una guía rápida utilizando el SDK de TypeScript. Los principios son idénticos para Rust o Python.

1. Instalar el SDK

El paquete @mysten/sui incluye todos los ayudantes de zklogin que necesitarás.

pnpm add @mysten/sui

2. Generar claves y Nonce

Primero, crea un par de claves efímeras y un nonce vinculado a la época actual en la red Sui.

const keypair = new Ed25519Keypair();
const { epoch } = await suiClient.getLatestSuiSystemState();
const nonce = generateNonce(keypair.getPublicKey(), Number(epoch) + 2, generateRandomness());

3. Redirigir a OAuth

Construye la URL de inicio de sesión OAuth adecuada para el proveedor que estés utilizando (por ejemplo, Google, Facebook, Apple) y redirige al usuario.

4. Decodificar JWT y obtener el Salt del usuario

Después de que el usuario inicie sesión y sea redirigido de vuelta, toma el id_token de la URL. Úsalo para obtener el salt específico del usuario desde tu backend, luego deriva su dirección de Sui.

const jwt = new URLSearchParams(window.location.search).get('id_token')!;
const salt = await fetch('/api/salt?jwt=' + jwt).then(r => r.text());
const address = jwtToAddress(jwt, salt);

5. Solicitar prueba ZK

Envía el JWT a un servicio probador (prover) para obtener la prueba ZK. Para el desarrollo, puedes usar el probador público de Mysten. En producción, deberías alojar el tuyo propio o usar un servicio como Enoki.

const proof = await fetch('/api/prove', {
method:'POST',
body: JSON.stringify({ jwt, ... })
}).then(r => r.json());

6. Firmar y enviar

Ahora, construye tu transacción, establece el remitente como la dirección zkLogin del usuario y ejecútala. El SDK se encarga de adjuntar automáticamente los zkLoginInputs (la prueba). ✨

const tx = new TransactionBlock();
tx.moveCall({ target:'0x2::example::touch_grass' }); // Cualquier llamada a Move
tx.setSender(address);
tx.setGasBudget(5_000_000);

await suiClient.signAndExecuteTransactionBlock({
transactionBlock: tx,
zkLoginInputs: proof // La magia ocurre aquí
});

7. Persistir la sesión

Para una experiencia de usuario más fluida, cifra y almacena el par de claves y el salt en IndexedDB o en el almacenamiento local. Recuerda rotarlos cada pocas épocas para mejorar la seguridad.


Plantilla de Proyección de KPI

La diferencia que marca zkLogin no es solo cualitativa; es cuantificable. Compare un embudo de incorporación típico con uno impulsado por zkLogin:

Etapa del embudoTípico con ventana emergente de WalletCon zkLoginDelta
Landing → Inicio de sesión100 %100 %
Inicio de sesión → Wallet lista15 % (instalación, frase semilla)55 % (inicio de sesión social)+40 pp
Wallet lista → Primera Tx~ 23 %~ 90 %+67 pp
Conversión total de Tx~ 3 %≈ 25‑40 %~ 8‑13×

👉 Lo que esto significa: Para una campaña que atrae 10,000 visitantes únicos, esa es la diferencia entre 300 acciones on-chain el primer día y más de 2,500.


Buenas Prácticas y Aspectos a Considerar

Para crear una experiencia aún más fluida, tenga en cuenta estos consejos profesionales:

  • Use Transacciones Patrocinadas: Pague las tarifas de las primeras transacciones de sus usuarios. Esto elimina toda fricción y ofrece un increíble momento "¡ajá!".
  • Maneje los Salts con cuidado: Cambiar el salt de un usuario generará una nueva dirección. Solo haga esto si controla una ruta de recuperación confiable para ellos.
  • Exponga la Dirección de Sui: Después del registro, muestre a los usuarios su dirección on-chain. Esto permite a los usuarios avanzados importarla a una billetera tradicional más adelante si así lo desean.
  • Evite los bucles de actualización: Almacene en caché el JWT y el par de claves efímeras hasta que expiren para evitar pedir al usuario que inicie sesión repetidamente.
  • Monitoree la latencia del Prover: Vigile el tiempo de ida y vuelta de la generación de pruebas. Si supera los 2 segundos, considere alojar un prover regional para mantener la rapidez.

Dónde BlockEden.xyz aporta valor

Mientras que zkLogin perfecciona el flujo de cara al usuario, escalarlo introduce nuevos desafíos en el backend. Ahí es donde entra BlockEden.xyz.

  • Capa de API: Nuestros nodos RPC de alto rendimiento y enrutamiento geográfico garantizan que sus transacciones de zkLogin se procesen con una latencia mínima, independientemente de la ubicación del usuario.
  • Observabilidad: Obtenga paneles de control listos para usar para rastrear métricas clave como la latencia de las pruebas, los ratios de éxito/fallo y la salud de su embudo de conversión.
  • Cumplimiento: Para las aplicaciones que conectan con fiat, nuestro módulo opcional de KYC proporciona una rampa de entrada (on-ramp) compatible directamente desde la identidad verificada del usuario.

¿Listo para lanzar?

La era de los flujos de billetera toscos e intimidantes ha terminado. Inicie un sandbox de zkLogin, conecte el endpoint de nodo completo de BlockEden y vea cómo sube su gráfico de registros, mientras sus usuarios ni siquiera tienen que escuchar la palabra “wallet”. 😉