Pular para o conteúdo principal

Uma postagem marcadas com "zkLogin"

Ver todas os Marcadores

On‑Ramp sem Atrito com zkLogin

· Leitura de 7 minutos
Dora Noda
Software Engineer

Como eliminar o atrito da carteira, manter os usuários fluindo e prever o potencial de crescimento

E se seu aplicativo Web3 tivesse o mesmo fluxo de cadastro perfeito de um serviço Web2 moderno? Essa é a promessa central do zkLogin na blockchain Sui. Ele funciona como OAuth para Sui, permitindo que os usuários façam login com contas familiares do Google, Apple, X e outras. Uma prova de conhecimento zero então vincula de forma segura essa identidade Web2 a um endereço Sui on‑chain — sem pop‑ups de carteira, sem frases‑semente, sem churn de usuários.

O impacto é real e imediato. Com centenas de milhares de contas zkLogin já ativas, estudos de caso relatam ganhos massivos na conversão de usuários, saltando de um desanimador 17 % para um saudável 42 % após remover as barreiras tradicionais de carteira. Vamos detalhar como funciona e o que pode fazer pelo seu projeto.


Por que as Carteiras Matam a Conversão na Primeira Visita

Você construiu um dApp inovador, mas seu funil de aquisição de usuários está vazando. O culpado quase sempre é o mesmo: o botão “Conectar Carteira”. O onboarding padrão Web3 é um labirinto de instalações de extensões, avisos de frase‑semente e quizzes de jargões cripto.

É uma barreira enorme para iniciantes. Pesquisadores de UX observaram um abandono impressionante de 87 % no momento em que o prompt de carteira aparece. Em um experimento revelador, simplesmente redirecionar esse prompt para uma fase posterior do checkout elevou a taxa de conclusão para 94 %. Mesmo para usuários curiosos sobre cripto, o medo principal é: “Posso perder meus fundos se clicar no botão errado.” Remover esse único passo intimidador é a chave para desbloquear um crescimento exponencial.


Como o zkLogin Funciona (em Português Simples)

zkLogin contorna elegantemente o problema da carteira usando tecnologias que todo usuário de internet já confia. A mágica acontece nos bastidores em alguns passos rápidos:

  1. Par de Chaves Efêmero: Quando o usuário quer fazer login, um par de chaves temporário, de sessão única, é gerado localmente no navegador. Pense nisso como uma chave‑passe temporária, válida apenas para esta sessão.
  2. Dança OAuth: O usuário faz login com sua conta Google, Apple ou outra rede social. Seu app insere de forma inteligente um valor único (nonce) nessa solicitação de login.
  3. Serviço ZKP: Após o login bem‑sucedido, um serviço de ZKP (Zero‑Knowledge Proof) gera uma prova criptográfica. Essa prova confirma, “Este token OAuth autoriza o proprietário da chave‑passe temporária,” sem jamais revelar a identidade pessoal do usuário on‑chain.
  4. Derivar Endereço: O JWT (JSON Web Token) do provedor OAuth é combinado com um salt único para gerar determinísticamente o endereço Sui permanente do usuário. O salt permanece privado, seja no cliente ou em um backend seguro.
  5. Submeter Transação: Seu app assina transações com a chave temporária e anexa a prova ZK. Os validadores Sui verificam a prova on‑chain, confirmando a legitimidade da transação sem que o usuário precise de uma carteira tradicional.

Guia de Integração Passo a Passo

Pronto para implementar? Aqui está um guia rápido usando o SDK TypeScript. Os princípios são idênticos para Rust ou Python.

1. Instalar SDK

O pacote @mysten/sui inclui todos os helpers zklogin que você precisará.

pnpm add @mysten/sui

2. Gerar Chaves & Nonce

Primeiro, crie um par de chaves efêmero e um nonce ligado ao epoch atual na rede Sui.

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

3. Redirecionar para OAuth

Construa a URL de login OAuth apropriada para o provedor que você está usando (por exemplo, Google, Facebook, Apple) e redirecione o usuário.

4. Decodificar JWT & Buscar Salt do Usuário

Depois que o usuário fizer login e for redirecionado de volta, capture o id_token da URL. Use‑o para buscar o salt específico do usuário no seu backend e, então, derive o endereço 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 Prova ZK

Envie o JWT para um serviço provedor e obtenha a prova ZK. Para desenvolvimento, você pode usar o provedor público da Mysten. Em produção, hospede seu próprio provedor ou use um serviço como Enoki.

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

6. Assinar & Enviar

Agora, construa sua transação, defina o remetente como o endereço zkLogin do usuário e execute‑a. O SDK cuida de anexar automaticamente os zkLoginInputs (a prova). ✨

const tx = new TransactionBlock();
tx.moveCall({ target: "0x2::example::touch_grass" }); // Qualquer chamada Move
tx.setSender(address);
tx.setGasBudget(5_000_000);

await suiClient.signAndExecuteTransactionBlock({
transactionBlock: tx,
zkLoginInputs: proof, // A mágica acontece aqui
});

7. Persistir Sessão

Para uma experiência de usuário ainda mais fluida, criptografe e armazene o par de chaves e o salt no IndexedDB ou local storage. Lembre‑se de rotacioná‑los a cada alguns epochs para melhorar a segurança.


Modelo de Projeção de KPIs

A diferença que o zkLogin traz não é apenas qualitativa; é quantificável. Compare um funil de onboarding típico com um alimentado por zkLogin:

Etapa do FunilTípico com Prompt de CarteiraCom zkLoginDelta
Landing → Sign‑in100 %100 %
Sign‑in → Carteira Pronta15 % (instalação, frase‑semente)55 % (login social)+40 pp
Carteira Pronta → Primeira Tx\ 23 %\ 90 %+67 pp
Conversão Geral de Tx\ 3 %≈ 25‑40 %\ 8‑13×

👉 O que isso significa: Para uma campanha que gera 10 000 visitantes únicos, isso equivale a 300 ações on‑chain no primeiro dia versus mais de 2 500.


Boas Práticas & Armadilhas

Para criar uma experiência ainda mais fluida, tenha estas dicas em mente:

  • Use Transações Patrocinadas: Pague as taxas das primeiras transações dos seus usuários. Isso elimina todo o atrito e entrega um momento “aha” incrível.
  • Manuseie os Salts com Cuidado: Alterar o salt de um usuário gera um novo endereço. Só faça isso se você controlar um caminho de recuperação confiável.
  • Exponha o Endereço Sui: Após o cadastro, mostre aos usuários seu endereço on‑chain. Isso capacita usuários avançados a importá‑lo para uma carteira tradicional, se desejarem.
  • Previna Loops de Atualização: Cache o JWT e o par de chaves efêmero até que expirem, evitando solicitar login repetidamente.
  • Monitore a Latência do Provedor: Fique de olho no tempo de ida‑e‑volta da geração da prova. Se ultrapassar 2 segundos, considere hospedar um provedor regional para manter a experiência ágil.

Onde a BlockEden.xyz Agrega Valor

Enquanto o zkLogin aperfeiçoa o fluxo voltado ao usuário, escalar isso traz novos desafios de backend. É aí que a BlockEden.xyz entra.

  • Camada API: Nossos nós RPC de alta taxa de transferência, roteados geograficamente, garantem que suas transações zkLogin sejam processadas com latência mínima, independentemente da localização do usuário.
  • Observabilidade: Dashboards prontos para uso que monitoram métricas chave como latência de prova, razões de sucesso/falha e a saúde do seu funil de conversão.
  • Conformidade: Para apps que fazem ponte para fiat, nosso módulo opcional de KYC oferece um on‑ramp compliance direto a partir da identidade verificada do usuário.

Pronto para Lançar?

A era dos fluxos de carteira engessados e intimidador acabou. Crie um sandbox zkLogin, conecte‑se ao endpoint de full‑node da BlockEden e veja seu gráfico de cadastros subir — enquanto seus usuários nunca precisam ouvir a palavra “carteira”. 😉