Análise Técnica: On-Ramp e Off-Ramp (BRL ↔ BRLA) no Sandbox

Esta análise foca exclusivamente nos fluxos de entrada (On-Ramp) e saída (Off-Ramp) de Reais para BRLA (Stablecoin), utilizando a API da Avenia.

1. On-Ramp (Depósito: Reais -> BRLA)

Neste cenário, o usuário envia Reais via PIX e recebe BRLA na sua carteira.

Fluxo Técnico

  1. Cotação: Aplicação solicita cotação de BRL para BRLA.
  2. Ticket: Aplicação gera um Ticket de depósito.
  3. PIX: API retorna o código "Copia e Cola" (BR Code).
  4. Pagamento: Usuário paga o PIX (Simulado no Sandbox).
  5. Liquidação: Avenia detecta o pagamento e minting dos BRLA é feito para a carteira destino.

Diagrama (On-Ramp)

sequenceDiagram participant User as Usuário participant App as Sua Aplicação participant API as Avenia API User->>App: Quero comprar 100 BRLA com PIX App->>API: GET /quote (Input: BRL, Output: BRLA) API-->>App: Retorna quoteToken (1:1) App->>API: POST /tickets (Envia quoteToken) API-->>App: Retorna brCode (PIX) App-->>User: Exibe QR Code PIX Note over User, API: Usuário paga o PIX (Simulação) API->>App: Webhook: DEPOSIT-SUCCESS (R$ recebido) API->>App: Webhook: TICKET-COMPLETE (BRLA entregue)

Implementação (Node.js) - On-Ramp

async function onRampBrlToBrla(amountBrl, walletAddress) {
  // 1. Cotação (BRL -> BRLA)
  const quote = await api.get('/account/quote/fixed-rate', {
    params: {
      inputCurrency: 'BRL',
      inputPaymentMethod: 'PIX',
      inputAmount: amountBrl,
      outputCurrency: 'BRLA',
      outputPaymentMethod: 'POLYGON', // Ou outra chain suportada
    }
  });

  // 2. Criar Ticket
  const ticket = await api.post('/account/tickets', {
    quoteToken: quote.data.quoteToken,
    ticketBlockchainOutput: {
      beneficiaryWalletId: walletAddress 
      // Dica: Use beneficiaryWalletId para wallets cadastradas
    }
  });

  // Retorna o código PIX para o front exibir
  return ticket.data.brCode; 
}

2. Off-Ramp (Saque: BRLA -> Reais)

Neste cenário, o usuário envia BRLA da sua carteira e recebe Reais na sua conta bancária via PIX.

Fluxo Técnico

  1. Cotação: Aplicação solicita cotação de BRLA para BRL.
  2. Ticket: Aplicação gera um Ticket de saque.
  3. Transferência/Permit:
  4. Liquidação: Avenia queima os BRLA e envia o PIX para o usuário.

Diagrama (Off-Ramp)

sequenceDiagram participant User as Usuário participant App as Sua Aplicação participant API as Avenia API User->>App: Quero sacar 100 BRLA para minha conta App->>API: GET /quote (Input: BRLA, Output: BRL) API-->>App: Retorna quoteToken Note right of App: Assinatura do Permit (EIP-2612) App->>User: Solicita Assinatura (Metamask/Wallet) User-->>App: Assinatura assinada (r, s, v) App->>API: POST /tickets (quoteToken + Permit + Dados PIX) API-->>App: Ticket criado (Status: PENDING) Note over API: Avenia puxa BRLA e envia PIX API->>App: Webhook: TICKET-COMPLETE (PIX enviado)

Implementação (Node.js) - Off-Ramp

async function offRampBrlaToBrl(amountBrla, userWallet, userPixKey) {
  // 1. Cotação (BRLA -> BRL)
  const quote = await api.get('/account/quote/fixed-rate', {
    params: {
      inputCurrency: 'BRLA',
      inputPaymentMethod: 'POLYGON', // Origem dos tokens
      inputAmount: amountBrla,
      outputCurrency: 'BRL',
      outputPaymentMethod: 'PIX',
      blockchainSendMethod: 'PERMIT' // Fluxo automático
    }
  });

  // 2. Obter Assinatura (No Front-end)
  // ... Código do front para obter signature EIP-2612 do usuário ...
  const permitData = await getDigitalSignatureFromUser(userWallet, amountBrla);

  // 3. Criar Ticket com Permit e Destino PIX
  const ticket = await api.post('/account/tickets', {
    quoteToken: quote.data.quoteToken,
    
    // De onde sai o BRLA (Com permissão de saque)
    ticketBlockchainInput: {
      walletAddress: userWallet,
      permit: permitData // { r, s, v, nonce, deadline }
    },

    // Para onde vai o R$ (Chave PIX)
    ticketBrlPixOutput: {
      pixKey: userPixKey
    }
  });

  return ticket.data.id;
}

Monitoramento (Comum a ambos)

Independentemente se é On-Ramp ou Off-Ramp, a confirmação final deve ser monitorada.

Status Importantes Avenia