@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.
- Docs: https://viem.sh/docs/actions/wallet/addChain
- JSON-RPC Methods:
eth_addEthereumChain
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.
- Docs: https://viem.sh/docs/actions/wallet/getCallsStatus
- JSON-RPC Methods:
wallet_getCallsStatus
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).
- Docs: https://viem.sh/docs/actions/wallet/getCapabilities
- JSON-RPC Methods:
wallet_getCapabilities
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.
- Docs: https://viem.sh/docs/actions/wallet/getPermissions
- JSON-RPC Methods:
wallet_getPermissions
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.
- Docs: https://viem.sh/docs/actions/wallet/requestPermissions
- JSON-RPC Methods:
wallet_requestPermissions
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
- Docs: https://viem.sh/docs/actions/wallet/sendRawTransaction
- JSON-RPC Method:
eth_sendRawTransaction
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.
- Docs: https://viem.sh/docs/actions/wallet/sendRawTransactionSync
- JSON-RPC Method:
eth_sendRawTransactionSync
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:
- JSON-RPC Accounts:
eth_sendTransaction - Local Accounts:
eth_sendRawTransaction
- JSON-RPC Accounts:
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:
- JSON-RPC Accounts:
eth_sendTransaction - Local Accounts:
eth_sendRawTransaction
- JSON-RPC Accounts:
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.
- Docs: https://viem.sh/docs/actions/wallet/showCallsStatus
- JSON-RPC Methods:
wallet_showCallsStatus
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:
- use
verifyAuthorizationto verify the signed Authorization object, - use
recoverAuthorizationAddressto recover the signing address from the signed 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 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.
- JSON-RPC Accounts:
With the calculated signature, you can:
- use
verifyMessageto verify the signature, - use
recoverMessageAddressto recover the signing address from a signature.
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:
- JSON-RPC Accounts:
eth_signTransaction - Local Accounts: Signs locally. No JSON-RPC request.
- JSON-RPC Accounts:
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:
- JSON-RPC Accounts:
eth_signTypedData_v4 - Local Accounts: Signs locally. No JSON-RPC request.
- JSON-RPC Accounts:
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.
- Docs: https://viem.sh/docs/actions/wallet/switchChain
- JSON-RPC Methods:
eth_switchEthereumChain
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.
- Docs: https://viem.sh/docs/actions/wallet/waitForCallsStatus
- JSON-RPC Methods:
wallet_getCallsStatus
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.
- Docs: https://viem.sh/docs/actions/wallet/watchAsset
- JSON-RPC Methods:
eth_switchEthereumChain
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>