Aufrufform: personal_sign mit den Parametern [message, address], wobei die Nachricht aus hexkodierten Bytes besteht (die meisten Wallets akzeptieren auch UTF-8-Text). Bibliotheken bilden das nach: ethers signer.signMessage, viem signMessage, web3.py encode_defunct. Das ältere eth_sign signierte einen beliebigen 32-Byte-Hash ohne Präfix, sodass Dapps Nutzer dazu verleiten konnten, Transaktionen zu signieren; die meisten Wallets deaktivieren es oder warnen davor.
Zur Prüfung berechnet der Verifizierer den Keccak-256-Hash mit Präfix neu und stellt daraus die Adresse wieder her; bei Smart Wallets ruft er stattdessen ERC-1271 isValidSignature auf (für noch nicht bereitgestellte Konten in ERC-6492 verpackt). Nachrichten von Sign-In with Ethereum werden auf diese Weise signiert.