UNPKG

@ponderfinance/sdk

Version:

SDK for interacting with Ponder DEX and 55555 Launcher

191 lines (142 loc) 4.13 kB
# Ponder SDK TypeScript SDK for interacting with the Ponder DEX protocol on Bitkub Chain. ## Installation ```bash npm install @ponderfinance/sdk # or yarn add @ponderfinance/sdk ``` ## Quick Start ```typescript 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 ```typescript // 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 ```typescript // 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 ```typescript 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 ```typescript // 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 ```typescript 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 ```typescript 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](./docs/API.md) 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](./CONTRIBUTING.md) for details on our code of conduct and the process for submitting pull requests. ## License MIT Licensed. See [LICENSE](./LICENSE) for more details.