Skip to content
On this page

verifyMessage โ€‹

Verify that a message was signed by the provided address.

๐Ÿ’ก Why should I use this over the verifyMessage util?

This Action supports verifying messages that were signed by either a Smart Contract Account or Externally Owned Account. The verifyMessage util only supports Externally Owned Accounts. This is getting increasingly important as more wallets implement Account Abstraction.

Usage โ€‹

ts
import { account, walletClient, publicClient } from './client'

const signature = await walletClient.signMessage({
  account,
  message: 'hello world',
})

const valid = await publicClient.verifyMessage({
  address: account.address,
  message: 'hello world',
  signature,
})
// true
ts
import { createPublicClient, http } from 'viem'
import { mainnet } from 'viem/chains'

export const publicClient = createPublicClient({
  chain: mainnet,
  transport: http()
})

export const walletClient = createWalletClient({
  transport: custom(window.ethereum)
})

// JSON-RPC Account
export const [account] = await walletClient.getAddresses()
// Local Account
export const account = privateKeyToAccount(...)

Returns โ€‹

boolean

Wheather the signed message is valid for the given address.

Parameters โ€‹

address โ€‹

The Ethereum address that signed the original message.

ts
const valid = await verifyMessage({
  address: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266', 
  message: 'hello world',
  signature:
    '0x66edc32e2ab001213321ab7d959a2207fcef5190cc9abb6da5b0d2a8a9af2d4d2b0700e2c317c4106f337fd934fbbb0bf62efc8811a78603b33a8265d3b8f8cb1c',
})

message โ€‹

  • Type: string

The message to be verified.

ts
const valid = await verifyMessage({
  address: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',
  message: 'hello world', 
  signature:
    '0x66edc32e2ab001213321ab7d959a2207fcef5190cc9abb6da5b0d2a8a9af2d4d2b0700e2c317c4106f337fd934fbbb0bf62efc8811a78603b33a8265d3b8f8cb1c',
})

signature โ€‹

  • Type: Hex | ByteArray

The signature that was generated by signing the message with the address's signer.

ts
const valid = await verifyMessage({
  address: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',
  message: 'hello world',
  signature: 
    '0x66edc32e2ab001213321ab7d959a2207fcef5190cc9abb6da5b0d2a8a9af2d4d2b0700e2c317c4106f337fd934fbbb0bf62efc8811a78603b33a8265d3b8f8cb1c', 
})

JSON-RPC Method โ€‹

eth_call to a deployless universal signature validator contract.

Released under the MIT License.