É melhor só gerar com a visita do usuario por que ai o gasto fica a custo dele, como se fosse um crowdfunding pra achar uma carteira com a ajuda de muitas pessoas. Se você for gerar muitas carteiras por conta propria vai gastar muita energia a menos que só queira que sempre apareça a mesma lista de carteiras limitada.
Se gerar na hora você pode ilustrar uma pagina imensa como se tudo estivesse ja gerado mas só gerando e verificando novas com cada acesso, mostrando que tem milhões de paginas mas nenhuma tem qualquer bitcoin por que as com dinheiro estão no meio de um mar interminavel de carteiras.
Como estou criando e salvando no banco de dados, meu banco tem uma única tabela "Counters" com as colunas:
- SeedTwelveWordsGenerated
- SeedTwentyFourWordsGenerated
- SeedTwelveWordsHasTransactions
- SeedTwentyFourWordsHasTransactions
Dessa forma se eu abrir para gerar as seeds no lado do cliente, eu teria um desafio:
Como confiar nas informações que o cliente envia? Por exemplo, qualquer pessoa poderia forjar uma requisição à API dizendo que gerou uma seed com transações, mesmo que isso nunca tenha acontecido. Isso comprometeria a confiabilidade dos dados.
Como a proposta é ilustrar, com dados reais, o quão improvável é encontrar uma carteira com histórico de transações, manter esse controle no backend garante que os números exibidos são confiáveis e não manipuláveis.
Dando mais detalhes de como estou fazendo, as seeds são geradas continuamente por um worker. A partir delas, derivo os primeiros endereços nos padrões BIP44, BIP49 e BIP84 e consulto a API do blockchain.info (por enquanto). Se algum desses endereços tiver transações registradas, o contador é atualizado. Não salvo nenhuma informação sensível, nem as seeds geradas, nem as chaves públicas ou privadas. Apenas os contadores são persistidos no banco de dados.
Sobre os custos, estou estimando gastar uns U$ 3,50/mês com uma VPS na AWS para manter o worker ativo. O frontend será entregue como arquivos estáticos via CDN da Cloudflare, usando o plano gratuito deles.
Quando eu passar a rodar meu próprio full node com índice (como ElectrumX ou Fulcrum, ainda estou estudando), o principal objetivo será entender melhor o funcionamento interno da blockchain. Apesar de já conhecer o Bitcoin há um tempo, essa será minha primeira imersão técnica mais profunda. E isso, para mim, já vale o custo envolvido.
Faz sentido esses pontos que eu levantei? Estou realmente entrando agora nessa parte mais técnica e estou aberto a feedbacks!
Ah, e só para complementar, já finalizei boa parte do frontend e em breve ele estará no ar. Assim que estiver pronto, trago aqui pro fórum para vocês conferirem.