{ "version": "0.1.0", "name": "kamino_vault", "instructions": [ { "name": "initVault", "accounts": [ { "name": "adminAuthority", "isMut": true, "isSigner": true }, { "name": "vaultState", "isMut": true, "isSigner": false }, { "name": "baseVaultAuthority", "isMut": false, "isSigner": false }, { "name": "tokenVault", "isMut": true, "isSigner": false }, { "name": "baseTokenMint", "isMut": false, "isSigner": false }, { "name": "sharesMint", "isMut": true, "isSigner": false }, { "name": "adminTokenAccount", "isMut": true, "isSigner": false }, { "name": "systemProgram", "isMut": false, "isSigner": false }, { "name": "rent", "isMut": false, "isSigner": false }, { "name": "tokenProgram", "isMut": false, "isSigner": false }, { "name": "sharesTokenProgram", "isMut": false, "isSigner": false } ], "args": [] }, { "name": "updateReserveAllocation", "accounts": [ { "name": "signer", "isMut": true, "isSigner": true }, { "name": "vaultState", "isMut": true, "isSigner": false }, { "name": "baseVaultAuthority", "isMut": false, "isSigner": false }, { "name": "reserveCollateralMint", "isMut": true, "isSigner": false }, { "name": "reserve", "isMut": false, "isSigner": false }, { "name": "ctokenVault", "isMut": true, "isSigner": false }, { "name": "reserveCollateralTokenProgram", "isMut": false, "isSigner": false }, { "name": "systemProgram", "isMut": false, "isSigner": false }, { "name": "rent", "isMut": false, "isSigner": false } ], "args": [ { "name": "weight", "type": "u64" }, { "name": "cap", "type": "u64" } ] }, { "name": "deposit", "accounts": [ { "name": "user", "isMut": true, "isSigner": true }, { "name": "vaultState", "isMut": true, "isSigner": false }, { "name": "tokenVault", "isMut": true, "isSigner": false }, { "name": "tokenMint", "isMut": false, "isSigner": false }, { "name": "baseVaultAuthority", "isMut": false, "isSigner": false }, { "name": "sharesMint", "isMut": true, "isSigner": false }, { "name": "userTokenAta", "isMut": true, "isSigner": false }, { "name": "userSharesAta", "isMut": true, "isSigner": false }, { "name": "klendProgram", "isMut": false, "isSigner": false }, { "name": "tokenProgram", "isMut": false, "isSigner": false }, { "name": "sharesTokenProgram", "isMut": false, "isSigner": false } ], "args": [ { "name": "maxAmount", "type": "u64" } ] }, { "name": "withdraw", "accounts": [ { "name": "withdrawFromAvailable", "accounts": [ { "name": "user", "isMut": true, "isSigner": true }, { "name": "vaultState", "isMut": true, "isSigner": false }, { "name": "tokenVault", "isMut": true, "isSigner": false }, { "name": "baseVaultAuthority", "isMut": false, "isSigner": false }, { "name": "userTokenAta", "isMut": true, "isSigner": false }, { "name": "tokenMint", "isMut": true, "isSigner": false }, { "name": "userSharesAta", "isMut": true, "isSigner": false }, { "name": "sharesMint", "isMut": true, "isSigner": false }, { "name": "tokenProgram", "isMut": false, "isSigner": false }, { "name": "sharesTokenProgram", "isMut": false, "isSigner": false }, { "name": "klendProgram", "isMut": false, "isSigner": false } ] }, { "name": "withdrawFromReserveAccounts", "accounts": [ { "name": "vaultState", "isMut": true, "isSigner": false }, { "name": "reserve", "isMut": true, "isSigner": false }, { "name": "ctokenVault", "isMut": true, "isSigner": false }, { "name": "lendingMarket", "isMut": false, "isSigner": false }, { "name": "lendingMarketAuthority", "isMut": false, "isSigner": false }, { "name": "reserveLiquiditySupply", "isMut": true, "isSigner": false }, { "name": "reserveCollateralMint", "isMut": true, "isSigner": false }, { "name": "reserveCollateralTokenProgram", "isMut": false, "isSigner": false }, { "name": "instructionSysvarAccount", "isMut": false, "isSigner": false } ] } ], "args": [ { "name": "sharesAmount", "type": "u64" } ] }, { "name": "invest", "accounts": [ { "name": "payer", "isMut": true, "isSigner": true }, { "name": "payerTokenAccount", "isMut": true, "isSigner": false }, { "name": "vaultState", "isMut": true, "isSigner": false }, { "name": "tokenVault", "isMut": true, "isSigner": false }, { "name": "tokenMint", "isMut": true, "isSigner": false }, { "name": "baseVaultAuthority", "isMut": true, "isSigner": false }, { "name": "ctokenVault", "isMut": true, "isSigner": false }, { "name": "reserve", "isMut": true, "isSigner": false, "docs": [ "CPI accounts" ] }, { "name": "lendingMarket", "isMut": false, "isSigner": false }, { "name": "lendingMarketAuthority", "isMut": false, "isSigner": false }, { "name": "reserveLiquiditySupply", "isMut": true, "isSigner": false }, { "name": "reserveCollateralMint", "isMut": true, "isSigner": false }, { "name": "klendProgram", "isMut": false, "isSigner": false }, { "name": "reserveCollateralTokenProgram", "isMut": false, "isSigner": false }, { "name": "tokenProgram", "isMut": false, "isSigner": false }, { "name": "instructionSysvarAccount", "isMut": false, "isSigner": false } ], "args": [] }, { "name": "updateVaultConfig", "accounts": [ { "name": "vaultAdminAuthority", "isMut": false, "isSigner": true }, { "name": "vaultState", "isMut": true, "isSigner": false }, { "name": "klendProgram", "isMut": false, "isSigner": false } ], "args": [ { "name": "entry", "type": { "defined": "VaultConfigField" } }, { "name": "data", "type": "bytes" } ] }, { "name": "withdrawPendingFees", "accounts": [ { "name": "vaultAdminAuthority", "isMut": true, "isSigner": true }, { "name": "vaultState", "isMut": true, "isSigner": false }, { "name": "reserve", "isMut": true, "isSigner": false }, { "name": "tokenVault", "isMut": true, "isSigner": false }, { "name": "ctokenVault", "isMut": true, "isSigner": false }, { "name": "baseVaultAuthority", "isMut": true, "isSigner": false }, { "name": "tokenAta", "isMut": true, "isSigner": false }, { "name": "tokenMint", "isMut": true, "isSigner": false }, { "name": "lendingMarket", "isMut": false, "isSigner": false, "docs": [ "CPI accounts" ] }, { "name": "lendingMarketAuthority", "isMut": false, "isSigner": false }, { "name": "reserveLiquiditySupply", "isMut": true, "isSigner": false }, { "name": "reserveCollateralMint", "isMut": true, "isSigner": false }, { "name": "klendProgram", "isMut": false, "isSigner": false }, { "name": "tokenProgram", "isMut": false, "isSigner": false }, { "name": "reserveCollateralTokenProgram", "isMut": false, "isSigner": false }, { "name": "instructionSysvarAccount", "isMut": false, "isSigner": false } ], "args": [] }, { "name": "updateAdmin", "accounts": [ { "name": "pendingAdmin", "isMut": true, "isSigner": true }, { "name": "vaultState", "isMut": true, "isSigner": false } ], "args": [] }, { "name": "giveUpPendingFees", "accounts": [ { "name": "vaultAdminAuthority", "isMut": true, "isSigner": true }, { "name": "vaultState", "isMut": true, "isSigner": false }, { "name": "klendProgram", "isMut": false, "isSigner": false } ], "args": [ { "name": "maxAmountToGiveUp", "type": "u64" } ] }, { "name": "initializeSharesMetadata", "accounts": [ { "name": "vaultAdminAuthority", "isMut": true, "isSigner": true }, { "name": "vaultState", "isMut": false, "isSigner": false }, { "name": "sharesMint", "isMut": false, "isSigner": false }, { "name": "baseVaultAuthority", "isMut": false, "isSigner": false }, { "name": "sharesMetadata", "isMut": true, "isSigner": false }, { "name": "systemProgram", "isMut": false, "isSigner": false }, { "name": "rent", "isMut": false, "isSigner": false }, { "name": "metadataProgram", "isMut": false, "isSigner": false } ], "args": [ { "name": "name", "type": "string" }, { "name": "symbol", "type": "string" }, { "name": "uri", "type": "string" } ] }, { "name": "updateSharesMetadata", "accounts": [ { "name": "vaultAdminAuthority", "isMut": true, "isSigner": true }, { "name": "vaultState", "isMut": false, "isSigner": false }, { "name": "baseVaultAuthority", "isMut": false, "isSigner": false }, { "name": "sharesMetadata", "isMut": true, "isSigner": false }, { "name": "metadataProgram", "isMut": false, "isSigner": false } ], "args": [ { "name": "name", "type": "string" }, { "name": "symbol", "type": "string" }, { "name": "uri", "type": "string" } ] }, { "name": "withdrawFromAvailable", "accounts": [ { "name": "user", "isMut": true, "isSigner": true }, { "name": "vaultState", "isMut": true, "isSigner": false }, { "name": "tokenVault", "isMut": true, "isSigner": false }, { "name": "baseVaultAuthority", "isMut": false, "isSigner": false }, { "name": "userTokenAta", "isMut": true, "isSigner": false }, { "name": "tokenMint", "isMut": true, "isSigner": false }, { "name": "userSharesAta", "isMut": true, "isSigner": false }, { "name": "sharesMint", "isMut": true, "isSigner": false }, { "name": "tokenProgram", "isMut": false, "isSigner": false }, { "name": "sharesTokenProgram", "isMut": false, "isSigner": false }, { "name": "klendProgram", "isMut": false, "isSigner": false } ], "args": [ { "name": "sharesAmount", "type": "u64" } ] } ], "accounts": [ { "name": "Reserve", "type": { "kind": "struct", "fields": [ { "name": "version", "docs": [ "Version of the reserve" ], "type": "u64" }, { "name": "lastUpdate", "docs": [ "Last slot when supply and rates updated" ], "type": { "defined": "LastUpdate" } }, { "name": "lendingMarket", "docs": [ "Lending market address" ], "type": "publicKey" }, { "name": "farmCollateral", "type": "publicKey" }, { "name": "farmDebt", "type": "publicKey" }, { "name": "liquidity", "docs": [ "Reserve liquidity" ], "type": { "defined": "ReserveLiquidity" } }, { "name": "reserveLiquidityPadding", "type": { "array": [ "u64", 150 ] } }, { "name": "collateral", "docs": [ "Reserve collateral" ], "type": { "defined": "ReserveCollateral" } }, { "name": "reserveCollateralPadding", "type": { "array": [ "u64", 150 ] } }, { "name": "config", "docs": [ "Reserve configuration values" ], "type": { "defined": "ReserveConfig" } }, { "name": "configPadding", "type": { "array": [ "u64", 116 ] } }, { "name": "borrowedAmountOutsideElevationGroup", "type": "u64" }, { "name": "borrowedAmountsAgainstThisReserveInElevationGroups", "docs": [ "Amount of token borrowed in lamport of debt asset in the given", "elevation group when this reserve is part of the collaterals." ], "type": { "array": [ "u64", 32 ] } }, { "name": "padding", "type": { "array": [ "u64", 207 ] } } ] } }, { "name": "VaultState", "type": { "kind": "struct", "fields": [ { "name": "vaultAdminAuthority", "type": "publicKey" }, { "name": "baseVaultAuthority", "type": "publicKey" }, { "name": "baseVaultAuthorityBump", "type": "u64" }, { "name": "tokenMint", "type": "publicKey" }, { "name": "tokenMintDecimals", "type": "u64" }, { "name": "tokenVault", "type": "publicKey" }, { "name": "tokenProgram", "type": "publicKey" }, { "name": "sharesMint", "type": "publicKey" }, { "name": "sharesMintDecimals", "type": "u64" }, { "name": "tokenAvailable", "type": "u64" }, { "name": "sharesIssued", "type": "u64" }, { "name": "availableCrankFunds", "type": "u64" }, { "name": "padding0", "type": "u64" }, { "name": "performanceFeeBps", "type": "u64" }, { "name": "managementFeeBps", "type": "u64" }, { "name": "lastFeeChargeTimestamp", "type": "u64" }, { "name": "prevAumSf", "type": "u128" }, { "name": "pendingFeesSf", "type": "u128" }, { "name": "vaultAllocationStrategy", "type": { "array": [ { "defined": "VaultAllocation" }, 10 ] } }, { "name": "minDepositAmount", "type": "u64" }, { "name": "minWithdrawAmount", "type": "u64" }, { "name": "minInvestAmount", "type": "u64" }, { "name": "minInvestDelaySlots", "type": "u64" }, { "name": "crankFundFeePerReserve", "type": "u64" }, { "name": "pendingAdmin", "type": "publicKey" }, { "name": "cumulativeEarnedInterestSf", "type": "u128" }, { "name": "cumulativeMgmtFeesSf", "type": "u128" }, { "name": "cumulativePerfFeesSf", "type": "u128" }, { "name": "name", "type": { "array": [ "u8", 40 ] } }, { "name": "vaultLookupTable", "type": "publicKey" }, { "name": "vaultFarm", "type": "publicKey" }, { "name": "creationTimestamp", "type": "u64" }, { "name": "padding1", "type": "u64" }, { "name": "allocationAdmin", "type": "publicKey" }, { "name": "padding2", "type": { "array": [ "u128", 242 ] } } ] } } ], "types": [ { "name": "LastUpdate", "docs": [ "Last update state" ], "type": { "kind": "struct", "fields": [ { "name": "slot", "docs": [ "Last slot when updated" ], "type": "u64" }, { "name": "stale", "docs": [ "True when marked stale, false when slot updated" ], "type": "u8" }, { "name": "priceStatus", "docs": [ "Status of the prices used to calculate the last update" ], "type": "u8" }, { "name": "placeholder", "type": { "array": [ "u8", 6 ] } } ] } }, { "name": "BigFractionBytes", "type": { "kind": "struct", "fields": [ { "name": "value", "type": { "array": [ "u64", 4 ] } }, { "name": "padding", "type": { "array": [ "u64", 2 ] } } ] } }, { "name": "ReserveCollateral", "docs": [ "Reserve collateral" ], "type": { "kind": "struct", "fields": [ { "name": "mintPubkey", "docs": [ "Reserve collateral mint address" ], "type": "publicKey" }, { "name": "mintTotalSupply", "docs": [ "Reserve collateral mint supply, used for exchange rate" ], "type": "u64" }, { "name": "supplyVault", "docs": [ "Reserve collateral supply address" ], "type": "publicKey" }, { "name": "padding1", "type": { "array": [ "u128", 32 ] } }, { "name": "padding2", "type": { "array": [ "u128", 32 ] } } ] } }, { "name": "ReserveConfig", "docs": [ "Reserve configuration values" ], "type": { "kind": "struct", "fields": [ { "name": "status", "docs": [ "Status of the reserve Active/Obsolete/Hidden" ], "type": "u8" }, { "name": "assetTier", "docs": [ "Asset tier -> 0 - regular (collateral & debt), 1 - isolated collateral, 2 - isolated debt" ], "type": "u8" }, { "name": "hostFixedInterestRateBps", "docs": [ "Flat rate that goes to the host" ], "type": "u16" }, { "name": "reserved2", "docs": [ "[DEPRECATED] Boost for side (debt or collateral)" ], "type": { "array": [ "u8", 2 ] } }, { "name": "reserved3", "docs": [ "[DEPRECATED] Reward points multiplier per obligation type" ], "type": { "array": [ "u8", 8 ] } }, { "name": "protocolTakeRatePct", "docs": [ "Protocol take rate is the amount borrowed interest protocol receives, as a percentage" ], "type": "u8" }, { "name": "protocolLiquidationFeePct", "docs": [ "Cut of the liquidation bonus that the protocol receives, as a percentage" ], "type": "u8" }, { "name": "loanToValuePct", "docs": [ "Target ratio of the value of borrows to deposits, as a percentage", "0 if use as collateral is disabled" ], "type": "u8" }, { "name": "liquidationThresholdPct", "docs": [ "Loan to value ratio at which an obligation can be liquidated, as percentage" ], "type": "u8" }, { "name": "minLiquidationBonusBps", "docs": [ "Minimum bonus a liquidator receives when repaying part of an unhealthy obligation, as bps" ], "type": "u16" }, { "name": "maxLiquidationBonusBps", "docs": [ "Maximum bonus a liquidator receives when repaying part of an unhealthy obligation, as bps" ], "type": "u16" }, { "name": "badDebtLiquidationBonusBps", "docs": [ "Bad debt liquidation bonus for an undercollateralized obligation, as bps" ], "type": "u16" }, { "name": "deleveragingMarginCallPeriodSecs", "docs": [ "Time in seconds that must pass before redemptions are enabled after the deposit limit is", "crossed.", "Only relevant when `autodeleverage_enabled == 1`, and must not be 0 in such case." ], "type": "u64" }, { "name": "deleveragingThresholdDecreaseBpsPerDay", "docs": [ "The rate at which the deleveraging threshold decreases, in bps per day.", "Only relevant when `autodeleverage_enabled == 1`, and must not be 0 in such case." ], "type": "u64" }, { "name": "fees", "docs": [ "Program owner fees assessed, separate from gains due to interest accrual" ], "type": { "defined": "ReserveFees" } }, { "name": "borrowRateCurve", "docs": [ "Borrow rate curve based on utilization" ], "type": { "defined": "BorrowRateCurve" } }, { "name": "borrowFactorPct", "docs": [ "Borrow factor in percentage - used for risk adjustment" ], "type": "u64" }, { "name": "depositLimit", "docs": [ "Maximum deposit limit of liquidity in native units, u64::MAX for inf" ], "type": "u64" }, { "name": "borrowLimit", "docs": [ "Maximum amount borrowed, u64::MAX for inf, 0 to disable borrows (protected deposits)" ], "type": "u64" }, { "name": "tokenInfo", "docs": [ "Token id from TokenInfos struct" ], "type": { "defined": "TokenInfo" } }, { "name": "depositWithdrawalCap", "docs": [ "Deposit withdrawal caps - deposit & redeem" ], "type": { "defined": "WithdrawalCaps" } }, { "name": "debtWithdrawalCap", "docs": [ "Debt withdrawal caps - borrow & repay" ], "type": { "defined": "WithdrawalCaps" } }, { "name": "elevationGroups", "type": { "array": [ "u8", 20 ] } }, { "name": "disableUsageAsCollOutsideEmode", "type": "u8" }, { "name": "utilizationLimitBlockBorrowingAbovePct", "docs": [ "Utilization (in percentage) above which borrowing is blocked. 0 to disable." ], "type": "u8" }, { "name": "autodeleverageEnabled", "docs": [ "Whether this reserve should be subject to auto-deleveraging after deposit or borrow limit is", "crossed.", "Besides this flag, the lending market's flag also needs to be enabled (logical `AND`).", "**NOTE:** the manual \"target LTV\" deleveraging (enabled by the risk council for individual", "obligations) is NOT affected by this flag." ], "type": "u8" }, { "name": "reserved1", "type": { "array": [ "u8", 1 ] } }, { "name": "borrowLimitOutsideElevationGroup", "docs": [ "Maximum amount liquidity of this reserve borrowed outside all elevation groups", "- u64::MAX for inf", "- 0 to disable borrows outside elevation groups" ], "type": "u64" }, { "name": "borrowLimitAgainstThisCollateralInElevationGroup", "docs": [ "Defines the maximum amount (in lamports of elevation group debt asset)", "that can be borrowed when this reserve is used as collateral.", "- u64::MAX for inf", "- 0 to disable borrows in this elevation group (expected value for the debt asset)" ], "type": { "array": [ "u64", 32 ] } }, { "name": "deleveragingBonusIncreaseBpsPerDay", "docs": [ "The rate at which the deleveraging-related liquidation bonus increases, in bps per day.", "Only relevant when `autodeleverage_enabled == 1`, and must not be 0 in such case." ], "type": "u64" } ] } }, { "name": "ReserveFees", "docs": [ "Additional fee information on a reserve", "", "These exist separately from interest accrual fees, and are specifically for the program owner", "and referral fee. The fees are paid out as a percentage of liquidity token amounts during", "repayments and liquidations." ], "type": { "kind": "struct", "fields": [ { "name": "borrowFeeSf", "docs": [ "Fee assessed on `BorrowObligationLiquidity`, as scaled fraction (60 bits fractional part)", "Must be between `0` and `2^60`, such that `2^60 = 1`. A few examples for", "clarity:", "1% = (1 << 60) / 100 = 11529215046068470", "0.01% (1 basis point) = 115292150460685", "0.00001% (Aave borrow fee) = 115292150461" ], "type": "u64" }, { "name": "flashLoanFeeSf", "docs": [ "Fee for flash loan, expressed as scaled fraction.", "0.3% (Aave flash loan fee) = 0.003 * 2^60 = 3458764513820541" ], "type": "u64" }, { "name": "padding", "docs": [ "Used for allignment" ], "type": { "array": [ "u8", 8 ] } } ] } }, { "name": "ReserveLiquidity", "docs": [ "Reserve liquidity" ], "type": { "kind": "struct", "fields": [ { "name": "mintPubkey", "docs": [ "Reserve liquidity mint address" ], "type": "publicKey" }, { "name": "supplyVault", "docs": [ "Reserve liquidity supply address" ], "type": "publicKey" }, { "name": "feeVault", "docs": [ "Reserve liquidity fee collection address" ], "type": "publicKey" }, { "name": "availableAmount", "docs": [ "Reserve liquidity available" ], "type": "u64" }, { "name": "borrowedAmountSf", "docs": [ "Reserve liquidity borrowed (scaled fraction)" ], "type": "u128" }, { "name": "marketPriceSf", "docs": [ "Reserve liquidity market price in quote currency (scaled fraction)" ], "type": "u128" }, { "name": "marketPriceLastUpdatedTs", "docs": [ "Unix timestamp of the market price (from the oracle)" ], "type": "u64" }, { "name": "mintDecimals", "docs": [ "Reserve liquidity mint decimals" ], "type": "u64" }, { "name": "depositLimitCrossedTimestamp", "docs": [ "Timestamp when the last refresh reserve detected that the liquidity amount is above the deposit cap. When this threshold is crossed, then redemptions (auto-deleverage) are enabled.", "If the threshold is not crossed, then the timestamp is set to 0" ], "type": "u64" }, { "name": "borrowLimitCrossedTimestamp", "docs": [ "Timestamp when the last refresh reserve detected that the borrowed amount is above the borrow cap. When this threshold is crossed, then redemptions (auto-deleverage) are enabled.", "If the threshold is not crossed, then the timestamp is set to 0" ], "type": "u64" }, { "name": "cumulativeBorrowRateBsf", "docs": [ "Reserve liquidity cumulative borrow rate (scaled fraction)" ], "type": { "defined": "BigFractionBytes" } }, { "name": "accumulatedProtocolFeesSf", "docs": [ "Reserve cumulative protocol fees (scaled fraction)" ], "type": "u128" }, { "name": "accumulatedReferrerFeesSf", "docs": [ "Reserve cumulative referrer fees (scaled fraction)" ], "type": "u128" }, { "name": "pendingReferrerFeesSf", "docs": [ "Reserve pending referrer fees, to be claimed in refresh_obligation by referrer or protocol (scaled fraction)" ], "type": "u128" }, { "name": "absoluteReferralRateSf", "docs": [ "Reserve referrer fee absolute rate calculated at each refresh_reserve operation (scaled fraction)" ], "type": "u128" }, { "name": "tokenProgram", "docs": [ "Token program of the liquidity mint" ], "type": "publicKey" }, { "name": "padding2", "type": { "array": [ "u64", 51 ] } }, { "name": "padding3", "type": { "array": [ "u128", 32 ] } } ] } }, { "name": "WithdrawalCaps", "docs": [ "Reserve Withdrawal Caps State" ], "type": { "kind": "struct", "fields": [ { "name": "configCapacity", "type": "i64" }, { "name": "currentTotal", "type": "i64" }, { "name": "lastIntervalStartTimestamp", "type": "u64" }, { "name": "configIntervalLengthSeconds", "type": "u64" } ] } }, { "name": "PriceHeuristic", "type": { "kind": "struct", "fields": [ { "name": "lower", "docs": [ "Lower value of acceptable price" ], "type": "u64" }, { "name": "upper", "docs": [ "Upper value of acceptable price" ], "type": "u64" }, { "name": "exp", "docs": [ "Number of decimals of the previously defined values" ], "type": "u64" } ] } }, { "name": "PythConfiguration", "type": { "kind": "struct", "fields": [ { "name": "price", "docs": [ "Pubkey of the base price feed (disabled if `null` or `default`)" ], "type": "publicKey" } ] } }, { "name": "ScopeConfiguration", "type": { "kind": "struct", "fields": [ { "name": "priceFeed", "docs": [ "Pubkey of the scope price feed (disabled if `null` or `default`)" ], "type": "publicKey" }, { "name": "priceChain", "docs": [ "This is the scope_id price chain that results in a price for the token" ], "type": { "array": [ "u16", 4 ] } }, { "name": "twapChain", "docs": [ "This is the scope_id price chain for the twap" ], "type": { "array": [ "u16", 4 ] } } ] } }, { "name": "SwitchboardConfiguration", "type": { "kind": "struct", "fields": [ { "name": "priceAggregator", "docs": [ "Pubkey of the base price feed (disabled if `null` or `default`)" ], "type": "publicKey" }, { "name": "twapAggregator", "type": "publicKey" } ] } }, { "name": "TokenInfo", "type": { "kind": "struct", "fields": [ { "name": "name", "docs": [ "UTF-8 encoded name of the token (null-terminated)" ], "type": { "array": [ "u8", 32 ] } }, { "name": "heuristic", "docs": [ "Heuristics limits of acceptable price" ], "type": { "defined": "PriceHeuristic" } }, { "name": "maxTwapDivergenceBps", "docs": [ "Max divergence between twap and price in bps" ], "type": "u64" }, { "name": "maxAgePriceSeconds", "type": "u64" }, { "name": "maxAgeTwapSeconds", "type": "u64" }, { "name": "scopeConfiguration", "docs": [ "Scope price configuration" ], "type": { "defined": "ScopeConfiguration" } }, { "name": "switchboardConfiguration", "docs": [ "Switchboard configuration" ], "type": { "defined": "SwitchboardConfiguration" } }, { "name": "pythConfiguration", "docs": [ "Pyth configuration" ], "type": { "defined": "PythConfiguration" } }, { "name": "blockPriceUsage", "type": "u8" }, { "name": "reserved", "type": { "array": [ "u8", 7 ] } }, { "name": "padding", "type": { "array": [ "u64", 19 ] } } ] } }, { "name": "BorrowRateCurve", "type": { "kind": "struct", "fields": [ { "name": "points", "type": { "array": [ { "defined": "CurvePoint" }, 11 ] } } ] } }, { "name": "CurvePoint", "type": { "kind": "struct", "fields": [ { "name": "utilizationRateBps", "type": "u32" }, { "name": "borrowRateBps", "type": "u32" } ] } }, { "name": "VaultConfigField", "type": { "kind": "enum", "variants": [ { "name": "PerformanceFeeBps" }, { "name": "ManagementFeeBps" }, { "name": "MinDepositAmount" }, { "name": "MinWithdrawAmount" }, { "name": "MinInvestAmount" }, { "name": "MinInvestDelaySlots" }, { "name": "CrankFundFeePerReserve" }, { "name": "PendingVaultAdmin" }, { "name": "Name" }, { "name": "LookupTable" }, { "name": "Farm" }, { "name": "AllocationAdmin" } ] } }, { "name": "VaultAllocation", "type": { "kind": "struct", "fields": [ { "name": "reserve", "type": "publicKey" }, { "name": "ctokenVault", "type": "publicKey" }, { "name": "targetAllocationWeight", "type": "u64" }, { "name": "tokenAllocationCap", "docs": [ "Maximum token invested in this reserve" ], "type": "u64" }, { "name": "ctokenVaultBump", "type": "u64" }, { "name": "configPadding", "type": { "array": [ "u64", 127 ] } }, { "name": "ctokenAllocation", "type": "u64" }, { "name": "lastInvestSlot", "type": "u64" }, { "name": "tokenTargetAllocationSf", "type": "u128" }, { "name": "statePadding", "type": { "array": [ "u64", 128 ] } } ] } } ], "errors": [ { "code": 7000, "name": "DepositAmountsZero", "msg": "DepositAmountsZero" }, { "code": 7001, "name": "SharesIssuedAmountDoesNotMatch", "msg": "SharesIssuedAmountDoesNotMatch" }, { "code": 7002, "name": "MathOverflow", "msg": "MathOverflow" }, { "code": 7003, "name": "IntegerOverflow", "msg": "IntegerOverflow" }, { "code": 7004, "name": "WithdrawAmountBelowMinimum", "msg": "Withdrawn amount is below minimum" }, { "code": 7005, "name": "TooMuchLiquidityToWithdraw", "msg": "TooMuchLiquidityToWithdraw" }, { "code": 7006, "name": "ReserveAlreadyExists", "msg": "ReserveAlreadyExists" }, { "code": 7007, "name": "ReserveNotPartOfAllocations", "msg": "ReserveNotPartOfAllocations" }, { "code": 7008, "name": "CouldNotDeserializeAccountAsReserve", "msg": "CouldNotDeserializeAccountAsReserve" }, { "code": 7009, "name": "ReserveNotProvidedInTheAccounts", "msg": "ReserveNotProvidedInTheAccounts" }, { "code": 7010, "name": "ReserveAccountAndKeyMismatch", "msg": "ReserveAccountAndKeyMismatch" }, { "code": 7011, "name": "OutOfRangeOfReserveIndex", "msg": "OutOfRangeOfReserveIndex" }, { "code": 7012, "name": "CannotFindReserveInAllocations", "msg": "OutOfRangeOfReserveIndex" }, { "code": 7013, "name": "InvestAmountBelowMinimum", "msg": "Invested amount is below minimum" }, { "code": 7014, "name": "AdminAuthorityIncorrect", "msg": "AdminAuthorityIncorrect" }, { "code": 7015, "name": "BaseVaultAuthorityIncorrect", "msg": "BaseVaultAuthorityIncorrect" }, { "code": 7016, "name": "BaseVaultAuthorityBumpIncorrect", "msg": "BaseVaultAuthorityBumpIncorrect" }, { "code": 7017, "name": "TokenMintIncorrect", "msg": "TokenMintIncorrect" }, { "code": 7018, "name": "TokenMintDecimalsIncorrect", "msg": "TokenMintDecimalsIncorrect" }, { "code": 7019, "name": "TokenVaultIncorrect", "msg": "TokenVaultIncorrect" }, { "code": 7020, "name": "SharesMintDecimalsIncorrect", "msg": "SharesMintDecimalsIncorrect" }, { "code": 7021, "name": "SharesMintIncorrect", "msg": "SharesMintIncorrect" }, { "code": 7022, "name": "InitialAccountingIncorrect", "msg": "InitialAccountingIncorrect" }, { "code": 7023, "name": "ReserveIsStale", "msg": "Reserve is stale and must be refreshed before any operation" }, { "code": 7024, "name": "NotEnoughLiquidityDisinvestedToSendToUser", "msg": "Not enough liquidity disinvested to send to user" }, { "code": 7025, "name": "BPSValueTooBig", "msg": "BPS value is greater than 10000" }, { "code": 7026, "name": "DepositAmountBelowMinimum", "msg": "Deposited amount is below minimum" }, { "code": 7027, "name": "ReserveSpaceExhausted", "msg": "Vault have no space for new reserves" }, { "code": 7028, "name": "CannotWithdrawFromEmptyVault", "msg": "Cannot withdraw from empty vault" }, { "code": 7029, "name": "TokensDepositedAmountDoesNotMatch", "msg": "TokensDepositedAmountDoesNotMatch" }, { "code": 7030, "name": "AmountToWithdrawDoesNotMatch", "msg": "Amount to withdraw does not match" }, { "code": 7031, "name": "LiquidityToWithdrawDoesNotMatch", "msg": "Liquidity to withdraw does not match" }, { "code": 7032, "name": "UserReceivedAmountDoesNotMatch", "msg": "User received amount does not match" }, { "code": 7033, "name": "SharesBurnedAmountDoesNotMatch", "msg": "Shares burned amount does not match" }, { "code": 7034, "name": "DisinvestedLiquidityAmountDoesNotMatch", "msg": "Disinvested liquidity amount does not match" }, { "code": 7035, "name": "SharesMintedAmountDoesNotMatch", "msg": "SharesMintedAmountDoesNotMatch" }, { "code": 7036, "name": "AUMDecreasedAfterInvest", "msg": "AUM decreased after invest" }, { "code": 7037, "name": "AUMBelowPendingFees", "msg": "AUM is below pending fees" }, { "code": 7038, "name": "DepositAmountsZeroShares", "msg": "Deposit amount results in 0 shares" }, { "code": 7039, "name": "WithdrawResultsInZeroShares", "msg": "Withdraw amount results in 0 shares" }, { "code": 7040, "name": "CannotWithdrawZeroShares", "msg": "Cannot withdraw zero shares" }, { "code": 7041, "name": "ManagementFeeGreaterThanMaxAllowed", "msg": "Management fee is greater than maximum allowed" }, { "code": 7042, "name": "VaultAUMZero", "msg": "Vault assets under management are empty" }, { "code": 7043, "name": "MissingReserveForBatchRefresh", "msg": "Missing reserve for batch refresh" }, { "code": 7044, "name": "MinWithdrawAmountTooBig", "msg": "Min withdraw amount is too big" }, { "code": 7045, "name": "InvestTooSoon", "msg": "Invest is called too soon after last invest" }, { "code": 7046, "name": "WrongAdminOrAllocationAdmin", "msg": "Wrong admin or allocation admin" } ] }