Pitch: BitChicken: construindo um ecossistema NFT, peça por peça
O BitChicken nasceu como "vou só testar um contrato ERC-721" e virou um ecossistema inteiro na BNB Smart Chain, com quatro camadas de software conversando entre si. Toda vez que explico isso pra alguém, a reação é a mesma: "espera, é bem mais do que eu imaginava". Por isso separei por módulo, com telas e explicação em português claro.
Um aviso antes de começar: é um protótipo em construção, não um produto em produção, meu campo de testes pra aprender essas tecnologias na prática, sem valor real envolvido.
Antes de tudo: o que é o BitChicken?
É um ecossistema de NFT em formato de "fazenda de galinhas digitais": você abre um ovo (sorteio on-chain, via Chainlink VRF) que choca numa galinha com espécie, raridade e características próprias. Dá pra colocá-la, com um par complementar, pra produzir a token BCKN, negociar num mercado próprio, ou só colecionar.
Tem também um programa de indicação: quem você trouxe pro jogo abre o primeiro ovo, você recebe uma fatia em BNB do valor pago (de 2% a 10%, conforme suas indicações acumuladas), sacável a qualquer momento.
Nada disso cabe num contrato sozinho: ele guarda regras e dinheiro com segurança, mas é péssimo pra responder "quais NFTs estão à venda agora?" ou oferecer login por e-mail. Por isso o projeto tem quatro partes, cada uma com um trabalho diferente.
Módulo 1: os contratos (RW.BC.Crypto), onde moram as regras que ninguém pode trapacear
A fundação. Escrita em Solidity, rodando na BNB Smart Chain: regras que valem de verdade, porque uma vez publicadas, ninguém (nem eu) pode mudar por baixo dos panos.
São cinco contratos principais:
- BCKN: a token utilitária (ERC-20), com teto de emissão ajustável, nunca pra baixo do que já foi cunhado.
- BitChickenNFT: o contrato das galinhas (ERC-721), com um catálogo de edições ("espécies" com raridade e estatísticas próprias) e dez faixas de preço pra abrir um ovo.
- Forge: o gacha. Ao comprar um ovo, pede um número aleatório ao Chainlink VRF, um oráculo que ninguém consegue prever ou manipular. O número decide espécie e sexo e cunha o NFT; se o oráculo demorar demais, dá pra cancelar e reaver o BNB.
- Staking: a "granja". Um casal (macho + fêmea) gera BCKN a cada ciclo semanal, numa fórmula que usa as estatísticas do par. Parte fica de taxa; o resto vai pra sua carteira.
- Marketplace: compra e venda por preço fixo (com taxa e royalty) ou troca direta NFT por NFT, sem taxa.
O que gosto nessa camada: ela não confia em nada além dela mesma. Toda regra crítica está travada no contrato, e o resto do sistema só lê. Dá pra acompanhar essa rede bloco a bloco num explorador local, a mesma ideia de um BscScan rodando na minha máquina:
Módulo 2: o indexador (RW.BC.Indexer), a memória de tudo que acontece na blockchain
Um detalhe que muita gente não pensa ao mexer com Web3: ler direto da blockchain é lento e caro. Por isso existe o indexador: ele ouve os eventos que os contratos emitem e guarda tudo organizado num banco Postgres, virando um "banco de dados normal", rápido de consultar.
Construí essa parte com Ponder, feito pra indexar contratos EVM e materializar o estado em tabelas relacionais: um schema dedicado que qualquer camada consulta sem tocar na blockchain.
Módulo 3: a API de contas (RW.BC.Api), a ponte entre "ter uma carteira" e "ter uma conta"
Uma das decisões mais importantes do projeto: carteira e conta são coisas separadas.
Quem já usou produto Web3 conhece a dor de depender só de MetaMask: perdeu a seed, perdeu o acesso. Aqui não: você cria conta com e-mail e senha via Firebase e, se quiser interagir com os contratos, vincula uma carteira por assinatura (padrão SIWE). A carteira prova que é sua; quem guarda seu acesso é a conta.
Essa API, em .NET, tem duas responsabilidades: validar quem você é e gerenciar o vínculo da carteira, sem guardar chave privada de ninguém; e servir como "vitrine rápida" do que o indexador já organizou (edições, NFTs, mercado, staking, forge, transparência), com busca, filtro, paginação e atualização em tempo real via WebSocket.
Essa camada é o que faz o produto parecer rápido (não depende da blockchain a cada clique) e íntegro (nunca inventa dado, só reflete o que já é verdade on-chain).
O stack é .NET 10 com Clean Architecture e Wolverine como mediator do CQRS: comando entra, handler cuida dele. Persistência é EF Core sobre PostgreSQL, o JWT do Firebase é validado localmente, e o read-model usa Gridify pra listar, filtrar e paginar, com atualizações via SignalR. O ambiente de desenvolvimento inteiro sobe orquestrado com .NET Aspire.
Módulo 4: o dApp (RW.BC.DApp), a cara do produto
A parte que qualquer pessoa vê primeiro: a interface web em Angular, onde a pessoa entra, cria conta, vincula a carteira, abre um ovo, monta um casal na granja e negocia no mercado.
Escolhi Angular 22 no modo mais moderno: zoneless, standalone e signals, mais previsível e rápido sem o overhead do Zone.js. A interface é PrimeNG 21 com Tailwind v4, e o Web3 usa ethers v6 com Reown AppKit pra conectar qualquer carteira, não só MetaMask. Autenticação é Firebase Web SDK, todo texto passa por i18n (ngx-translate), e a suíte de testes (Vitest) tem 100% de cobertura obrigatória: o build quebra se cair abaixo disso.
Página inicial
A porta de entrada do ecossistema.
A loja de ovos
Aqui a jornada começa: escolher uma faixa de preço e abrir um ovo, sabendo que o resultado é um sorteio auditável, não uma tabela escondida em servidor.
O mercado
Onde as galinhas trocam de dono: preço fixo com taxa e royalty, ou troca direta sem intermediário. Cada card "vira" e mostra os atributos da galinha no verso.
A coleção
O inventário de cada jogador: todas as espécies do catálogo, com progresso de quantas você já tem.
Transparência
Uma página só pra isso: números reais do protocolo, direto da fonte, sem precisar confiar na minha palavra.
A granja
Onde os casais geram BCKN. Escolhe um macho e uma fêmea, aloja o casal e, a cada ciclo, recolhe a produção. A tela também concentra o programa de indicação: seu código, quantas pessoas trouxe, sua taxa e quanto já acumulou em BNB.
(Mercado, coleção, transparência e granja usam dados ilustrativos gerados só pra este artigo; a loja é 100% real, direto da chain local.)
Como tudo se conecta
O dApp fala direto com os contratos pra qualquer ação (comprar, vender, reivindicar rendimento) e com a API por HTTP quando precisa de conta, autenticação ou uma consulta rápida. A API nunca inventa nada, só lê o que o indexador já organizou a partir dos eventos reais da blockchain.
Não tem atalho nem zona cinzenta: cada camada faz um tipo de trabalho, e a comunicação entre elas sempre passa por um contrato bem definido, seja ABI, schema de banco ou chamada HTTP autenticada.
BitChicken agora é open source
Decidi abrir o código inteiro. Os quatro módulos que descrevi acima estão públicos no GitHub, sob licença MIT: github.com/robertvbs/BitChicken.
A estrutura segue a mesma divisão do artigo: um monorepo com quatro projetos independentes, cada um na sua pasta, sem código compartilhado entre eles.
RW.BitChicken/
├── RW.BC.Crypto/ → contratos Solidity (Hardhat 3)
├── RW.BC.Indexer/ → indexador on-chain (Ponder + viem)
├── RW.BC.Api/ → API de contas (.NET 10 + Aspire)
├── RW.BC.DApp/ → dApp (Angular 22)
└── RW.BC.AppHost/ → orquestra tudo isso num único comando
Pra rodar o ecossistema inteiro na sua máquina, com dados frescos, é um único comando: dotnet run --project RW.BC.AppHost. O README.md do repositório tem o passo a passo completo.
Se você mexe com Web3, .NET ou Angular e tiver curiosidade, ou crítica construtiva, o repositório está aberto pra isso.