Xirion SDK

TypeScript SDK for seamless integration with Xirion protocol on Solana

Installation

npm
npm install @xirion/sdk @solana/web3.js
yarn
yarn add @xirion/sdk @solana/web3.js

Initialization

Initialize SDK Client
import { XirionSDK } from '@xirion/sdk';
import { Connection, PublicKey } from '@solana/web3.js';

// Initialize connection
const connection = new Connection(
  'https://api.mainnet-beta.solana.com',
  'confirmed'
);

// Initialize SDK
const sdk = new XirionSDK({
  connection,
  wallet: yourWallet,
  programId: new PublicKey('XirionProgramId...'),
});

console.log('SDK initialized successfully');

Vault Interactions

Create Vault
// Create a new vault
const vault = await sdk.vault.create({
  authority: wallet.publicKey,
  signers: [signer1, signer2, signer3],
  requiredSignatures: 2,
  strategy: {
    type: 'yield',
    targetProtocols: ['marinade', 'solend'],
    riskLevel: 3,
  },
  withdrawalDelay: 86400, // 24 hours
});

console.log('Vault created:', vault.address.toString());
Deposit to Vault
// Deposit tokens to vault
const depositTx = await sdk.vault.deposit({
  vaultId: vault.address,
  amount: 1000000000, // 1 SOL in lamports
  tokenMint: NATIVE_MINT,
});

await depositTx.confirm();
console.log('Deposit successful');
Withdraw from Vault
// Initiate withdrawal
const withdrawTx = await sdk.vault.withdraw({
  vaultId: vault.address,
  amount: 500000000, // 0.5 SOL
  recipient: wallet.publicKey,
});

await withdrawTx.confirm();
console.log('Withdrawal initiated');

Swap Execution

Execute Oracle-Priced Swap
// Execute swap with oracle pricing
const swapTx = await sdk.swap.execute({
  fromMint: USDC_MINT,
  toMint: SOL_MINT,
  amount: 100000000, // 100 USDC
  slippage: 0.5, // 0.5% slippage tolerance
  oracleSource: 'pyth',
});

// Get swap quote before execution
const quote = await sdk.swap.getQuote({
  fromMint: USDC_MINT,
  toMint: SOL_MINT,
  amount: 100000000,
});

console.log('Expected output:', quote.expectedOutput);
console.log('Price impact:', quote.priceImpact);

await swapTx.confirm();
console.log('Swap executed successfully');

Yield Routing Queries

Get Optimal Yield Routes
// Query best yield opportunities
const routes = await sdk.yield.getOptimalRoutes({
  tokenMint: USDC_MINT,
  amount: 1000000000, // 1000 USDC
  riskLevel: 3,
});

routes.forEach(route => {
  console.log(`Protocol: ${route.protocol}`);
  console.log(`APY: ${route.apy}%`);
  console.log(`TVL: $${route.tvl}`);
  console.log(`Risk Score: ${route.riskScore}`);
});

// Execute yield deposit
const yieldTx = await sdk.yield.deposit({
  protocol: routes[0].protocol,
  amount: 1000000000,
  tokenMint: USDC_MINT,
});

await yieldTx.confirm();

Position Accounting

Get Position Data
// Get all positions for wallet
const positions = await sdk.positions.getAll(wallet.publicKey);

positions.forEach(position => {
  console.log(`Protocol: ${position.protocol}`);
  console.log(`Value: $${position.valueUsd}`);
  console.log(`PnL: ${position.pnl > 0 ? '+' : ''}${position.pnl}%`);
  console.log(`Entry Price: $${position.entryPrice}`);
  console.log(`Current Price: $${position.currentPrice}`);
});

// Get position history
const history = await sdk.positions.getHistory({
  walletAddress: wallet.publicKey,
  startTime: Date.now() - 30 * 24 * 60 * 60 * 1000, // 30 days
  endTime: Date.now(),
});

console.log('Total transactions:', history.length);

Analytics Endpoints

Read-Only Analytics
// Get vault metrics
const metrics = await sdk.analytics.getVaultMetrics(vault.address);

console.log('Total Value Locked:', metrics.tvl);
console.log('APY:', metrics.apy);
console.log('Sharpe Ratio:', metrics.sharpeRatio);
console.log('Active Positions:', metrics.positions);

// Get protocol statistics
const stats = await sdk.analytics.getProtocolStats();

console.log('Total Users:', stats.totalUsers);
console.log('Total Volume:', stats.totalVolume);
console.log('Total Fees:', stats.totalFees);

// Get historical performance
const performance = await sdk.analytics.getPerformance({
  vaultId: vault.address,
  period: '30d',
});

performance.forEach(point => {
  console.log(`Date: ${point.date}, Value: $${point.value}`);
});