Skip to content

RoseaneC/Mini-App-Celo

Repository files navigation

InáPay

InáPay é um Mini App construído na Celo Mainnet focado em pagamentos digitais rápidos, simples e acessíveis usando CELO e stablecoins.

O projeto é um MVP mobile-first inspirado na simplicidade de experiências como Pix e MiniPay: conectar uma carteira, escolher uma moeda, informar valor e destino, e acompanhar a transação com hash/comprovante on-chain.

Aviso de segurança: esta versão opera na Celo Mainnet. Transações usam valor real. Revise moeda, valor e endereço de destino antes de confirmar na carteira.

Funcionalidades atuais

  • Envio real de CELO na Celo Mainnet.
  • Envio real de USDC via ERC20 transfer.
  • USDT visível na arquitetura, mas desabilitado enquanto passa por validação mainnet.
  • Detecção automática de ambiente MiniPay.
  • Compatível com MetaMask mobile e desktop por provedores injetados.
  • Modo demo sem wallet para navegação e demonstração da interface.
  • Transferências com comprovante/hash no Celoscan.
  • Registro opcional de comprovante no contrato InapayRegistry após confirmação do pagamento.
  • Arquitetura multi-token com CELO, USDC e USDT.
  • Leitura de saldo real para CELO e tokens ERC20 habilitados.
  • Entrada por telefone exibida apenas como funcionalidade futura.

Stack

  • Next.js
  • React
  • TypeScript
  • Wagmi
  • Viem
  • TailwindCSS
  • TanStack React Query
  • Celo Mainnet
  • ERC20
  • Vercel

Tokens suportados

Token Status
CELO Funcional
USDC Funcional
USDT Em validação

USDC mainnet:

0xcebA9300f2b948710d2653dD7B07f33A8B32118C

USDT não está habilitado para envio mainnet nesta versão. Ele permanece desabilitado até validação oficial de contrato, decimals, symbol, bytecode, balanceOf e compatibilidade ERC20.

Como rodar localmente

Instale as dependências:

npm install

Rode o servidor de desenvolvimento:

npm run dev

Acesse:

http://localhost:3000

Gere o build de produção:

npm run build

Opcionalmente, rode o lint:

npm run lint

Deploy

Deploy previsto via Vercel.

Link do Vercel:

Adicionar link aqui

Arquitetura

O projeto está organizado em camadas pequenas e diretas:

  • src/app: entradas do Next.js App Router e layout global.
  • src/components: componentes de UI, layout e fluxo de pagamento.
  • src/hooks: hooks de conexão, envio e leitura de saldos.
  • src/lib/web3: configuração da rede Celo, metadata de tokens e constantes Web3.
  • src/providers: providers globais de Wagmi e React Query.
  • src/types: tipos compartilhados da aplicação.

O fluxo de CELO usa transação nativa na Celo Mainnet. O fluxo de USDC usa chamada ERC20 transfer(address,uint256) com decimals 6.

Rede utilizada

A rede ativa do app é Celo Mainnet.

Configuração atual:

  • Chain ID: 42220
  • RPC: https://forno.celo.org
  • Explorer: https://celoscan.io
  • Explorer TX URL: https://celoscan.io/tx/
  • Native currency: CELO

Comportamento atual:

  • CELO é enviado como moeda nativa da rede.
  • USDC usa contrato ERC20 oficial na Celo Mainnet.
  • O app tenta alternar para Celo Mainnet quando necessário.
  • Os comprovantes apontam para o Celoscan.

MiniPay

InáPay inclui suporte inicial ao contexto MiniPay por detecção do provider injetado.

Estado atual:

  • Detecta MiniPay quando o provider expõe a flag correspondente.
  • Exibe mensagens de conexão específicas para MiniPay.
  • Mantém compatibilidade com MetaMask desktop e mobile.
  • Mantém modo demo quando nenhuma wallet é detectada.

O app ainda não implementa SDKs específicos do MiniPay, ODIS, SocialConnect ou resolução de telefone para carteira.

Smart Contract

O projeto inclui um contrato simples chamado InapayRegistry para registrar comprovantes de pagamentos on-chain.

Características:

  • Não recebe fundos.
  • Não guarda fundos.
  • Não possui função de saque.
  • Não possui owner/admin.
  • Registra apenas metadados do comprovante.

Contrato:

contracts/InapayRegistry.sol

Contrato deployado e verificado na Celo Mainnet:

0x56C5B94f05C0888E9a4106200A69841D25C902Cd

Função principal:

recordPayment(address receiver, address token, uint256 amount, bytes32 paymentRef)

Campos registrados:

  • id: identificador incremental.
  • sender: endereço que chamou o contrato.
  • receiver: destinatário informado.
  • token: token do pagamento; address(0) representa CELO nativo.
  • amount: valor em unidades base do token.
  • paymentRef: referência externa em bytes32.
  • timestamp: horário do bloco.

Evento:

PaymentRecorded(uint256 indexed id, address indexed sender, address indexed receiver, address token, uint256 amount, bytes32 paymentRef, uint256 timestamp)

On-chain payment registry

Após a confirmação de um pagamento CELO ou USDC, o frontend tenta registrar automaticamente um comprovante no InapayRegistry chamando:

recordPayment(address receiver, address token, uint256 amount, bytes32 paymentRef)

O paymentRef é um bytes32 gerado a partir de sender, receiver, token, amount, hash da transação principal e timestamp local. Para CELO nativo, o campo token usa address(0). Para USDC, usa o contrato oficial de USDC na Celo Mainnet.

Variável pública do frontend:

NEXT_PUBLIC_INAPAY_REGISTRY_ADDRESS=0x56C5B94f05C0888E9a4106200A69841D25C902Cd

Se o registro no contrato falhar, o pagamento principal continua válido. O app mostra o hash do pagamento e exibe apenas um aviso leve sobre o registro do comprovante.

Compilar contrato:

npm run contract:compile

Rodar testes:

npm run contract:test

Deploy na Celo Mainnet:

CELO_MAINNET_PRIVATE_KEY=0x... npm run contract:deploy:celo

No PowerShell:

$env:CELO_MAINNET_PRIVATE_KEY="0x..."
npm.cmd run contract:deploy:celo

Verificação no Celoscan após deploy:

ETHERSCAN_API_KEY=... npm run contract:verify:celo -- <CONTRACT_ADDRESS>

No PowerShell:

$env:ETHERSCAN_API_KEY="..."
npm.cmd run contract:verify:celo -- <CONTRACT_ADDRESS>

Segurança

Esta versão usa Celo Mainnet e pode movimentar valor real.

Recomendações de teste:

  • Comece com valores mínimos, como 0,01.
  • Confirme se a carteira está na Celo Mainnet.
  • Revise o token selecionado antes de enviar.
  • Revise o endereço completo de destino.
  • Mantenha CELO suficiente para gas.
  • Use o hash no Celoscan para conferir a transação.

Screenshots

Tela inicial

Carteira conectada

Seleção de token

Comprovante de transação

Roadmap

  • SocialConnect / telefone.
  • USDm.
  • Fee abstraction.
  • Integração MiniPay avançada.
  • QR Code payments.
  • Histórico de transações.
  • Validação oficial de USDT na Celo Mainnet.
  • Estados de transação mais detalhados.

Sobre o projeto

O objetivo do InáPay é tornar pagamentos digitais mais simples e acessíveis usando a infraestrutura da Celo e stablecoins. O MVP prioriza uma experiência curta e compreensível: conectar carteira, escolher ativo, enviar para outro endereço e receber um comprovante verificável on-chain.

Nesta fase, o foco está em pagamentos por endereço de carteira na Celo Mainnet. Pagamentos por telefone, SocialConnect, ODIS, USDm, QR Code e histórico de transações fazem parte do roadmap e ainda não estão ativos no produto.

About

Mini App Web3 inspirado no MiniPay da Celo, com envio de CELO em Celo Sepolia usando Next.js, wagmi e viem.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors