@pyefi/sdk 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +81 -0
- package/dist/apy-store-CNq9A4Xc.d.ts +225 -0
- package/dist/chunk-5XHGVQ3Z.js +3626 -0
- package/dist/chunk-5XHGVQ3Z.js.map +1 -0
- package/dist/index.d.ts +317 -0
- package/dist/index.js +1340 -0
- package/dist/index.js.map +1 -0
- package/dist/react.d.ts +53 -0
- package/dist/react.js +415 -0
- package/dist/react.js.map +1 -0
- package/package.json +87 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/constants/fees.ts","../src/lib/fetch-lockup-metrics.ts","../src/lib/liquidity.ts","../src/lib/estimate-rt.ts","../src/lib/execute-stake-deposit.ts","../src/lib/execute-deposit-and-sell.ts","../src/lib/execute-swap.ts","../src/lib/execute-rt-sell.ts","../src/lib/execute-limit-order.ts","../src/lib/execute-cancel-order.ts","../src/lib/execute-redeem.ts"],"sourcesContent":["import { PublicKey } from \"@solana/web3.js\";\n\n/**\n * Pye protocol taker fee charged on RT sales, expressed in basis points.\n * 50 bps = 0.50%. Applied to the SOL out of the Manifest swap.\n */\nexport const PYE_TRADING_FEE_BPS = 50;\n\n/**\n * Destination for taker-fee proceeds. Fees are transferred as wSOL to the\n * treasury's wSOL ATA; the treasury unwraps out-of-band.\n */\nexport const PYE_TREASURY_WALLET = new PublicKey(\n \"D3LKi2CUFmudj4fT8izGeBky84oYPZY7UWwvcLUhh2ch\",\n);\n\n/** Gross SOL out × feeBps/10_000, rounded to integer lamports. */\nexport function calculateFeeLamports(expectedSolOut: number): bigint {\n return BigInt(\n Math.round((expectedSolOut * 1e9 * PYE_TRADING_FEE_BPS) / 10_000),\n );\n}\n\n/** Apply fee deduction to a gross SOL quote to get the user-facing net. */\nexport function applyTradingFee(grossSolOut: number): number {\n return grossSolOut * (1 - PYE_TRADING_FEE_BPS / 10_000);\n}\n","import { createClient, type SupabaseClient } from \"@supabase/supabase-js\";\nimport { getPyeConfig } from \"../config\";\n\nexport interface BondPayment {\n epoch: number;\n amount: number;\n}\n\nexport interface RewardBreakdown {\n epoch: number;\n staking: number;\n mev: number;\n block: number;\n}\n\nexport interface TvlSnapshot {\n date: string;\n sol: number;\n}\n\nexport interface LockupMetrics {\n depositCap: string;\n depositCapSol: number;\n tvl: string;\n tvlSol: number;\n totalRewards: string;\n apy90d: string | null;\n inflationRewards: string;\n mevRewards: string;\n blockRewards: string;\n payments: BondPayment[];\n rewardBreakdown: RewardBreakdown[];\n tvlHistory: TvlSnapshot[];\n hasChartData: boolean;\n fetchedAt: number;\n}\n\nconst LAMPORTS_PER_SOL = 1_000_000_000;\n\nfunction formatBps(bps: number): string {\n const pct = bps / 100;\n return pct.toLocaleString(\"en-US\", {\n minimumFractionDigits: 0,\n maximumFractionDigits: 2,\n }) + \"%\";\n}\n\nfunction formatSol(lamports: number): string {\n const sol = lamports / LAMPORTS_PER_SOL;\n return sol.toLocaleString(\"en-US\", {\n minimumFractionDigits: 2,\n maximumFractionDigits: 4,\n }) + \" SOL\";\n}\n\nexport async function fetchLockupMetrics(\n bondPubkey: string,\n opts?: { includeChartData?: boolean; supabaseClient?: SupabaseClient },\n): Promise<LockupMetrics> {\n const supabase = opts?.supabaseClient ?? (() => {\n const config = getPyeConfig();\n return createClient(config.supabaseUrl, config.supabaseAnonKey);\n })();\n\n const includeCharts = opts?.includeChartData ?? false;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const noData = Promise.resolve({ data: null }) as any;\n\n const bondRes = await supabase\n .from(\"solo_validator_bonds\")\n .select(\"tvl_cap, inflation_bps, mev_tips_bps, block_rewards_bps, validator_vote_account\")\n .eq(\"pubkey\", bondPubkey)\n .single();\n\n const voteAccount = bondRes.data?.validator_vote_account as string | null;\n\n const [tvlRes, paymentsRes, rewardsRes, tvlHistoryRes, apyRes] = await Promise.all([\n supabase\n .from(\"tvl_snapshots\")\n .select(\"sol\")\n .eq(\"bond\", bondPubkey)\n .order(\"created_at\", { ascending: false })\n .limit(1)\n .single(),\n\n supabase\n .from(\"bond_payments\")\n .select(\"epoch, amount\")\n .eq(\"bond_pubkey\", bondPubkey)\n .order(\"epoch\", { ascending: true }),\n\n includeCharts\n ? supabase\n .from(\"bond_rewards\")\n .select(\"epoch, expected_inflation_rewards, expected_mev_rewards, expected_block_rewards\")\n .eq(\"bond_pubkey\", bondPubkey)\n .order(\"epoch\", { ascending: true })\n : noData,\n\n includeCharts\n ? supabase\n .from(\"tvl_snapshots\")\n .select(\"created_at, sol\")\n .eq(\"bond\", bondPubkey)\n .order(\"created_at\", { ascending: true })\n : noData,\n\n voteAccount\n ? supabase\n .from(\"stakewiz_apy\")\n .select(\"apy\")\n .eq(\"vote_account\", voteAccount)\n .order(\"updated_at\", { ascending: false })\n .limit(1)\n .single()\n : noData,\n ]);\n\n let depositCap = \"No Cap\";\n if (bondRes.data?.tvl_cap && bondRes.data.tvl_cap > 0) {\n const cap = Number(bondRes.data.tvl_cap);\n depositCap = cap.toLocaleString(\"en-US\", {\n minimumFractionDigits: 2,\n maximumFractionDigits: 4,\n }) + \" SOL\";\n }\n\n let tvl = \"\\u2014\";\n if (tvlRes.data?.sol != null) {\n const solVal = parseFloat(tvlRes.data.sol);\n tvl = solVal.toLocaleString(\"en-US\", {\n minimumFractionDigits: 2,\n maximumFractionDigits: 4,\n }) + \" SOL\";\n }\n\n const inflationBps = Number(bondRes.data?.inflation_bps ?? 0);\n const mevTipsBps = Number(bondRes.data?.mev_tips_bps ?? 0);\n const blockRewardsBps = Number(bondRes.data?.block_rewards_bps ?? 0);\n\n const payments: BondPayment[] = [];\n let totalPaymentLamports = 0;\n if (paymentsRes.data) {\n for (const row of paymentsRes.data) {\n const amount = Number(row.amount ?? 0);\n payments.push({ epoch: Number(row.epoch), amount });\n totalPaymentLamports += amount;\n }\n }\n\n const rewardBreakdown: RewardBreakdown[] = [];\n let totalRewardLamports = 0;\n if (rewardsRes.data) {\n for (const row of rewardsRes.data) {\n const inflation = Number(row.expected_inflation_rewards ?? 0);\n const mev = Number(row.expected_mev_rewards ?? 0);\n const block = Number(row.expected_block_rewards ?? 0);\n totalRewardLamports += inflation + mev + block;\n rewardBreakdown.push({\n epoch: Number(row.epoch),\n staking: inflation / LAMPORTS_PER_SOL,\n mev: mev / LAMPORTS_PER_SOL,\n block: block / LAMPORTS_PER_SOL,\n });\n }\n }\n\n const tvlHistory: TvlSnapshot[] = [];\n if (tvlHistoryRes.data) {\n const byDay = new Map<string, number>();\n for (const row of tvlHistoryRes.data) {\n const date = (row.created_at as string).slice(0, 10);\n byDay.set(date, parseFloat(row.sol ?? \"0\"));\n }\n for (const [date, sol] of byDay) {\n tvlHistory.push({ date, sol });\n }\n }\n\n const depositCapSol = Number(bondRes.data?.tvl_cap ?? 0);\n const tvlSol = parseFloat(tvlRes.data?.sol ?? \"0\");\n\n let apy90d: string | null = null;\n if (apyRes.data?.apy != null) {\n const pct = Number(apyRes.data.apy);\n apy90d = pct.toFixed(2) + \"%\";\n }\n\n return {\n depositCap,\n depositCapSol,\n tvl,\n tvlSol,\n totalRewards: formatSol(totalRewardLamports),\n apy90d,\n inflationRewards: formatBps(10_000 - inflationBps),\n mevRewards: formatBps(10_000 - mevTipsBps),\n blockRewards: formatBps(10_000 - blockRewardsBps),\n payments,\n rewardBreakdown,\n tvlHistory,\n hasChartData: includeCharts,\n fetchedAt: Date.now(),\n };\n}\n","import type { IndividualOrder } from \"./manifest-parser\";\n\nexport interface LiquidityCheck {\n expectedFillPrice: number | null;\n slippageBps: number;\n totalAvailableSize: number;\n isSufficientLiquidity: boolean;\n}\n\n/**\n * Walk asks (sorted price ascending) to check buy-side liquidity.\n * Returns weighted avg fill price and slippage vs best ask.\n */\nexport function checkBuyLiquidity(\n asks: IndividualOrder[],\n orderSizeTokens: number,\n): LiquidityCheck {\n if (asks.length === 0 || orderSizeTokens <= 0) {\n return {\n expectedFillPrice: null,\n slippageBps: 0,\n totalAvailableSize: 0,\n isSufficientLiquidity: false,\n };\n }\n\n const sorted = [...asks].sort((a, b) => a.price - b.price);\n const totalAvailableSize = sorted.reduce((sum, o) => sum + o.size, 0);\n\n let remaining = orderSizeTokens;\n let totalCost = 0;\n const bestPrice = sorted[0].price;\n\n for (const order of sorted) {\n if (remaining <= 0) break;\n const fillSize = Math.min(remaining, order.size);\n totalCost += fillSize * order.price;\n remaining -= fillSize;\n }\n\n const isSufficientLiquidity = remaining <= 0;\n const filledSize = orderSizeTokens - Math.max(remaining, 0);\n const expectedFillPrice = filledSize > 0 ? totalCost / filledSize : null;\n const slippageBps =\n expectedFillPrice && bestPrice > 0\n ? Math.round(((expectedFillPrice - bestPrice) / bestPrice) * 10_000)\n : 0;\n\n return {\n expectedFillPrice,\n slippageBps,\n totalAvailableSize,\n isSufficientLiquidity,\n };\n}\n\n/**\n * Walk bids (sorted price descending) to check sell-side liquidity.\n * Returns weighted avg fill price and slippage vs best bid.\n */\nexport function checkSellLiquidity(\n bids: IndividualOrder[],\n orderSizeTokens: number,\n): LiquidityCheck {\n if (bids.length === 0 || orderSizeTokens <= 0) {\n return {\n expectedFillPrice: null,\n slippageBps: 0,\n totalAvailableSize: 0,\n isSufficientLiquidity: false,\n };\n }\n\n const sorted = [...bids].sort((a, b) => b.price - a.price);\n const totalAvailableSize = sorted.reduce((sum, o) => sum + o.size, 0);\n\n let remaining = orderSizeTokens;\n let totalRevenue = 0;\n const bestPrice = sorted[0].price;\n\n for (const order of sorted) {\n if (remaining <= 0) break;\n const fillSize = Math.min(remaining, order.size);\n totalRevenue += fillSize * order.price;\n remaining -= fillSize;\n }\n\n const isSufficientLiquidity = remaining <= 0;\n const filledSize = orderSizeTokens - Math.max(remaining, 0);\n const expectedFillPrice = filledSize > 0 ? totalRevenue / filledSize : null;\n const slippageBps =\n expectedFillPrice && bestPrice > 0\n ? Math.round(((bestPrice - expectedFillPrice) / bestPrice) * 10_000)\n : 0;\n\n return {\n expectedFillPrice,\n slippageBps,\n totalAvailableSize,\n isSufficientLiquidity,\n };\n}\n","import type { Connection } from \"@solana/web3.js\";\nimport type { Maturity } from \"../constants/maturities\";\n\n/**\n * Solana's mainnet target slot time. Used to convert the current slot index\n * inside the active epoch to wall-clock seconds when deriving an\n * epoch-synchronized \"now\".\n */\nconst DEFAULT_MS_PER_SLOT = 400;\n\n/**\n * Returns a UNIX-seconds \"now\" adjusted so that it aligns with the cluster's\n * perceived epoch-start boundary. The Bonds program mints RT proportional to\n * the remaining time window of the selected maturity; using a clock derived\n * from `getEpochInfo().slotIndex` matches the on-chain program's view of time\n * more closely than `Date.now()` on its own.\n *\n * Port of the `estNextEpochTs` calculation in pye-frontend-v2's\n * `StakeAccountMigrateForm.tsx`.\n */\nexport async function fetchEpochSyncedNowTs(\n connection: Connection,\n): Promise<number> {\n const epochInfo = await connection.getEpochInfo();\n const elapsedSeconds = (epochInfo.slotIndex * DEFAULT_MS_PER_SLOT) / 1000;\n return Date.now() / 1000 - elapsedSeconds;\n}\n\nexport interface EstimateRtFromStakeParams {\n /** Amount of SOL being deposited into the bond. */\n amountSol: number;\n /** Target maturity the deposit will issue into. */\n maturity: Maturity;\n /** UNIX seconds; should come from `fetchEpochSyncedNowTs` for best accuracy. */\n nowTs: number;\n}\n\n/**\n * Estimates how many RT tokens the Bonds program will mint to the user for a\n * stake deposit of `amountSol` into the selected maturity.\n *\n * The Bonds program issues RT proportional to the remaining issuance window\n * (RT represents claims on future rewards, so later depositors get less RT\n * per SOL than earlier ones).\n *\n * estimatedRt = amountSol * (maturityTs - nowTs) / (maturityTs - issuanceStartTs)\n *\n * Returns 0 if the maturity has already matured or the issuance window is\n * invalid.\n */\nexport function estimateRtFromStake({\n amountSol,\n maturity,\n nowTs,\n}: EstimateRtFromStakeParams): number {\n if (amountSol <= 0) return 0;\n const maturityTs = Number(maturity.maturity_timestamp);\n const issuanceStartTs = Number(maturity.issuance_start_timestamp);\n const total = maturityTs - issuanceStartTs;\n if (total <= 0) return 0;\n const remaining = Math.max(maturityTs - nowTs, 0);\n return amountSol * (remaining / total);\n}\n","import {\n ComputeBudgetProgram,\n Connection,\n Keypair,\n PublicKey,\n StakeProgram,\n Transaction,\n TransactionInstruction,\n} from \"@solana/web3.js\";\nimport {\n TOKEN_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID,\n getAssociatedTokenAddressSync,\n createAssociatedTokenAccountIdempotentInstruction,\n} from \"@solana/spl-token\";\nimport type { WalletContextState } from \"@solana/wallet-adapter-react\";\n\nconst BONDS_PROGRAM_ID = new PublicKey(\n \"PYEQZ2qYHPQapnw8Ms8MSPMNzoq59NHHfNwAtuV26wx\",\n);\n\n/** soloValidatorDepositSol discriminator */\nconst DEPOSIT_SOL_DISCRIMINATOR = new Uint8Array([\n 253, 10, 62, 175, 159, 90, 55, 142,\n]);\n\n/** soloValidatorDepositStake discriminator */\nconst DEPOSIT_STAKE_DISCRIMINATOR = new Uint8Array([\n 21, 14, 117, 220, 1, 60, 23, 13,\n]);\n\nconst SYSVAR_CLOCK = new PublicKey(\n \"SysvarC1ock11111111111111111111111111111111\",\n);\nconst STAKE_PROGRAM = new PublicKey(\n \"Stake11111111111111111111111111111111111111\",\n);\nconst SYSVAR_RENT = new PublicKey(\n \"SysvarRent111111111111111111111111111111111\",\n);\nconst SYSVAR_STAKE_HISTORY = new PublicKey(\n \"SysvarStakeHistory1111111111111111111111111\",\n);\nconst STAKE_CONFIG = new PublicKey(\n \"StakeConfig11111111111111111111111111111111\",\n);\n\nexport interface ExecuteStakeDepositParams {\n connection: Connection;\n wallet: WalletContextState;\n bondPubkey: string;\n principalTokenMint: string;\n yieldTokenMint: string;\n validatorVoteAccount: string;\n amountSol: number;\n}\n\nexport interface ExecuteStakeDepositResult {\n signature: string;\n}\n\nfunction deriveGlobalSettings(): PublicKey {\n const [pda] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"global_settings\")],\n BONDS_PROGRAM_ID,\n );\n return pda;\n}\n\nfunction deriveStakeAccount(bond: PublicKey): PublicKey {\n const [pda] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"stake\"), bond.toBuffer()],\n BONDS_PROGRAM_ID,\n );\n return pda;\n}\n\nasync function fetchProtocolFeeWallet(\n connection: Connection,\n globalSettingsPda: PublicKey,\n): Promise<PublicKey> {\n const info = await connection.getAccountInfo(globalSettingsPda);\n if (!info || !info.data) {\n throw new Error(\"GlobalSettings account not found\");\n }\n return new PublicKey(info.data.subarray(40, 72));\n}\n\nasync function fetchTransientStakeAccount(\n connection: Connection,\n bond: PublicKey,\n): Promise<PublicKey> {\n const info = await connection.getAccountInfo(bond);\n if (!info || !info.data) {\n throw new Error(\"Bond account not found\");\n }\n return new PublicKey(info.data.subarray(72, 104));\n}\n\nfunction encodeDepositData(amountLamports: bigint): Uint8Array {\n const buf = new ArrayBuffer(16);\n const bytes = new Uint8Array(buf);\n bytes.set(DEPOSIT_SOL_DISCRIMINATOR, 0);\n new DataView(buf).setBigUint64(8, amountLamports, true);\n return bytes;\n}\n\nexport interface ExecuteStakeAccountDepositParams {\n connection: Connection;\n wallet: WalletContextState;\n bondPubkey: string;\n principalTokenMint: string;\n yieldTokenMint: string;\n validatorVoteAccount: string;\n stakeAccountPubkey: string;\n amountSol: number;\n stakeBalanceSol: number;\n}\n\nexport async function executeStakeAccountDeposit({\n connection,\n wallet,\n bondPubkey,\n principalTokenMint,\n yieldTokenMint,\n validatorVoteAccount,\n stakeAccountPubkey,\n amountSol,\n stakeBalanceSol,\n}: ExecuteStakeAccountDepositParams): Promise<ExecuteStakeDepositResult> {\n if (!wallet.publicKey || !wallet.sendTransaction) {\n throw new Error(\"Wallet not connected\");\n }\n\n const owner = wallet.publicKey;\n const bond = new PublicKey(bondPubkey);\n const ptMint = new PublicKey(principalTokenMint);\n const ytMint = new PublicKey(yieldTokenMint);\n const voteAccount = new PublicKey(validatorVoteAccount);\n const userStake = new PublicKey(stakeAccountPubkey);\n\n const globalSettingsPda = deriveGlobalSettings();\n const stakeAccountPda = deriveStakeAccount(bond);\n\n const [protocolFeeWallet, transientStakeAccount, rentExemptReserve, latestBlockhash] =\n await Promise.all([\n fetchProtocolFeeWallet(connection, globalSettingsPda),\n fetchTransientStakeAccount(connection, bond),\n connection.getMinimumBalanceForRentExemption(StakeProgram.space),\n connection.getLatestBlockhash(\"confirmed\"),\n ]);\n\n // allowOwnerOffCurve: true for PDA-backed wallets (Squads vaults, etc.)\n const ownerPt = getAssociatedTokenAddressSync(ptMint, owner, true);\n const ownerYt = getAssociatedTokenAddressSync(ytMint, owner, true);\n const feeWalletPt = getAssociatedTokenAddressSync(ptMint, protocolFeeWallet, true);\n const feeWalletYt = getAssociatedTokenAddressSync(ytMint, protocolFeeWallet, true);\n\n const amountLamports = Math.round(amountSol * 1e9);\n const totalLamports = Math.round(stakeBalanceSol * 1e9);\n const isPartial = amountLamports < totalLamports;\n\n const tx = new Transaction();\n tx.recentBlockhash = latestBlockhash.blockhash;\n tx.feePayer = owner;\n\n tx.add(ComputeBudgetProgram.setComputeUnitLimit({ units: 400_000 }));\n tx.add(ComputeBudgetProgram.setComputeUnitPrice({ microLamports: 1_000 }));\n\n let depositStakeAccount: PublicKey;\n let splitKeypair: Keypair | null = null;\n\n if (isPartial) {\n splitKeypair = Keypair.generate();\n tx.add(\n StakeProgram.split(\n {\n stakePubkey: userStake,\n authorizedPubkey: owner,\n splitStakePubkey: splitKeypair.publicKey,\n lamports: amountLamports,\n },\n rentExemptReserve,\n ),\n );\n depositStakeAccount = splitKeypair.publicKey;\n } else {\n depositStakeAccount = userStake;\n }\n\n tx.add(\n createAssociatedTokenAccountIdempotentInstruction(owner, ownerPt, owner, ptMint),\n );\n tx.add(\n createAssociatedTokenAccountIdempotentInstruction(owner, ownerYt, owner, ytMint),\n );\n tx.add(\n createAssociatedTokenAccountIdempotentInstruction(owner, feeWalletPt, protocolFeeWallet, ptMint),\n );\n tx.add(\n createAssociatedTokenAccountIdempotentInstruction(owner, feeWalletYt, protocolFeeWallet, ytMint),\n );\n\n const isTransientSet = !transientStakeAccount.equals(PublicKey.default);\n const remainingAccounts = isTransientSet\n ? [{ pubkey: transientStakeAccount, isSigner: false, isWritable: true }]\n : [];\n\n const depositIx = new TransactionInstruction({\n programId: BONDS_PROGRAM_ID,\n keys: [\n { pubkey: owner, isSigner: true, isWritable: true },\n { pubkey: depositStakeAccount, isSigner: false, isWritable: true },\n { pubkey: ownerPt, isSigner: false, isWritable: true },\n { pubkey: ownerYt, isSigner: false, isWritable: true },\n { pubkey: bond, isSigner: false, isWritable: false },\n { pubkey: voteAccount, isSigner: false, isWritable: false },\n { pubkey: stakeAccountPda, isSigner: false, isWritable: true },\n { pubkey: ptMint, isSigner: false, isWritable: true },\n { pubkey: ytMint, isSigner: false, isWritable: true },\n { pubkey: globalSettingsPda, isSigner: false, isWritable: false },\n { pubkey: protocolFeeWallet, isSigner: false, isWritable: false },\n { pubkey: feeWalletPt, isSigner: false, isWritable: true },\n { pubkey: feeWalletYt, isSigner: false, isWritable: true },\n { pubkey: ASSOCIATED_TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },\n { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },\n { pubkey: PublicKey.default, isSigner: false, isWritable: false },\n { pubkey: SYSVAR_CLOCK, isSigner: false, isWritable: false },\n { pubkey: STAKE_PROGRAM, isSigner: false, isWritable: false },\n { pubkey: SYSVAR_STAKE_HISTORY, isSigner: false, isWritable: false },\n ...remainingAccounts,\n ],\n data: Buffer.from(DEPOSIT_STAKE_DISCRIMINATOR),\n });\n tx.add(depositIx);\n\n const signers = splitKeypair ? [splitKeypair] : [];\n const signature = await wallet.sendTransaction(tx, connection, { signers });\n const confirmation = await connection.confirmTransaction(\n {\n signature,\n blockhash: latestBlockhash.blockhash,\n lastValidBlockHeight: latestBlockhash.lastValidBlockHeight,\n },\n \"confirmed\",\n );\n\n if (confirmation.value.err) {\n throw new Error(\n `Transaction failed on-chain: ${JSON.stringify(confirmation.value.err)}`,\n );\n }\n\n return { signature };\n}\n\nexport async function executeStakeDeposit({\n connection,\n wallet,\n bondPubkey,\n principalTokenMint,\n yieldTokenMint,\n validatorVoteAccount,\n amountSol,\n}: ExecuteStakeDepositParams): Promise<ExecuteStakeDepositResult> {\n if (!wallet.publicKey || !wallet.sendTransaction) {\n throw new Error(\"Wallet not connected\");\n }\n\n const owner = wallet.publicKey;\n const bond = new PublicKey(bondPubkey);\n const ptMint = new PublicKey(principalTokenMint);\n const ytMint = new PublicKey(yieldTokenMint);\n const voteAccount = new PublicKey(validatorVoteAccount);\n\n const globalSettingsPda = deriveGlobalSettings();\n const stakeAccountPda = deriveStakeAccount(bond);\n\n const [protocolFeeWallet, transientStakeAccount, latestBlockhash] = await Promise.all([\n fetchProtocolFeeWallet(connection, globalSettingsPda),\n fetchTransientStakeAccount(connection, bond),\n connection.getLatestBlockhash(\"confirmed\"),\n ]);\n\n // allowOwnerOffCurve: true for PDA-backed wallets (Squads vaults, etc.)\n const ownerPt = getAssociatedTokenAddressSync(ptMint, owner, true);\n const ownerYt = getAssociatedTokenAddressSync(ytMint, owner, true);\n const feeWalletPt = getAssociatedTokenAddressSync(ptMint, protocolFeeWallet, true);\n const feeWalletYt = getAssociatedTokenAddressSync(ytMint, protocolFeeWallet, true);\n\n const amountLamports = BigInt(Math.round(amountSol * 1e9));\n\n const isTransientUninitialized = transientStakeAccount.equals(PublicKey.default);\n const transientKeypair = isTransientUninitialized ? Keypair.generate() : null;\n const transientPubkey = transientKeypair?.publicKey ?? transientStakeAccount;\n\n const tx = new Transaction();\n tx.recentBlockhash = latestBlockhash.blockhash;\n tx.feePayer = owner;\n\n tx.add(ComputeBudgetProgram.setComputeUnitLimit({ units: 285_000 }));\n tx.add(ComputeBudgetProgram.setComputeUnitPrice({ microLamports: 1_000 }));\n\n tx.add(\n createAssociatedTokenAccountIdempotentInstruction(owner, ownerPt, owner, ptMint),\n );\n tx.add(\n createAssociatedTokenAccountIdempotentInstruction(owner, ownerYt, owner, ytMint),\n );\n tx.add(\n createAssociatedTokenAccountIdempotentInstruction(owner, feeWalletPt, protocolFeeWallet, ptMint),\n );\n tx.add(\n createAssociatedTokenAccountIdempotentInstruction(owner, feeWalletYt, protocolFeeWallet, ytMint),\n );\n\n const depositIx = new TransactionInstruction({\n programId: BONDS_PROGRAM_ID,\n keys: [\n { pubkey: owner, isSigner: true, isWritable: true },\n { pubkey: ownerPt, isSigner: false, isWritable: true },\n { pubkey: ownerYt, isSigner: false, isWritable: true },\n { pubkey: bond, isSigner: false, isWritable: true },\n { pubkey: voteAccount, isSigner: false, isWritable: false },\n { pubkey: stakeAccountPda, isSigner: false, isWritable: true },\n { pubkey: ptMint, isSigner: false, isWritable: true },\n { pubkey: ytMint, isSigner: false, isWritable: true },\n { pubkey: globalSettingsPda, isSigner: false, isWritable: false },\n { pubkey: protocolFeeWallet, isSigner: false, isWritable: true },\n { pubkey: feeWalletPt, isSigner: false, isWritable: true },\n { pubkey: feeWalletYt, isSigner: false, isWritable: true },\n { pubkey: ASSOCIATED_TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },\n { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },\n { pubkey: PublicKey.default, isSigner: false, isWritable: false },\n { pubkey: SYSVAR_CLOCK, isSigner: false, isWritable: false },\n { pubkey: STAKE_PROGRAM, isSigner: false, isWritable: false },\n { pubkey: SYSVAR_RENT, isSigner: false, isWritable: false },\n { pubkey: SYSVAR_STAKE_HISTORY, isSigner: false, isWritable: false },\n { pubkey: STAKE_CONFIG, isSigner: false, isWritable: false },\n { pubkey: transientPubkey, isSigner: !!transientKeypair, isWritable: true },\n { pubkey: BONDS_PROGRAM_ID, isSigner: false, isWritable: false },\n ],\n data: Buffer.from(encodeDepositData(amountLamports)),\n });\n tx.add(depositIx);\n\n const signers = transientKeypair ? [transientKeypair] : [];\n const signature = await wallet.sendTransaction(tx, connection, { signers });\n const confirmation = await connection.confirmTransaction(\n {\n signature,\n blockhash: latestBlockhash.blockhash,\n lastValidBlockHeight: latestBlockhash.lastValidBlockHeight,\n },\n \"confirmed\",\n );\n\n if (confirmation.value.err) {\n throw new Error(\n `Transaction failed on-chain: ${JSON.stringify(confirmation.value.err)}`,\n );\n }\n\n return { signature };\n}\n","import \"./manifest-parser\"; // BigInt Buffer polyfills\nimport { ManifestClient } from \"@cks-systems/manifest-sdk\";\nimport {\n ComputeBudgetProgram,\n Connection,\n Keypair,\n PublicKey,\n StakeProgram,\n TransactionInstruction,\n TransactionMessage,\n VersionedTransaction,\n} from \"@solana/web3.js\";\nimport {\n ASSOCIATED_TOKEN_PROGRAM_ID,\n NATIVE_MINT,\n TOKEN_PROGRAM_ID,\n createAssociatedTokenAccountIdempotentInstruction,\n createCloseAccountInstruction,\n createTransferInstruction,\n getAssociatedTokenAddressSync,\n} from \"@solana/spl-token\";\nimport type { WalletContextState } from \"@solana/wallet-adapter-react\";\nimport { PYE_TREASURY_WALLET, calculateFeeLamports } from \"../constants/fees\";\n\n// ─── Shared constants (mirrors execute-stake-deposit.ts) ──────────────────────\n\nconst BONDS_PROGRAM_ID = new PublicKey(\n \"PYEQZ2qYHPQapnw8Ms8MSPMNzoq59NHHfNwAtuV26wx\",\n);\n\nconst DEPOSIT_STAKE_DISCRIMINATOR = new Uint8Array([\n 21, 14, 117, 220, 1, 60, 23, 13,\n]);\n\nconst SYSVAR_CLOCK = new PublicKey(\"SysvarC1ock11111111111111111111111111111111\");\nconst STAKE_PROGRAM = new PublicKey(\"Stake11111111111111111111111111111111111111\");\nconst SYSVAR_STAKE_HISTORY = new PublicKey(\"SysvarStakeHistory1111111111111111111111111\");\n\nfunction deriveGlobalSettings(): PublicKey {\n const [pda] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"global_settings\")],\n BONDS_PROGRAM_ID,\n );\n return pda;\n}\n\nfunction deriveStakeAccount(bond: PublicKey): PublicKey {\n const [pda] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"stake\"), bond.toBuffer()],\n BONDS_PROGRAM_ID,\n );\n return pda;\n}\n\nasync function fetchProtocolFeeWallet(\n connection: Connection,\n globalSettingsPda: PublicKey,\n): Promise<PublicKey> {\n const info = await connection.getAccountInfo(globalSettingsPda);\n if (!info?.data) throw new Error(\"GlobalSettings account not found\");\n return new PublicKey(info.data.subarray(40, 72));\n}\n\nasync function fetchTransientStakeAccount(\n connection: Connection,\n bond: PublicKey,\n): Promise<PublicKey> {\n const info = await connection.getAccountInfo(bond);\n if (!info?.data) throw new Error(\"Bond account not found\");\n return new PublicKey(info.data.subarray(72, 104));\n}\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface ExecuteDepositAndSellParams {\n connection: Connection;\n wallet: WalletContextState;\n // deposit\n bondPubkey: string;\n principalTokenMint: string;\n yieldTokenMint: string;\n validatorVoteAccount: string;\n stakeAccountPubkey: string;\n amountSol: number;\n stakeBalanceSol: number;\n // sell\n marketPubkey: string;\n /**\n * Expected RT tokens the Bonds program will mint to the user for this\n * deposit. The Bonds program mints RT proportional to remaining time in the\n * issuance window, so this is always ≤ amountSol — compute with\n * `estimateRtFromStake` using an epoch-synced `nowTs`.\n */\n rtAmountToSell: number;\n minReceiveTokens: number;\n /** Gross SOL out (pre-fee) used to size the Pye taker-fee transfer. */\n expectedSolOut: number;\n // v0 lookup table containing this validator's static accounts\n altPubkey: string;\n}\n\nexport interface ExecuteDepositAndSellResult {\n signature: string;\n}\n\n// ─── Bundled transaction ──────────────────────────────────────────────────────\n\n/**\n * Deposits a stake account into the Pye lockup and immediately sells the\n * resulting RT tokens on Manifest — all in a single atomic transaction.\n *\n * Instruction order:\n * 1. ComputeBudget (limit + price)\n * 2. StakeProgram.split (only if partial deposit)\n * 3. createATA: ownerPt, ownerYt (RT), feeWalletPt, feeWalletYt, wSOL, treasuryWsol\n * 4. Bonds deposit → mints PT + RT into ownerPt / ownerYt\n * 5. Manifest swapIx → sells RT for wSOL\n * 6. transfer → Pye taker fee (wSOL) from owner's wsolAta to treasuryWsol\n * 7. closeAccount → unwraps remaining wSOL to native SOL\n */\nexport async function executeDepositAndSell({\n connection,\n wallet,\n bondPubkey,\n principalTokenMint,\n yieldTokenMint,\n validatorVoteAccount,\n stakeAccountPubkey,\n amountSol,\n stakeBalanceSol,\n marketPubkey,\n rtAmountToSell,\n minReceiveTokens,\n expectedSolOut,\n altPubkey,\n}: ExecuteDepositAndSellParams): Promise<ExecuteDepositAndSellResult> {\n if (!wallet.publicKey || !wallet.sendTransaction) {\n throw new Error(\"Wallet not connected\");\n }\n\n const owner = wallet.publicKey;\n const bond = new PublicKey(bondPubkey);\n const ptMint = new PublicKey(principalTokenMint);\n const ytMint = new PublicKey(yieldTokenMint);\n const voteAccount = new PublicKey(validatorVoteAccount);\n const userStake = new PublicKey(stakeAccountPubkey);\n const marketPk = new PublicKey(marketPubkey);\n\n const globalSettingsPda = deriveGlobalSettings();\n const stakeAccountPda = deriveStakeAccount(bond);\n\n // Fetch all on-chain prerequisites in parallel\n const [\n protocolFeeWallet,\n transientStakeAccount,\n rentExemptReserve,\n latestBlockhash,\n manifestClient,\n altResponse,\n ] = await Promise.all([\n fetchProtocolFeeWallet(connection, globalSettingsPda),\n fetchTransientStakeAccount(connection, bond),\n connection.getMinimumBalanceForRentExemption(StakeProgram.space),\n connection.getLatestBlockhash(\"confirmed\"),\n ManifestClient.getClientReadOnly(connection, marketPk),\n connection.getAddressLookupTable(new PublicKey(altPubkey)),\n ]);\n\n const altAccount = altResponse.value;\n if (!altAccount) {\n throw new Error(\n `Address Lookup Table ${altPubkey} not found on-chain — it may not be deployed yet.`,\n );\n }\n\n // Derive ATAs — `allowOwnerOffCurve: true` so PDA-backed wallets\n // (Squads multisig vaults, other smart-account adapters) don't trip\n // TokenOwnerOffCurveError during address derivation.\n const ownerPt = getAssociatedTokenAddressSync(ptMint, owner, true);\n const ownerYt = getAssociatedTokenAddressSync(ytMint, owner, true);\n const feeWalletPt = getAssociatedTokenAddressSync(ptMint, protocolFeeWallet, true);\n const feeWalletYt = getAssociatedTokenAddressSync(ytMint, protocolFeeWallet, true);\n const wsolAta = getAssociatedTokenAddressSync(NATIVE_MINT, owner, true, TOKEN_PROGRAM_ID);\n const treasuryWsol = getAssociatedTokenAddressSync(\n NATIVE_MINT, PYE_TREASURY_WALLET, true, TOKEN_PROGRAM_ID,\n );\n\n // Pre-check which ATAs already exist so we can skip their createIdempotent ixs.\n // Each skipped ix shaves ~11 bytes off the tx; fee-wallet ATAs are almost\n // always present in steady state.\n const ataInfos = await connection.getMultipleAccountsInfo([\n ownerPt, ownerYt, feeWalletPt, feeWalletYt, wsolAta, treasuryWsol,\n ]);\n const [\n ownerPtExists, ownerYtExists, feeWalletPtExists, feeWalletYtExists,\n wsolAtaExists, treasuryWsolExists,\n ] = ataInfos.map((info) => info !== null);\n\n const amountLamports = Math.round(amountSol * 1e9);\n const totalLamports = Math.round(stakeBalanceSol * 1e9);\n const isPartial = amountLamports < totalLamports;\n\n // Swap parameters — RT minted is proportional to remaining issuance window,\n // so the caller computes the expected RT with `estimateRtFromStake` and\n // passes it in. Using amountSol here would overshoot what the Bonds program\n // actually mints and cause Manifest to reject the swap.\n //\n // Apply a 2 bps safety buffer (floored + min 100 atoms) to absorb clock\n // drift between the caller's quote and the on-chain Bonds mint. The chain\n // clock ticks forward while the tx sits in the user's wallet, shrinking\n // the actual mint ratio; asking for even 1 atom more than what's minted\n // fails the swap with \"Insufficient base in atoms\".\n const baseDecimals = manifestClient.market.baseDecimals();\n const quoteDecimals = manifestClient.market.quoteDecimals();\n const rawInAtoms = Math.floor(rtAmountToSell * 10 ** baseDecimals);\n const safetyBuffer = Math.max(Math.ceil(rawInAtoms * 0.0002), 100);\n const inAtoms = BigInt(Math.max(rawInAtoms - safetyBuffer, 0));\n const outAtoms = BigInt(Math.floor(minReceiveTokens * 10 ** quoteDecimals));\n\n // ── Build instructions ─────────────────────────────────────────────────────\n\n const instructions: TransactionInstruction[] = [];\n\n // Combined compute budget for deposit (~400k) + Manifest swap (~150k)\n instructions.push(ComputeBudgetProgram.setComputeUnitLimit({ units: 550_000 }));\n instructions.push(ComputeBudgetProgram.setComputeUnitPrice({ microLamports: 1_000 }));\n\n // Optional stake split for partial deposits\n let depositStakeAccount: PublicKey;\n let splitKeypair: Keypair | null = null;\n\n if (isPartial) {\n splitKeypair = Keypair.generate();\n instructions.push(\n ...StakeProgram.split(\n {\n stakePubkey: userStake,\n authorizedPubkey: owner,\n splitStakePubkey: splitKeypair.publicKey,\n lamports: amountLamports,\n },\n rentExemptReserve,\n ).instructions,\n );\n depositStakeAccount = splitKeypair.publicKey;\n } else {\n depositStakeAccount = userStake;\n }\n\n // Create only the token accounts that don't already exist.\n if (!ownerPtExists) instructions.push(createAssociatedTokenAccountIdempotentInstruction(owner, ownerPt, owner, ptMint));\n if (!ownerYtExists) instructions.push(createAssociatedTokenAccountIdempotentInstruction(owner, ownerYt, owner, ytMint));\n if (!feeWalletPtExists) instructions.push(createAssociatedTokenAccountIdempotentInstruction(owner, feeWalletPt, protocolFeeWallet, ptMint));\n if (!feeWalletYtExists) instructions.push(createAssociatedTokenAccountIdempotentInstruction(owner, feeWalletYt, protocolFeeWallet, ytMint));\n if (!wsolAtaExists) instructions.push(createAssociatedTokenAccountIdempotentInstruction(owner, wsolAta, owner, NATIVE_MINT));\n if (!treasuryWsolExists) instructions.push(createAssociatedTokenAccountIdempotentInstruction(owner, treasuryWsol, PYE_TREASURY_WALLET, NATIVE_MINT));\n\n // Bonds deposit instruction — mints PT + RT into ownerPt / ownerYt\n const isTransientSet = !transientStakeAccount.equals(PublicKey.default);\n const remainingAccounts = isTransientSet\n ? [{ pubkey: transientStakeAccount, isSigner: false, isWritable: true }]\n : [];\n\n instructions.push(\n new TransactionInstruction({\n programId: BONDS_PROGRAM_ID,\n keys: [\n { pubkey: owner, isSigner: true, isWritable: true },\n { pubkey: depositStakeAccount, isSigner: false, isWritable: true },\n { pubkey: ownerPt, isSigner: false, isWritable: true },\n { pubkey: ownerYt, isSigner: false, isWritable: true },\n { pubkey: bond, isSigner: false, isWritable: false },\n { pubkey: voteAccount, isSigner: false, isWritable: false },\n { pubkey: stakeAccountPda, isSigner: false, isWritable: true },\n { pubkey: ptMint, isSigner: false, isWritable: true },\n { pubkey: ytMint, isSigner: false, isWritable: true },\n { pubkey: globalSettingsPda, isSigner: false, isWritable: false },\n { pubkey: protocolFeeWallet, isSigner: false, isWritable: false },\n { pubkey: feeWalletPt, isSigner: false, isWritable: true },\n { pubkey: feeWalletYt, isSigner: false, isWritable: true },\n { pubkey: ASSOCIATED_TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },\n { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },\n { pubkey: PublicKey.default, isSigner: false, isWritable: false },\n { pubkey: SYSVAR_CLOCK, isSigner: false, isWritable: false },\n { pubkey: STAKE_PROGRAM, isSigner: false, isWritable: false },\n { pubkey: SYSVAR_STAKE_HISTORY, isSigner: false, isWritable: false },\n ...remainingAccounts,\n ],\n data: Buffer.from(DEPOSIT_STAKE_DISCRIMINATOR),\n }),\n );\n\n // Manifest swap — sells RT (ownerYt) for wSOL\n instructions.push(\n manifestClient.swapIx(owner, {\n inAtoms,\n outAtoms,\n isBaseIn: true,\n isExactIn: true,\n }),\n );\n\n // Pye taker fee on SOL out → transfer wSOL to treasury before unwrap.\n // Fee is sized off the quoted gross amount (expectedSolOut); this amount is\n // guaranteed present because swap minReceive > fee for any valid slippage.\n const feeLamports = calculateFeeLamports(expectedSolOut);\n if (feeLamports > BigInt(0)) {\n instructions.push(\n createTransferInstruction(wsolAta, treasuryWsol, owner, feeLamports),\n );\n }\n\n // Unwrap wSOL → native SOL\n instructions.push(createCloseAccountInstruction(wsolAta, owner, owner));\n\n // ── Compile to v0 with ALT ─────────────────────────────────────────────────\n\n const message = new TransactionMessage({\n payerKey: owner,\n recentBlockhash: latestBlockhash.blockhash,\n instructions,\n }).compileToV0Message([altAccount]);\n\n const vtx = new VersionedTransaction(message);\n if (splitKeypair) vtx.sign([splitKeypair]);\n\n // Log serialized size so we can verify we're under the 1232-byte limit.\n try {\n const serialized = vtx.serialize();\n console.log(\n `[executeDepositAndSell] v0 tx size=${serialized.length}B ` +\n `(limit=1232) alt=${altPubkey.slice(0, 8)}... skipped=[ownerPt:${ownerPtExists},ownerYt:${ownerYtExists},` +\n `feeWalletPt:${feeWalletPtExists},feeWalletYt:${feeWalletYtExists},` +\n `wsolAta:${wsolAtaExists},treasuryWsol:${treasuryWsolExists}] feeLamports=${feeLamports}`,\n );\n } catch (err) {\n console.warn(\"[executeDepositAndSell] could not measure tx size:\", err);\n }\n\n // ── Send & confirm ─────────────────────────────────────────────────────────\n\n const signature = await wallet.sendTransaction(vtx, connection);\n\n const confirmation = await connection.confirmTransaction(\n {\n signature,\n blockhash: latestBlockhash.blockhash,\n lastValidBlockHeight: latestBlockhash.lastValidBlockHeight,\n },\n \"confirmed\",\n );\n\n if (confirmation.value.err) {\n throw new Error(\n `Transaction failed on-chain: ${JSON.stringify(confirmation.value.err)}`,\n );\n }\n\n return { signature };\n}\n","import \"./manifest-parser\"; // BigInt Buffer polyfills\nimport { ManifestClient } from \"@cks-systems/manifest-sdk\";\nimport {\n Connection,\n PublicKey,\n SystemProgram,\n Transaction,\n} from \"@solana/web3.js\";\nimport {\n NATIVE_MINT,\n TOKEN_PROGRAM_ID,\n createAssociatedTokenAccountIdempotentInstruction,\n createCloseAccountInstruction,\n createSyncNativeInstruction,\n getAssociatedTokenAddressSync,\n} from \"@solana/spl-token\";\nimport type { WalletContextState } from \"@solana/wallet-adapter-react\";\n\nexport interface ExecuteSwapParams {\n connection: Connection;\n wallet: WalletContextState;\n marketPubkey: string;\n orderSizeTokens: number;\n maxPayTokens: number;\n slippageBps: number;\n}\n\nexport interface ExecuteSwapResult {\n signature: string;\n}\n\nexport async function executeSwap({\n connection,\n wallet,\n marketPubkey,\n orderSizeTokens,\n maxPayTokens,\n slippageBps,\n}: ExecuteSwapParams): Promise<ExecuteSwapResult> {\n if (!wallet.publicKey || !wallet.sendTransaction) {\n throw new Error(\"Wallet not connected\");\n }\n\n const payer = wallet.publicKey;\n const marketPk = new PublicKey(marketPubkey);\n\n const client = await ManifestClient.getClientReadOnly(connection, marketPk);\n\n const baseDecimals = client.market.baseDecimals();\n const quoteDecimals = client.market.quoteDecimals();\n const baseMint = client.market.baseMint();\n\n const outAtoms = BigInt(Math.round(orderSizeTokens * 10 ** baseDecimals));\n const inAtoms = BigInt(\n Math.round(maxPayTokens * (1 + slippageBps / 10_000) * 10 ** quoteDecimals),\n );\n\n // allowOwnerOffCurve: true for PDA-backed wallets (Squads vaults, etc.)\n const baseAta = getAssociatedTokenAddressSync(baseMint, payer, true, TOKEN_PROGRAM_ID);\n const wsolAta = getAssociatedTokenAddressSync(NATIVE_MINT, payer, true, TOKEN_PROGRAM_ID);\n\n const tx = new Transaction();\n\n tx.add(\n createAssociatedTokenAccountIdempotentInstruction(\n payer, baseAta, payer, baseMint,\n ),\n );\n tx.add(\n createAssociatedTokenAccountIdempotentInstruction(\n payer, wsolAta, payer, NATIVE_MINT,\n ),\n );\n tx.add(\n SystemProgram.transfer({\n fromPubkey: payer,\n toPubkey: wsolAta,\n lamports: inAtoms,\n }),\n );\n tx.add(createSyncNativeInstruction(wsolAta));\n tx.add(\n client.swapIx(payer, {\n inAtoms,\n outAtoms,\n isBaseIn: false,\n isExactIn: false,\n }),\n );\n tx.add(createCloseAccountInstruction(wsolAta, payer, payer));\n\n const latestBlockhash = await connection.getLatestBlockhash(\"confirmed\");\n tx.recentBlockhash = latestBlockhash.blockhash;\n tx.feePayer = payer;\n\n const signature = await wallet.sendTransaction(tx, connection);\n const confirmation = await connection.confirmTransaction(\n { signature, ...latestBlockhash },\n \"confirmed\",\n );\n\n if (confirmation.value.err) {\n throw new Error(\n `Transaction failed on-chain: ${JSON.stringify(confirmation.value.err)}`,\n );\n }\n\n return { signature };\n}\n","import \"./manifest-parser\"; // BigInt Buffer polyfills\nimport { ManifestClient } from \"@cks-systems/manifest-sdk\";\nimport {\n Connection,\n PublicKey,\n Transaction,\n} from \"@solana/web3.js\";\nimport {\n NATIVE_MINT,\n TOKEN_PROGRAM_ID,\n createAssociatedTokenAccountIdempotentInstruction,\n createCloseAccountInstruction,\n createTransferInstruction,\n getAssociatedTokenAddressSync,\n} from \"@solana/spl-token\";\nimport type { WalletContextState } from \"@solana/wallet-adapter-react\";\nimport { PYE_TREASURY_WALLET, calculateFeeLamports } from \"../constants/fees\";\n\nexport interface ExecuteRtSellParams {\n connection: Connection;\n wallet: WalletContextState;\n marketPubkey: string;\n rtMint: string;\n /**\n * Amount of RT tokens to sell. This must match what the user actually holds\n * in their RT ATA — for a fresh deposit, compute with `estimateRtFromStake`,\n * not `amountSol`, since the Bonds program mints less than 1:1.\n */\n orderSizeTokens: number;\n minReceiveTokens: number;\n /** Gross SOL out (pre-fee) used to size the Pye taker-fee transfer. */\n expectedSolOut: number;\n}\n\nexport interface ExecuteRtSellResult {\n signature: string;\n}\n\n/**\n * Sell RT tokens on a Manifest order book for SOL.\n *\n * Flow: RT (base) → swap → wSOL (quote) → unwrap to native SOL.\n */\nexport async function executeRtSell({\n connection,\n wallet,\n marketPubkey,\n rtMint,\n orderSizeTokens,\n minReceiveTokens,\n expectedSolOut,\n}: ExecuteRtSellParams): Promise<ExecuteRtSellResult> {\n if (!wallet.publicKey || !wallet.sendTransaction) {\n throw new Error(\"Wallet not connected\");\n }\n\n const payer = wallet.publicKey;\n const marketPk = new PublicKey(marketPubkey);\n const rtMintPk = new PublicKey(rtMint);\n\n const client = await ManifestClient.getClientReadOnly(connection, marketPk);\n\n const baseDecimals = client.market.baseDecimals();\n const quoteDecimals = client.market.quoteDecimals();\n\n // Apply a 2 bps safety buffer (floored + min 100 atoms) to absorb clock\n // drift between the quote and the on-chain Bonds mint — see the matching\n // comment in execute-deposit-and-sell.ts for context.\n const rawInAtoms = Math.floor(orderSizeTokens * 10 ** baseDecimals);\n const safetyBuffer = Math.max(Math.ceil(rawInAtoms * 0.0002), 100);\n const inAtoms = BigInt(Math.max(rawInAtoms - safetyBuffer, 0));\n const outAtoms = BigInt(Math.floor(minReceiveTokens * 10 ** quoteDecimals));\n\n // allowOwnerOffCurve: true for PDA-backed wallets (Squads vaults, etc.)\n const rtAta = getAssociatedTokenAddressSync(rtMintPk, payer, true, TOKEN_PROGRAM_ID);\n const wsolAta = getAssociatedTokenAddressSync(NATIVE_MINT, payer, true, TOKEN_PROGRAM_ID);\n const treasuryWsol = getAssociatedTokenAddressSync(\n NATIVE_MINT, PYE_TREASURY_WALLET, true, TOKEN_PROGRAM_ID,\n );\n\n const tx = new Transaction();\n\n // Ensure RT ATA exists (should already exist after deposit)\n tx.add(\n createAssociatedTokenAccountIdempotentInstruction(\n payer, rtAta, payer, rtMintPk,\n ),\n );\n // Create wSOL ATA to receive swap proceeds\n tx.add(\n createAssociatedTokenAccountIdempotentInstruction(\n payer, wsolAta, payer, NATIVE_MINT,\n ),\n );\n // Ensure treasury wSOL ATA exists so the fee transfer can land\n tx.add(\n createAssociatedTokenAccountIdempotentInstruction(\n payer, treasuryWsol, PYE_TREASURY_WALLET, NATIVE_MINT,\n ),\n );\n\n // Sell RT (base) for wSOL (quote)\n tx.add(\n client.swapIx(payer, {\n inAtoms,\n outAtoms,\n isBaseIn: true,\n isExactIn: true,\n }),\n );\n\n // Pye taker fee on SOL out → transfer wSOL to treasury before unwrap\n const feeLamports = calculateFeeLamports(expectedSolOut);\n if (feeLamports > BigInt(0)) {\n tx.add(createTransferInstruction(wsolAta, treasuryWsol, payer, feeLamports));\n }\n\n // Unwrap remaining wSOL → native SOL\n tx.add(createCloseAccountInstruction(wsolAta, payer, payer));\n\n const latestBlockhash = await connection.getLatestBlockhash(\"confirmed\");\n tx.recentBlockhash = latestBlockhash.blockhash;\n tx.feePayer = payer;\n\n const signature = await wallet.sendTransaction(tx, connection);\n const confirmation = await connection.confirmTransaction(\n { signature, ...latestBlockhash },\n \"confirmed\",\n );\n\n if (confirmation.value.err) {\n throw new Error(\n `Transaction failed on-chain: ${JSON.stringify(confirmation.value.err)}`,\n );\n }\n\n return { signature };\n}\n","import \"./manifest-parser\"; // BigInt Buffer polyfills\nimport { ManifestClient, OrderType } from \"@cks-systems/manifest-sdk\";\nimport { Connection, PublicKey, Transaction } from \"@solana/web3.js\";\nimport type { WalletContextState } from \"@solana/wallet-adapter-react\";\n\nexport interface ExecuteLimitOrderParams {\n connection: Connection;\n wallet: WalletContextState;\n marketPubkey: string;\n orderSizeTokens: number;\n limitPrice: number;\n}\n\nexport interface ExecuteLimitOrderResult {\n signature: string;\n setupSignature?: string;\n}\n\nexport async function executeLimitOrder({\n connection,\n wallet,\n marketPubkey,\n orderSizeTokens,\n limitPrice,\n}: ExecuteLimitOrderParams): Promise<ExecuteLimitOrderResult> {\n if (!wallet.publicKey || !wallet.sendTransaction) {\n throw new Error(\"Wallet not connected\");\n }\n\n const payer = wallet.publicKey;\n const marketPk = new PublicKey(marketPubkey);\n let setupSignature: string | undefined;\n\n const setupData = await ManifestClient.getSetupIxs(\n connection,\n marketPk,\n payer,\n );\n\n if (setupData.setupNeeded) {\n const setupTx = new Transaction();\n for (const ix of setupData.instructions) {\n setupTx.add(ix);\n }\n\n const signers = setupData.wrapperKeypair\n ? [setupData.wrapperKeypair]\n : [];\n\n const setupBlockhash = await connection.getLatestBlockhash(\"confirmed\");\n setupTx.recentBlockhash = setupBlockhash.blockhash;\n setupTx.feePayer = payer;\n\n setupSignature = await wallet.sendTransaction(setupTx, connection, {\n signers,\n });\n const setupConfirmation = await connection.confirmTransaction(\n { signature: setupSignature, ...setupBlockhash },\n \"confirmed\",\n );\n if (setupConfirmation.value.err) {\n throw new Error(\n `Setup transaction failed on-chain: ${JSON.stringify(setupConfirmation.value.err)}`,\n );\n }\n }\n\n const client = await ManifestClient.getClientForMarketNoPrivateKey(\n connection,\n marketPk,\n payer,\n );\n\n const orderIxs = await client.placeOrderWithRequiredDepositIxs(payer, {\n numBaseTokens: orderSizeTokens,\n tokenPrice: limitPrice,\n isBid: false,\n lastValidSlot: 4_000_000_000,\n orderType: OrderType.Limit,\n clientOrderId: BigInt(Date.now()),\n });\n\n const latestBlockhash = await connection.getLatestBlockhash(\"confirmed\");\n const tx = new Transaction();\n tx.recentBlockhash = latestBlockhash.blockhash;\n tx.feePayer = payer;\n for (const ix of orderIxs) tx.add(ix);\n const signature = await wallet.sendTransaction(tx, connection);\n const confirmation = await connection.confirmTransaction(\n { signature, ...latestBlockhash },\n \"confirmed\",\n );\n\n if (confirmation.value.err) {\n throw new Error(\n `Transaction failed on-chain: ${JSON.stringify(confirmation.value.err)}`,\n );\n }\n\n return { signature, setupSignature };\n}\n","import \"./manifest-parser\"; // BigInt Buffer polyfills\nimport {\n Market,\n createBatchUpdateInstruction,\n getVaultAddress,\n getGlobalAddress,\n getGlobalVaultAddress,\n} from \"@cks-systems/manifest-sdk\";\nimport { TOKEN_PROGRAM_ID } from \"@solana/spl-token\";\nimport { Connection, PublicKey, Transaction } from \"@solana/web3.js\";\nimport type { WalletContextState } from \"@solana/wallet-adapter-react\";\n\nexport interface ExecuteCancelOrderParams {\n connection: Connection;\n wallet: WalletContextState;\n marketPubkey: string;\n sequenceNumber: string;\n}\n\nexport interface ExecuteCancelOrderResult {\n signature: string;\n}\n\nexport async function executeCancelOrder({\n connection,\n wallet,\n marketPubkey,\n sequenceNumber,\n}: ExecuteCancelOrderParams): Promise<ExecuteCancelOrderResult> {\n if (!wallet.publicKey || !wallet.sendTransaction) {\n throw new Error(\"Wallet not connected\");\n }\n\n const payer = wallet.publicKey;\n const marketPk = new PublicKey(marketPubkey);\n\n const market = await Market.loadFromAddress({ connection, address: marketPk });\n const baseMint = market.baseMint();\n const quoteMint = market.quoteMint();\n\n const cancelIx = createBatchUpdateInstruction(\n {\n payer,\n market: marketPk,\n baseMint,\n baseGlobal: getGlobalAddress(baseMint),\n baseGlobalVault: getGlobalVaultAddress(baseMint),\n baseMarketVault: getVaultAddress(marketPk, baseMint),\n baseTokenProgram: TOKEN_PROGRAM_ID,\n quoteMint,\n quoteGlobal: getGlobalAddress(quoteMint),\n quoteGlobalVault: getGlobalVaultAddress(quoteMint),\n quoteMarketVault: getVaultAddress(marketPk, quoteMint),\n quoteTokenProgram: TOKEN_PROGRAM_ID,\n },\n {\n params: {\n cancels: [\n {\n orderSequenceNumber: BigInt(sequenceNumber),\n orderIndexHint: null,\n },\n ],\n orders: [],\n traderIndexHint: null,\n },\n },\n );\n\n const latestBlockhash = await connection.getLatestBlockhash(\"confirmed\");\n const tx = new Transaction();\n tx.recentBlockhash = latestBlockhash.blockhash;\n tx.feePayer = payer;\n tx.add(cancelIx);\n const signature = await wallet.sendTransaction(tx, connection);\n const confirmation = await connection.confirmTransaction(\n { signature, ...latestBlockhash },\n \"confirmed\",\n );\n\n if (confirmation.value.err) {\n throw new Error(\n `Transaction failed on-chain: ${JSON.stringify(confirmation.value.err)}`,\n );\n }\n\n return { signature };\n}\n","import {\n ComputeBudgetProgram,\n Connection,\n Keypair,\n PublicKey,\n Transaction,\n TransactionInstruction,\n} from \"@solana/web3.js\";\nimport {\n TOKEN_PROGRAM_ID,\n getAssociatedTokenAddressSync,\n} from \"@solana/spl-token\";\nimport type { WalletContextState } from \"@solana/wallet-adapter-react\";\n\nconst BONDS_PROGRAM_ID = new PublicKey(\n \"PYEQZ2qYHPQapnw8Ms8MSPMNzoq59NHHfNwAtuV26wx\",\n);\n\nconst HANDLE_MATURITY_DISC = new Uint8Array([127, 154, 109, 164, 119, 21, 34, 149]);\nconst REDEEM_PT_STAKE_DISC = new Uint8Array([131, 241, 170, 225, 20, 53, 106, 95]);\nconst REDEEM_YT_STAKE_DISC = new Uint8Array([143, 45, 75, 247, 229, 60, 80, 179]);\n\nconst SYSVAR_CLOCK = new PublicKey(\"SysvarC1ock11111111111111111111111111111111\");\nconst STAKE_PROGRAM = new PublicKey(\"Stake11111111111111111111111111111111111111\");\nconst SYSVAR_RENT = new PublicKey(\"SysvarRent111111111111111111111111111111111\");\nconst SYSVAR_STAKE_HISTORY = new PublicKey(\"SysvarStakeHistory1111111111111111111111111\");\n\nexport interface ExecuteRedeemParams {\n connection: Connection;\n wallet: WalletContextState;\n bondPubkey: string;\n principalTokenMint: string;\n yieldTokenMint: string;\n ptAmountLamports: number;\n rtAmountLamports: number;\n}\n\nexport interface ExecuteRedeemResult {\n signature: string;\n}\n\nfunction deriveGlobalSettings(): PublicKey {\n const [pda] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"global_settings\")],\n BONDS_PROGRAM_ID,\n );\n return pda;\n}\n\nfunction deriveStakeAccount(bond: PublicKey): PublicKey {\n const [pda] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"stake\"), bond.toBuffer()],\n BONDS_PROGRAM_ID,\n );\n return pda;\n}\n\ninterface BondData {\n transientStakeAccount: PublicKey;\n maturityHandled: boolean;\n}\n\nasync function fetchBondData(\n connection: Connection,\n bond: PublicKey,\n): Promise<BondData> {\n const info = await connection.getAccountInfo(bond);\n if (!info?.data) throw new Error(\"Bond account not found\");\n return {\n transientStakeAccount: new PublicKey(info.data.subarray(72, 104)),\n maturityHandled: info.data[185] === 1,\n };\n}\n\nfunction encodeAmount(disc: Uint8Array, amount: bigint): Buffer {\n const ab = new ArrayBuffer(16);\n const view = new DataView(ab);\n for (let i = 0; i < 8; i++) view.setUint8(i, disc[i]);\n view.setBigUint64(8, amount, true);\n return Buffer.from(ab);\n}\n\nexport async function executeRedeem({\n connection,\n wallet,\n bondPubkey,\n principalTokenMint,\n yieldTokenMint,\n ptAmountLamports,\n rtAmountLamports,\n}: ExecuteRedeemParams): Promise<ExecuteRedeemResult> {\n if (!wallet.publicKey || !wallet.sendTransaction) {\n throw new Error(\"Wallet not connected\");\n }\n\n const owner = wallet.publicKey;\n const bond = new PublicKey(bondPubkey);\n const ptMint = new PublicKey(principalTokenMint);\n const ytMint = new PublicKey(yieldTokenMint);\n const globalSettingsPda = deriveGlobalSettings();\n const stakeAccountPda = deriveStakeAccount(bond);\n\n // allowOwnerOffCurve: true for PDA-backed wallets (Squads vaults, etc.)\n const ownerPt = getAssociatedTokenAddressSync(ptMint, owner, true);\n const ownerYt = getAssociatedTokenAddressSync(ytMint, owner, true);\n\n const [bondData, latestBlockhash] = await Promise.all([\n fetchBondData(connection, bond),\n connection.getLatestBlockhash(\"confirmed\"),\n ]);\n\n const tx = new Transaction();\n tx.recentBlockhash = latestBlockhash.blockhash;\n tx.feePayer = owner;\n\n tx.add(ComputeBudgetProgram.setComputeUnitLimit({ units: 500_000 }));\n tx.add(ComputeBudgetProgram.setComputeUnitPrice({ microLamports: 1_000 }));\n\n if (!bondData.maturityHandled) {\n const isTransientSet = !bondData.transientStakeAccount.equals(PublicKey.default);\n tx.add(\n new TransactionInstruction({\n programId: BONDS_PROGRAM_ID,\n keys: [\n { pubkey: bond, isSigner: false, isWritable: true },\n { pubkey: stakeAccountPda, isSigner: false, isWritable: true },\n ...(isTransientSet\n ? [{ pubkey: bondData.transientStakeAccount, isSigner: false, isWritable: true }]\n : []),\n { pubkey: ptMint, isSigner: false, isWritable: false },\n { pubkey: ytMint, isSigner: false, isWritable: false },\n { pubkey: SYSVAR_CLOCK, isSigner: false, isWritable: false },\n { pubkey: STAKE_PROGRAM, isSigner: false, isWritable: false },\n { pubkey: SYSVAR_STAKE_HISTORY, isSigner: false, isWritable: false },\n { pubkey: globalSettingsPda, isSigner: false, isWritable: false },\n ],\n data: Buffer.from(HANDLE_MATURITY_DISC),\n }),\n );\n }\n\n const signers: Keypair[] = [];\n\n if (ptAmountLamports > 0) {\n const newStakeKp = Keypair.generate();\n signers.push(newStakeKp);\n\n tx.add(\n new TransactionInstruction({\n programId: BONDS_PROGRAM_ID,\n keys: [\n { pubkey: owner, isSigner: true, isWritable: true },\n { pubkey: newStakeKp.publicKey, isSigner: true, isWritable: true },\n { pubkey: ownerPt, isSigner: false, isWritable: true },\n { pubkey: bond, isSigner: false, isWritable: true },\n { pubkey: stakeAccountPda, isSigner: false, isWritable: true },\n { pubkey: ptMint, isSigner: false, isWritable: true },\n { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },\n { pubkey: PublicKey.default, isSigner: false, isWritable: false },\n { pubkey: SYSVAR_CLOCK, isSigner: false, isWritable: false },\n { pubkey: STAKE_PROGRAM, isSigner: false, isWritable: false },\n { pubkey: SYSVAR_RENT, isSigner: false, isWritable: false },\n { pubkey: SYSVAR_STAKE_HISTORY, isSigner: false, isWritable: false },\n { pubkey: globalSettingsPda, isSigner: false, isWritable: false },\n ],\n data: encodeAmount(REDEEM_PT_STAKE_DISC, BigInt(ptAmountLamports)),\n }),\n );\n }\n\n if (rtAmountLamports > 0) {\n const newStakeKp = Keypair.generate();\n signers.push(newStakeKp);\n\n tx.add(\n new TransactionInstruction({\n programId: BONDS_PROGRAM_ID,\n keys: [\n { pubkey: owner, isSigner: true, isWritable: false },\n { pubkey: newStakeKp.publicKey, isSigner: true, isWritable: true },\n { pubkey: ownerYt, isSigner: false, isWritable: true },\n { pubkey: bond, isSigner: false, isWritable: true },\n { pubkey: stakeAccountPda, isSigner: false, isWritable: true },\n { pubkey: ytMint, isSigner: false, isWritable: true },\n { pubkey: ptMint, isSigner: false, isWritable: false },\n { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },\n { pubkey: PublicKey.default, isSigner: false, isWritable: false },\n { pubkey: SYSVAR_CLOCK, isSigner: false, isWritable: false },\n { pubkey: STAKE_PROGRAM, isSigner: false, isWritable: false },\n { pubkey: SYSVAR_RENT, isSigner: false, isWritable: false },\n { pubkey: SYSVAR_STAKE_HISTORY, isSigner: false, isWritable: false },\n { pubkey: globalSettingsPda, isSigner: false, isWritable: false },\n ],\n data: encodeAmount(REDEEM_YT_STAKE_DISC, BigInt(rtAmountLamports)),\n }),\n );\n }\n\n const signature = await wallet.sendTransaction(tx, connection, { signers });\n const confirmation = await connection.confirmTransaction(\n {\n signature,\n blockhash: latestBlockhash.blockhash,\n lastValidBlockHeight: latestBlockhash.lastValidBlockHeight,\n },\n \"confirmed\",\n );\n\n if (confirmation.value.err) {\n throw new Error(\n `Transaction failed on-chain: ${JSON.stringify(confirmation.value.err)}`,\n );\n }\n\n return { signature };\n}\n"],"mappings":"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","names":["PublicKey","ComputeBudgetProgram","Keypair","PublicKey","StakeProgram","TransactionInstruction","ASSOCIATED_TOKEN_PROGRAM_ID","TOKEN_PROGRAM_ID","createAssociatedTokenAccountIdempotentInstruction","getAssociatedTokenAddressSync","BONDS_PROGRAM_ID","PublicKey","DEPOSIT_STAKE_DISCRIMINATOR","SYSVAR_CLOCK","STAKE_PROGRAM","SYSVAR_STAKE_HISTORY","deriveGlobalSettings","deriveStakeAccount","fetchProtocolFeeWallet","fetchTransientStakeAccount","StakeProgram","getAssociatedTokenAddressSync","TOKEN_PROGRAM_ID","ComputeBudgetProgram","Keypair","createAssociatedTokenAccountIdempotentInstruction","TransactionInstruction","ASSOCIATED_TOKEN_PROGRAM_ID","ManifestClient","PublicKey","Transaction","NATIVE_MINT","TOKEN_PROGRAM_ID","createAssociatedTokenAccountIdempotentInstruction","createCloseAccountInstruction","getAssociatedTokenAddressSync","PublicKey","ManifestClient","getAssociatedTokenAddressSync","TOKEN_PROGRAM_ID","NATIVE_MINT","Transaction","createAssociatedTokenAccountIdempotentInstruction","createCloseAccountInstruction","ManifestClient","PublicKey","Transaction","NATIVE_MINT","TOKEN_PROGRAM_ID","createAssociatedTokenAccountIdempotentInstruction","createCloseAccountInstruction","createTransferInstruction","getAssociatedTokenAddressSync","PublicKey","ManifestClient","getAssociatedTokenAddressSync","TOKEN_PROGRAM_ID","NATIVE_MINT","Transaction","createAssociatedTokenAccountIdempotentInstruction","createTransferInstruction","createCloseAccountInstruction","ManifestClient","PublicKey","Transaction","PublicKey","ManifestClient","Transaction","TOKEN_PROGRAM_ID","PublicKey","Transaction","PublicKey","TOKEN_PROGRAM_ID","Transaction","ComputeBudgetProgram","Keypair","PublicKey","Transaction","TransactionInstruction","TOKEN_PROGRAM_ID","getAssociatedTokenAddressSync","BONDS_PROGRAM_ID","SYSVAR_CLOCK","STAKE_PROGRAM","SYSVAR_RENT","SYSVAR_STAKE_HISTORY","deriveGlobalSettings","deriveStakeAccount"]}
|
package/dist/react.d.ts
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
import { e as ApyStore, g as BalanceStore, l as MarketStore, q as WalletStore } from './apy-store-CNq9A4Xc.js';
|
|
4
|
+
import 'immer';
|
|
5
|
+
import 'zustand/vanilla';
|
|
6
|
+
import '@solana/kit';
|
|
7
|
+
|
|
8
|
+
declare function WalletStoreProvider({ children }: {
|
|
9
|
+
children: ReactNode;
|
|
10
|
+
}): react_jsx_runtime.JSX.Element;
|
|
11
|
+
declare function useWalletStore<T>(selector: (state: WalletStore) => T): T;
|
|
12
|
+
declare function BalanceStoreProvider({ children }: {
|
|
13
|
+
children: ReactNode;
|
|
14
|
+
}): react_jsx_runtime.JSX.Element;
|
|
15
|
+
declare function useBalanceStore<T>(selector: (state: BalanceStore) => T): T;
|
|
16
|
+
declare function MarketStoreProvider({ children }: {
|
|
17
|
+
children: ReactNode;
|
|
18
|
+
}): react_jsx_runtime.JSX.Element;
|
|
19
|
+
declare function useMarketStore<T>(selector: (state: MarketStore) => T): T;
|
|
20
|
+
declare function ApyStoreProvider({ children }: {
|
|
21
|
+
children: ReactNode;
|
|
22
|
+
}): react_jsx_runtime.JSX.Element;
|
|
23
|
+
declare function useApyStore<T>(selector: (state: ApyStore) => T): T;
|
|
24
|
+
declare function PyeSDKProvider({ children }: {
|
|
25
|
+
children: ReactNode;
|
|
26
|
+
}): react_jsx_runtime.JSX.Element;
|
|
27
|
+
|
|
28
|
+
declare function BalanceSyncer(): null;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Invisible component that syncs the Solana wallet adapter state into the
|
|
32
|
+
* Zustand wallet store.
|
|
33
|
+
*/
|
|
34
|
+
declare function WalletSyncer(): null;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Invisible component that:
|
|
38
|
+
* 1. Fetches markets and RT backing on mount
|
|
39
|
+
* 2. Polls RT backing every 60s
|
|
40
|
+
* 3. Subscribes to Supabase Realtime for order book updates
|
|
41
|
+
*/
|
|
42
|
+
declare function MarketSyncer(): null;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Fetches staking APY from stakewiz_apy for relevant vote accounts.
|
|
46
|
+
*
|
|
47
|
+
* - Single-validator mode: fetches for the configured vote account on mount.
|
|
48
|
+
* - Universal mode: fetches for vote accounts detected in the user's stake accounts.
|
|
49
|
+
* - Polls every 5 minutes.
|
|
50
|
+
*/
|
|
51
|
+
declare function ApySyncer(): null;
|
|
52
|
+
|
|
53
|
+
export { ApyStoreProvider, ApySyncer, BalanceStoreProvider, BalanceSyncer, MarketStoreProvider, MarketSyncer, PyeSDKProvider, WalletStoreProvider, WalletSyncer, useApyStore, useBalanceStore, useMarketStore, useWalletStore };
|