Fase 1: Nós Se Encontram
-2026-02-14
-Tesseras não é mais uma ferramenta apenas local. A Fase 1 entrega a camada de -rede: nós se descobrem através de uma DHT Kademlia, comunicam-se sobre QUIC e -publicam ponteiros de tesseras que qualquer par na rede pode encontrar. Uma -tessera criada no nó A agora pode ser encontrada a partir do nó C.
-O que foi construído
-tesseras-core (atualizado) — Novos tipos de domínio de rede:
-TesseraPointer (referência leve aos detentores de uma tessera e localização
-dos fragmentos), NodeIdentity (ID do nó + chave pública + nonce de prova de
-trabalho), NodeInfo (identidade + endereço + capacidades) e Capabilities
-(bitflags do que um nó suporta: DHT, armazenamento, relay, replicação).
tesseras-net — A camada de transporte, construída sobre QUIC via quinn. A
-trait Transport define a porta: send, recv, disconnect, local_addr.
-Dois adaptadores a implementam:
-
-
QuinnTransport— QUIC real com TLS auto-assinado, negociação ALPN -(tesseras/1), pool de conexões via DashMap e um loop de aceitação em -background que trata streams recebidas.
-MemTransport+SimNetwork— canais em memória para testes determinísticos -sem I/O de rede. Cada teste de integração no crate DHT roda contra este -adaptador.
-
O protocolo de fio usa MessagePack com prefixo de comprimento: um cabeçalho de 4
-bytes big-endian seguido de um payload rmp-serde. WireMessage carrega um byte
-de versão, ID de requisição e um corpo que pode ser requisição, resposta ou erro
-de protocolo. Tamanho máximo de mensagem é 64 KiB.
tesseras-dht — Uma implementação completa de Kademlia:
--
-
- Tabela de roteamento: 160 k-buckets com k=20. Evicção do menos recentemente -visto, mover-para-trás ao atualizar, verificação por ping antes de substituir -a entrada mais antiga de um bucket cheio. -
- Distância XOR: métrica XOR de 160 bits com indexação de bucket pelo bit mais -significativo diferente. -
- Prova de trabalho: nós iteram um nonce até que
-
BLAKE3(pubkey || nonce)[..20]tenha 8 bits zero iniciais (~256 tentativas de -hash em média). Barato o suficiente para qualquer dispositivo, caro o -suficiente para tornar ataques Sybil impraticáveis em escala.
- - Mensagens de protocolo: Ping/Pong, FindNode/FindNodeResponse, -FindValue/FindValueResult, Store — todos serializados com MessagePack via -serde. -
- Armazenamento de ponteiros: armazenamento em memória limitado com TTL -configurável (24 horas padrão) e máximo de entradas (10.000 padrão). Quando -cheio, remove ponteiros mais distantes do ID do nó local, seguindo o modelo de -responsabilidade baseado em distância do Kademlia. -
- DhtEngine: o orquestrador principal. Trata RPCs recebidos, executa buscas
-iterativas (paralelismo alpha=3), bootstrap, publicação e busca. O método
-
run()dirige um looptokio::select!com timers de manutenção: refresh da -tabela de roteamento a cada 60 segundos, expiração de ponteiros a cada 5 -minutos.
-
tesd — Um binário de nó completo. Analisa argumentos de CLI (endereço de -bind, pares de bootstrap, diretório de dados), gera uma identidade de nó válida -por PoW, abre um endpoint QUIC, faz bootstrap na rede e roda o motor DHT. -Desligamento gracioso com Ctrl+C via tratamento de sinais do tokio.
-Infraestrutura — Configuração OpenTofu para dois nós bootstrap no Hetzner
-Cloud (instâncias cx22 em Falkenstein, Alemanha e Helsinki, Finlândia). Script
-de provisionamento cloud-init cria um usuário dedicado tesseras, escreve um
-arquivo de configuração e configura um serviço systemd. Regras de firewall abrem
-UDP 4433 (QUIC) e restringem métricas a acesso interno.
Testes — 139 testes em todo o workspace:
--
-
- 47 testes unitários em tesseras-dht (tabela de roteamento, distância, PoW, -armazenamento de ponteiros, serialização de mensagens, RPCs do engine) -
- 5 testes de integração multi-nó (bootstrap de 3 nós, convergência de lookup -com 10 nós, publicar-e-encontrar, detecção de partida de nó, rejeição de PoW) -
- 14 testes em tesseras-net (roundtrips de codec, send/recv de transporte, -backpressure, disconnect) -
- Testes de fumaça com Docker Compose usando 3 nós containerizados comunicando -sobre QUIC real -
- Zero avisos do clippy, formatação limpa -
Decisões de arquitetura
--
-
- Transport como porta: a trait
Transporté a única interface entre o -motor DHT e a rede. Trocar QUIC por qualquer outro protocolo significa -implementar quatro métodos. Todos os testes de DHT usam o adaptador em -memória, tornando-os rápidos e determinísticos.
- - Um stream por RPC: cada par requisição-resposta DHT usa um stream -bidirecional QUIC novo. Sem complexidade de multiplexação, sem bloqueio -head-of-line entre operações independentes. O QUIC trata a multiplexação no -nível da conexão. -
- MessagePack em vez de Protobuf: codificação binária compacta sem geração -de código ou arquivos de esquema. Integração com serde significa que adicionar -um campo a uma mensagem é uma mudança de uma linha. Trade-off: sem garantias -de evolução de esquema embutidas, mas neste estágio velocidade importa mais. -
- PoW em vez de stake ou reputação: uma identidade de nó custa ~256 hashes -BLAKE3. Isso roda em menos de um segundo em qualquer hardware, incluindo um -Raspberry Pi, mas gerar milhares de identidades para um ataque Sybil se torna -caro. Sem tokens, sem blockchain, sem dependências externas. -
- Busca iterativa com atualização da tabela de roteamento: nós descobertos -são adicionados à tabela de roteamento conforme encontrados durante buscas -iterativas, seguindo o comportamento padrão do Kademlia. Isso garante que a -tabela de roteamento melhore organicamente conforme os nós interagem. -
O que vem a seguir
--
-
- Fase 2: Replicação — Codificação de apagamento Reed-Solomon pela rede, -distribuição de fragmentos, loops de reparo automáticos, livro-razão de -reciprocidade bilateral (sem blockchain, sem tokens) -
- Fase 3: API e Apps — App Flutter mobile/desktop via flutter_rust_bridge, -API GraphQL (async-graphql), nó WASM no navegador -
- Fase 4: Resiliência e Escala — Assinaturas pós-quânticas ML-DSA, travessia -avançada de NAT, Compartilhamento de Segredo de Shamir para herdeiros, -empacotamento para Alpine/Arch/Debian/FreeBSD/OpenBSD, CI no SourceHut -
- Fase 5: Exploração e Cultura — navegador público de tesseras, curadoria -institucional, integração genealógica, exportação para mídia física -
Os nós conseguem se encontrar. Em seguida, aprendem a manter vivas as memórias -uns dos outros.
- -