Calculadora de Seletor de Função & Tópico de Evento

Cole a assinatura de uma função ou evento para obter seu seletor e hash de tópico, ou cole um seletor que você encontrou em calldata para ver a qual função comum ele pertence.

Nomes de parâmetros, function, indexed, memory e a cláusula returns são removidos automaticamente; uint vira uint256.

Calculado no seu navegador com JavaScript. Os endereços nunca são enviados nem armazenados.

O que é um seletor de função?

Um seletor de função são os primeiros 4 bytes do hash Keccak-256 da assinatura canônica de uma função: o nome seguido dos tipos dos parâmetros entre parênteses, sem espaços nem nomes, por exemplo transfer(address,uint256) → 0xa9059cbb. Ele forma os primeiros 4 bytes do calldata de toda chamada de contrato e diz ao contrato qual função executar; os bytes restantes são os argumentos codificados em ABI.

Seletores comuns

A tabela é calculada nesta página com a mesma implementação de Keccak usada pela ferramenta, então ela também serve como autoteste. Cole qualquer seletor na caixa acima para consultá-lo.

Exemplo prático

Pegue function approve(address spender, uint256 amount) external returns (bool). Remova a palavra-chave, os nomes dos parâmetros, a visibilidade e o tipo de retorno para obter approve(address,uint256). O Keccak-256 dessa string ASCII começa com 0x095ea7b3…, então o seletor é 0x095ea7b3. O calldata para aprovar 1 USDT (6 decimais) é o seletor, o endereço do spender preenchido à esquerda até 32 bytes, e 1000000 como uma palavra de 32 bytes: 4 + 32 + 32 = 68 bytes.

Seletores ERC-20 que você mais vai ver

AssinaturaSeletor
totalSupply()0x18160ddd
balanceOf(address)0x70a08231
transfer(address,uint256)0xa9059cbb
transferFrom(address,address,uint256)0x23b872dd
approve(address,uint256)0x095ea7b3
allowance(address,address)0xdd62ed3e

Erros comuns

Formatos de entrada aceitos

Para montar ou ler calldata completo, continue no codificador / decodificador ABI.

Perguntas frequentes

O que é um seletor de função?

Os primeiros quatro bytes do hash Keccak-256 da assinatura canônica da função: nome mais tipos dos parâmetros, sem espaços nem nomes, por exemplo transfer(address,uint256) → 0xa9059cbb. A EVM o usa para encaminhar a chamada à função certa.

Por que preciso usar uint256 e não uint?

A assinatura canônica usa os nomes completos dos tipos. uint é um alias de uint256 em Solidity, e fazer o hash do alias gera um seletor errado. Esta ferramenta reescreve uint/int automaticamente e remove nomes de parâmetros e palavras-chave de localização de dados.

Como se escrevem tuplas (structs)?

Como listas de tipos entre parênteses: exactInputSingle((address,address,uint24,address,uint256,uint256,uint256,uint160)). Escreva os campos da struct em ordem; o nome da struct em si não faz parte da assinatura.

O que é um tópico de evento?

O Keccak-256 completo de 32 bytes da assinatura do evento, armazenado como topics[0] em todo log que esse evento emite, por exemplo Transfer(address,address,uint256) → 0xddf252ad…. Parâmetros indexados viram topics[1..3].

Quantos seletores possíveis existem?

4 bytes dão 232, cerca de 4,3 bilhões, de valores possíveis. Com dezenas de milhares de assinaturas conhecidas, colisões são raras mas reais; dentro de um mesmo contrato o compilador Solidity recusa duas funções com o mesmo seletor.

Duas funções podem compartilhar um seletor?

Sim, colisões existem porque só 4 bytes são usados; é por isso que a consulta pode retornar várias assinaturas e por que a EVM não consegue distingui-las no mesmo contrato. Para seletores desconhecidos use os bancos de dados públicos 4byte.directory e openchain.xyz.