GBR: ADR 0001 Protocolos & Conexão Distribuída | Wiki
GBR: ADR 0001 Protocolos & Conexão Distribuída
- *Status:* Aceito
- *Data:* 2026-05-01
*Contexto:*
Determinar os protocolos e conexões possíveis em nossa malha P2P e o padrão que iremos seguir para implementarmos a solução da malha distribuída. Nesta decisão arquitetural devemos levar em conta uma implementação já existente e madura que soluciona de maneira segura e eficiênte nossa malha P2P.
*Decisão:* - *Padrão:* Seguiremos o padrão estipulado das redes ditribuídas que utilizam o padrão libp2p, utilizando o multiformats p/ implementarmos conexões agnósticas de protocolo. Iremos utilizar a arquitetura hexagonal p/ injetarmos a conexão gbrp2pconnection, que pode ser tcp, ssl, udp, quic, http/1/2/3 e outros que iremos ver a necessidade. - *Estrutura:* A estrutura de diretórios das bibliotecas dentro do monorepo gbrp2p deve seguir o mesmo padrão de diretórios utilizado pela especificação da libp2p ou da sua implementação de referência go-libp2p. - *Conexões* - *Endereçamento:* Iremos utilizar a solução descrita na especificação libp2p em [gbrp2paddress](../../../packages/gbrp2p/address). - *TCP/SSL:: Utilizaremos um repositório fork do ranch em gbr_p2p e utilizar um código erlang FFI p/ utilizarmos no Gleam em gbrp2ptransport. - *UDP:** Utilizaremos uma solução wrapper p/ o módulo nativo erlang udp via FFI em gbrp2ptransport. - *HTTP1-2-3 e QUIC:* Utilizaremos a biblioteca https://github.com/benoitc/erlang_quic. Avaliar utilizar o mist e wisp p/ conexões http(s). - *Protocolos:*: Iremos seguir a especificação da libp2p p/ sermos agnósticos quanto ao protocolo ou protocolos sendo utilizados na conexão ver mais em: connections#protocol-negotiation.
Teremos que manter a compatibilidade com qualquer nó da rede ipfs, principalmente com a implementação de referência kubo. Temos que criar um projeto em testipfsdial.
*Consequências:* - *Positivo:* Seguir um padrão mundial de especificação de sistemas distribuídos e decentralização em nossa malha p2p, o libp2p, trará os benefícios já alcançados pela rede inter-planetária de file systems, a ipfs. O maior ganho que iremos obter com o amadurecimento de nossa malha p2p será a possibilidade de conectarmos nossos nós na rede mundial de nós que utilizam a especificação libp2p. - *Negativo:* Seguindo o padrão libp2p iremos herdar as suas dores e iremos tender a seguir a evolução desta ferramenta, o trabalho será de sincronizarmos sempre as especificações e resoluções de problemas com nossa solução, aplicando o que for implementado na rede distribuída ipfs.