DeFi

Class for managing DeFi operations including staking, Ociswap liquidity pools, swaps, and advanced features like flash loans and hooked pools.

Constructor

new DeFi(
  transactionBuilder: RadixTransactionBuilder,
  gatewayClient: RadixGatewayClient,
  networkId: number
)

Staking Operations

stakeXRD()

Stake XRD with validators.

async stakeXRD(
  options: StakeXRDOptions,
  wallet: RadixWallet,
  currentEpoch: number
): Promise<string>

Parameters:

interface StakeXRDOptions {
  ownerAddress: string;
  validatorAddress: string;
  amount: number | string;
}

Example:

const txHash = await defi.stakeXRD({
  ownerAddress: "account_tdx_2_1...",
  validatorAddress: "validator_tdx_2_1s...",
  amount: "1000"
}, wallet, currentEpoch);

unstakeXRD()

Unstake XRD from validators.

async unstakeXRD(
  options: UnstakeXRDOptions,
  wallet: RadixWallet,
  currentEpoch: number
): Promise<string>

claimXRD()

Claim unstaked XRD from validators using stake claim NFTs.

async claimXRD(
  options: ClaimXRDOptions,
  wallet: RadixWallet,
  currentEpoch: number
): Promise<string>

Ociswap Pool Operations

createTwoResourcePool()

Create a new two-resource pool using Ociswap Pool V2 with advanced features.

async createTwoResourcePool(
  options: CreatePoolOptions,
  wallet: RadixWallet,
  currentEpoch: number
): Promise<{ txHash: string; poolAddress?: string }>

Parameters:

interface CreatePoolOptions {
  ownerAddress: string;
  resourceAddress1: string;
  resourceAddress2: string;
  amount1: number | string;
  amount2: number | string;
  feeTier?: 1 | 5 | 30 | 100; // 0.01%, 0.05%, 0.3%, 1%
  assetRatio?: [number, number]; // e.g., [20, 80] for imbalanced pools
  hookAddress?: string; // For hooked pools
  poolName?: string;
  poolSymbol?: string;
}

Example:

// Standard balanced pool
const result = await defi.createTwoResourcePool({
  ownerAddress: "account_tdx_2_1...",
  resourceAddress1: "resource_tdx_2_1t...",
  resourceAddress2: "resource_tdx_2_1n...",
  amount1: "10000",
  amount2: "20000",
  feeTier: 30, // 0.3% fee
  poolName: "XRD-TOKEN Pool",
  poolSymbol: "XRD-TKN"
}, wallet, currentEpoch);

// Imbalanced pool (80/20)
const imbalancedPool = await defi.createTwoResourcePool({
  ownerAddress: "account_tdx_2_1...",
  resourceAddress1: "resource_tdx_2_1t...",
  resourceAddress2: "resource_tdx_2_1n...",
  amount1: "8000",
  amount2: "2000",
  feeTier: 30,
  assetRatio: [80, 20]
}, wallet, currentEpoch);

// Hooked pool with custom logic
const hookedPool = await defi.createTwoResourcePool({
  ownerAddress: "account_tdx_2_1...",
  resourceAddress1: "resource_tdx_2_1t...",
  resourceAddress2: "resource_tdx_2_1n...",
  amount1: "10000",
  amount2: "20000",
  feeTier: 30,
  hookAddress: "component_tdx_2_1hook..."
}, wallet, currentEpoch);

Ociswap Availability: Pool creation is only available on Radix Mainnet. For Stokenet testing, deploy your own pool blueprint.

addLiquidity()

Add liquidity to Ociswap pools with automatic ratio calculation.

async addLiquidity(
  options: AddLiquidityOptions,
  wallet: RadixWallet,
  currentEpoch: number
): Promise<string>

Parameters:

interface AddLiquidityOptions {
  ownerAddress: string;
  poolAddress: string;
  amounts: [number | string, number | string];
  minAmounts?: [number | string, number | string]; // Slippage protection
}

Example:

const txHash = await defi.addLiquidity({
  ownerAddress: "account_tdx_2_1...",
  poolAddress: "component_tdx_2_1c...",
  amounts: ["1000", "2000"],
  minAmounts: ["990", "1980"] // Allow 1% slippage
}, wallet, currentEpoch);

removeLiquidity()

Remove liquidity from Ociswap pools by burning LP tokens.

async removeLiquidity(
  options: RemoveLiquidityOptions,
  wallet: RadixWallet,
  currentEpoch: number
): Promise<string>

Parameters:

interface RemoveLiquidityOptions {
  ownerAddress: string;
  poolAddress: string;
  amountLP: number | string;
  minAmounts?: [number | string, number | string]; // Slippage protection
}

Example:

const txHash = await defi.removeLiquidity({
  ownerAddress: "account_tdx_2_1...",
  poolAddress: "component_tdx_2_1c...",
  amountLP: "100",
  minAmounts: ["980", "1960"] // Minimum expected outputs
}, wallet, currentEpoch);

swapTokens()

Swap tokens through Ociswap pools with slippage protection.

async swapTokens(
  options: SwapTokensOptions,
  wallet: RadixWallet,
  currentEpoch: number
): Promise<string>

Parameters:

interface SwapTokensOptions {
  ownerAddress: string;
  poolAddress: string;
  fromResourceAddress: string;
  toResourceAddress: string;
  amountIn: number | string;
  minAmountOut?: number | string; // Slippage protection
}

Example:

const txHash = await defi.swapTokens({
  ownerAddress: "account_tdx_2_1...",
  poolAddress: "component_tdx_2_1c...",
  fromResourceAddress: "resource_tdx_2_1t...",
  toResourceAddress: "resource_tdx_2_1n...",
  amountIn: "100",
  minAmountOut: "95" // Max 5% slippage
}, wallet, currentEpoch);

Advanced DeFi Features

executeFlashLoan()

Execute flash loans from Ociswap Pool V2.

async executeFlashLoan(
  options: FlashLoanOptions,
  wallet: RadixWallet,
  currentEpoch: number
): Promise<string>

Parameters:

interface FlashLoanOptions {
  ownerAddress: string;
  poolAddress: string;
  resourceAddress: string;
  amount: number | string;
  callbackComponentAddress: string;
  callbackData?: string;
}

Example:

const txHash = await defi.executeFlashLoan({
  ownerAddress: "account_tdx_2_1...",
  poolAddress: "component_tdx_2_1c...",
  resourceAddress: "resource_tdx_2_1t...",
  amount: "10000",
  callbackComponentAddress: "component_tdx_2_1callback...",
  callbackData: "0x1234..." // Optional callback data
}, wallet, currentEpoch);

Pool Information

getPoolInfo()

Get enhanced information about Ociswap Pool V2 pools.

async getPoolInfo(poolAddress: string): Promise<PoolInfo>

Returns:

interface PoolInfo {
  poolAddress: string;
  resource1: string;
  resource2: string;
  reserves: [string, string];
  totalSupply: string;
  feeTier: number;
  assetRatio?: [number, number];
  hookAddress?: string;
  poolType: "standard" | "precision" | "hooked";
  autoCompounding: boolean;
  flashLoansEnabled: boolean;
}

Example:

const poolInfo = await defi.getPoolInfo("component_tdx_2_1c...");
console.log("Pool type:", poolInfo.poolType);
console.log("Reserves:", poolInfo.reserves);
console.log("Fee tier:", poolInfo.feeTier / 100, "%");
console.log("Flash loans enabled:", poolInfo.flashLoansEnabled);

findPools()

Find available pools for a resource pair.

async findPools(
  resource1: string,
  resource2: string
): Promise<string[]>

Example:

const pools = await defi.findPools(
  "resource_tdx_2_1t...",
  "resource_tdx_2_1n..."
);
console.log("Available pools:", pools);

Ociswap Pool V2 Features:

  • Multiple fee tiers: 0.01%, 0.05%, 0.3%, 1%
  • Imbalanced pools: Custom asset ratios (e.g., 80/20)
  • Hooked pools: Custom logic via hook components
  • Flash loans: Borrow and repay in single transaction
  • Auto-compounding: Automatic fee reinvestment
  • NFT LP positions: Enhanced position tracking

Network Limitations: Ociswap is currently only available on Radix Mainnet. For Stokenet testing, deploy your own pool blueprint or use SimplePool.