RFC 051 (Network) - MALHA P2P: O Enxame Soberano
Status: Padrão Operacional (v0.0.1) Dependência: RFC 047 (RINA Transport), RFC 003 (Pipeline)
1. O Sistema Nervoso do Rizoma
Se as RFCs anteriores definem o metabolismo (001), a organização (002), a segurança (003) e a consciência (006), a RFC 051 define o Sistema Nervoso do PAEBIRU — a malha P2P que conecta os Agentes ABAPORU em um enxame soberano.
O PAEBIRU não depende de servidores centrais, DNS tradicional ou endereços IP estáticos. Cada nó é um processo autônomo que descobre, conecta e comunica com outros nós através de protocolos P2P abertos, mas com camadas de segurança e semântica próprias.
2. Pilares da Malha
A malha PAEBIRU é construída sobre quatro pilares de conectividade:
2.1. Transporte Seguro (Noise + Yamux)
Toda conexão TCP é encapsulada em Noise (handshake criptográfico) e multiplexada via Yamux. Isso garante confidencialidade, autenticidade e resistência a ataques de replay desde o primeiro byte.
2.2. Descoberta de Peers (mDNS + Kademlia + Identify)
- mDNS: Descoberta local em LANs (zero-config). Ideal para clusters de edge e IoT.
- Kademlia: DHT global para roteamento de PeerIds em escala mundial.
- Identify: Troca de metadados (protocolos suportados, versão, DID) após conexão.
2.3. Comunicação Semântica (Gossipsub)
O coração da malha. Mensagens são publicadas em tópicos identitários (IdentTopic), não em endereços. Isso desacopla o emissor do receptor e permite multicast eficiente.
2.4. Vitalidade (Ping + RTT)
Cada conexão ativa é monitorada via ping. Os RTTs são usados para:
- Estimativa de distância geográfica (proxy para PoL — RFC 008).
- Detecção de peers mortos (timeout).
- Roteamento estigmergico (feromônios de latência).
3. Tópicos Gossipsub Canônicos
| Tópico | Propósito | Payload | Emissor | Receptor |
|---|---|---|---|---|
paebiru-tasks | Propagação de tarefas WASM | IoATask (binário) | Requisitante | Provedores |
paebiru-plasmids | Evolução distribuída | WasmPlasmid (binário) | Qualquer nó | Todos |
paebiru-consciousness | Gradientes REP e deliberação | DeliberationGradient | Agentes BDI | Vizinhos L8 |
paebiru-pheromones | Feromônios digitais | Pheromone (JSON/bin) | MuleNodes / Biologia | StigmergicRouter |
paebiru:global:health | Heartbeat ZK de saúde | HealthGossip (ZK proof) | Todos | Todos |
paebiru:global:discovery | Anúncio de presença | DiscoveryPayload (DID + addrs) | Todos | Todos |
paebiru-bootstrap-genesis | Grito algedônico inicial | GenesisBroadcast | Bootstrap | Seed nodes |
paebiru-zk-params | Parâmetros ZK para jobs | ZkParamsGossip | Orquestrador | Provers |
economy.trade | Propostas de escambo M2M | PlasmidContract (JSON) | EconomyActor | EconomyActor |
biology.pheromone | Propagação de feromônios | Pheromone (binário) | BiologyActor | StigmergicRouter |
Nota: Tópicos prefixados com
paebiru:são reservados do protocolo. Tópicos sem prefixo (economy.*,biology.*) são namespaces de domínio e podem ser estendidos por Plasmídeos.
4. Bridge EventBus ↔ Malha
O InternalEventBus (RFC 012 — GALS) é a fronteira entre o mundo localmente síncrono dos atores e o mundo globalmente assíncrono da malha.
4.1. Egresso (Bus → Rede)
Componentes internos emitem InternalEvent::ProtocolMessage { topic, data }. O nó traduz isso para gossipsub.publish(IdentTopic::new(topic), data).
Adapters hexagonais que utilizam este bridge:
SwarmBiologyAdapter→biology.pheromoneSwarmEconomyAdapter→economy.tradeBusKernelPublisher→security.location_verified,governance_update
4.2. Ingresso (Rede → Bus)
Mensagens recebidas pelo gossipsub são desserializadas e convertidas em InternalEvent específicos:
Gossipsub::Message
├── topic "paebiru-tasks" → InternalEvent::TaskIngested
├── topic "paebiru-plasmids" → InternalEvent::PlasmidGossipReceived
├── topic "paebiru-pheromones" → InternalEvent::PheromoneReceived
├── topic "paebiru:global:health"→ InternalEvent::CollectiveActionProposed (se crítico)
├── topic "economy.trade" → SwarmEconomyAdapter::register_response()
└── topic "biology.pheromone" → StigmergicRouter::update_gradient()
5. Comportamentos do PaebiruBehaviour
A struct PaebiruBehaviour agrega todos os comportamentos libp2p ativos:
#![allow(unused)]
fn main() {
pub struct PaebiruBehaviour {
pub gossipsub: gossipsub::Behaviour,
pub ping: ping::Behaviour,
pub identify: identify::Behaviour,
pub kademlia: kad::Behaviour<MemoryStore>,
pub mdns: mdns::tokio::Behaviour,
pub pq_auth: pq_auth::PqAuthBehaviour,
}
}
gossipsub— Pub/sub semântico (§3).ping— Vitalidade e RTT (§2.4).identify— Metadados de conexão (§2.2).kademlia— DHT para descoberta e roteamento (§2.2).mdns— Descoberta local zero-config (§2.2).pq_auth— Autenticação pós-quântica ML-DSA.
6. Consequência Arquitetural: A Malha como Organismo
A RFC 051 garante que o PAEBIRU não seja apenas uma coleção de nós, mas um organismo distribuído. O enxame P2P é o sistema nervoso que carrega os impulsos (tarefas, feromônios, gradientes) entre os órgãos (biologia, economia, kernel). Sem a malha, o metabolismo é local; com a malha, o metabolismo é planetário.
Resumo Técnico (v0.0.1)
| Termo | Implementação Rust/System | Função no Protocolo |
|---|---|---|
| Enxame | PaebiruBehaviour | Agregação de comportamentos libp2p. |
| Pub/Sub | gossipsub::Behaviour | Comunicação semântica por tópicos. |
| DHT | kad::Behaviour | Descoberta global Kademlia. |
| Local | mdns::tokio::Behaviour | Descoberta LAN zero-config. |
| Vitalidade | ping::Behaviour | RTT e detecção de falhas. |
| Bridge | ProtocolMessage | Mapeamento EventBus ↔ Gossipsub. |
| Segurança | Noise + pq_auth | Handshake criptográfico + ML-DSA. |
graph TD
subgraph Node [Nó PAEBIRU]
Bus[InternalEventBus]
Actors[Atores GALS]
Swarm[libp2p Swarm]
end
subgraph Mesh [Malha P2P]
Gossip[Gossipsub]
Kad[Kademlia DHT]
MDNS[mDNS LAN]
Ping[Ping / RTT]
end
Actors -->|ProtocolMessage| Bus
Bus -->|gossipsub.publish| Swarm
Swarm -->|SwarmEvent| Bus
Swarm <--->|Noise+Yamux| Gossip
Swarm <--->|DHT queries| Kad
Swarm <--->|LAN discovery| MDNS
Swarm <--->|Heartbeat| Ping
style Mesh fill:#e3f2fd,stroke:#1565c0
style Node fill:#f3e5f5,stroke:#7b1fa2