Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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ópicoPropósitoPayloadEmissorReceptor
paebiru-tasksPropagação de tarefas WASMIoATask (binário)RequisitanteProvedores
paebiru-plasmidsEvolução distribuídaWasmPlasmid (binário)Qualquer nóTodos
paebiru-consciousnessGradientes REP e deliberaçãoDeliberationGradientAgentes BDIVizinhos L8
paebiru-pheromonesFeromônios digitaisPheromone (JSON/bin)MuleNodes / BiologiaStigmergicRouter
paebiru:global:healthHeartbeat ZK de saúdeHealthGossip (ZK proof)TodosTodos
paebiru:global:discoveryAnúncio de presençaDiscoveryPayload (DID + addrs)TodosTodos
paebiru-bootstrap-genesisGrito algedônico inicialGenesisBroadcastBootstrapSeed nodes
paebiru-zk-paramsParâmetros ZK para jobsZkParamsGossipOrquestradorProvers
economy.tradePropostas de escambo M2MPlasmidContract (JSON)EconomyActorEconomyActor
biology.pheromonePropagação de feromôniosPheromone (binário)BiologyActorStigmergicRouter

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:

  • SwarmBiologyAdapterbiology.pheromone
  • SwarmEconomyAdaptereconomy.trade
  • BusKernelPublishersecurity.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)

TermoImplementação Rust/SystemFunção no Protocolo
EnxamePaebiruBehaviourAgregação de comportamentos libp2p.
Pub/Subgossipsub::BehaviourComunicação semântica por tópicos.
DHTkad::BehaviourDescoberta global Kademlia.
Localmdns::tokio::BehaviourDescoberta LAN zero-config.
Vitalidadeping::BehaviourRTT e detecção de falhas.
BridgeProtocolMessageMapeamento EventBus ↔ Gossipsub.
SegurançaNoise + pq_authHandshake 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