Ontem eu examinei o código fonte da camada de rede de @MidnightNetwork , especificamente para entender como eles conseguem esconder a privacidade enquanto permitem que os nós se encontrem. O documento faz grandes promessas, dizendo que tudo depende da libp2p do Polkadot SDK, e que a caminhada aleatória do Kademlia DHT resolve a descoberta. Mas quando eu executei na máquina real, percebi que tempo e privacidade são inimigos mortais, fazendo com que a rede fique travada. $NIGHT
Eu joguei intencionalmente um nó em Cingapura e outro em Frankfurt. Seguindo o processo padrão do Kademlia, primeiro conectei ao bootstrap e depois fui encontrando nós com find_node. Mas as transações privadas do Midnight exigem que a comunicação entre os nós seja totalmente criptografada, e a cada handshake é necessário trocar pares de chaves de prova ZK, o que acrescenta duas rodadas de RTT em relação ao TLS P2P comum. Eu capturei pacotes mais de dez vezes e percebi que estabelecer uma conexão estável através do oceano leva em média de 4 a 6 segundos, o que é exatamente o dobro do libp2p em texto claro! Esse atraso não é uma questão trivial; os nós recém-iniciados ficam parados, sem saber o que fazer.
O problema ainda piora com o mecanismo de sobrevivência do DHT. Nos livros, o Kademlia exige que os nós estejam constantemente se movendo aleatoriamente para atualizar a tabela de roteamento, mas se o Midnight enviar uma mensagem de alive a cada 1 segundo por padrão, significa que eles expõem todo o período ativo e a localização do IP, arruinando completamente a privacidade. Por isso, eles forçaram o intervalo de transmissão para cerca de 10 segundos. Eu usei o Wireshark para analisar vários pacotes e confirmei que isso foi feito de propósito para diluir a informação. Essa estratégia realmente minimiza o risco de vazamento, mas a velocidade de descoberta de pares para novos nós despencou. Eu reiniciei três vezes, e em cada vez precisei esperar de 2 minutos e meio a 3 minutos para conseguir pares suficientes para começar a sincronizar blocos; a sensação de estar girando em falso é como se alguém estivesse apertando meu pescoço.
A descoberta local também é problemática. O documento afirma com confiança que o mdns pode descobrir pares na rede local instantaneamente, evitando a necessidade de configurar um nó semente. Mas quando testei na AWS VPC, o mdns não conseguia atravessar nem a sub-rede, e no final, ainda precisei manualmente inserir a configuração de bootstrap. Para um administrador que quer implementar com um clique usando Terraform, isso significa uma quantidade extra de scripts e carga de manutenção desnecessários, o que é extremamente frustrante.
O Midnight claramente fez compromissos em prol da privacidade e segurança na camada P2P, e o resultado é que a rede ficou agonizantemente lenta. Para um usuário comum, alguns segundos a mais pode não ser perceptível, mas para nós, que precisamos reiniciar frequentemente e alternar entre redes, esse atraso é uma tortura crônica. #night