Forme de l’appel : personal_sign avec les paramètres [message, address], où le message est constitué d’octets encodés en hexadécimal (la plupart des portefeuilles acceptent aussi du texte UTF-8). Les bibliothèques reprennent cette forme : signer.signMessage d’ethers, signMessage de viem, encode_defunct de web3.py. L’ancienne méthode eth_sign signait un condensat arbitraire de 32 octets sans préfixe, ce qui permettait à des dapps de piéger les utilisateurs pour leur faire signer des transactions ; la plupart des portefeuilles la désactivent ou affichent un avertissement.
La vérification recalcule le condensat Keccak-256 préfixé et récupère l’adresse, ou, pour les portefeuilles de contrat intelligent, appelle isValidSignature d’ERC-1271 (enveloppé dans ERC-6492 pour les comptes pas encore déployés). Les messages Sign-In with Ethereum sont signés de cette façon.