Blockend
HomeLive Demo
BlockEnd Labs
BlockEnd Labs
  • About BlockEnd
    • Overview
    • 🎯Thesis
    • 🧭Compass
    • 🌊LEX Protocol
  • ⚡Compass Widgets
    • Widget Pro
      • Install Widget Pro
      • Customise Widget Pro
    • Widget Lite
  • 👨‍💻Compass API
    • API Reference
      • Getting Started
      • Authentication
      • Fetching Quotes
      • Create Transaction
      • Get Raw Transaction To Execute
      • Check Transaction Status
      • Gasless Swaps
      • Type Definations
      • Get Supported Chains & Tokens
    • Quick Swap API
    • SDK
      • Getting Started
      • Configuration
      • Core Methods
        • getQuotes
        • Create Transaction
        • getNextTxn
        • Check Status
        • pollTransactionStatus
        • executeQuote
        • executeTransaction
      • Gasless Transactions
      • Tokens and Chains
    • Supported Chains
    • Liquidity Sources
  • Code Examples
    • EVM Swaps
    • EVM to SOL Bridge
    • SOLANA Swaps
    • Solana to EVM Bridge
  • Resources
    • Brand Assets
  • Troubleshooting
    • React issues
    • Next js issues
Powered by GitBook
On this page

Was this helpful?

  1. Compass API
  2. SDK
  3. Core Methods

getNextTxn

Retrieves the raw transaction data for the next pending step in the transaction sequence. The response format varies based on the blockchain network:

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:

  1. On-chain Transactions (txnType: "on-chain"):

    • Regular blockchain transactions that require gas fees

    • Used for standard token transfers and swaps

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

    // 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
    );
  3. Untyped Message Signing (txnType: "sign-untyped"):

    • Used for protocols like Meson.fi that require message signing

    • Supports cross-chain message verification

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

{
  "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

{
  "status": "success",
  "data": {
    "routeId": "01J2WB1NY6MD3F25CJTTB01D8F",
    "stepId": "01J2WB1NY64MKVCM8FM994WMZV",
    "networkType": "sol",
    "txnData": {
      "txnSol": {
        "data": "base64EncodedTransactionData...",
      }
    }
  }
}

Cosmos Chain Response

{
  "status": "success",
  "data": {
    "routeId": "01J2WB1NY6MD3F25CJTTB01D8F",
    "stepId": "01J2WB1NY64MKVCM8FM994WMZV",
    "networkType": "cosmos",
    "txnData": {
      "txnCosmos": {
        "data": "{"typeUrl":"/ibc.applications.trans"}",
        "value": "0",
        "gasLimit": "250000",
        "gasPrice": "0.025",
      }
    }
  }
}
PreviousCreate TransactionNextCheck Status

Last updated 2 months ago

Was this helpful?

👨‍💻
View full getNextTxn response example