Skip to main content

@usdctofiat/offramp


@usdctofiat/offramp / offramp

Function: offramp()

offramp(walletClient, params, onProgress?, telemetryContext?, apiBaseUrl?): Promise<OfframpResult>

Defined in: packages/offramp-sdk/src/deposit.ts:236

Create a USDC-to-fiat offramp deposit and delegate it to the vault.

Resumable: if an existing undelegated deposit is found for this wallet, the flow skips directly to delegation instead of creating a new deposit.

Parameters

walletClient

account

Account | undefined

The Account of the Client.

addChain

(args) => Promise<void>

Adds an EVM chain to the wallet.

Example

import { createWalletClient, custom } from "viem";
import { optimism } from "viem/chains";

const client = createWalletClient({
  transport: custom(window.ethereum),
});
await client.addChain({ chain: optimism });

batch?

{ multicall?: boolean | { batchSize?: number; deployless?: boolean; wait?: number; }; }

Flags for batch settings.

batch.multicall?

boolean | { batchSize?: number; deployless?: boolean; wait?: number; }

Toggle to enable eth_call multicall aggregation.

cacheTime

number

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

ccipRead?

false | { request?: (parameters) => Promise<`0x${string}`>; }

CCIP Read configuration.

chain

Chain | undefined

Chain for the client.

dataSuffix?

DataSuffix

Data suffix to append to transaction data.

deployContract

<abi, chainOverride>(args) => Promise<`0x${string}`>

Deploys a contract to the network, given bytecode and constructor arguments.

  • Docs: https://viem.sh/docs/contract/deployContract
  • Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/contracts_deploying-contracts

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...',
})

experimental_blockTag?

BlockTag

Default block tag to use for RPC requests.

extend

<client>(fn) => Client<Transport, Chain | undefined, Account | undefined, WalletRpcSchema, { [K in string | number | symbol]: client[K] } & WalletActions<Chain | undefined, Account | undefined>>

fillTransaction

<chainOverride, accountOverride>(args) => Promise<FillTransactionReturnType<Chain | undefined, chainOverride>>

Fills a transaction request with the necessary fields to be signed over.

  • Docs: https://viem.sh/docs/actions/public/fillTransaction

Example

import { createWalletClient, custom } from "viem";
import { mainnet } from "viem/chains";

const client = createWalletClient({
  chain: mainnet,
  transport: custom(window.ethereum),
});
const result = await client.fillTransaction({
  account: "0xA0Cf798816D4b9b9866b5330EEa46a18382f251e",
  to: "0x70997970c51812dc3a010c7d01b50e0d17dc79c8",
  value: parseEther("1"),
});

getAddresses

() => Promise<GetAddressesReturnType>

Returns a list of account addresses owned by the wallet or client.

  • Docs: https://viem.sh/docs/actions/wallet/getAddresses
  • JSON-RPC Methods: eth_accounts

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();

getCallsStatus

(parameters) => Promise<{ atomic: boolean; capabilities?: {[key: string]: any; } | {[key: string]: any; }; chainId: number; id: string; receipts?: WalletCallReceipt<bigint, "success" | "reverted">[]; status: "pending" | "success" | "failure" | undefined; statusCode: number; version: string; }>

Returns the status of a call batch that was sent via sendCalls.

Example

import { createWalletClient, custom } from "viem";
import { mainnet } from "viem/chains";

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

const { receipts, status } = await client.getCallsStatus({ id: "0xdeadbeef" });

getCapabilities

<chainId>(parameters?) => Promise<{ [K in string | number | symbol]: (chainId extends number ? { atomic?: { status: "ready" | "unsupported" | "supported" }; paymasterService?: { supported: boolean }; unstable_addSubAccount?: { keyTypes: ((...) | (...) | (...) | (...))[]; supported: boolean }; [key: string]: any } : ChainIdToCapabilities<Capabilities<{ atomic?: { status: ... }; paymasterService?: { supported: ... }; unstable_addSubAccount?: { keyTypes: ...; supported: ... }; [key: string]: any }>, number>)[K] }>

Extract capabilities that a connected wallet supports (e.g. paymasters, session keys, etc).

Example

import { createWalletClient, custom } from "viem";
import { mainnet } from "viem/chains";

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

const capabilities = await client.getCapabilities({
  account: "0xA0Cf798816D4b9b9866b5330EEa46a18382f251e",
});

getChainId

() => Promise<number>

Returns the chain ID associated with the current network.

  • Docs: https://viem.sh/docs/actions/public/getChainId
  • JSON-RPC Methods: eth_chainId

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>

Gets the wallets current permissions.

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.

prepareAuthorization

(parameters) => Promise<PrepareAuthorizationReturnType>

Prepares an EIP-7702 Authorization object for signing. This Action will fill the required fields of the Authorization object if they are not provided (e.g. nonce and chainId).

With the prepared Authorization object, you can use signAuthorization to sign over the Authorization object.

Examples

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

const client = createWalletClient({
  chain: mainnet,
  transport: http(),
});

const authorization = await client.prepareAuthorization({
  account: privateKeyToAccount("0x.."),
  contractAddress: "0xA0Cf798816D4b9b9866b5330EEa46a18382f251e",
});
// 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 authorization = await client.prepareAuthorization({
  contractAddress: "0xA0Cf798816D4b9b9866b5330EEa46a18382f251e",
});

prepareTransactionRequest

<request, chainOverride, accountOverride>(args) => Promise<{ [K in string | number | symbol]: (UnionRequiredBy<Extract<UnionOmit<(...), (...)> & ((...) extends (...) ? (...) : (...)) & ((...) extends (...) ? (...) : (...)), IsNever<(...)> extends true ? unknown : ExactPartial<(...)>> & { chainId?: number }, ParameterTypeToParameters<request["parameters"] extends readonly PrepareTransactionRequestParameterType[] ? any[any][number] : "type" | "chainId" | "fees" | "gas" | "nonce" | "blobVersionedHashes">> & (unknown extends request["kzg"] ? {} : Pick<request, "kzg">) & { _capabilities?: { [key: string]: any } })[K] }>

Prepares a transaction request for signing.

  • Docs: https://viem.sh/docs/actions/wallet/prepareTransactionRequest

Examples

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,
});
// 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>

Requests a list of accounts managed by a wallet.

  • Docs: https://viem.sh/docs/actions/wallet/requestAddresses
  • JSON-RPC Methods: eth_requestAccounts

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.

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>

Requests permissions for a wallet.

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: {},
});

sendCalls

<calls, chainOverride>(parameters) => Promise<{ capabilities?: {[key: string]: any; }; id: string; }>

Requests the connected wallet to send a batch of calls.

  • Docs: https://viem.sh/docs/actions/wallet/sendCalls
  • JSON-RPC Methods: wallet_sendCalls

Example

import { createWalletClient, custom } from "viem";
import { mainnet } from "viem/chains";

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

const id = await client.sendCalls({
  account: "0xA0Cf798816D4b9b9866b5330EEa46a18382f251e",
  calls: [
    {
      data: "0xdeadbeef",
      to: "0x70997970c51812dc3a010c7d01b50e0d17dc79c8",
    },
    {
      to: "0x70997970c51812dc3a010c7d01b50e0d17dc79c8",
      value: 69420n,
    },
  ],
});

sendCallsSync

<calls, chainOverride>(parameters) => Promise<{ atomic: boolean; capabilities?: {[key: string]: any; } | {[key: string]: any; }; chainId: number; id: string; receipts?: WalletCallReceipt<bigint, "success" | "reverted">[]; status: "pending" | "success" | "failure" | undefined; statusCode: number; version: string; }>

Requests the connected wallet to send a batch of calls, and waits for the calls to be included in a block.

  • Docs: https://viem.sh/docs/actions/wallet/sendCallsSync
  • JSON-RPC Methods: wallet_sendCalls

Example

import { createWalletClient, custom } from "viem";
import { mainnet } from "viem/chains";

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

const status = await client.sendCallsSync({
  account: "0xA0Cf798816D4b9b9866b5330EEa46a18382f251e",
  calls: [
    {
      data: "0xdeadbeef",
      to: "0x70997970c51812dc3a010c7d01b50e0d17dc79c8",
    },
    {
      to: "0x70997970c51812dc3a010c7d01b50e0d17dc79c8",
      value: 69420n,
    },
  ],
});

sendRawTransaction

(args) => Promise<`0x${string}`>

Sends a signed transaction to the network

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",
});

sendRawTransactionSync

(args) => Promise<TransactionReceipt>

Sends a signed transaction to the network synchronously, and waits for the transaction to be included in a block.

Example

import { createWalletClient, custom } from "viem";
import { mainnet } from "viem/chains";
import { sendRawTransactionSync } from "viem/wallet";

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

const receipt = await client.sendRawTransactionSync({
  serializedTransaction:
    "0x02f850018203118080825208808080c080a04012522854168b27e5dc3d5839bab5e6b39e1a0ffd343901ce1622e3d64b48f1a04e00902ae0502c4728cbf12156290df99c3ed7de85b1dbfe20b5c36931733a33",
});

sendTransaction

<request, chainOverride>(args) => Promise<`0x${string}`>

Creates, signs, and sends a new transaction to the network.

  • Docs: https://viem.sh/docs/actions/wallet/sendTransaction
  • Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/transactions_sending-transactions
  • JSON-RPC Methods:

Examples

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,
});
// 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,
});

sendTransactionSync

<request, chainOverride>(args) => Promise<TransactionReceipt>

Creates, signs, and sends a new transaction to the network synchronously. Returns the transaction receipt.

  • Docs: https://viem.sh/docs/actions/wallet/sendTransactionSync
  • Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/transactions_sending-transactions
  • JSON-RPC Methods:

Examples

import { createWalletClient, custom } from "viem";
import { mainnet } from "viem/chains";

const client = createWalletClient({
  chain: mainnet,
  transport: custom(window.ethereum),
});
const receipt = await client.sendTransactionSync({
  account: "0xA0Cf798816D4b9b9866b5330EEa46a18382f251e",
  to: "0x70997970c51812dc3a010c7d01b50e0d17dc79c8",
  value: 1000000000000000000n,
});
// 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 receipt = await client.sendTransactionSync({
  to: "0x70997970c51812dc3a010c7d01b50e0d17dc79c8",
  value: 1000000000000000000n,
});

showCallsStatus

(parameters) => Promise<void>

Requests for the wallet to show information about a call batch that was sent via sendCalls.

Example

import { createWalletClient, custom } from "viem";
import { mainnet } from "viem/chains";

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

await client.showCallsStatus({ id: "0xdeadbeef" });

signAuthorization

(parameters) => Promise<SignAuthorizationReturnType>

Signs an EIP-7702 Authorization object.

With the calculated signature, you can:

Examples

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

const client = createWalletClient({
  chain: mainnet,
  transport: http(),
});

const signature = await client.signAuthorization({
  account: privateKeyToAccount("0x.."),
  contractAddress: "0xA0Cf798816D4b9b9866b5330EEa46a18382f251e",
});
// 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.signAuthorization({
  contractAddress: "0xA0Cf798816D4b9b9866b5330EEa46a18382f251e",
});

signMessage

(args) => Promise<`0x${string}`>

Calculates an Ethereum-specific signature in EIP-191 format: keccak256("\x19Ethereum Signed Message:\n" + len(message) + message)).

  • Docs: https://viem.sh/docs/actions/wallet/signMessage
  • JSON-RPC Methods:
    • JSON-RPC Accounts: personal_sign
    • Local Accounts: Signs locally. No JSON-RPC request.

With the calculated signature, you can:

Examples

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",
});
// 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

<chainOverride, request>(args) => Promise<TransactionSerialized<GetTransactionType<request, request extends LegacyProperties ? "legacy" : never | request extends EIP1559Properties ? "eip1559" : never | request extends EIP2930Properties ? "eip2930" : never | request extends EIP4844Properties ? "eip4844" : never | request extends EIP7702Properties ? "eip7702" : never | request["type"] extends string | undefined ? Extract<any[any], string> : never>, GetTransactionType<request, request extends LegacyProperties ? "legacy" : never | request extends EIP1559Properties ? "eip1559" : never | request extends EIP2930Properties ? "eip2930" : never | request extends EIP4844Properties ? "eip4844" : never | request extends EIP7702Properties ? "eip7702" : never | request["type"] extends string | undefined ? Extract<any[any], string> : never> extends "eip1559" ? `0x02${string}` : never | GetTransactionType<request, request extends LegacyProperties ? "legacy" : never | request extends EIP1559Properties ? "eip1559" : never | request extends EIP2930Properties ? "eip2930" : never | request extends EIP4844Properties ? "eip4844" : never | request extends EIP7702Properties ? "eip7702" : never | request["type"] extends string | undefined ? Extract<any[any], string> : never> extends "eip2930" ? `0x01${string}` : never | GetTransactionType<request, request extends LegacyProperties ? "legacy" : never | request extends EIP1559Properties ? "eip1559" : never | request extends EIP2930Properties ? "eip2930" : never | request extends EIP4844Properties ? "eip4844" : never | request extends EIP7702Properties ? "eip7702" : never | request["type"] extends string | undefined ? Extract<any[any], string> : never> extends "eip4844" ? `0x03${string}` : never | GetTransactionType<request, request extends LegacyProperties ? "legacy" : never | request extends EIP1559Properties ? "eip1559" : never | request extends EIP2930Properties ? "eip2930" : never | request extends EIP4844Properties ? "eip4844" : never | request extends EIP7702Properties ? "eip7702" : never | request["type"] extends string | undefined ? Extract<any[any], string> : never> extends "eip7702" ? `0x04${string}` : never | GetTransactionType<request, request extends LegacyProperties ? "legacy" : never | request extends EIP1559Properties ? "eip1559" : never | request extends EIP2930Properties ? "eip2930" : never | request extends EIP4844Properties ? "eip4844" : never | request extends EIP7702Properties ? "eip7702" : never | request["type"] extends string | undefined ? Extract<any[any], string> : never> extends "legacy" ? TransactionSerializedLegacy : never>>

Signs a transaction.

  • Docs: https://viem.sh/docs/actions/wallet/signTransaction
  • JSON-RPC Methods:

Examples

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);
// 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

<typedData, primaryType>(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)).

  • Docs: https://viem.sh/docs/actions/wallet/signTypedData
  • JSON-RPC Methods:

Examples

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!",
  },
});
// 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>

Switch the target chain in a wallet.

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.

waitForCallsStatus

(parameters) => Promise<{ atomic: boolean; capabilities?: {[key: string]: any; } | {[key: string]: any; }; chainId: number; id: string; receipts?: WalletCallReceipt<bigint, "success" | "reverted">[]; status: "pending" | "success" | "failure" | undefined; statusCode: number; version: string; }>

Waits for the status & receipts of a call bundle that was sent via sendCalls.

Example

import { createWalletClient, custom } from "viem";
import { mainnet } from "viem/chains";

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

const { receipts, status } = await waitForCallsStatus(client, { id: "0xdeadbeef" });

watchAsset

(args) => Promise<boolean>

Adds an EVM chain to the wallet.

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

<abi, functionName, args, chainOverride>(args) => Promise<`0x${string}`>

Executes a write function on a contract.

  • Docs: https://viem.sh/docs/contract/writeContract
  • Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/contracts_writing-to-contracts

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.

Examples

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],
});
// 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)

writeContractSync

<abi, functionName, args, chainOverride>(args) => Promise<TransactionReceipt>

Executes a write function on a contract synchronously. Returns the transaction receipt.

  • Docs: https://viem.sh/docs/contract/writeContract

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.

Example

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

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

params

OfframpParams

onProgress?

OnProgress

telemetryContext?

TelemetryContext

apiBaseUrl?

string

Returns

Promise<OfframpResult>