Skip to content
wallet.page

Personal Signatures

Message signing lets a dapp verify account ownership or authorize an action without sending a transaction. Two methods exist — one modern and safe, one legacy and dangerous — and they behave very differently under the hood.

personal_sign

The right choice for almost every "Sign message" flow. EIP-191 prepends a standard prefix before hashing, which prevents a signed message from being replayed as a valid transaction. The wallet receives the raw UTF-8 string and should display it clearly — this is the method to use when you want users to actually read what they're signing.

RPC: personal_sign(message, address)

eth_sign

Signs a raw 32-byte hash with no prefix, no context, and no protection against replay. The user sees a hex blob with no indication of what they're authorizing.

RPC: eth_sign(address, hash)