Skip to content
Back to Blog
cryptoethereumsecuritydevelopers

Endereços com Checksum EIP-55 Explicados

Já se perguntou por que endereços Ethereum misturam letras maiúsculas e minúsculas? Isso é o EIP-55, um checksum inteligente que detecta erros de digitação. Veja como funciona e por que é importante.

SZ
Founder, Molixa
12 min read
Compartilhar
Endereços com Checksum EIP-55 Explicados
Table of contents8 sections

Um endereço com checksum EIP-55 é um endereço Ethereum que usa um padrão específico de letras maiúsculas e minúsculas para codificar uma verificação de erro embutida. A mistura de maiúsculas e minúsculas não é aleatória ou cosmética. É um hash keccak-256 mapeado nos caracteres hexadecimais para que as carteiras possam detectar um endereço digitado incorretamente antes que você envie fundos para o lugar errado. Se você já se perguntou o que é um endereço com checksum EIP-55, a versão resumida é esta: é o mesmo endereço de 40 caracteres que você já conhece, com as letras maiúsculas e minúsculas atuando como um detector gratuito de erros de digitação.

Endereços Ethereum não diferenciam maiúsculas de minúsculas no nível do protocolo, então a rede trata 0xabc... e 0xABC... como a mesma conta. O EIP-55 adiciona uma camada adicional onde o padrão exato de maiúsculas carrega informações. Se uma letra tiver o caso errado, uma carteira compatível rejeita o endereço como inválido. Essa única salvaguarda evitou inúmeros erros irreversíveis.

O que é um Endereço com Checksum EIP-55?#

Um endereço Ethereum bruto tem 20 bytes, exibido como uma string hexadecimal de 40 caracteres após o prefixo 0x. Hex usa os dígitos de 0 a 9 e as letras de a a f. Os dígitos não têm maiúsculas ou minúsculas, mas essas seis letras sim, e é nesse espaço que o EIP-55 atua.

A proposta, de autoria de Vitalik Buterin em 2016, definiu uma regra: fazer o hash do endereço em minúsculas com keccak-256 e usar esse hash para decidir quais letras devem ser capitalizadas. O resultado se parece com isso.

Minúsculas:  0x52908400098527886e0f7030069857d2e4169ee7
EIP-55:     0x52908400098527886E0F7030069857D2E4169EE7

Ambas as strings apontam para a mesma conta. A segunda simplesmente codifica um checksum em sua capitalização. Uma carteira que entende EIP-55 pode recalcular a capitalização esperada e confirmar que nada foi alterado durante a transmissão.

Ponto chave: a capitalização não altera o endereço. É um metadado incorporado aos caracteres. O blockchain ignora isso; seu software de carteira o utiliza para detectar erros.

Por que os endereços Ethereum usam maiúsculas e minúsculas#

Antes do EIP-55, os endereços Ethereum eram todos em minúsculas. Um único caractere digitado errado produzia outro endereço perfeitamente válido, sem como saber. O Bitcoin tinha checksums desde o início através de sua codificação base58check, mas o Ethereum não, então a comunidade precisava de uma correção compatível com versões anteriores que não quebrasse os milhões de endereços em minúsculas existentes.

O uso de maiúsculas e minúsculas foi a resposta elegante. Endereços antigos em minúsculas ainda funcionam em todos os lugares, e novos endereços com checksum adicionam proteção sem alterar o comprimento, o prefixo ou os bytes subjacentes. Nada no protocolo precisou mudar, e é por isso que o EIP-55 foi adotado quase universalmente por carteiras e exploradores.

Como Funciona o Checksum keccak-256#

Esta é a parte que a maioria das explicações pula ou enterra em código. A regra em si é simples: para cada letra no endereço em minúsculas, observe o caractere correspondente no hash keccak-256 desse endereço. Se o caractere do hash for 8 ou superior, capitalize a letra. Se for 7 ou inferior, mantenha-a em minúsculas. Dígitos nunca mudam porque não têm maiúsculas/minúsculas.

Passo a passo, com um exemplo prático#

  1. Remova o prefixo e converta para minúsculas. Comece com os 40 caracteres hexadecimais após 0x, todos em minúsculas.
  2. Execute keccak-256 no texto ASCII dessa string. Detalhe importante: você faz o hash do endereço como caracteres de texto, não como bytes brutos. Isso pega desenvolvedores que fazem hash da coisa errada.
  3. Alinhe os dígitos do hash com os caracteres do endereço. O hash também é hexadecimal, então cada caractere do endereço tem um caractere de hash correspondente na mesma posição.
  4. Aplique a regra de capitalização. Para cada caractere alfabético (a-f), se o dígito do hash correspondente for 8, 9, a, b, c, d, e ou f, escreva-o em maiúsculas. Caso contrário, mantenha-o em minúsculas. Deixe 0-9 intocados.

Percorra os primeiros caracteres de um endereço cuja forma minúscula começa com 0x5aaeb6.... Suponha que o hash keccak-256 da string minúscula comece com 38bf.... O primeiro caractere do endereço é 5, um dígito, então permanece 5. O próximo é a, e o dígito do hash correspondente é 8, que é 8 ou superior, então se torna maiúsculo A. O a seguinte alinha com o dígito do hash 3, abaixo de 8, então permanece minúsculo a. É assim que você obtém o padrão 5aA no início.

Repita em todos os 40 caracteres e você terá o endereço com checksum. Para verificar um, execute exatamente o mesmo processo e confira se a capitalização que você calculou corresponde à capitalização que lhe foi dada.

Verifique antes de confiar: você não precisa fazer isso manualmente. Um validador de carteira cripto recalcula o checksum keccak-256 para você e informa instantaneamente se um endereço é válido, malformado ou tem um checksum ruim.

Por que o EIP-55 Detecta Erros de Digitação#

A parte inteligente é a probabilidade. Como aproximadamente metade das letras hexadecimais em um endereço típico são capitalizadas com base no hash, qualquer alteração, mesmo em um único caractere, se propaga por toda a saída keccak-256 e quase sempre produz uma incompatibilidade de maiúsculas/minúsculas em algum lugar da string.

O número comumente citado é que o EIP-55 detecta um endereço errado com cerca de 99,986% de probabilidade para um erro de um único caractere. Em termos simples, se você digitar errado uma letra ao copiar um endereço, uma carteira com checksum rejeitará a transação na grande maioria das vezes. Essa é a diferença entre um erro detectado e fundos perdidos para sempre.

O que ele não protege merece ser dito claramente:

  • Ele não consegue detectar um endereço errado, mas válido. Se você colar acidentalmente o endereço correto e com checksum de outra pessoa, o EIP-55 não vê problema. O checksum verifica a integridade, não a intenção.
  • Ele só ajuda se o endereço tiver checksum. Um endereço todo em minúsculas não tem checksum para verificar, então as carteiras o aceitam sem a proteção contra erros de digitação.
  • Ele não impede malware de área de transferência. Malware que troca endereços substitui o endereço copiado por um endereço válido do atacante, que tem seu próprio checksum correto.

EIP-55 vs EIP-1191: A Atualização do Chain ID#

O EIP-55 tem um sucessor que vale a pena conhecer se você trabalha em várias redes. O EIP-1191 estende a ideia original ao misturar o chain ID no hash antes de calcular as maiúsculas/minúsculas.

A motivação foi a segurança entre cadeias. O mesmo formato de endereço é usado na mainnet Ethereum, Polygon, BNB Smart Chain e muitas outras chains EVM, e um checksum EIP-55 simples é idêntico em todas elas. Ele não consegue dizer se um endereço foi checksumado para a chain que você pretende usar. O EIP-1191 adiciona o chain ID ao texto do endereço antes de fazer o hash, produzindo uma formatação específica para cada chain.

RecursoEIP-55EIP-1191
Entrada do hashApenas endereço em minúsculasChain ID + endereço em minúsculas
Consciência de chainNenhuma, igual em toda chain EVMFormatação diferente por chain
AdoçãoQuase universalParcial, principalmente RSK e algumas chains
Compatível com versões anterioresSimNa maioria, mas a mainnet manteve o EIP-55

Na prática, a mainnet Ethereum manteve o EIP-55 clássico, por isso a maioria das ferramentas que você encontra usa o algoritmo original. O EIP-1191 teve adoção real em redes como a RSK. Se uma carteira sinalizar um endereço perfeitamente válido da mainnet como falha de checksum, uma incompatibilidade de chain ID de uma implementação EIP-1191 é um provável culpado.

Erros Comuns de "Endereço com Checksum Inválido"#

Se você encontrou um erro de "checksum de endereço inválido" ou "endereço com checksum inválido", geralmente uma destas causas é a responsável.

  • Você editou as maiúsculas/minúsculas manualmente. Alterar uma letra maiúscula para minúscula (ou vice-versa) quebra o checksum, mesmo que o endereço ainda aponte para a mesma conta. Copie e cole o endereço completo em vez de redigitá-lo.
  • Um caractere foi truncado ou duplicado. Um caractere faltando ou extra desloca tudo e quase sempre falha na verificação. Este é exatamente o tipo de erro que o EIP-55 foi projetado para detectar.
  • A ferramenta espera entrada com checksum e você colou em minúsculas. Algumas bibliotecas rejeitam endereços totalmente em minúsculas no modo estrito porque não conseguem verificar um checksum que não existe. Execute o endereço em um verificador de checksum para adicionar a capitalização correta.
  • Incompatibilidade de chain ID (EIP-1191). Um endereço com checksum para uma chain pode falhar na validação em uma ferramenta que espera a capitalização EIP-55 da mainnet, e vice-versa.

A medida segura em todos os casos é nunca alterar um endereço que você recebeu. Copie-o inteiro, cole-o inteiro e deixe sua carteira ou um validador confirmar o checksum. Se você também estiver lidando com endereços de tokens e quiser confirmar se um contrato é legítimo antes de interagir com ele, um verificador de contrato de token inspeciona o próprio contrato, que é uma camada de segurança separada da formatação do endereço.

Como Verificar um Endereço EIP-55 Você Mesmo#

Você tem três opções práticas.

A mais rápida é uma ferramenta de navegador. Cole o endereço em um validador, que recalcula o hash keccak-256, aplica a regra de capitalização e informa se o checksum é válido. Esta é a escolha certa para quem não está programando, e é a mesma lógica que uma carteira executa internamente antes de permitir uma transação.

Para desenvolvedores, bibliotecas fazem isso em uma linha. Ethers.js expõe getAddress(), que lança um erro em caso de checksum inválido e retorna o endereço com a capitalização correta caso contrário. Web3.py oferece to_checksum_address(), e viem fornece getAddress(). Se você estiver depurando o hex bruto ou a camada de codificação de um endereço, um codificador base64 e hex ajuda a verificar a representação em bytes junto com o checksum.

A terceira opção é fazer manualmente com qualquer implementação keccak-256, seguindo os quatro passos do exemplo prático. Raramente é necessário, mas é a maneira mais segura de entender o que a capitalização codifica.

Endereços com Checksum EIP-55, em Resumo#

O que é um endereço com checksum EIP-55: é um endereço Ethereum normal cujas letras maiúsculas e minúsculas codificam um checksum keccak-256, transformando a capitalização em um detector de erros de digitação embutido. Não custa nada, não quebra nada e detecta a grande maioria dos erros de caractere único antes que eles custem dinheiro de verdade.

As conclusões práticas:

  • Trate a capitalização como estrutural. Nunca redigite ou "arrume" um endereço manualmente. Copie e cole ele por inteiro.
  • Prefira endereços com checksum. Um endereço com letras maiúsculas e minúsculas oferece proteção que um todo em minúsculas não oferece.
  • Verifique antes de enviar. Execute qualquer endereço que você está prestes a financiar por um validador de carteira cripto, confirme que o checksum EIP-55 passou, e então envie. Alguns segundos de verificação são o seguro mais barato no mundo cripto.

Perguntas Frequentes#

O que é um endereço com checksum EIP-55? É um endereço Ethereum que usa um padrão específico de letras hexadecimais maiúsculas e minúsculas para codificar um checksum keccak-256. As maiúsculas e minúsculas não alteram para qual conta o endereço aponta. Isso permite que carteiras detectem um endereço digitado incorretamente ou alterado antes de você enviar fundos, já que qualquer erro de um único caractere quase sempre quebra a capitalização esperada.

Por que os endereços Ethereum têm letras maiúsculas e minúsculas? As letras misturadas vêm do EIP-55, introduzido em 2016 para adicionar proteção contra erros de digitação em endereços que antes eram todos minúsculos. Cada letra hexadecimal é capitalizada com base no hash keccak-256 do endereço, então o padrão de capitalização atua como um checksum. Endereços antigos em minúsculas ainda funcionam, mas a versão com letras misturadas adiciona uma verificação de erros gratuita.

Um endereço Ethereum em minúsculas ainda é válido? Sim. O protocolo Ethereum não diferencia maiúsculas de minúsculas, então um endereço todo em minúsculas aponta para a mesma conta e funciona na rede. A única coisa que você perde é a proteção contra erros de digitação do EIP-55, pois não há capitalização de checksum para verificar. Algumas ferramentas rigorosas rejeitam entrada em minúsculas até que você converta para a forma com checksum.

O que causa o erro "endereço com checksum inválido"? O erro significa que a capitalização não corresponde ao que o keccak-256 calcula para o endereço. Causas comuns são editar manualmente a capitalização, um caractere truncado ou duplicado, colar um endereço em minúsculas em uma ferramenta que exige entrada com checksum, ou uma incompatibilidade de chain ID de uma implementação EIP-1191. Copie novamente o endereço original e valide-o em vez de corrigir a capitalização manualmente.

Qual é a diferença entre EIP-55 e EIP-1191? O EIP-55 usa apenas o endereço em minúsculas para determinar a capitalização, então o mesmo endereço parece idêntico em todas as chains EVM. O EIP-1191 mistura o chain ID no hash primeiro, produzindo capitalização específica da chain que pode sinalizar quando um endereço foi verificado para a rede errada. A mainnet Ethereum usa o EIP-55 clássico, enquanto o EIP-1191 foi adotado em chains como RSK.

O EIP-55 pode me proteger de enviar para a carteira errada? Apenas parcialmente. Ele detecta erros de digitação e caracteres alterados com probabilidade muito alta, cerca de 99,986% para um erro de um único caractere. Não ajuda se você colar um endereço válido mas não intencional, e não impede malware de troca de clipboard. Sempre verifique o endereço completo através de um validador e confira o destinatário antes de enviar.

cryptoethereumsecuritydevelopers

More from Molixa

Try Molixa Tools

50+ free AI tools for content creation, SEO, coding, and more. No signup, no watermark.

Explore all tools
Endereço com Checksum EIP-55 Explicado | Molixa