Defines a JSON-RPC method, wallet_signMessage, to request cryptographic signatures on arbitrary messages from one or more wallet accounts, optionally tied to a session.
The wallet_signMessage RPC method is a chain-agnostic interface for signing arbitrary messages.
It supports multiple accounts and signature schemes within a single call, optionally referencing a CAIP-171 session.
This unifies how apps and wallets perform message signing for authentication, typed data, and off-chain actions.
Message signing today is fragmented: each wallet has its own API for personal message signing, typed data (e.g., EIP-712), or custom formats. There's no standard to support multiple accounts or signature types in one request. This proposal fixes that by:
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" written in uppercase in this document are to be interpreted as described in RFC-2119
Request:
Response:
Rules:
sessionId is OPTIONAL but MUST follow CAIP-171 if provided.messageType and content.signatureTypes.account and signatureType for each signaturecapabilities is an OPTIONAL metadata object, placed outside signatures.content and account.content is RECOMMENDED to prevent replay attacks.sessionId SHOULD be validated to ensure scope compliance.capabilities could expose metadata; apps and wallets SHOULD handle them carefully.sessionIdsscopeObjectsCopyright and related rights waived via CC0.