Integration Guide

This docs give a brief about the how to integrate Epoch's API into your dapp

Overview

This guide covers the specific integration for Epoch Intents:

  1. Creating task data using getTaskData()

  2. Performing deposit and register intent in one operation using depositAndRegisterIntent()

Prerequisites

  • Node.js >= 18

  • Backend API endpoint - http://localhost:3000 (Will share the endpoint)

  • Wallet connected via Viem

Installation

npm install @epoch-protocol/epoch-compact-sdk

Core Integration Pattern

1. Initialize the SDK

import { EpochIntentSDK } from '@epoch-intents/compact-sdk';
import { useWalletClient } from 'viem';

function MyComponent() {
  const { data: walletClient } = useWalletClient();
  const publicClient = usePublicClient();
  const { address } = useAccount();
  const chainId = useChainId();

  // Initialize SDK
  const epochSdk = new EpochIntentSDK({
    apiBaseUrl: '<http://localhost:3000>',
    walletClient: walletClient as any,
  });
}

2. Create Task Data

// Define your token swap parameters
const depositTokenAddress = '0xc04d2869665Be874881133943523723Be5782720';
const outputTokenAddress = '0x7946dd86eE310D0aC16804A37787289Fa5b88A8A';
const inputAmount = '1';
const outputAmount = '111';
const decimals = 18;

// Get task data from SDK
const { taskTypeString, taskData } = await epochSdk.getTaskData({
  taskType: TaskType.GetTokenOut,
  taskData: {
    isNative: false,
    depositTokenAddress,
    tokenInAmount: parseUnits(inputAmount || '0', decimals ?? 18),
    outputTokenAddress,
    minTokenOut: parseUnits(outputAmount || '0', decimals ?? 18),
    destinationChainId: chainId,
  },
});

console.log('taskTypeString:', taskTypeString);
console.log('taskData:', taskData);

3. Execute Deposit + Register Intent

// Execute the complete flow
const data = await epochSdk.depositAndRegisterIntent({
  isNative: false, // or true for native tokens
  sponsorAddress: address as `0x${string}`,
  taskTypeString,
  taskData,
});

console.log('Transaction result:', data);

API Reference

EpochIntentSDK.getTaskData()

Creates task data for token swap operations.

const { taskTypeString, taskData } = await epochSdk.getTaskData({
  taskType: TaskType.GetTokenOut,
  taskData: {
    isNative: boolean,
    depositTokenAddress: string,
    tokenInAmount: bigint,
    outputTokenAddress: string,
    minTokenOut: bigint,
    destinationChainId: number,
  },
});

Parameters:

  • taskType - Always TaskType.GetTokenOut for now

  • taskData - Task data object depending on the task type

taskData for GetTokenOut Task -

  • taskData.depositTokenAddress - Address of token to deposit

  • taskData.tokenInAmount - Amount to deposit (as bigint)

  • taskData.outputTokenAddress - Address of desired output token

  • taskData.minTokenOut - Minimum amount expected out (as bigint)

  • taskData.destinationChainId - Target chain ID

Returns:

  • taskTypeString - EIP-712 type string for task data

  • taskData - Task data object with token swap parameters

EpochIntentSDK.depositAndRegisterIntent()

Performs deposit and register intent in one operation.

const result = await epochSdk.depositAndRegisterIntent({
  isNative: boolean,
  sponsorAddress: `0x${string}`,
  taskTypeString: string,
  taskData: object,
});

Parameters:

  • isNative - Whether depositing native tokens

  • sponsorAddress - Address of the sponsor (user's wallet)

  • taskTypeString - From getTaskData() result

  • taskData - From getTaskData() result

Returns:

  • depositResult - Transaction hash and receipt

  • intentResponse - Intent hash, signature, and digest

Last updated

Was this helpful?