Retrieves the raw transaction data for the next pending step in the transaction sequence. The response format varies based on the blockchain network:
Copy interface TransactionDataParams {
routeId: string; // Route ID from createTransaction
stepId: string; // Step ID from the transaction steps array
}
//Example implementation
const nextTxn = await getNextTxn({
routeId: transaction.routeId,
stepId: transaction.steps[0].id,
});
// Example Response (shortened)
{
"status": "success",
"data": {
"routeId": "01J2WB1NY6MD3F25CJTTB01D8F",
"stepId": "01J2WB1NY64MKVCM8FM994WMZV",
"networkType": "evm",
"txnData": {
"txnType": "on-chain" | "sign-typed" | "sign-untyped"
"txnEvm": {
"to": "0x...",
"value": "420000000000000000",
// ... other transaction details
}
}
}
}
Transaction Types
The SDK supports multiple transaction types that are automatically handled based on the protocol and requirements:
On-chain Transactions (txnType: "on-chain"
):
Regular blockchain transactions that require gas fees
Used for standard token transfers and swaps
Copy // Example response for on-chain transaction
{
"txnType": "on-chain",
"txnEvm": {
"from": "0x17e7c3DD600529F34eFA1310f00996709FfA8d5c",
"to": "0x1234567890abcdef1234567890abcdef12345678",
"value": "420000000000000000",
"data": "0x095ea7b3...",
"gasPrice": "30000000000",
"gasLimit": "250000"
}
}
// Execute using wagmi/viem
import { getWalletClient } from "wagmi";
const client = await getWalletClient();
const hash = await client.sendTransaction({
to: txnEvm.to as `0x${string}`,
data: txnEvm.data as `0x${string}`,
value: BigInt(txnEvm.value),
gas: BigInt(txnEvm.gasLimit),
gasPrice: BigInt(txnEvm.gasPrice),
});
// Execute using ethers.js
import { BrowserProvider } from "ethers";
const provider = new BrowserProvider(window.ethereum);
const signer = await provider.getSigner();
const transaction = await signer.sendTransaction({
from: txnEvm.from,
to: txnEvm.to,
data: txnEvm.data,
gasLimit: txnEvm.gasLimit,
gasPrice: txnEvm.gasPrice,
value: txnEvm.value,
});
const hash = transaction.hash;
EIP-712 Typed Data Signing (txnType: "sign-typed"
):
Implements EIP-712 for structured data signing on EVM chains
Used for permit-style approvals and meta-transactions (for gasless)
Copy // Example response for typed data signing
{
"txnType": "sign-typed",
"txnEvm": {
"domain": {
"name": "Permit2",
"version": "1",
"chainId": 1,
"verifyingContract": "0x000000000022D473030F116dDEE9F6B43aC78BA3"
},
"types": {
"PermitSingle": [
{ "name": "details", "type": "PermitDetails" },
{ "name": "spender", "type": "address" },
{ "name": "sigDeadline", "type": "uint256" }
],
"PermitDetails": [
{ "name": "token", "type": "address" },
{ "name": "amount", "type": "uint160" },
{ "name": "expiration", "type": "uint48" },
{ "name": "nonce", "type": "uint48" }
]
},
"message": {
"details": {
"token": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"amount": "1461501637330902918203684832716283019655932542975",
"expiration": "1747836789",
"nonce": "0"
},
"spender": "0x1234567890123456789012345678901234567890",
"sigDeadline": "1747836789"
},
"primaryType": "PermitSingle"
}
}
// Execute using wagmi/viem
import { getWalletClient } from "wagmi";
const client = await getWalletClient();
const signature = await client.signTypedData({
account, // userWalletAddress
domain: txnEvm.domain,
types: txnEvm.types,
primaryType: txnEvm.primaryType,
message: txnEvm.message,
});
// Execute using ethers.js
import { BrowserProvider } from "ethers";
const provider = new BrowserProvider(window.ethereum);
const signer = await provider.getSigner();
// Remove EIP712Domain from types before signing
delete txnEvm.types.EIP712Domain;
const signature = await signer.signTypedData(
txnEvm.domain,
{
[txnEvm.primaryType]: txnEvm.types[txnEvm.primaryType],
...txnEvm.types,
},
txnEvm.message
);
Untyped Message Signing (txnType: "sign-untyped"
):
Used for protocols like Meson.fi that require message signing
Supports cross-chain message verification
Copy // Example response for untyped message signing
{
"txnType": "sign-untyped",
"txnEvm": {
"message": "0x1901c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20001f4fc3",
}
}
// Execute using wagmi/viem
import { getWalletClient } from "wagmi";
const client = await getWalletClient();
const signature = await client.request({
method: "personal_sign",
params: [txnEvm.message, account],
});
// Execute using ethers.js
import { BrowserProvider } from "ethers";
const provider = new BrowserProvider(window.ethereum);
const signer = await provider.getSigner();
const signature = await provider.send("personal_sign", [
txnEvm.message,
account,
]);
The transaction type is automatically determined based on the quote and protocol being used. The SDK handles all the necessary signing logic internally, including:
Proper formatting of typed and untyped data
Chain-specific signature requirements
Protocol-specific message formatting
Gasless transaction handling
Transaction Data Response Examples
Send txnEvm or txnSol or txnCosmos to the appropriate wallet/provider based on the networkType and get the transaction hash to monitor the status of the transaction.
EVM Chain Response
Copy {
"status": "success",
"data": {
"routeId": "01J2WB1NY6MD3F25CJTTB01D8F",
"stepId": "01J2WB1NY64MKVCM8FM994WMZV",
"networkType": "evm",
"txnData": {
"txnEvm": {
"from": "0x17e7c3DD600529F34eFA1310f00996709FfA8d5c",
"to": "0x1234567890abcdef1234567890abcdef12345678",
"value": "420000000000000000",
"data": "0x095ea7b3...",
"gasPrice": "30000000000",
"gasLimit": "250000"
}
}
}
}
Solana Chain Response
Copy {
"status": "success",
"data": {
"routeId": "01J2WB1NY6MD3F25CJTTB01D8F",
"stepId": "01J2WB1NY64MKVCM8FM994WMZV",
"networkType": "sol",
"txnData": {
"txnSol": {
"data": "base64EncodedTransactionData...",
}
}
}
}
Cosmos Chain Response
Copy {
"status": "success",
"data": {
"routeId": "01J2WB1NY6MD3F25CJTTB01D8F",
"stepId": "01J2WB1NY64MKVCM8FM994WMZV",
"networkType": "cosmos",
"txnData": {
"txnCosmos": {
"data": "{"typeUrl":"/ibc.applications.trans"}",
"value": "0",
"gasLimit": "250000",
"gasPrice": "0.025",
}
}
}
}
Last updated 2 months ago