Forma da chamada: personal_sign com os parâmetros [message, address], em que a mensagem são bytes codificados em hexadecimal (a maioria das carteiras também aceita texto UTF-8). As bibliotecas seguem o mesmo modelo: signer.signMessage no ethers, signMessage no viem, encode_defunct no web3.py. O antigo eth_sign assinava um hash arbitrário de 32 bytes sem prefixo, o que permitia que dapps induzissem os usuários a assinar transações, e a maioria das carteiras o desativa ou exibe um aviso sobre ele.
A verificação recalcula o hash Keccak-256 com o prefixo e recupera o endereço ou, no caso de carteiras inteligentes, chama o isValidSignature da ERC-1271 (envolvido na ERC-6492 para contas ainda não implantadas). As mensagens do Sign-In with Ethereum são assinadas dessa forma.