MeeClient Methods
The MEE Client provides a set of powerful methods for executing transactions across multiple blockchains. This page serves as your guide to understanding and using these methods effectively.
Overview
The MEE Client extends a base HTTP client with specialized actions for cross-chain transactions. These methods enable you to:
- Get execution quotes - Find out how much a transaction will cost
- Execute cross-chain instructions - Run transactions on multiple chains
- Work with Fusion transactions - Enable EOA users to use advanced features
- Track transaction status - Monitor the progress of your transactions
- Query token information - Get details about supported payment tokens
Core Methods
getQuote
Gets a quote for executing a set of instructions across multiple chains.
const quote = await meeClient.getQuote({
instructions: [
// Instructions to execute on chain A
{
calls: [{ to: "0xContract", value: 0n, data: "0xCalldata" }],
chainId: chainA.id
},
// Instructions to execute on chain B
{
calls: [{ to: "0xContract", value: 0n, data: "0xCalldata" }],
chainId: chainB.id
}
],
feeToken: {
// Pay for execution with tokens on chain A
address: "0xTokenAddress",
chainId: chainA.id
}
});
console.log(`Execution price: ${quote.paymentInfo.tokenAmount}`);
executeQuote
Executes a quote obtained from getQuote
to run transactions across multiple chains.
const { hash } = await meeClient.executeQuote({
quote
});
console.log(`Transaction hash: ${hash}`);
getFusionQuote
Gets a quote for executing a Fusion transaction, which allows regular EOA wallets to perform complex operations without upgrading to smart accounts.
const fusionQuote = await meeClient.getFusionQuote({
// The on-chain trigger transaction
trigger: {
chainId: optimism.id,
tokenAddress: "0xUSDCAddress",
amount: parseUnits("1", 6)
},
// Instructions to execute after trigger
instructions: [
approveInstruction,
supplyInstruction
],
// Pay with these tokens
feeToken: {
address: "0xUSDCAddress",
chainId: optimism.id
}
});
Learn more about getFusionQuote
executeFusionQuote
Executes a Fusion quote obtained from getFusionQuote
.
const { hash } = await meeClient.executeFusionQuote({
fusionQuote
});
console.log(`Fusion transaction hash: ${hash}`);
Learn more about executeFusionQuote
getPaymentToken
Retrieves detailed information about a specific payment token on a given blockchain, including whether it supports ERC20Permit.
const tokenInfo = await meeClient.getPaymentToken({
chainId: 1, // Ethereum Mainnet
tokenAddress: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48" // USDC
});
console.log(`Token: ${tokenInfo.symbol}`);
console.log(`Decimals: ${tokenInfo.decimals}`);
console.log(`Permit Enabled: ${tokenInfo.permitEnabled}`);
Learn more about getPaymentToken
getSupertransactionReceipt
Retrieves the receipt for a supertransaction with details about its execution across multiple chains.
const receipt = await meeClient.getSupertransactionReceipt({
hash
});
console.log("Transaction status:", receipt.transactionStatus);
console.log("Explorer links:", receipt.explorerLinks);
Learn more about getSupertransactionReceipt
waitForSupertransactionReceipt
Waits for a supertransaction to complete and returns the receipt when all operations have reached a final state.
const receipt = await meeClient.waitForSupertransactionReceipt({
hash
});
if (receipt.transactionStatus === "MINED_SUCCESS") {
console.log("Transaction completed successfully!");
// Process transaction results
} else {
console.error("Transaction failed:", receipt.transactionStatus);
}
Learn more about waitForSupertransactionReceipt
Configuration
When creating a MEE Client, you can configure these parameters:
Parameter | Type | Description |
---|---|---|
url | Url | (Optional) URL for the MEE node service. Defaults to "https://network.biconomy.io/v1" |
pollingInterval | number | (Optional) Polling interval in milliseconds. Defaults to 1000 |
account | MultichainSmartAccount | The multichain smart account to use for transactions |
apiKey | string | (Optional) API key for production use with higher rate limits |
Complete Example
Here's a complete example demonstrating how to use multiple methods together:
import { createMeeClient, mcUSDC } from '@biconomy/abstractjs';
import { parseUnits } from 'viem';
// Create the MEE client
const meeClient = await createMeeClient({
account: multiChainAccount,
apiKey: "mee_your_api_key_here" // Optional for production use
});
// 1. Get a quote for cross-chain operations
const quote = await meeClient.getQuote({
instructions: [
// Transfer USDC on Optimism
{
calls: [{
to: "0xUSDCAddress",
data: encodeTransferFunction("0xRecipient", parseUnits("10", 6))
}],
chainId: optimism.id
},
// Deploy a contract on Base
{
calls: [{
data: contractDeploymentBytecode
}],
chainId: base.id
}
],
feeToken: {
address: mcUSDC.addressOn(optimism.id),
chainId: optimism.id
}
});
// 2. Execute the quote
const { hash } = await meeClient.executeQuote({ quote });
console.log(`Transaction submitted with hash: ${hash}`);
// 3. Wait for transaction receipt
const receipt = await meeClient.getSupertransactionReceipt({ hash });
console.log("Transaction completed with status:", receipt.transactionStatus);
// Check individual user operations
receipt.userOps.forEach((userOp, i) => {
console.log(`Operation ${i} on chain ${userOp.chainId}: ${userOp.executionStatus}`);
});
// Alternative: Use waitForSupertransactionReceipt to automatically wait for completion
// const receipt = await meeClient.waitForSupertransactionReceipt({ hash });
// console.log("All operations completed with status:", receipt.transactionStatus);
Type Definitions
MeeClient
type MeeClient = BaseMeeClient & {
getQuote: (params: GetQuoteParams) => Promise<GetQuotePayload>
executeQuote: (params: SignQuoteParams) => Promise<ExecuteSignedQuotePayload>
getFusionQuote: (params: GetFusionQuoteParams) => Promise<GetFusionQuotePayload>
executeFusionQuote: (params: ExecuteFusionQuoteParams) => Promise<ExecuteFusionQuotePayload>
getPaymentToken: (params: GetPaymentTokenParams) => Promise<PaymentToken>
getSupertransactionReceipt: (params: GetSupertransactionReceiptParams) => Promise<GetSupertransactionReceiptPayload>
waitForSupertransactionReceipt: (params: { hash: Hex }) => Promise<GetSupertransactionReceiptPayload>
}