BitChicken

Visão Geral — Ecossistema BitChicken

Topologia de 4 projetos organizada por camada. O caminho de leitura é unidirecional (contratos → indexer → Postgres → API → dApp); o caminho de escrita on-chain é direto do dApp aos contratos via carteira.

graph TB
    subgraph Usuario
        U[Usuario com carteira Web3]
    end

    subgraph Frontend
        DAPP[dApp Angular 22<br/>SPA zoneless signals]
    end

    subgraph Web3_Carteira
        WALLET[Reown AppKit / WalletConnect]
        ETHERS[ethers v6<br/>read JsonRpcProvider / write signer]
    end

    subgraph Backend
        API[App Backend .NET 10<br/>Minimal API + Wolverine]
        HUB[SignalR EventsHub<br/>marketChanged / forgeFulfilled]
    end

    subgraph Indexacao
        INDEXER[Indexer Ponder 0.16.6<br/>viem handlers por dominio]
    end

    subgraph Banco
        PGPUB[(Postgres schema public<br/>accounts / wallet_link_nonces)]
        PGIDX[(Postgres schema indexer<br/>12 tabelas read-model)]
    end

    subgraph Contratos_OnChain
        TOKEN[BCKN ERC-20]
        NFT[BitChickenNFT ERC-721<br/>tiers / catalogo / referral]
        FORGE[Forge gacha VRF]
        STAKING[Staking granja]
        MARKET[Marketplace P2P]
    end

    subgraph Externos
        FIRE[Firebase Auth]
        VRF[Chainlink VRF v2.5]
        CG[CoinGecko]
        PIN[Pinata IPFS]
        SCAN[BSCScan / Otterscan]
    end

    U --> DAPP
    DAPP --> WALLET
    DAPP --> ETHERS
    DAPP --> FIRE
    DAPP -->|HTTPS + Firebase JWT| API
    DAPP -->|WebSocket| HUB
    DAPP --> CG
    DAPP -->|admin upload| PIN

    ETHERS -->|read/write| TOKEN
    ETHERS -->|read/write| NFT
    ETHERS -->|requestObtain| FORGE
    ETHERS -->|stake/claim| STAKING
    ETHERS -->|list/obtain/swap| MARKET

    API -->|EF Core read/write| PGPUB
    API -->|EF Core read-only Gridify| PGIDX
    API -->|valida JWT OIDC| FIRE
    HUB -->|LISTEN/NOTIFY| PGIDX

    INDEXER -->|eventos via RPC| TOKEN
    INDEXER -->|eventos via RPC| NFT
    INDEXER -->|eventos via RPC| FORGE
    INDEXER -->|eventos via RPC| STAKING
    INDEXER -->|eventos via RPC| MARKET
    INDEXER -->|upsert read-model| PGIDX

    FORGE -->|requestRandomWords| VRF
    VRF -->|fulfillRandomWords| FORGE
    NFT -->|burnFrom rename| TOKEN
    STAKING -->|mint yield| TOKEN
    FORGE -->|pickEdition / forgeMint| NFT
    MARKET -->|transfer / royalty| NFT

Componentes por camada

Camada Componente Projeto
Frontend dApp Angular RW.BC.DApp
Web3 / Carteira Reown AppKit, ethers v6 RW.BC.DApp
Backend API .NET (REST + SignalR) RW.BC.Api
Indexação Indexer Ponder RW.BC.Indexer
Banco Postgres public + indexer compartilhado (API escreve public; Ponder escreve indexer)
Contratos on-chain BCKN, NFT, Forge, Staking, Marketplace RW.BC.Crypto
Serviços externos Firebase, Chainlink VRF, CoinGecko, Pinata, BSCScan terceiros

Princípios arquiteturais

Dependências críticas

Dependência Impacto se cair
Chainlink VRF (gacha) Sem aleatoriedade não há mint de NFT — ovo fica preso em “Chocando…”
BSC RPC Sem RPC não há leitura/escrita on-chain nem indexação
Firebase Auth Sem auth, endpoints protegidos retornam 401 e o write-gate bloqueia escrita
Postgres Sem DB, provisionamento de conta, wallet-link e read-models falham
Indexer Ponder Sem indexer, os read-models ficam desatualizados (API não detecta lag)
MINTER_ROLE (Staking) Sem o papel, o yield do staking não consegue mintar BCKN (a indicação paga em BNB, não minta)