Function signPermit

  • Signs a permit for a given ERC-2612 ERC20 token using the specified parameters.

    Parameters

    • walletClient: {
          account: Account;
          addChain: ((args) => Promise<void>);
          batch?: {
              multicall?: boolean | ({ batchSize?: number | undefined; wait?: number | undefined; });
          };
          cacheTime: number;
          chain: Chain;
          deployContract: (<const TAbi, TChainOverride>(args) => Promise<`0x${string}`>);
          extend: (<const client>(fn) => Client<Transport, Chain, Account, WalletRpcSchema, ({ [K in keyof client]: client[K]; }) & WalletActions<Chain, Account>>);
          getAddresses: (() => Promise<GetAddressesReturnType>);
          getChainId: (() => Promise<number>);
          getPermissions: (() => Promise<GetPermissionsReturnType>);
          key: string;
          name: string;
          pollingInterval: number;
          prepareTransactionRequest: (<TChainOverride>(args) => Promise<PrepareTransactionRequestReturnType>);
          request: EIP1193RequestFn<WalletRpcSchema>;
          requestAddresses: (() => Promise<RequestAddressesReturnType>);
          requestPermissions: ((args) => Promise<RequestPermissionsReturnType>);
          sendRawTransaction: ((args) => Promise<`0x${string}`>);
          sendTransaction: (<TChainOverride>(args) => Promise<`0x${string}`>);
          signMessage: ((args) => Promise<`0x${string}`>);
          signTransaction: (<TChainOverride>(args) => Promise<`0x${string}`>);
          signTypedData: (<const TTypedData, TPrimaryType>(args) => Promise<`0x${string}`>);
          switchChain: ((args) => Promise<void>);
          transport: TransportConfig<string, EIP1193RequestFn> & Record<string, any>;
          type: string;
          uid: string;
          watchAsset: ((args) => Promise<boolean>);
          writeContract: (<const TAbi, TFunctionName, TChainOverride>(args) => Promise<`0x${string}`>);
      }

      Wallet client to invoke for signing the permit message

      • account: Account

        The Account of the Client.

      • addChain: ((args) => Promise<void>)
          • (args): Promise<void>
          • Adds an EVM chain to the wallet.

            Parameters

            • args: AddChainParameters

              AddChainParameters

            Returns Promise<void>

            Example

            import { createWalletClient, custom } from 'viem'
            import { optimism } from 'viem/chains'

            const client = createWalletClient({
            transport: custom(window.ethereum),
            })
            await client.addChain({ chain: optimism })
      • Optional batch?: {
            multicall?: boolean | ({ batchSize?: number | undefined; wait?: number | undefined; });
        }

        Flags for batch settings.

        • Optional multicall?: boolean | ({ batchSize?: number | undefined; wait?: number | undefined; })

          Toggle to enable eth_call multicall aggregation.

      • cacheTime: number

        Time (in ms) that cached data will remain in memory.

      • chain: Chain

        Chain for the client.

      • deployContract: (<const TAbi, TChainOverride>(args) => Promise<`0x${string}`>)
          • <const TAbi, TChainOverride>(args): Promise<`0x${string}`>
          • Deploys a contract to the network, given bytecode and constructor arguments.

            Type Parameters

            • const TAbi extends Abi | readonly unknown[]

            • TChainOverride extends undefined | Chain = undefined

            Parameters

            • args: DeployContractParameters<TAbi, Chain, Account, TChainOverride>

              DeployContractParameters

            Returns Promise<`0x${string}`>

            The Transaction hash. DeployContractReturnType

            Example

            import { createWalletClient, http } from 'viem'
            import { privateKeyToAccount } from 'viem/accounts'
            import { mainnet } from 'viem/chains'

            const client = createWalletClient({
            account: privateKeyToAccount('0x…'),
            chain: mainnet,
            transport: http(),
            })
            const hash = await client.deployContract({
            abi: [],
            account: '0x…,
            bytecode: '0x608060405260405161083e38038061083e833981016040819052610...',
            })
      • extend: (<const client>(fn) => Client<Transport, Chain, Account, WalletRpcSchema, ({ [K in keyof client]: client[K]; }) & WalletActions<Chain, Account>>)
          • <const client>(fn): Client<Transport, Chain, Account, WalletRpcSchema, ({ [K in keyof client]: client[K]; }) & WalletActions<Chain, Account>>
          • Type Parameters

            • const client extends ({ [x: string]: unknown; account?: undefined; batch?: undefined; cacheTime?: undefined; chain?: undefined; key?: undefined; name?: undefined; pollingInterval?: undefined; request?: undefined; transport?: undefined; type?: undefined; uid?: undefined; }) & Partial<ExtendableProtectedActions>

            Parameters

            • fn: ((client) => client)
                • (client): client
                • Parameters

                  • client: Client<Transport, Chain, Account, WalletRpcSchema, WalletActions<Chain, Account>>

                  Returns client

            Returns Client<Transport, Chain, Account, WalletRpcSchema, ({ [K in keyof client]: client[K]; }) & WalletActions<Chain, Account>>

      • getAddresses: (() => Promise<GetAddressesReturnType>)
          • (): Promise<GetAddressesReturnType>
          • Returns a list of account addresses owned by the wallet or client.

            Returns Promise<GetAddressesReturnType>

            List of account addresses owned by the wallet or client. GetAddressesReturnType

            Example

            import { createWalletClient, custom } from 'viem'
            import { mainnet } from 'viem/chains'

            const client = createWalletClient({
            chain: mainnet,
            transport: custom(window.ethereum),
            })
            const accounts = await client.getAddresses()
      • getChainId: (() => Promise<number>)
          • (): Promise<number>
          • Returns the chain ID associated with the current network.

            Returns Promise<number>

            The current chain ID. GetChainIdReturnType

            Example

            import { createWalletClient, http } from 'viem'
            import { mainnet } from 'viem/chains'

            const client = createWalletClient({
            chain: mainnet,
            transport: custom(window.ethereum),
            })
            const chainId = await client.getChainId()
            // 1
      • getPermissions: (() => Promise<GetPermissionsReturnType>)
          • (): Promise<GetPermissionsReturnType>
          • Gets the wallets current permissions.

            Returns Promise<GetPermissionsReturnType>

            The wallet permissions. GetPermissionsReturnType

            Example

            import { createWalletClient, custom } from 'viem'
            import { mainnet } from 'viem/chains'

            const client = createWalletClient({
            chain: mainnet,
            transport: custom(window.ethereum),
            })
            const permissions = await client.getPermissions()
      • key: string

        A key for the client.

      • name: string

        A name for the client.

      • pollingInterval: number

        Frequency (in ms) for polling enabled actions & events. Defaults to 4_000 milliseconds.

      • prepareTransactionRequest: (<TChainOverride>(args) => Promise<PrepareTransactionRequestReturnType>)
          • <TChainOverride>(args): Promise<PrepareTransactionRequestReturnType>
          • Prepares a transaction request for signing.

            Type Parameters

            • TChainOverride extends undefined | Chain = undefined

            Parameters

            • args: PrepareTransactionRequestParameters<Chain, Account, TChainOverride>

              PrepareTransactionRequestParameters

            Returns Promise<PrepareTransactionRequestReturnType>

            The transaction request. PrepareTransactionRequestReturnType

            Example

            import { createWalletClient, custom } from 'viem'
            import { mainnet } from 'viem/chains'

            const client = createWalletClient({
            chain: mainnet,
            transport: custom(window.ethereum),
            })
            const request = await client.prepareTransactionRequest({
            account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',
            to: '0x0000000000000000000000000000000000000000',
            value: 1n,
            })

            Example

            // Account Hoisting
            import { createWalletClient, http } from 'viem'
            import { privateKeyToAccount } from 'viem/accounts'
            import { mainnet } from 'viem/chains'

            const client = createWalletClient({
            account: privateKeyToAccount('0x…'),
            chain: mainnet,
            transport: custom(window.ethereum),
            })
            const request = await client.prepareTransactionRequest({
            to: '0x0000000000000000000000000000000000000000',
            value: 1n,
            })
      • request: EIP1193RequestFn<WalletRpcSchema>

        Request function wrapped with friendly error handling

      • requestAddresses: (() => Promise<RequestAddressesReturnType>)
          • (): Promise<RequestAddressesReturnType>
          • Requests a list of accounts managed by a wallet.

            Sends a request to the wallet, asking for permission to access the user's accounts. After the user accepts the request, it will return a list of accounts (addresses).

            This API can be useful for dapps that need to access the user's accounts in order to execute transactions or interact with smart contracts.

            Returns Promise<RequestAddressesReturnType>

            List of accounts managed by a wallet RequestAddressesReturnType

            Example

            import { createWalletClient, custom } from 'viem'
            import { mainnet } from 'viem/chains'

            const client = createWalletClient({
            chain: mainnet,
            transport: custom(window.ethereum),
            })
            const accounts = await client.requestAddresses()
      • requestPermissions: ((args) => Promise<RequestPermissionsReturnType>)
          • (args): Promise<RequestPermissionsReturnType>
          • Requests permissions for a wallet.

            Parameters

            • args: { [x: string]: Record<string, any>; eth_accounts: Record<string, any>; }

              RequestPermissionsParameters

            Returns Promise<RequestPermissionsReturnType>

            The wallet permissions. RequestPermissionsReturnType

            Example

            import { createWalletClient, custom } from 'viem'
            import { mainnet } from 'viem/chains'

            const client = createWalletClient({
            chain: mainnet,
            transport: custom(window.ethereum),
            })
            const permissions = await client.requestPermissions({
            eth_accounts: {}
            })
      • sendRawTransaction: ((args) => Promise<`0x${string}`>)
          • (args): Promise<`0x${string}`>
          • Sends a signed transaction to the network

            Parameters

            • args: SendRawTransactionParameters

            Returns Promise<`0x${string}`>

            The transaction hash. SendRawTransactionReturnType

            Example

            import { createWalletClient, custom } from 'viem'
            import { mainnet } from 'viem/chains'
            import { sendRawTransaction } from 'viem/wallet'

            const client = createWalletClient({
            chain: mainnet,
            transport: custom(window.ethereum),
            })

            const hash = await client.sendRawTransaction({
            serializedTransaction: '0x02f850018203118080825208808080c080a04012522854168b27e5dc3d5839bab5e6b39e1a0ffd343901ce1622e3d64b48f1a04e00902ae0502c4728cbf12156290df99c3ed7de85b1dbfe20b5c36931733a33'
            })
      • sendTransaction: (<TChainOverride>(args) => Promise<`0x${string}`>)
          • <TChainOverride>(args): Promise<`0x${string}`>
          • Creates, signs, and sends a new transaction to the network.

            Type Parameters

            • TChainOverride extends undefined | Chain = undefined

            Parameters

            • args: SendTransactionParameters<Chain, Account, TChainOverride>

              SendTransactionParameters

            Returns Promise<`0x${string}`>

            The Transaction hash. SendTransactionReturnType

            Example

            import { createWalletClient, custom } from 'viem'
            import { mainnet } from 'viem/chains'

            const client = createWalletClient({
            chain: mainnet,
            transport: custom(window.ethereum),
            })
            const hash = await client.sendTransaction({
            account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',
            to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
            value: 1000000000000000000n,
            })

            Example

            // Account Hoisting
            import { createWalletClient, http } from 'viem'
            import { privateKeyToAccount } from 'viem/accounts'
            import { mainnet } from 'viem/chains'

            const client = createWalletClient({
            account: privateKeyToAccount('0x…'),
            chain: mainnet,
            transport: http(),
            })
            const hash = await client.sendTransaction({
            to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
            value: 1000000000000000000n,
            })
      • signMessage: ((args) => Promise<`0x${string}`>)
          • (args): Promise<`0x${string}`>
          • Calculates an Ethereum-specific signature in EIP-191 format: keccak256("\x19Ethereum Signed Message:\n" + len(message) + message)).

            With the calculated signature, you can:

            Parameters

            • args: SignMessageParameters<Account>

              SignMessageParameters

            Returns Promise<`0x${string}`>

            The signed message. SignMessageReturnType

            Example

            import { createWalletClient, custom } from 'viem'
            import { mainnet } from 'viem/chains'

            const client = createWalletClient({
            chain: mainnet,
            transport: custom(window.ethereum),
            })
            const signature = await client.signMessage({
            account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',
            message: 'hello world',
            })

            Example

            // Account Hoisting
            import { createWalletClient, http } from 'viem'
            import { privateKeyToAccount } from 'viem/accounts'
            import { mainnet } from 'viem/chains'

            const client = createWalletClient({
            account: privateKeyToAccount('0x…'),
            chain: mainnet,
            transport: http(),
            })
            const signature = await client.signMessage({
            message: 'hello world',
            })
      • signTransaction: (<TChainOverride>(args) => Promise<`0x${string}`>)
          • <TChainOverride>(args): Promise<`0x${string}`>
          • Signs a transaction.

            Type Parameters

            • TChainOverride extends undefined | Chain = undefined

            Parameters

            • args: SignTransactionParameters<Chain, Account, TChainOverride>

              SignTransactionParameters

            Returns Promise<`0x${string}`>

            The signed message. SignTransactionReturnType

            Example

            import { createWalletClient, custom } from 'viem'
            import { mainnet } from 'viem/chains'

            const client = createWalletClient({
            chain: mainnet,
            transport: custom(window.ethereum),
            })
            const request = await client.prepareTransactionRequest({
            account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',
            to: '0x0000000000000000000000000000000000000000',
            value: 1n,
            })
            const signature = await client.signTransaction(request)

            Example

            // Account Hoisting
            import { createWalletClient, http } from 'viem'
            import { privateKeyToAccount } from 'viem/accounts'
            import { mainnet } from 'viem/chains'

            const client = createWalletClient({
            account: privateKeyToAccount('0x…'),
            chain: mainnet,
            transport: custom(window.ethereum),
            })
            const request = await client.prepareTransactionRequest({
            to: '0x0000000000000000000000000000000000000000',
            value: 1n,
            })
            const signature = await client.signTransaction(request)
      • signTypedData: (<const TTypedData, TPrimaryType>(args) => Promise<`0x${string}`>)
          • <const TTypedData, TPrimaryType>(args): Promise<`0x${string}`>
          • Signs typed data and calculates an Ethereum-specific signature in EIP-191 format: keccak256("\x19Ethereum Signed Message:\n" + len(message) + message)).

            Type Parameters

            • const TTypedData extends {
                  address: undefined;
                  bool: undefined;
                  bytes: undefined;
                  bytes1: undefined;
                  bytes10: undefined;
                  bytes11: undefined;
                  bytes12: undefined;
                  bytes13: undefined;
                  bytes14: undefined;
                  bytes15: undefined;
                  bytes16: undefined;
                  bytes17: undefined;
                  bytes18: undefined;
                  bytes19: undefined;
                  bytes2: undefined;
                  bytes20: undefined;
                  bytes21: undefined;
                  bytes22: undefined;
                  bytes23: undefined;
                  bytes24: undefined;
                  bytes25: undefined;
                  bytes26: undefined;
                  bytes27: undefined;
                  bytes28: undefined;
                  bytes29: undefined;
                  bytes3: undefined;
                  bytes30: undefined;
                  bytes31: undefined;
                  bytes32: undefined;
                  bytes4: undefined;
                  bytes5: undefined;
                  bytes6: undefined;
                  bytes7: undefined;
                  bytes8: undefined;
                  bytes9: undefined;
                  int104: undefined;
                  int112: undefined;
                  int120: undefined;
                  int128: undefined;
                  int136: undefined;
                  int144: undefined;
                  int152: undefined;
                  int16: undefined;
                  int160: undefined;
                  int168: undefined;
                  int176: undefined;
                  int184: undefined;
                  int192: undefined;
                  int200: undefined;
                  int208: undefined;
                  int216: undefined;
                  int224: undefined;
                  int232: undefined;
                  int24: undefined;
                  int240: undefined;
                  int248: undefined;
                  int256: undefined;
                  int32: undefined;
                  int40: undefined;
                  int48: undefined;
                  int56: undefined;
                  int64: undefined;
                  int72: undefined;
                  int8: undefined;
                  int80: undefined;
                  int88: undefined;
                  int96: undefined;
                  string: undefined;
                  uint104: undefined;
                  uint112: undefined;
                  uint120: undefined;
                  uint128: undefined;
                  uint136: undefined;
                  uint144: undefined;
                  uint152: undefined;
                  uint16: undefined;
                  uint160: undefined;
                  uint168: undefined;
                  uint176: undefined;
                  uint184: undefined;
                  uint192: undefined;
                  uint200: undefined;
                  uint208: undefined;
                  uint216: undefined;
                  uint224: undefined;
                  uint232: undefined;
                  uint24: undefined;
                  uint240: undefined;
                  uint248: undefined;
                  uint256: undefined;
                  uint32: undefined;
                  uint40: undefined;
                  uint48: undefined;
                  uint56: undefined;
                  uint64: undefined;
                  uint72: undefined;
                  uint8: undefined;
                  uint80: undefined;
                  uint88: undefined;
                  uint96: undefined;
              } | {
                  [key: string]: unknown;
              }

            • TPrimaryType extends string

            Parameters

            • args: SignTypedDataParameters<TTypedData, TPrimaryType, Account>

              SignTypedDataParameters

            Returns Promise<`0x${string}`>

            The signed data. SignTypedDataReturnType

            Example

            import { createWalletClient, custom } from 'viem'
            import { mainnet } from 'viem/chains'

            const client = createWalletClient({
            chain: mainnet,
            transport: custom(window.ethereum),
            })
            const signature = await client.signTypedData({
            account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',
            domain: {
            name: 'Ether Mail',
            version: '1',
            chainId: 1,
            verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC',
            },
            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!',
            },
            })

            Example

            // Account Hoisting
            import { createWalletClient, http } from 'viem'
            import { privateKeyToAccount } from 'viem/accounts'
            import { mainnet } from 'viem/chains'

            const client = createWalletClient({
            account: privateKeyToAccount('0x…'),
            chain: mainnet,
            transport: http(),
            })
            const signature = await client.signTypedData({
            domain: {
            name: 'Ether Mail',
            version: '1',
            chainId: 1,
            verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC',
            },
            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!',
            },
            })
      • switchChain: ((args) => Promise<void>)
          • (args): Promise<void>
          • Switch the target chain in a wallet.

            Parameters

            • args: SwitchChainParameters

              SwitchChainParameters

            Returns Promise<void>

            Example

            import { createWalletClient, custom } from 'viem'
            import { mainnet, optimism } from 'viem/chains'

            const client = createWalletClient({
            chain: mainnet,
            transport: custom(window.ethereum),
            })
            await client.switchChain({ id: optimism.id })
      • transport: TransportConfig<string, EIP1193RequestFn> & Record<string, any>

        The RPC transport

      • type: string

        The type of client.

      • uid: string

        A unique ID for the client.

      • watchAsset: ((args) => Promise<boolean>)
          • (args): Promise<boolean>
          • Adds an EVM chain to the wallet.

            Parameters

            • args: WatchAssetParams

              WatchAssetParameters

            Returns Promise<boolean>

            Boolean indicating if the token was successfully added. WatchAssetReturnType

            Example

            import { createWalletClient, custom } from 'viem'
            import { mainnet } from 'viem/chains'

            const client = createWalletClient({
            chain: mainnet,
            transport: custom(window.ethereum),
            })
            const success = await client.watchAsset({
            type: 'ERC20',
            options: {
            address: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
            decimals: 18,
            symbol: 'WETH',
            },
            })
      • writeContract: (<const TAbi, TFunctionName, TChainOverride>(args) => Promise<`0x${string}`>)
          • <const TAbi, TFunctionName, TChainOverride>(args): Promise<`0x${string}`>
          • Executes a write function on a contract.

            A "write" function on a Solidity contract modifies the state of the blockchain. These types of functions require gas to be executed, and hence a Transaction is needed to be broadcast in order to change the state.

            Internally, uses a Wallet Client to call the sendTransaction action with ABI-encoded data.

            Warning: The write internally sends a transaction – it does not validate if the contract write will succeed (the contract may throw an error). It is highly recommended to simulate the contract write with contract.simulate before you execute it.

            Type Parameters

            • const TAbi extends Abi | readonly unknown[]

            • TFunctionName extends string

            • TChainOverride extends undefined | Chain = undefined

            Parameters

            • args: WriteContractParameters<TAbi, TFunctionName, Chain, Account, TChainOverride>

              WriteContractParameters

            Returns Promise<`0x${string}`>

            A Transaction Hash. WriteContractReturnType

            Example

            import { createWalletClient, custom, parseAbi } from 'viem'
            import { mainnet } from 'viem/chains'

            const client = createWalletClient({
            chain: mainnet,
            transport: custom(window.ethereum),
            })
            const hash = await client.writeContract({
            address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',
            abi: parseAbi(['function mint(uint32 tokenId) nonpayable']),
            functionName: 'mint',
            args: [69420],
            })

            Example

            // With Validation
            import { createWalletClient, custom, parseAbi } from 'viem'
            import { mainnet } from 'viem/chains'

            const client = createWalletClient({
            chain: mainnet,
            transport: custom(window.ethereum),
            })
            const { request } = await client.simulateContract({
            address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',
            abi: parseAbi(['function mint(uint32 tokenId) nonpayable']),
            functionName: 'mint',
            args: [69420],
            }
            const hash = await client.writeContract(request)
    • props: Eip2612Props

      The properties required to sign the permit.

    Returns Promise<PermitSignature>

Generated using TypeDoc