@ponderfinance/sdk
v0.1.46
Published
SDK for interacting with Ponder DEX
Downloads
3,070
Readme
Ponder SDK
TypeScript SDK for interacting with the Ponder DEX protocol on Bitkub Chain.
Installation
npm install @ponderfinance/sdk
# or
yarn add @ponderfinance/sdk
Quick Start
import { PonderSDK } from '@ponderfinance/sdk'
import { createPublicClient, createWalletClient, http, custom } from 'viem'
// Initialize SDK
const sdk = new PonderSDK({
chainId: 96, // Bitkub Chain
// Optional: provide your own clients
publicClient,
walletClient
})
Core Features
Factory Operations
// Get pair address
const pairAddress = await sdk.factory.getPair(tokenA, tokenB)
// Create new pair
const result = await sdk.factory.createPair({
tokenA: '0x...',
tokenB: '0x...'
})
const { pairAddress, token0, token1 } = await result.wait()
Router Operations
// Add liquidity
await sdk.router.addLiquidity({
tokenA: '0x...',
tokenB: '0x...',
amountADesired: parseEther('1'),
amountBDesired: parseEther('1'),
amountAMin: parseEther('0.95'),
amountBMin: parseEther('0.95'),
to: userAddress,
deadline: BigInt(Math.floor(Date.now() / 1000) + 1200) // 20 minutes
})
// Get swap amounts
const amountsOut = await sdk.router.getAmountsOut(
parseEther('1'),
[tokenA, tokenB]
)
// Swap tokens
await sdk.router.swapExactTokensForTokens({
amountIn: parseEther('1'),
amountOutMin: parseEther('0.95'),
path: [tokenA, tokenB],
to: userAddress,
deadline: BigInt(Math.floor(Date.now() / 1000) + 1200)
})
Pair Operations
const pair = sdk.getPair(pairAddress)
// Get reserves
const { reserve0, reserve1, blockTimestampLast } = await pair.getReserves()
// Add liquidity
await pair.mint(userAddress)
// Remove liquidity
await pair.burn(userAddress)
MasterChef Operations
// Get pool info
const poolInfo = await sdk.masterChef.poolInfo(0n)
const userInfo = await sdk.masterChef.userInfo(0n, userAddress)
// Get pending rewards
const pending = await sdk.masterChef.pendingPonder(0n, userAddress)
// Stake LP tokens
await sdk.masterChef.deposit(0n, parseEther('1'))
// Unstake LP tokens
await sdk.masterChef.withdraw(0n, parseEther('1'))
// Boost rewards with PONDER tokens
await sdk.masterChef.boostStake(0n, parseEther('100'))
React/Next.js Integration
import { usePublicClient, useWalletClient } from 'wagmi'
import { PonderSDK } from '@ponderfinance/sdk'
import { useMemo } from 'react'
function usePonderSDK() {
const publicClient = usePublicClient()
const { data: walletClient } = useWalletClient()
const sdk = useMemo(() => {
if (!publicClient) return null
return new PonderSDK({
chainId: 96,
publicClient,
walletClient: walletClient ?? undefined
})
}, [publicClient, walletClient])
return sdk
}
// Usage in component
function SwapComponent() {
const sdk = usePonderSDK()
const handleSwap = async () => {
if (!sdk) return
const amountsOut = await sdk.router.getAmountsOut(
parseEther('1'),
[tokenA, tokenB]
)
// Execute swap...
}
return <button onClick={handleSwap}>Swap</button>
}
Error Handling
try {
await sdk.router.swapExactTokensForTokens({
// ... params
})
} catch (error) {
if (error.message.includes('Wallet client required')) {
console.error('Please connect your wallet')
} else if (error.message.includes('INSUFFICIENT_OUTPUT_AMOUNT')) {
console.error('Slippage too high')
} else {
console.error('Swap failed:', error)
}
}
Supported Chains
- Bitkub Chain (ChainID: 96)
- Bitkub Testnet (ChainID: 25925)
API Reference
See API Documentation for detailed information about all available methods and types.
TypeScript Support
The SDK is written in TypeScript and provides full type definitions for all exports.
Contributing
Contributions are welcome! Please read our Contributing Guide for details on our code of conduct and the process for submitting pull requests.
License
MIT Licensed. See LICENSE for more details.