Chain ID e network ID no Ethereum: por que o endereço não basta

O chain ID do Ethereum fornece um contexto que o texto de um endereço, sozinho, não oferece. O identificador retornado por eth_chainId é o valor configurado para a assinatura de transações com proteção contra repetição prevista na EIP-155. Já o identificador de rede retornado por net_version responde a uma pergunta definida separadamente. Manter o nome de cada método junto ao resultado evita transformar dois identificadores distintos em um número sem explicação.

Para interpretar esses dados, separe três elementos: o texto do endereço, o tipo de identificador informado e o contexto de rede em discussão. As distinções abaixo podem ser estudadas por meio de documentação e respostas já registradas, sem assinar solicitações na carteira.

Chain ID e network ID têm funções diferentes

A documentação JSON-RPC do Ethereum define net_version como o método que retorna o identificador da rede atual em uma string. Ao registrar esse resultado, preserve seu significado: trata-se do network ID informado pelo nó que respondeu à consulta.

O método eth_chainId, por sua vez, retorna o chain ID atualmente configurado, associado à assinatura de transações com a proteção da EIP-155. As definições atribuem funções diferentes aos dois identificadores. Por isso, antes de interpretar um valor, identifique qual método o forneceu.

Uma comparação numérica não substitui essas definições. Mesmo que um registro apresente números iguais nos dois campos, mantenha os campos separados. A coincidência dos valores não explica, por si só, por que foram configurados dessa maneira nem torna os dois métodos equivalentes.

Como interpretar a notação e o contexto da resposta

A EIP-695 especifica que eth_chainId deve retornar uma string que representa um inteiro em formato hexadecimal. Por exemplo, 0x1 representa o número um. Ao comparar valores registrados, diferencie uma mudança de notação de uma mudança no número representado.

A proposta recomenda dar preferência a eth_chainId, em vez de net_version, para identificar a cadeia com a qual se está comunicando. Essa recomendação depende de uma implementação correta. Citar a especificação não autentica um endpoint, isto é, o ponto de acesso ao serviço, nem estabelece sua segurança.

Também existe um contexto definido para a resposta: o chain ID retornado deve corresponder às informações do bloco mais recente conhecido pelo cliente. Isso é um requisito da especificação, não uma comprovação de que qualquer resposta individual o cumpra.

Se esse bloco não especificar um chain ID, a EIP-695 determina que o cliente trate a consulta como um método sem suporte e retorne um erro adequado. A condição importa: uma falha qualquer na consulta não demonstra que essa situação ocorreu. Ao analisar um registro, deixe um erro sem explicação como uma questão em aberto, sem preencher a lacuna com um identificador presumido.

O papel do chain ID na proteção contra repetição

A EIP-155 descreve um esquema protegido de cálculo do hash da transação que inclui o chain ID. As condições previstas são que o número do bloco tenha atingido o limite de ativação da proposta e que um chain ID esteja disponível. Aqui, o ponto relevante é a presença desse identificador no esquema, sem entrar na construção ou assinatura de transações.

A proposta também preserva o esquema de assinatura anterior, com valores de v iguais a 27 e 28, sob as regras anteriores. Essa compatibilidade dentro da EIP-155 não estabelece a política atual de aceitação de toda cadeia ou de todo cliente.

Além disso, a EIP-155 incentiva futuras redes de teste, cadeias de consórcio e cadeias alternativas que adotem a proposta a escolher identificadores únicos. Esse incentivo não comprova que todas as cadeias independentes realmente usem valores distintos.

Dessas premissas resulta uma dedução limitada: a separação por chain ID discutida aqui depende tanto do uso do esquema protegido quanto de valores diferentes de chain ID. O esquema inclui o identificador, a proposta preserva o esquema anterior e recomenda valores únicos aos adotantes. Essas premissas não garantem a mesma proteção para o esquema antigo, para cadeias que compartilhem um identificador ou para todo tipo de solicitação assinada.

Por que o formato do endereço não identifica a cadeia

A documentação de contas do Ethereum descreve o endereço de uma conta controlada externamente, ou EOA, como um valor de 20 bytes, representado por 40 caracteres hexadecimais e pelo prefixo 0x. Essa descrição trata da representação do endereço.

Separadamente, a documentação de redes do Ethereum explica que redes independentes podem seguir o protocolo sem interagir entre si. A EIP-695, apresentada acima, define um método específico para consultar o identificador da cadeia.

A combinação dessas premissas permite uma inferência lógica: uma string hipotética com o formato documentado de um endereço de 20 bytes não consegue, sozinha, estabelecer a identidade da cadeia. Seu padrão de caracteres não seleciona um contexto entre redes independentes. Essa conclusão é uma dedução baseada nas fontes, não uma afirmação citada diretamente da página de contas.

O alcance da inferência é apenas a identificação. Ela não estabelece saldos iguais, contratos implantados, existência de fundos, controle por chave privada ou possibilidades de recuperação de ativos em redes diferentes. O formato do endereço e o contexto da cadeia precisam continuar separados na análise.

Exemplo hipotético: um endereço repetido em duas fichas

Imagine duas fichas de documentação fictícias, A e B. Ambas mostram a string 0x1111111111111111111111111111111111111111. Para este exercício, suponha que a ficha A registre uma resposta de eth_chainId igual a 0x65, enquanto a ficha B registre 0xca. São dados inventados para fins didáticos, sem afirmações sobre endpoints reais ou contas existentes.

O endereço repetido fornece a mesma representação nas duas fichas. Já os resultados estipulados de chain ID fornecem contextos de cadeia diferentes. Pela dedução anterior, o texto do endereço não permite decidir, isoladamente, qual contexto é o pretendido.

Agora imagine cobrir os campos de chain ID. O endereço mantém sua aparência, mas o exercício perde a indicação explícita do contexto da cadeia. Ao revelar os campos novamente, a distinção volta a ficar visível. Nenhuma etapa desse exemplo atribui saldo, comprova a implantação de um contrato ou estabelece quem controla uma conta.

Checklist de identificação somente por leitura

  1. Defina o contexto pretendido. Anote qual cadeia está sendo discutida antes de interpretar o endereço.
  2. Preserve os nomes dos métodos. Registre um resultado existente de eth_chainId como chain ID e um de net_version como network ID.
  3. Confira a representação. Compare os inteiros representados, sem tratar toda diferença textual como um valor diferente.
  4. Mantenha os limites da resposta. Considere o requisito relativo ao bloco mais recente conhecido pelo cliente e deixe erros inexplicados em aberto.
  5. Delimite a proteção contra repetição. Identifique o esquema protegido e a diferença entre os chain IDs antes de concluir que há separação por esse identificador.
  6. Use o formato do endereço para sua finalidade. Ele descreve a representação; a identidade da cadeia continua sendo uma pergunta separada.

Esse checklist pode ser aplicado à documentação ou a respostas já registradas. Não exige enviar transações nem assinar solicitações na carteira. Material educativo preparado com auxílio de inteligência artificial; o exemplo hipotético ilustra as distinções documentadas.

Leitura relacionada: Endereço, chave privada e frase de recuperação: a função de cada um.