UNPKG

@paxoslabs/earn-sdk

Version:
1 lines 107 kB
{"version":3,"sources":["../src/vaults/deposit/utils.ts","../src/vaults/deposit/deposit.ts","../src/contracts/erc2612-abi.ts","../src/vaults/deposit/deposit-with-permit.ts","../src/contracts/atomic-queue-abi.ts","../src/vaults/withdraw/utils.ts","../src/vaults/withdraw/withdraw.ts"],"names":["parseUnits"],"mappings":"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","file":"index.mjs","sourcesContent":["import { DEFAULT_DEPOSIT_SLIPPAGE } from \"../../constants\";\nimport { WAD } from \"../../utils/bigint\";\n\n/**\n * Calculates the minimum amount of tokens to mint based on deposit amount, rate, and slippage\n * @param depositAmount The amount being deposited (in base units)\n * @param rate The current exchange rate between deposit and mint tokens\n * @param vaultTokenDecimals The number of precision decimals of the vault token\n * @param slippage The maximum acceptable slippage as a decimal (e.g., 0.01 for 1%)\n * @returns The minimum amount of tokens that should be minted accounting for slippage in vault token precision decimals\n */\nconst calculateMinimumMint = (\n depositAmount: bigint, // In deposit token decimals\n rate: bigint, // In deposit token decimals\n vaultTokenDecimals: number, // The number of precision decimals of the vault token\n slippage?: number // In bps (e.g., 50 for 0.5%) = 50 / 10000 = 0.005 = 0.5%\n): bigint => {\n const slippageValue = slippage ?? DEFAULT_DEPOSIT_SLIPPAGE;\n // Convert bps to WAD format (multiply by WAD/10000)\n const slippageAsBigInt = (BigInt(slippageValue) * WAD.bigint) / BigInt(10000);\n\n // Calculate ideal mint amount without slippage\n const minimumMint = (depositAmount * WAD.bigint) / rate;\n\n // Calculate the amount to subtract for slippage tolerance\n const slippageAmount = (minimumMint * slippageAsBigInt) / WAD.bigint;\n\n // Return mint amount minus slippage buffer\n if (vaultTokenDecimals > 18) {\n return (\n (minimumMint - slippageAmount) *\n BigInt(10) ** (BigInt(vaultTokenDecimals) - BigInt(18))\n );\n }\n return (\n (minimumMint - slippageAmount) /\n BigInt(10) ** (BigInt(18) - BigInt(vaultTokenDecimals))\n );\n};\n\nexport { calculateMinimumMint };\n","/**\n * @file Deposit functionality for Nucleus vaults\n * @module vaults/deposit\n */\n\nimport { type Address, erc20Abi, parseUnits } from \"viem\";\nimport { getRateInQuoteWithAssetDecimals } from \"../../api/accountant\";\nimport {\n fetchSupportedAssets,\n findVaultByConfig,\n} from \"../../api/earn-sdk-client\";\nimport { type ChainId, toChainId } from \"../../api/vault-config\";\nimport {\n DEFAULT_APPROVAL_AMOUNT,\n DEFAULT_DEPOSIT_SLIPPAGE,\n} from \"../../constants\";\nimport { TellerAbi } from \"../../contracts/teller-abi\";\nimport type { EarnVault, SupportedAsset } from \"../../types/earn-sdk-api\";\nimport { APIError } from \"../../types/earn-sdk-api\";\nimport { calculateMinimumMint } from \"./utils\";\n\n/**\n * Result object containing transaction data for a deposit operation\n * @interface DepositTransactionData\n * @property {typeof TellerAbi} abi - ABI for the Teller contract\n * @property {Address} address - Address of the Teller contract\n * @property {'deposit'} functionName - Name of the function to call\n * @property {[Address, bigint, bigint]} args - Arguments for the deposit function:\n * [depositAsset, depositAmount, minimumMint]\n * @property {number} chainId - ID of the chain where the transaction should be executed\n */\ninterface DepositTransactionData {\n abi: typeof TellerAbi;\n address: Address;\n functionName: \"deposit\";\n args: [Address, bigint, bigint];\n chainId: number;\n}\n\n/**\n * Parameters for prepareDepositTransactionData()\n * Accepts yieldType, recipientAddress, depositToken, and chainId for automatic vault resolution\n * @interface PrepareDepositTransactionDataParams\n * @property {string} yieldType - Yield strategy type (e.g., \"PRIME\", \"TBILL\", \"LENDING\")\n * @property {Address} recipientAddress - Ethereum address of the user (recipient of vault shares)\n * @property {Address} depositToken - Token contract address to deposit (matches vault's baseTokenAddressId)\n * @property {string} depositAmount - Amount of assets to deposit as a decimal string (e.g., \"1.5\")\n * @property {number | string} chainId - ID of the chain where the deposit will occur\n * @property {number} [slippage] - Maximum acceptable slippage in basis points (e.g., 100 for 1%)\n */\ninterface PrepareDepositTransactionDataParams {\n yieldType: string;\n recipientAddress: Address;\n depositToken: Address;\n depositAmount: string;\n chainId: ChainId;\n slippage?: number;\n}\n\n/**\n * Prepares the transaction data needed to deposit assets into a vault\n *\n * This function calculates the minimum amount of vault tokens to be minted based on\n * the current exchange rate and the specified slippage tolerance. It automatically\n * resolves the vault from yieldType, depositToken, and chainId parameters.\n *\n * ```typescript\n * const depositData = await prepareDepositTransactionData({\n * yieldType: 'PRIME',\n * recipientAddress: '0x1234...',\n * depositToken: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', // USDC\n * depositAmount: \"1.0\",\n * chainId: 1,\n * slippage: 100, // 1% slippage (100 bps)\n * });\n * ```\n *\n * @param {PrepareDepositTransactionDataParams} params - Parameters for the deposit operation\n * @returns {Promise<DepositTransactionData>} Promise resolving to the prepared transaction data\n * @throws {APIError} If vault cannot be resolved, asset not found, or contracts not configured\n */\nexport async function prepareDepositTransactionData(\n params: PrepareDepositTransactionDataParams\n): Promise<DepositTransactionData> {\n const {\n yieldType,\n depositToken,\n depositAmount,\n chainId,\n slippage = DEFAULT_DEPOSIT_SLIPPAGE,\n } = params;\n\n try {\n const normalizedChainId = toChainId(chainId);\n\n // Implement vault resolution using findVaultByConfig\n let vault: EarnVault | null;\n try {\n vault = await findVaultByConfig({\n depositTokenAddress: depositToken,\n yieldType: yieldType,\n chainId: normalizedChainId,\n });\n } catch (error) {\n throw new APIError(\n `Failed to resolve vault for token ${depositToken} with yield type ${yieldType} on chain ${normalizedChainId}: ${\n error instanceof Error ? error.message : \"Unknown error\"\n }`,\n {\n endpoint: \"prepareDepositTransactionData\",\n cause: error,\n }\n );\n }\n\n // Check if vault was found\n if (!vault) {\n throw new APIError(\n `No vault found for token address ${depositToken} with yield type '${yieldType}' on chain ${normalizedChainId}. This combination may not be supported.`,\n {\n endpoint: \"prepareDepositTransactionData\",\n }\n );\n }\n\n // Fetch the asset metadata for the deposit token\n let asset: SupportedAsset | null = null;\n const assets = await fetchSupportedAssets({ address: depositToken });\n if (assets.length > 0) {\n // Find the asset for the correct chain\n asset =\n assets.find((a) => a.supportedChains.includes(normalizedChainId)) ||\n assets[0] ||\n null;\n }\n\n if (!asset) {\n throw new APIError(\n `Asset metadata not found for token ${depositToken} on chain ${normalizedChainId}`,\n {\n endpoint: \"prepareDepositTransactionData\",\n }\n );\n }\n\n // Verify transaction data includes correct Nucleus contract addresses\n const tellerAddress = vault.Nucleus.tellerAddressId as Address;\n const accountantAddress = vault.Nucleus.accountantAddressId as Address;\n const depositAssetAddress = asset.address as Address;\n\n // Get exchange rate from accountant (returns tuple from multicall)\n const [depositAssetDecimalsResult, rateInQuoteResult] =\n await getRateInQuoteWithAssetDecimals({\n assetAddress: depositAssetAddress,\n accountantAddress: accountantAddress,\n chainId: normalizedChainId,\n });\n\n // Check decimals call result\n if (depositAssetDecimalsResult.status === \"failure\") {\n throw new APIError(\n `Failed to get asset decimals: ${depositAssetDecimalsResult.error?.message || \"Unknown error\"}`,\n {\n endpoint: \"prepareDepositTransactionData\",\n cause: depositAssetDecimalsResult.error,\n }\n );\n }\n\n // Check rate call result\n if (rateInQuoteResult.status === \"failure\") {\n throw new APIError(\n `Failed to get exchange rate: ${rateInQuoteResult.error?.message || \"Unknown error\"}`,\n {\n endpoint: \"prepareDepositTransactionData\",\n cause: rateInQuoteResult.error,\n }\n );\n }\n\n // Use decimals from API instead of on-chain call\n const depositAmountAsBigInt = parseUnits(depositAmount, asset.decimals);\n\n // Get vault shares asset decimals for minimum mint calculation\n const vaultSharesAssets = await fetchSupportedAssets({\n address: vault.Nucleus.boringVaultAddressId,\n });\n\n if (vaultSharesAssets.length === 0) {\n throw new APIError(\n `Vault shares token not found in supported assets: ${vault.Nucleus.boringVaultAddressId}`,\n { endpoint: \"prepareDepositTransactionData\" }\n );\n }\n\n const minimumMint = calculateMinimumMint(\n depositAmountAsBigInt,\n rateInQuoteResult.result,\n vaultSharesAssets[0].decimals,\n slippage\n );\n\n return {\n abi: TellerAbi,\n address: tellerAddress,\n functionName: \"deposit\",\n args: [depositAssetAddress, depositAmountAsBigInt, minimumMint],\n chainId: normalizedChainId,\n };\n } catch (error) {\n // Re-throw APIError as-is\n if (error instanceof APIError) {\n throw error;\n }\n\n // Wrap other errors with context\n throw new APIError(\n `Failed to prepare deposit transaction: ${\n error instanceof Error ? error.message : String(error)\n }`,\n {\n endpoint: \"prepareDepositTransactionData\",\n cause: error,\n }\n );\n }\n}\n\n/**\n * Parameters required for preparing an approval transaction\n * @interface PrepareApproveDepositTokenParams\n * @property {Address} depositToken - Token contract address to approve\n * @property {Address} boringVaultAddress - Address of the BoringVault to approve spending\n * @property {string} [depositAmount] - Optional amount to approve (defaults to maximum approval)\n * @property {number | string} chainId - ID of the chain where the approval will occur\n */\ninterface PrepareApproveDepositTokenParams {\n depositToken: Address;\n boringVaultAddress: Address;\n depositAmount?: string;\n chainId: ChainId;\n}\n\n/**\n * Result object containing transaction data for an ERC20 approval operation\n * @interface ApproveDepositTokenTransactionData\n * @property {typeof erc20Abi} abi - ABI for the ERC20 token contract\n * @property {Address} address - Address of the ERC20 token being approved\n * @property {'approve'} functionName - Name of the function to call\n * @property {[Address, bigint]} args - Arguments for the approve function:\n * [spender (boringVault address), amount]\n */\ninterface ApproveDepositTokenTransactionData {\n abi: typeof erc20Abi;\n address: Address;\n functionName: \"approve\";\n args: [Address, bigint];\n}\n\n/**\n * Prepares the transaction data needed to approve a deposit token for the vault\n *\n * This function prepares an ERC20 approval transaction that allows the vault's\n * BoringVault contract to spend the user's deposit tokens.\n *\n * @example\n * ```typescript\n * const approveData = await prepareApproveDepositToken({\n * depositToken: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', // USDC\n * boringVaultAddress: '0x1234...',\n * depositAmount: \"1000.0\", // Approve 1000 USDC\n * chainId: 1,\n * });\n * ```\n *\n * @param {PrepareApproveDepositTokenParams} params - Parameters for the approval operation\n * @returns {Promise<ApproveDepositTokenTransactionData>} Promise resolving to the prepared transaction data\n * @throws {APIError} If parameters are invalid\n */\nexport async function prepareApproveDepositToken(\n params: PrepareApproveDepositTokenParams\n): Promise<ApproveDepositTokenTransactionData> {\n const { depositToken, boringVaultAddress, depositAmount } = params;\n\n try {\n // Get asset decimals for amount calculation\n let decimals = 18; // Default to 18 decimals\n const assets = await fetchSupportedAssets({ address: depositToken });\n if (assets.length > 0) {\n decimals = assets[0].decimals;\n }\n\n // Use decimals from API instead of on-chain call\n const depositAmountAsBigInt = depositAmount\n ? parseUnits(depositAmount, decimals)\n : DEFAULT_APPROVAL_AMOUNT;\n\n return {\n abi: erc20Abi,\n address: depositToken,\n functionName: \"approve\",\n args: [boringVaultAddress, depositAmountAsBigInt],\n };\n } catch (error) {\n // Re-throw APIError as-is\n if (error instanceof APIError) {\n throw error;\n }\n\n // Wrap other errors\n throw new APIError(\n `Failed to prepare approval transaction: ${\n error instanceof Error ? error.message : String(error)\n }`,\n {\n endpoint: \"prepareApproveDepositToken\",\n cause: error,\n }\n );\n }\n}\n\nexport type {\n ApproveDepositTokenTransactionData,\n DepositTransactionData,\n PrepareDepositTransactionDataParams,\n};\n","/**\n * ERC2612 Permit ABI\n *\n * Standard ERC20 + ERC2612 permit extension interface.\n * Enables off-chain signed approval (permit) to combine approval + transfer in single transaction.\n *\n * Reference: https://eips.ethereum.org/EIPS/eip-2612\n */\n\nexport const erc2612Abi = [\n // Standard ERC20 functions (subset needed for permit flow)\n {\n constant: true,\n inputs: [{ name: \"_owner\", type: \"address\" }],\n name: \"nonces\",\n outputs: [{ name: \"\", type: \"uint256\" }],\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"DOMAIN_SEPARATOR\",\n outputs: [{ name: \"\", type: \"bytes32\" }],\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n { name: \"owner\", type: \"address\" },\n { name: \"spender\", type: \"address\" },\n { name: \"value\", type: \"uint256\" },\n { name: \"deadline\", type: \"uint256\" },\n { name: \"v\", type: \"uint8\" },\n { name: \"r\", type: \"bytes32\" },\n { name: \"s\", type: \"bytes32\" },\n ],\n name: \"permit\",\n outputs: [],\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"name\",\n outputs: [{ name: \"\", type: \"string\" }],\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"version\",\n outputs: [{ name: \"\", type: \"string\" }],\n type: \"function\",\n },\n] as const;\n\n/**\n * Standard ERC20 ABI (subset for basic token operations)\n */\nexport const erc20Abi = [\n {\n constant: true,\n inputs: [{ name: \"_owner\", type: \"address\" }],\n name: \"balanceOf\",\n outputs: [{ name: \"balance\", type: \"uint256\" }],\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n { name: \"_owner\", type: \"address\" },\n { name: \"_spender\", type: \"address\" },\n ],\n name: \"allowance\",\n outputs: [{ name: \"remaining\", type: \"uint256\" }],\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n { name: \"_spender\", type: \"address\" },\n { name: \"_value\", type: \"uint256\" },\n ],\n name: \"approve\",\n outputs: [{ name: \"\", type: \"bool\" }],\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n { name: \"_to\", type: \"address\" },\n { name: \"_value\", type: \"uint256\" },\n ],\n name: \"transfer\",\n outputs: [{ name: \"\", type: \"bool\" }],\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n { name: \"_from\", type: \"address\" },\n { name: \"_to\", type: \"address\" },\n { name: \"_value\", type: \"uint256\" },\n ],\n name: \"transferFrom\",\n outputs: [{ name: \"\", type: \"bool\" }],\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"decimals\",\n outputs: [{ name: \"\", type: \"uint8\" }],\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"symbol\",\n outputs: [{ name: \"\", type: \"string\" }],\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"totalSupply\",\n outputs: [{ name: \"\", type: \"uint256\" }],\n type: \"function\",\n },\n] as const;\n\n/**\n * Permit-capable ERC20 ABI (combined ERC20 + ERC2612)\n */\nexport const permitCapableErc20Abi = [\n ...erc20Abi,\n // Add permit-specific functions\n {\n constant: true,\n inputs: [{ name: \"_owner\", type: \"address\" }],\n name: \"nonces\",\n outputs: [{ name: \"\", type: \"uint256\" }],\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"DOMAIN_SEPARATOR\",\n outputs: [{ name: \"\", type: \"bytes32\" }],\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n { name: \"owner\", type: \"address\" },\n { name: \"spender\", type: \"address\" },\n { name: \"value\", type: \"uint256\" },\n { name: \"deadline\", type: \"uint256\" },\n { name: \"v\", type: \"uint8\" },\n { name: \"r\", type: \"bytes32\" },\n { name: \"s\", type: \"bytes32\" },\n ],\n name: \"permit\",\n outputs: [],\n type: \"function\",\n },\n] as const;\n","/**\n * @file Deposit with permit functionality for Nucleus vaults\n * @module vaults/deposit/deposit-with-permit\n */\n\nimport {\n parseUnits,\n hexToSignature,\n encodeFunctionData,\n type Address,\n type Hex,\n type TypedDataDomain,\n} from \"viem\";\nimport { getRateInQuoteWithAssetDecimals } from \"../../api/accountant\";\nimport {\n fetchSupportedAssets,\n findVaultByConfig,\n} from \"../../api/earn-sdk-client\";\nimport { toChainId, type ChainId } from \"../../api/vault-config\";\nimport { DEFAULT_DEPOSIT_SLIPPAGE } from \"../../constants\";\nimport { erc2612Abi } from \"../../contracts/erc2612-abi\";\nimport { TellerAbi } from \"../../contracts/teller-abi\";\nimport { getClient } from \"../../lib/viem/client\";\nimport type { EarnVault, SupportedAsset, YieldType } from \"../../types/earn-sdk-api\";\nimport { APIError } from \"../../types/earn-sdk-api\";\nimport { calculateMinimumMint } from \"./utils\";\n\n/**\n * T008: EIP-2612 Permit type definition\n * Standard structure for permit typed data per EIP-2612 specification\n */\nexport const PERMIT_TYPES = {\n Permit: [\n { name: \"owner\", type: \"address\" },\n { name: \"spender\", type: \"address\" },\n { name: \"value\", type: \"uint256\" },\n { name: \"nonce\", type: \"uint256\" },\n { name: \"deadline\", type: \"uint256\" },\n ],\n} as const;\n\n/**\n * T009: Complete EIP-712 typed data for permit signature\n * Returned by prepareDepositPermitSignature() ready for wallet signing\n *\n * @property domain - EIP-712 domain separator\n * @property types - EIP-2612 Permit type structure\n * @property message - Permit message fields\n * @property primaryType - Always \"Permit\" for EIP-2612\n */\nexport interface PermitSignatureData {\n domain: TypedDataDomain;\n types: typeof PERMIT_TYPES;\n message: {\n owner: Address;\n spender: Address;\n value: bigint;\n nonce: bigint;\n deadline: bigint;\n };\n primaryType: \"Permit\";\n}\n\n/**\n * T009: Parsed permit signature components\n * Returned by parsePermitSignature() after converting hex signature\n *\n * @property v - Recovery ID (27 or 28)\n * @property r - First 32 bytes of signature\n * @property s - Second 32 bytes of signature\n */\nexport interface ParsedPermitSignature {\n v: number;\n r: Hex;\n s: Hex;\n}\n\n/**\n * T009: Parameters for prepareDepositPermitSignature\n * Input parameters for generating permit typed data\n *\n * @property yieldType - Vault yield strategy\n * @property depositToken - Token contract address to deposit\n * @property depositAmount - Deposit amount as decimal string\n * @property recipientAddress - User address (permit owner)\n * @property chainId - Blockchain network ID\n * @property deadline - Optional permit expiration (defaults to 1 hour)\n */\nexport interface PrepareDepositPermitSignatureParams {\n yieldType: YieldType;\n depositToken: Address;\n depositAmount: string;\n recipientAddress: Address;\n chainId: number;\n deadline?: bigint;\n}\n\n/**\n * T009: Encoded transaction data for permit deposit\n * Returned by updated prepareDepositWithPermitTransactionData()\n *\n * @property data - Hex-encoded function call data\n * @property address - Teller contract address\n * @property chainId - Chain ID for transaction\n */\nexport interface EncodedDepositWithPermitData {\n data: Hex;\n address: Address;\n chainId: number;\n}\n\n/**\n * T018-T030: Prepare complete EIP-712 typed data for permit signature\n *\n * Reads token metadata (name, version, nonce) from the blockchain and\n * constructs the complete EIP-712 structure for wallet signing.\n *\n * @param params - Permit signature parameters\n * @returns Complete EIP-712 typed data ready for signing\n * @throws {APIError} If token doesn't support EIP-2612, vault not found, or chain unsupported\n *\n * @example\n * ```typescript\n * const permitData = await prepareDepositPermitSignature({\n * yieldType: 'PRIME',\n * depositToken: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', // USDC\n * depositAmount: '1000.0',\n * recipientAddress: userAddress,\n * chainId: 1,\n * deadline: BigInt(Math.floor(Date.now() / 1000) + 3600),\n * });\n *\n * // Sign with wallet\n * const signature = await signTypedData(permitData);\n * ```\n */\nexport async function prepareDepositPermitSignature(\n params: PrepareDepositPermitSignatureParams\n): Promise<PermitSignatureData> {\n const {\n yieldType,\n depositToken,\n depositAmount,\n recipientAddress,\n chainId,\n deadline,\n } = params;\n\n try {\n const normalizedChainId = toChainId(chainId);\n\n // T019: Implement vault resolution using findVaultByConfig\n let vault: EarnVault | null;\n try {\n vault = await findVaultByConfig({\n depositTokenAddress: depositToken,\n yieldType: yieldType,\n chainId: normalizedChainId,\n });\n } catch (error) {\n throw new APIError(\n `Failed to resolve vault for token ${depositToken} with yield type ${yieldType} on chain ${normalizedChainId}: ${\n error instanceof Error ? error.message : \"Unknown error\"\n }`,\n {\n endpoint: \"prepareDepositPermitSignature\",\n cause: error,\n }\n );\n }\n\n // T028: Check if vault was found\n if (!vault) {\n