signTypedData 
Action for signing typed data and calculating an Ethereum-specific EIP-712 signature.
Import 
ts
import { signTypedData } from '@wagmi/core'Usage 
ts
import { signTypedData } from '@wagmi/core'
import { config } from './config'
const result = await signTypedData(config, {
  types: {
    Person: [
      { name: 'name', type: 'string' },
      { name: 'wallet', type: 'address' },
    ],
    Mail: [
      { name: 'from', type: 'Person' },
      { name: 'to', type: 'Person' },
      { name: 'contents', type: 'string' },
    ],
  },
  primaryType: 'Mail',
  message: {
    from: {
      name: 'Cow',
      wallet: '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826',
    },
    to: {
      name: 'Bob',
      wallet: '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB',
    },
    contents: 'Hello, Bob!',
  },
})ts
import { createConfig, http } from '@wagmi/core'
import { mainnet, sepolia } from '@wagmi/core/chains'
export const config = createConfig({
  chains: [mainnet, sepolia],
  transports: {
    [mainnet.id]: http(),
    [sepolia.id]: http(),
  },
})Parameters 
ts
import { type SignTypedDataParameters } from '@wagmi/core'account 
Address | Account | undefined
Account to use when signing data. Throws if account is not found on connector.
ts
import { signTypedData } from '@wagmi/core'
import { config } from './config'
import { types } from './typedData'
const result = await signTypedData(config, {
  account: '0xd2135CfB216b74109775236E36d4b433F1DF507B', 
  types,
  primaryType: 'Mail',
  message: {
    from: {
      name: 'Cow',
      wallet: '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826',
    },
    to: {
      name: 'Bob',
      wallet: '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB',
    },
    contents: 'Hello, Bob!',
  },
})ts
import type { TypedData } from 'viem'
export const types = {
  Person: [
    { name: 'name', type: 'string' },
    { name: 'wallet', type: 'address' },
  ],
  Mail: [
    { name: 'from', type: 'Person' },
    { name: 'to', type: 'Person' },
    { name: 'contents', type: 'string' },
  ],
} as const satisfies TypedDatats
import { createConfig, http } from '@wagmi/core'
import { mainnet, sepolia } from '@wagmi/core/chains'
export const config = createConfig({
  chains: [mainnet, sepolia],
  transports: {
    [mainnet.id]: http(),
    [sepolia.id]: http(),
  },
})connector 
Connector | undefined
Connector to sign data with.
ts
import { getAccount, signTypedData } from '@wagmi/core'
import { config } from './config'
import { types } from './typedData'
const { connector } = getAccount(config)
const result = await signTypedData(config, {
  connector, 
  types,
  primaryType: 'Mail',
  message: {
    from: {
      name: 'Cow',
      wallet: '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826',
    },
    to: {
      name: 'Bob',
      wallet: '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB',
    },
    contents: 'Hello, Bob!',
  },
})ts
import type { TypedData } from 'viem'
export const types = {
  Person: [
    { name: 'name', type: 'string' },
    { name: 'wallet', type: 'address' },
  ],
  Mail: [
    { name: 'from', type: 'Person' },
    { name: 'to', type: 'Person' },
    { name: 'contents', type: 'string' },
  ],
} as const satisfies TypedDatats
import { createConfig, http } from '@wagmi/core'
import { mainnet, sepolia } from '@wagmi/core/chains'
export const config = createConfig({
  chains: [mainnet, sepolia],
  transports: {
    [mainnet.id]: http(),
    [sepolia.id]: http(),
  },
})domain 
TypedDataDomain | undefined
- The typed data domain.
- If EIP712Domainkey exists intypes,domainschema is inferred from it.
ts
import { signTypedData } from '@wagmi/core'
import { config } from './config'
import { types } from './typedData'
const result = await signTypedData(config, {
  domain: { 
    name: 'Ether Mail', 
    chainId: 1, 
    verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC', 
    version: '1', 
  }, 
  types,
  primaryType: 'Mail',
  message: {
    from: {
      name: 'Cow',
      wallet: '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826',
    },
    to: {
      name: 'Bob',
      wallet: '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB',
    },
    contents: 'Hello, Bob!',
  },
})ts
import type { TypedData } from 'viem'
export const types = {
  Person: [
    { name: 'name', type: 'string' },
    { name: 'wallet', type: 'address' },
  ],
  Mail: [
    { name: 'from', type: 'Person' },
    { name: 'to', type: 'Person' },
    { name: 'contents', type: 'string' },
  ],
} as const satisfies TypedDatats
import { createConfig, http } from '@wagmi/core'
import { mainnet, sepolia } from '@wagmi/core/chains'
export const config = createConfig({
  chains: [mainnet, sepolia],
  transports: {
    [mainnet.id]: http(),
    [sepolia.id]: http(),
  },
})message 
Record<string, unknown>
- Data to sign.
- Type inferred from typesandprimaryType.
ts
import { signTypedData } from '@wagmi/core'
import { config } from './config'
import { types } from './typedData'
const result = await signTypedData(config, {
  types,
  primaryType: 'Mail',
  message: { 
    from: { 
      name: 'Cow', 
      wallet: '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826', 
    }, 
    to: { 
      name: 'Bob', 
      wallet: '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB', 
    }, 
    contents: 'Hello, Bob!', 
  }, 
})ts
import type { TypedData } from 'viem'
export const types = {
  Person: [
    { name: 'name', type: 'string' },
    { name: 'wallet', type: 'address' },
  ],
  Mail: [
    { name: 'from', type: 'Person' },
    { name: 'to', type: 'Person' },
    { name: 'contents', type: 'string' },
  ],
} as const satisfies TypedDatats
import { createConfig, http } from '@wagmi/core'
import { mainnet, sepolia } from '@wagmi/core/chains'
export const config = createConfig({
  chains: [mainnet, sepolia],
  transports: {
    [mainnet.id]: http(),
    [sepolia.id]: http(),
  },
})primaryType 
string
ts
import { signTypedData } from '@wagmi/core'
import { config } from './config'
import { types } from './typedData'
const result = await signTypedData(config, {
  types,
  primaryType: 'Mail', 
  message: {
    from: {
      name: 'Cow',
      wallet: '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826',
    },
    to: {
      name: 'Bob',
      wallet: '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB',
    },
    contents: 'Hello, Bob!',
  },
})ts
import type { TypedData } from 'viem'
export const types = {
  Person: [
    { name: 'name', type: 'string' },
    { name: 'wallet', type: 'address' },
  ],
  Mail: [
    { name: 'from', type: 'Person' },
    { name: 'to', type: 'Person' },
    { name: 'contents', type: 'string' },
  ],
} as const satisfies TypedDatats
import { createConfig, http } from '@wagmi/core'
import { mainnet, sepolia } from '@wagmi/core/chains'
export const config = createConfig({
  chains: [mainnet, sepolia],
  transports: {
    [mainnet.id]: http(),
    [sepolia.id]: http(),
  },
})types 
TypedData
- The type definitions for the typed data.
- By defining inline or adding a const assertion to types, TypeScript will infer the correct types formessageandprimaryType. See the Wagmi TypeScript docs for more information.
ts
import { signTypedData } from '@wagmi/core'
import { config } from './config'
const result = await signTypedData(config, {
  types: { 
    Person: [ 
      { name: 'name', type: 'string' }, 
      { name: 'wallet', type: 'address' }, 
    ], 
    Mail: [ 
      { name: 'from', type: 'Person' }, 
      { name: 'to', type: 'Person' }, 
      { name: 'contents', type: 'string' }, 
    ], 
  }, 
  primaryType: 'Mail',
  message: {
    from: {
      name: 'Cow',
      wallet: '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826',
    },
    to: {
      name: 'Bob',
      wallet: '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB',
    },
    contents: 'Hello, Bob!',
  },
})ts
import { createConfig, http } from '@wagmi/core'
import { mainnet, sepolia } from '@wagmi/core/chains'
export const config = createConfig({
  chains: [mainnet, sepolia],
  transports: {
    [mainnet.id]: http(),
    [sepolia.id]: http(),
  },
})Return Type 
ts
import { type SignTypedDataReturnType } from '@wagmi/core'The signed data.
Type Inference 
With types setup correctly, TypeScript will infer the correct types for domain, message, and primaryType. See the Wagmi TypeScript docs for more information.
ts
const  = await (, {
  : {
    : [
      { : 'name', : 'string' },
      { : 'wallet', : 'address' },
    ],
    : [
      { : 'from', : 'Person' },
      { : 'to', : 'Person' },
      { : 'contents', : 'string' },
    ],
  },
  : 'Mail',
  : {
    : {
      : 'Cow',
      : '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826',
    },
    : {
      : 'Bob',
      : '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB',
    },
    : 'Hello, Bob!',
  },
})ts
const  = {
  : [
    { : 'name', : 'string' },
    { : 'wallet', : 'address' },
  ],
  : [
    { : 'from', : 'Person' },
    { : 'to', : 'Person' },
    { : 'contents', : 'string' },
  ],
} as 
const  = await (, {
  ,
  : 'Mail',
  : {
    : {
      : 'Cow',
      : '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826',
    },
    : {
      : 'Bob',
      : '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB',
    },
    : 'Hello, Bob!',
  },
})Error 
ts
import { type SignTypedDataErrorType } from '@wagmi/core'TanStack Query 
ts
import {
  type SignTypedDataData,
  type SignTypedDataVariables,
  type SignTypedDataMutate,
  type SignTypedDataMutateAsync,
  signTypedDataMutationOptions,
} from '@wagmi/core/query'