summaryrefslogtreecommitdiffstats
path: root/pt-br/news/phase1-basic-network
diff options
context:
space:
mode:
Diffstat (limited to 'pt-br/news/phase1-basic-network')
-rw-r--r--pt-br/news/phase1-basic-network/index.html177
-rw-r--r--pt-br/news/phase1-basic-network/index.html.gzbin0 -> 4349 bytes
2 files changed, 177 insertions, 0 deletions
diff --git a/pt-br/news/phase1-basic-network/index.html b/pt-br/news/phase1-basic-network/index.html
new file mode 100644
index 0000000..1dbbf62
--- /dev/null
+++ b/pt-br/news/phase1-basic-network/index.html
@@ -0,0 +1,177 @@
+<!DOCTYPE html>
+<html lang="pt-br">
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <title>Fase 1: Nós Se Encontram — Tesseras</title>
+ <meta name="description" content="Os nós do Tesseras agora descobrem pares, formam uma DHT Kademlia sobre QUIC e publicam e encontram ponteiros de tesseras pela rede.">
+ <!-- Open Graph -->
+ <meta property="og:type" content="article">
+ <meta property="og:title" content="Fase 1: Nós Se Encontram">
+ <meta property="og:description" content="Os nós do Tesseras agora descobrem pares, formam uma DHT Kademlia sobre QUIC e publicam e encontram ponteiros de tesseras pela rede.">
+ <meta property="og:image" content="https://tesseras.net/images/social.jpg">
+ <meta property="og:image:width" content="1200">
+ <meta property="og:image:height" content="630">
+ <meta property="og:site_name" content="Tesseras">
+ <!-- Twitter Card -->
+ <meta name="twitter:card" content="summary_large_image">
+ <meta name="twitter:title" content="Fase 1: Nós Se Encontram">
+ <meta name="twitter:description" content="Os nós do Tesseras agora descobrem pares, formam uma DHT Kademlia sobre QUIC e publicam e encontram ponteiros de tesseras pela rede.">
+ <meta name="twitter:image" content="https://tesseras.net/images/social.jpg">
+ <link rel="stylesheet" href="https://tesseras.net/style.css?h=21f0f32121928ee5c690">
+
+
+ <link rel="alternate" type="application/atom+xml" title="Tesseras" href="https://tesseras.net/atom.xml">
+
+
+ <link rel="icon" type="image/png" sizes="32x32" href="https://tesseras.net/images/favicon.png?h=be4e123a23393b1a027d">
+
+</head>
+<body>
+ <header>
+ <h1>
+ <a href="https:&#x2F;&#x2F;tesseras.net/pt-br/">
+ <img src="https://tesseras.net/images/logo-64.png?h=c1b8d0c4c5f93b49d40b" alt="Tesseras" width="40" height="40" class="logo">
+ Tesseras
+ </a>
+ </h1>
+ <nav>
+
+ <a href="https://tesseras.net/pt-br/about/">Sobre</a>
+ <a href="https://tesseras.net/pt-br/news/">Notícias</a>
+ <a href="https://tesseras.net/pt-br/releases/">Lançamentos</a>
+ <a href="https://tesseras.net/pt-br/faq/">FAQ</a>
+ <a href="https://tesseras.net/pt-br/subscriptions/">Inscrições</a>
+ <a href="https://tesseras.net/pt-br/contact/">Contato</a>
+
+ </nav>
+ <nav class="lang-switch">
+
+ <a href="https:&#x2F;&#x2F;tesseras.net&#x2F;news&#x2F;phase1-basic-network&#x2F;">English</a> | <strong>Português</strong>
+
+ </nav>
+ </header>
+
+ <main>
+
+<article>
+ <h2>Fase 1: Nós Se Encontram</h2>
+ <p class="news-date">2026-02-14</p>
+ <p>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.</p>
+<h2 id="o-que-foi-construido">O que foi construído</h2>
+<p><strong>tesseras-core</strong> (atualizado) — Novos tipos de domínio de rede:
+<code>TesseraPointer</code> (referência leve aos detentores de uma tessera e localização
+dos fragmentos), <code>NodeIdentity</code> (ID do nó + chave pública + nonce de prova de
+trabalho), <code>NodeInfo</code> (identidade + endereço + capacidades) e <code>Capabilities</code>
+(bitflags do que um nó suporta: DHT, armazenamento, relay, replicação).</p>
+<p><strong>tesseras-net</strong> — A camada de transporte, construída sobre QUIC via quinn. A
+trait <code>Transport</code> define a porta: <code>send</code>, <code>recv</code>, <code>disconnect</code>, <code>local_addr</code>.
+Dois adaptadores a implementam:</p>
+<ul>
+<li><code>QuinnTransport</code> — QUIC real com TLS auto-assinado, negociação ALPN
+(<code>tesseras/1</code>), pool de conexões via DashMap e um loop de aceitação em
+background que trata streams recebidas.</li>
+<li><code>MemTransport</code> + <code>SimNetwork</code> — 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.</li>
+</ul>
+<p>O protocolo de fio usa MessagePack com prefixo de comprimento: um cabeçalho de 4
+bytes big-endian seguido de um payload rmp-serde. <code>WireMessage</code> 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.</p>
+<p><strong>tesseras-dht</strong> — Uma implementação completa de Kademlia:</p>
+<ul>
+<li><em>Tabela de roteamento</em>: 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.</li>
+<li><em>Distância XOR</em>: métrica XOR de 160 bits com indexação de bucket pelo bit mais
+significativo diferente.</li>
+<li><em>Prova de trabalho</em>: nós iteram um nonce até que
+<code>BLAKE3(pubkey || nonce)[..20]</code> 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.</li>
+<li><em>Mensagens de protocolo</em>: Ping/Pong, FindNode/FindNodeResponse,
+FindValue/FindValueResult, Store — todos serializados com MessagePack via
+serde.</li>
+<li><em>Armazenamento de ponteiros</em>: 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.</li>
+<li><em>DhtEngine</em>: o orquestrador principal. Trata RPCs recebidos, executa buscas
+iterativas (paralelismo alpha=3), bootstrap, publicação e busca. O método
+<code>run()</code> dirige um loop <code>tokio::select!</code> com timers de manutenção: refresh da
+tabela de roteamento a cada 60 segundos, expiração de ponteiros a cada 5
+minutos.</li>
+</ul>
+<p><strong>tesd</strong> — 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.</p>
+<p><strong>Infraestrutura</strong> — 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 <code>tesseras</code>, 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.</p>
+<p><strong>Testes</strong> — 139 testes em todo o workspace:</p>
+<ul>
+<li>47 testes unitários em tesseras-dht (tabela de roteamento, distância, PoW,
+armazenamento de ponteiros, serialização de mensagens, RPCs do engine)</li>
+<li>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)</li>
+<li>14 testes em tesseras-net (roundtrips de codec, send/recv de transporte,
+backpressure, disconnect)</li>
+<li>Testes de fumaça com Docker Compose usando 3 nós containerizados comunicando
+sobre QUIC real</li>
+<li>Zero avisos do clippy, formatação limpa</li>
+</ul>
+<h2 id="decisoes-de-arquitetura">Decisões de arquitetura</h2>
+<ul>
+<li><strong>Transport como porta</strong>: a trait <code>Transport</code> é 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.</li>
+<li><strong>Um stream por RPC</strong>: 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.</li>
+<li><strong>MessagePack em vez de Protobuf</strong>: 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.</li>
+<li><strong>PoW em vez de stake ou reputação</strong>: 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.</li>
+<li><strong>Busca iterativa com atualização da tabela de roteamento</strong>: 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.</li>
+</ul>
+<h2 id="o-que-vem-a-seguir">O que vem a seguir</h2>
+<ul>
+<li><strong>Fase 2: Replicação</strong> — 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)</li>
+<li><strong>Fase 3: API e Apps</strong> — App Flutter mobile/desktop via flutter_rust_bridge,
+API GraphQL (async-graphql), nó WASM no navegador</li>
+<li><strong>Fase 4: Resiliência e Escala</strong> — 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</li>
+<li><strong>Fase 5: Exploração e Cultura</strong> — navegador público de tesseras, curadoria
+institucional, integração genealógica, exportação para mídia física</li>
+</ul>
+<p>Os nós conseguem se encontrar. Em seguida, aprendem a manter vivas as memórias
+uns dos outros.</p>
+
+</article>
+
+ </main>
+
+ <footer>
+ <p>&copy; 2026 Tesseras Project. <a href="/atom.xml">News Feed</a> · <a href="https://git.sr.ht/~ijanc/tesseras">Source</a></p>
+ </footer>
+</body>
+</html>
diff --git a/pt-br/news/phase1-basic-network/index.html.gz b/pt-br/news/phase1-basic-network/index.html.gz
new file mode 100644
index 0000000..39240bd
--- /dev/null
+++ b/pt-br/news/phase1-basic-network/index.html.gz
Binary files differ