5

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.

Carregando publicação patrocinada...
3