wallet_verifySignature
Verifies a signature from a key associated with an account.
The validity of the signature is returned along with a proof that can be executed using e.g. eth_call
.
Keys
There exists three different key roles:
- Admin keys are capable of adding and modifying other keys, and capable of spending an unlimited amount of tokens and calling any contract and selector.
- Normal keys can only call contracts as defined by the permissions set on it, and spend the amount of tokens afforded to it by permissions.
- Session keys are like normal keys, except they also have an expiry.
Setting permissions on an admin key is not allowed and will return an error.
For complete details on keys, including their signature encoding, public key encoding, and key hashes, refer to the Key section.
Request
type Request = {
// id of the key to verify the signature with or an address of an account.
// If address is specified, signature will be attempted to verify against
// all of account keys until a match is found.
keyIdOrAddress: `0x${string}`,
// digest of the message to verify
digest: `0x${string}`,
// signature bytes
signature: `0x${string}`,
chainId: `0x${string}`,
}
Response
type Response = {
valid: boolean,
proof?: {
// address of an account (either delegated or stored) that the signature was verified against.
account: `0x${string}`,
// the key hash that signed the digest.
keyHash: `0x${string}`,
}
}
Verification
Signature is always verified against an account (either deployed or stored in RPC storage).
account
contains the account address the signature was verified against.
To verify that provided account is indeed tied to the provided keyId
, user can either
- Query the
AccountRegistry
contract. - Verify the returned
idSignature
. It is only returned for accounts that are not yet delegated.
To verify that the signature is valid for the returned account, user can call
unwrapAndValidateSignature
on the returned account.