signMessage โ
Calculates an Ethereum-specific signature in EIP-191 format: keccak256("\x19Ethereum Signed Message:\n" + len(message) + message))
.
With the calculated signature, you can:
- use
verifyMessage
to verify the signature, - use
recoverMessageAddress
to recover the signing address from a signature.
Usage โ
ts
import { account, walletClient } from './config'
const signature = await walletClient.signMessage({
account,
message: 'hello world',
})
// "0xa461f509887bd19e312c0c58467ce8ff8e300d3c1a90b608a760c5b80318eaf15fe57c96f9175d6cd4daad4663763baa7e78836e067d0163e9a2ccf2ff753f5b1b"
ts
import { createWalletClient, custom } from 'viem'
import { privateKeyToAccount } from 'viem/accounts'
import { mainnet } from 'viem/chains'
export const walletClient = createWalletClient({
chain: mainnet,
transport: custom(window.ethereum)
})
// JSON-RPC Account
export const [account] = await walletClient.getAddresses()
// Local Account
export const account = privateKeyToAccount(...)
Account Hoisting โ
If you do not wish to pass an account
to every signMessage
, you can also hoist the Account on the Wallet Client (see config.ts
).
ts
import { walletClient } from './config'
const signature = await walletClient.signMessage({
message: 'hello world',
})
// "0xa461f509887bd19e312c0c58467ce8ff8e300d3c1a90b608a760c5b80318eaf15fe57c96f9175d6cd4daad4663763baa7e78836e067d0163e9a2ccf2ff753f5b1b"
ts
import { createWalletClient, custom } from 'viem'
// Retrieve Account from an EIP-1193 Provider.
const [account] = await window.ethereum.request({
method: 'eth_requestAccounts'
})
export const walletClient = createWalletClient({
account,
transport: custom(window.ethereum)
})
ts
import { createWalletClient, custom } from 'viem'
import { privateKeyToAccount } from 'viem/accounts'
export const walletClient = createWalletClient({
account: privateKeyToAccount('0x...'),
transport: custom(window.ethereum)
})
Returns โ
The signed message.
Parameters โ
account โ
- Type:
Account | Address
Account to use for signing.
Accepts a JSON-RPC Account or Local Account (Private Key, etc).
ts
const signature = await walletClient.signMessage({
account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',
message: 'hello world',
})
data โ
- Type:
string
Message to sign.
ts
const signature = await walletClient.signMessage({
account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',
message: 'hello world',
})
JSON-RPC Methods โ
- JSON-RPC Accounts:
- Local Accounts
- Signs locally. No JSON-RPC request.