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:
Creating task data using
getTaskData()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-sdkCore 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- AlwaysTaskType.GetTokenOutfor nowtaskData- Task data object depending on the task type
taskData for GetTokenOut Task -
taskData.depositTokenAddress- Address of token to deposittaskData.tokenInAmount- Amount to deposit (as bigint)taskData.outputTokenAddress- Address of desired output tokentaskData.minTokenOut- Minimum amount expected out (as bigint)taskData.destinationChainId- Target chain ID
Returns:
taskTypeString- EIP-712 type string for task datataskData- 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 tokenssponsorAddress- Address of the sponsor (user's wallet)taskTypeString- FromgetTaskData()resulttaskData- FromgetTaskData()result
Returns:
depositResult- Transaction hash and receiptintentResponse- Intent hash, signature, and digest
Last updated
Was this helpful?