@0dotxyz/p0-ts-sdk 1.0.0-alpha.2
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 +467 -0
- package/dist/dto-farm.types-D9Q3c7Q7.d.cts +1164 -0
- package/dist/dto-farm.types-D9Q3c7Q7.d.ts +1164 -0
- package/dist/index.cjs +30776 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +13703 -0
- package/dist/index.d.ts +13703 -0
- package/dist/index.js +30442 -0
- package/dist/index.js.map +1 -0
- package/dist/vendor.cjs +13597 -0
- package/dist/vendor.cjs.map +1 -0
- package/dist/vendor.d.cts +8820 -0
- package/dist/vendor.d.ts +8820 -0
- package/dist/vendor.js +13428 -0
- package/dist/vendor.js.map +1 -0
- package/package.json +115 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/configs.json","../src/config.ts","../src/errors/transaction-building.errors.ts","../src/utils/pda.utils.ts","../src/constants/oracle.consts.ts","../src/constants/mrgn-program.consts.ts","../src/constants/luts.consts.ts","../src/constants/program-keys.consts.ts","../src/constants/misc.consts.ts","../src/constants/transaction.consts.ts","../src/constants/mints.consts.ts","../src/utils/accounting.utils.ts","../src/utils/conversion.utils.ts","../src/services/transaction/helpers/bundle-simulation.ts","../src/services/transaction/helpers/priority.ts","../src/idl/marginfi_0.1.6.json","../src/idl/index.ts","../src/services/transaction/helpers/decode.ts","../src/services/transaction/helpers/tx-size.ts","../src/services/transaction/helpers/tx-formatting.ts","../src/vendor/spl/errors.ts","../src/vendor/spl/constants.ts","../src/vendor/spl/utils/account.utils.ts","../src/vendor/spl/utils/ata.utils.ts","../src/vendor/spl/utils/instruction.utils.ts","../src/vendor/spl/instructions.ts","../src/services/transaction/actions/wrap-unwrap-sol.ts","../src/services/transaction/types/transaction.types.ts","../src/instructions.ts","../src/services/bank/types/bank.types.ts","../src/services/bank/utils/serialize.utils.ts","../src/types.ts","../src/services/bank/utils/deserialize.utils.ts","../src/vendor/switchboard_pull/idl.json","../src/vendor/switchboard_pull/index.ts","../src/services/price/types/price.types.ts","../src/services/price/utils/swb-data.utils.ts","../src/vendor/pyth_push_oracle/index.ts","../src/services/price/utils/pyth-data.utils.ts","../src/services/price/utils/compute.utils.ts","../src/services/price/utils/serialize.utils.ts","../src/services/price/utils/deserialize.utils.ts","../src/services/price/utils/crankability.utils.ts","../src/services/price/utils/birdeye.utils.ts","../src/services/account/types/account.types.ts","../src/services/account/types/simulation.types.ts","../src/services/account/utils/deserialize.utils.ts","../src/services/account/utils/serialize.utils.ts","../src/services/account/utils/emode.utils.ts","../src/services/account/utils/compute.utils.ts","../src/vendor/klend/constants.ts","../src/vendor/klend/instructions.ts","../src/services/account/actions/account-lifecycle.ts","../src/vendor/klend/klend.service.ts","../src/vendor/klend/utils/klend/serialize.utils.ts","../src/vendor/klend/idl/klend.json","../src/vendor/klend/idl/index.ts","../src/vendor/klend/utils/klend/deserialize.utils.ts","../src/vendor/klend/utils/klend/derive.utils.ts","../src/vendor/single-spl-pool/index.ts","../src/vendor/klend/utils/farms/serialize.utils.ts","../src/vendor/klend/utils/farms/deserialize.utils.ts","../src/sync-instructions.ts","../src/services/account/actions/withdraw.ts","../src/services/account/actions/borrow.ts","../src/services/account/actions/deposit.ts","../src/services/account/actions/flash-loan.ts","../src/services/account/actions/loop.ts","../src/services/account/actions/repay.ts","../src/services/account/actions/emissions.ts","../src/services/account/services/account-simulation.service.ts","../src/services/account/utils/fetch.utils.ts","../src/services/account/utils/max-amounts.utils.ts","../src/services/account/utils/jupiter.utils.ts","../src/services/account/utils/misc.utils.ts","../src/services/price/utils/smart-crank.utils.ts","../src/services/price/actions/oracle-update.ts","../src/services/price/actions/klend-reserve-refresh.ts","../src/services/misc.ts","../src/services/price/services/pyth-oracle.service.ts","../src/services/price/services/swb-oracle.service.ts","../src/services/price/services/oracle.service.ts","../src/services/bank/utils/compute.utils.ts","../src/services/bank/utils/fetch.utils.ts","../src/services/bank/utils/interest-rate.utils.ts","../src/services/bank/bank.service.ts","../src/services/group/group.service.ts","../src/services/group/utils/deserialize.utils.ts","../src/services/group/utils/serialize.utils.ts","../src/services/native-stake/utils/fetch.utils.ts","../src/services/native-stake/utils/serialize.utils.ts","../src/services/native-stake/utils/deserialize.utils.ts","../src/services/integration/kamino/kamino.service.ts","../src/services/integration/integration.service.ts","../src/models/bank.ts","../src/models/balance.ts","../src/models/group.ts","../src/models/health-cache.ts","../src/models/account.ts","../src/models/account-wrapper.ts","../src/models/client.ts","../src/models/emode-settings.ts"],"names":["TransactionBuildingErrorCode","PublicKey","BigNumber","TransactionMessage","VersionedTransaction","mandatoryIxs","opts","struct","u8","Buffer","TransactionInstruction","SystemProgram","u64","TransactionType","BN","RiskTier","OperationalState","OracleSetup","AssetTag","BankConfigFlag","EmodeEntryFlags","EmodeFlags","EmodeTag","EmodeImpactStatus","BankVaultType","AccountType","BorshCoder","PriceBias","capConfidenceInterval","feedMint","HealthCacheFlags","HealthCacheStatus","AccountFlags","MarginRequirementType","assets","liabilities","bank","instructions","BorshInstructionCoder","instructions_default","Transaction","makePulseHealthIx","publicKey","array","u128","u32","FARMS_PROGRAM_ID","makeInitMarginfiAccountIx","makeDepositIx","makeRepayIx","makeWithdrawIx","makeBorrowIx","makeBeginFlashLoanIx","makeEndFlashLoanIx","makeKaminoDepositIx","makeKaminoWithdrawIx","makeLendingAccountLiquidateIx","makelendingAccountWithdrawEmissionIx","makeCloseAccountIx","makeAccountTransferToNewAccountIx","makeGroupInitIx","makePoolConfigureBankIx","makeLendingPoolConfigureBankOracleIx","makePoolAddBankIx","makePoolAddPermissionlessStakedBankIx","Program","ComputeBudgetProgram","priceLowestBias","AddressLookupTableAccount","bankMetadataDto","chunkArray","chunks","SYSVAR_RENT_PUBKEY","StakeProgram","LAMPORTS_PER_SOL","accounts","AnchorProvider"],"mappings":"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Q;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAA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","file":"index.js","sourcesContent":["[\n {\n \"label\": \"production\",\n \"program\": \"MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA\",\n \"group\": \"4qp6Fx6tnZkY5Wropq9wUYgtFxXKwE6viZxFHg3rdAG8\"\n },\n {\n \"label\": \"staging\",\n \"program\": \"stag8sTKds2h4KzjUw3zKTsxbqvT4XKHdaR9X9E6Rct\",\n \"group\": \"FCPfpHA69EbS8f9KKSreTRkXbzFpunsKuYf5qNmnJjpo\"\n },\n {\n \"label\": \"staging-mainnet-clone\",\n \"program\": \"stag8sTKds2h4KzjUw3zKTsxbqvT4XKHdaR9X9E6Rct\",\n \"group\": \"Diu1q9gniR1qR4Daaej3rcHd6949HMmxLGsnQ94Z3rLz\"\n },\n {\n \"label\": \"staging-alt\",\n \"program\": \"5UDghkpgW1HfYSrmEj2iAApHShqU44H6PKTAar9LL9bY\",\n \"group\": \"ERBiJdWtnVBBd4gFm7YVHT3a776x5NbGbJBR5BDvsxtj\"\n }\n]\n","import { PublicKey } from \"@solana/web3.js\";\nimport type { Environment, Project0Config } from \"./types\";\nimport { array, assert, enums, object, string } from \"superstruct\";\nimport type { Infer } from \"superstruct\";\nimport configs from \"./configs.json\";\n\nconst Project0ConfigRaw = object({\n label: enums([\n \"production\",\n \"staging\",\n \"staging-mainnet-clone\",\n \"staging-alt\",\n ]),\n program: string(),\n group: string(),\n});\nconst ConfigRaw = array(Project0ConfigRaw);\n\nexport type Project0ConfigRaw = Infer<typeof Project0ConfigRaw>;\nexport type ConfigRaw = Infer<typeof ConfigRaw>;\n\nfunction parseConfig(configRaw: Project0ConfigRaw): Project0Config {\n return {\n environment: configRaw.label,\n programId: new PublicKey(configRaw.program),\n groupPk: new PublicKey(configRaw.group),\n };\n}\n\nfunction parseConfigs(configRaw: ConfigRaw): {\n [label: string]: Project0Config;\n} {\n return configRaw.reduce(\n (config, current, _) => ({\n [current.label]: parseConfig(current),\n ...config,\n }),\n {} as {\n [label: string]: Project0Config;\n }\n );\n}\n\nfunction loadDefaultConfig(): {\n [label: string]: Project0Config;\n} {\n assert(configs, ConfigRaw);\n return parseConfigs(configs);\n}\n\n/**\n * Define marginfi-specific config per profile\n *\n * @internal\n */\nfunction getProject0Config(\n environment: Environment,\n overrides?: Partial<Omit<Project0Config, \"environment\">>\n): Project0Config {\n const defaultConfigs = loadDefaultConfig();\n\n const defaultConfig = defaultConfigs[environment]!;\n return {\n environment,\n programId: overrides?.programId || defaultConfig.programId,\n groupPk: overrides?.groupPk || defaultConfig.groupPk,\n };\n}\n\n/**\n * Retrieve config per environment\n */\nexport function getConfig(\n environment: Environment = \"production\",\n overrides?: Partial<Omit<Project0Config, \"environment\">>\n): Project0Config {\n return {\n ...getProject0Config(environment, overrides),\n };\n}\n","/**\n * Error codes for transaction building failures\n */\nexport enum TransactionBuildingErrorCode {\n JUPITER_SWAP_SIZE_EXCEEDED_REPAY = \"JUPITER_SWAP_SIZE_EXCEEDED_REPAY\",\n JUPITER_SWAP_SIZE_EXCEEDED_LOOP = \"JUPITER_SWAP_SIZE_EXCEEDED_LOOP\",\n ORACLE_CRANK_FAILED = \"ORACLE_CRANK_FAILED\",\n KAMINO_RESERVE_NOT_FOUND = \"KAMINO_RESERVE_NOT_FOUND\",\n}\n\n/**\n * Typed details for each error code\n */\nexport interface TransactionBuildingErrorDetails {\n [TransactionBuildingErrorCode.JUPITER_SWAP_SIZE_EXCEEDED_LOOP]: {\n bytes: number;\n accountKeys: number;\n };\n [TransactionBuildingErrorCode.JUPITER_SWAP_SIZE_EXCEEDED_REPAY]: {\n bytes: number;\n accountKeys: number;\n };\n [TransactionBuildingErrorCode.ORACLE_CRANK_FAILED]: {\n uncrankableLiabilities: Array<{\n bankAddress: string;\n mint: string;\n symbol?: string;\n reason: string;\n }>;\n uncrankableAssets: Array<{\n bankAddress: string;\n mint: string;\n symbol?: string;\n reason: string;\n }>;\n };\n [TransactionBuildingErrorCode.KAMINO_RESERVE_NOT_FOUND]: {\n bankAddress: string;\n bankMint: string;\n bankSymbol?: string;\n };\n}\n\n/**\n * Error thrown during transaction building in the SDK.\n * Does NOT contain user-facing messages - those are handled in the app layer.\n * Use factory methods to create instances.\n */\nexport class TransactionBuildingError<\n T extends TransactionBuildingErrorCode = TransactionBuildingErrorCode,\n> extends Error {\n readonly code: T;\n readonly details: TransactionBuildingErrorDetails[T];\n\n private constructor(\n code: T,\n message: string,\n details: TransactionBuildingErrorDetails[T]\n ) {\n super(message);\n this.name = \"TransactionBuildingError\";\n this.code = code;\n this.details = details;\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, TransactionBuildingError);\n }\n }\n\n /**\n * Jupiter swap instruction size exceeds available transaction size\n */\n static jupiterSwapSizeExceededLoop(\n bytes: number,\n accountKeys: number\n ): TransactionBuildingError<TransactionBuildingErrorCode.JUPITER_SWAP_SIZE_EXCEEDED_LOOP> {\n return new TransactionBuildingError(\n TransactionBuildingErrorCode.JUPITER_SWAP_SIZE_EXCEEDED_LOOP,\n \"Jupiter swap instruction size exceeds available transaction size\",\n { bytes, accountKeys }\n );\n }\n\n static jupiterSwapSizeExceededRepay(\n bytes: number,\n accountKeys: number\n ): TransactionBuildingError<TransactionBuildingErrorCode.JUPITER_SWAP_SIZE_EXCEEDED_REPAY> {\n return new TransactionBuildingError(\n TransactionBuildingErrorCode.JUPITER_SWAP_SIZE_EXCEEDED_REPAY,\n \"Jupiter swap instruction size exceeds available transaction size\",\n { bytes, accountKeys }\n );\n }\n\n /**\n * Failed to crank oracles for one or more banks\n */\n static oracleCrankFailed(\n uncrankableLiabilities: Array<{\n bankAddress: string;\n mint: string;\n symbol?: string;\n reason: string;\n }>,\n uncrankableAssets: Array<{\n bankAddress: string;\n mint: string;\n symbol?: string;\n reason: string;\n }>\n ): TransactionBuildingError<TransactionBuildingErrorCode.ORACLE_CRANK_FAILED> {\n const banksList = uncrankableLiabilities\n .concat(uncrankableAssets)\n .map((b) => b.symbol)\n .join(\", \");\n return new TransactionBuildingError(\n TransactionBuildingErrorCode.ORACLE_CRANK_FAILED,\n `Failed to crank oracles for: ${banksList}`,\n { uncrankableLiabilities, uncrankableAssets }\n );\n }\n\n /**\n * Failed to refresh reserves for a bank\n */\n static kaminoReserveNotFound(\n bankAddress: string,\n bankMint: string,\n bankSymbol?: string\n ): TransactionBuildingError<TransactionBuildingErrorCode.KAMINO_RESERVE_NOT_FOUND> {\n return new TransactionBuildingError(\n TransactionBuildingErrorCode.KAMINO_RESERVE_NOT_FOUND,\n `Kamino reserve not found for ${bankSymbol ?? bankMint}`,\n { bankAddress, bankMint, bankSymbol }\n );\n }\n\n /**\n * Generic escape hatch for custom errors\n */\n static custom<T extends TransactionBuildingErrorCode>(\n code: T,\n message: string,\n details: TransactionBuildingErrorDetails[T]\n ): TransactionBuildingError<T> {\n return new TransactionBuildingError(code, message, details);\n }\n}\n","import { PublicKey } from \"@solana/web3.js\";\n\nexport const PDA_BANK_LIQUIDITY_VAULT_AUTH_SEED = Buffer.from(\"liquidity_vault_auth\");\nexport const PDA_BANK_INSURANCE_VAULT_AUTH_SEED = Buffer.from(\"insurance_vault_auth\");\nexport const PDA_BANK_FEE_VAULT_AUTH_SEED = Buffer.from(\"fee_vault_auth\");\n\nexport const PDA_BANK_LIQUIDITY_VAULT_SEED = Buffer.from(\"liquidity_vault\");\nexport const PDA_BANK_INSURANCE_VAULT_SEED = Buffer.from(\"insurance_vault\");\nexport const PDA_BANK_FEE_VAULT_SEED = Buffer.from(\"fee_vault\");\nexport const PDA_BANK_FEE_STATE_SEED = Buffer.from(\"feestate\");\nexport const PDA_BANK_EMISSIONS_AUTH_SEED = Buffer.from(\"emissions_auth_seed\");\nexport const PDA_BANK_EMISSIONS_VAULT_SEED = Buffer.from(\"emissions_vault\");\n\nexport const PDA_MARGINFI_ACCOUNT_SEED = Buffer.from(\"marginfi_account\");\n\n/**\n * Derives the liquidity vault authority PDA for a bank\n * Seeds: [\"liquidity_vault_auth\", bank]\n */\nexport function deriveBankLiquidityVaultAuthority(\n programId: PublicKey,\n bank: PublicKey\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [PDA_BANK_LIQUIDITY_VAULT_AUTH_SEED, bank.toBuffer()],\n programId\n );\n}\n\n/**\n * Derives the liquidity vault PDA for a bank\n * Seeds: [\"liquidity_vault\", bank]\n */\nexport function deriveBankLiquidityVault(\n programId: PublicKey,\n bank: PublicKey\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [PDA_BANK_LIQUIDITY_VAULT_SEED, bank.toBuffer()],\n programId\n );\n}\n\n/**\n * Derives the insurance vault authority PDA for a bank\n * Seeds: [\"insurance_vault_auth\", bank]\n */\nexport function deriveBankInsuranceVaultAuthority(\n programId: PublicKey,\n bank: PublicKey\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [PDA_BANK_INSURANCE_VAULT_AUTH_SEED, bank.toBuffer()],\n programId\n );\n}\n\n/**\n * Derives the insurance vault PDA for a bank\n * Seeds: [\"insurance_vault\", bank]\n */\nexport function deriveBankInsuranceVault(\n programId: PublicKey,\n bank: PublicKey\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [PDA_BANK_INSURANCE_VAULT_SEED, bank.toBuffer()],\n programId\n );\n}\n\n/**\n * Derives the fee vault authority PDA for a bank\n * Seeds: [\"fee_vault_auth\", bank]\n */\nexport function deriveBankFeeVaultAuthority(\n programId: PublicKey,\n bank: PublicKey\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [PDA_BANK_FEE_VAULT_AUTH_SEED, bank.toBuffer()],\n programId\n );\n}\n\n/**\n * Derives the fee vault PDA for a bank\n * Seeds: [\"fee_vault\", bank]\n */\nexport function deriveBankFeeVault(programId: PublicKey, bank: PublicKey): [PublicKey, number] {\n return PublicKey.findProgramAddressSync([PDA_BANK_FEE_VAULT_SEED, bank.toBuffer()], programId);\n}\n\n/**\n * Derives the fee state PDA\n * Seeds: [\"feestate\"]\n */\nexport function deriveFeeState(programId: PublicKey): [PublicKey, number] {\n return PublicKey.findProgramAddressSync([PDA_BANK_FEE_STATE_SEED], programId);\n}\n\n/**\n * Derives the emissions auth PDA for a bank\n * Seeds: [\"emissions_auth_seed\", bank]\n */\nexport function deriveBankEmissionsAuth(\n programId: PublicKey,\n bank: PublicKey\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [PDA_BANK_EMISSIONS_AUTH_SEED, bank.toBuffer()],\n programId\n );\n}\n\n/**\n * Derives the emissions vault PDA for a bank and emissions mint\n * Seeds: [\"emissions_vault\", bank, emissionsMint]\n */\nexport function deriveBankEmissionsVault(\n programId: PublicKey,\n bank: PublicKey,\n emissionsMint: PublicKey\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [PDA_BANK_EMISSIONS_VAULT_SEED, bank.toBuffer(), emissionsMint.toBuffer()],\n programId\n );\n}\n\n/**\n * Derives the marginfi account PDA\n * Seeds: [\"marginfi_account\", group, authority, accountIndex, thirdPartyId]\n */\nexport function deriveMarginfiAccount(\n programId: PublicKey,\n group: PublicKey,\n authority: PublicKey,\n accountIndex: number,\n thirdPartyId: number = 0\n): [PublicKey, number] {\n const accountIndexBuf = Buffer.alloc(2);\n accountIndexBuf.writeUInt16LE(accountIndex);\n\n const thirdPartyIdBuf = Buffer.alloc(2);\n thirdPartyIdBuf.writeUInt16LE(thirdPartyId);\n\n return PublicKey.findProgramAddressSync(\n [\n PDA_MARGINFI_ACCOUNT_SEED,\n group.toBuffer(),\n authority.toBuffer(),\n accountIndexBuf,\n thirdPartyIdBuf,\n ],\n programId\n );\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\n\nexport const PYTH_PUSH_ORACLE_ID = new PublicKey(\"pythWSnswVUd12oZpeFP8e9CVaEqJg25g1Vtc2biRsT\");\nexport const PYTH_SPONSORED_SHARD_ID = 0;\nexport const MARGINFI_SPONSORED_SHARD_ID = 3301;\n\nexport const DEFAULT_ORACLE_MAX_AGE = 60; // seconds\n\nexport const ZERO_ORACLE_KEY = \"DMhGWtLAKE5d56WdyHQxqeFncwUeqMEnuC2RvvZfbuur\";\n\nexport const PYTH_PRICE_CONF_INTERVALS = new BigNumber(2.12);\nexport const SWB_PRICE_CONF_INTERVALS = new BigNumber(1.96);\nexport const MAX_CONFIDENCE_INTERVAL_RATIO = new BigNumber(0.05);\n","import { PublicKey } from \"@solana/web3.js\";\n\nexport const DISABLED_FLAG: number = 1 << 0;\nexport const FLASHLOAN_ENABLED_FLAG: number = 1 << 2;\nexport const TRANSFER_ACCOUNT_AUTHORITY_FLAG: number = 1 << 3;\nexport const MARGINFI_PROGRAM = new PublicKey(\"MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA\");\n","import { PublicKey } from \"@solana/web3.js\";\n\nexport const ADDRESS_LOOKUP_TABLE_FOR_GROUP: { [key: string]: PublicKey[] } = {\n \"4qp6Fx6tnZkY5Wropq9wUYgtFxXKwE6viZxFHg3rdAG8\": [\n new PublicKey(\"BrWF8J3CEuHaXsWk3kqGZ6VHvRp4SJuG9AzvB6ei2kbV\"),\n new PublicKey(\"8GLUprtyzv6HGrgox7F43EQM5GqE2uKrAHLs69r8DgRj\"),\n new PublicKey(\"Eg4WY6fmrbhDGfdgSrrTUe6peoUeVhkdXAWT6uvcGKjs\"),\n ], // Main pool\n FCPfpHA69EbS8f9KKSreTRkXbzFpunsKuYf5qNmnJjpo: [\n new PublicKey(\"HxPy7b58KLKSU7w4LUW9xwYQ1NPyRNQkYYk2f7SmYAip\"),\n ], // staging\n};\n\nexport const ADDRESS_LOOKUP_TABLE_FOR_SWAP = new PublicKey(\n \"5X5gDr8Bp9BpizTeZ3VJhxMw4z3q2rwoexJvwttmATs5\"\n);\n\nexport const JUP_SWAP_LUT_PROGRAM_AUTHORITY_INDEX = 5;\n","import { PublicKey } from \"@solana/web3.js\";\n\nexport const JUPITER_V6_PROGRAM: PublicKey = new PublicKey(\n \"JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4\"\n);\nexport const SINGLE_POOL_PROGRAM_ID: PublicKey = new PublicKey(\n \"SVSPxpvHdN29nkVg9rPapPNDddN5DipNLRUFhyjFThE\"\n);\nexport const STAKE_PROGRAM_ID: PublicKey = new PublicKey(\n \"Stake11111111111111111111111111111111111111\"\n);\nexport const MPL_METADATA_PROGRAM_ID: PublicKey = new PublicKey(\n \"metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s\"\n);\nexport const SYSTEM_PROGRAM_ID: PublicKey = new PublicKey(\"11111111111111111111111111111111\");\nexport const SYSVAR_RENT_ID: PublicKey = new PublicKey(\n \"SysvarRent111111111111111111111111111111111\"\n);\nexport const SYSVAR_CLOCK_ID: PublicKey = new PublicKey(\n \"SysvarC1ock11111111111111111111111111111111\"\n);\nexport const SYSVAR_STAKE_HISTORY_ID: PublicKey = new PublicKey(\n \"SysvarStakeHistory1111111111111111111111111\"\n);\nexport const STAKE_CONFIG_ID: PublicKey = new PublicKey(\n \"StakeConfig11111111111111111111111111111111\"\n);\n","export const HOURS_PER_YEAR = 365.25 * 24;\n\nexport const MAX_U64 = BigInt(\"18446744073709551615\").toString();\n","export const MAX_TX_SIZE: number = 1232;\nexport const BUNDLE_TX_SIZE: number = 81;\nexport const PRIORITY_TX_SIZE: number = 44;\n","import { PublicKey } from \"@solana/web3.js\";\n\n// token mints\nexport const WSOL_MINT = new PublicKey(\"So11111111111111111111111111111111111111112\");\nexport const LST_MINT = new PublicKey(\"LSTxxxnJzKDFSLr4dUkPcmCf5VyryEqzPLz5j4bpxFp\");\nexport const USDC_MINT = new PublicKey(\"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\");\n\nexport const USDC_DECIMALS = 6;\n","import { HOURS_PER_YEAR } from \"../constants\";\n\n// ================ interest rate helpers ================\n\n/**\n * Formula source: http://www.linked8.com/blog/158-apy-to-apr-and-apr-to-apy-calculation-methodologies\n *\n * @param apy {Number} APY (i.e. 0.06 for 6%)\n * @param compoundingFrequency {Number} Compounding frequency (times a year)\n * @returns {Number} APR (i.e. 0.0582 for APY of 0.06)\n */\nconst apyToApr = (apy: number, compoundingFrequency: number = HOURS_PER_YEAR): number =>\n ((1 + apy) ** (1 / compoundingFrequency) - 1) * compoundingFrequency;\n\n/**\n * Formula source: http://www.linked8.com/blog/158-apy-to-apr-and-apr-to-apy-calculation-methodologies\n *\n *\n * @param apr {Number} APR (i.e. 0.0582 for 5.82%)\n * @param compoundingFrequency {Number} Compounding frequency (times a year)\n * @returns {Number} APY (i.e. 0.06 for APR of 0.0582)\n */\nconst aprToApy = (apr: number, compoundingFrequency: number = HOURS_PER_YEAR, apyCap: number = 3): number =>\n Math.min((1 + apr / compoundingFrequency) ** compoundingFrequency - 1, apyCap);\n\nfunction calculateInterestFromApy(principal: number, durationInYears: number, apy: number): number {\n return principal * apy * durationInYears;\n}\n\nfunction calculateApyFromInterest(principal: number, durationInYears: number, interest: number): number {\n return interest / (principal * durationInYears);\n}\n\nexport { apyToApr, aprToApy, calculateInterestFromApy, calculateApyFromInterest };\n","import { Address, BN } from \"@coral-xyz/anchor\";\nimport { PublicKey } from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\nimport { Decimal } from \"decimal.js\";\n\nimport { Amount, WrappedI80F48 } from \"../types\";\n\nconst I80F48_FRACTIONAL_BYTES = 6;\nconst I80F48_TOTAL_BYTES = 16;\nconst I80F48_DIVISOR = new Decimal(2).pow(8 * I80F48_FRACTIONAL_BYTES);\n\nexport function wrappedI80F48toBigNumber(wrapped: WrappedI80F48): BigNumber {\n let bytesLE = wrapped.value;\n if (bytesLE.length !== I80F48_TOTAL_BYTES) {\n throw new Error(`Expected a ${I80F48_TOTAL_BYTES}-byte buffer`);\n }\n\n let bytesBE = bytesLE.slice();\n bytesBE.reverse();\n\n let signChar = \"\";\n const msb = bytesBE[0];\n if (msb & 0x80) {\n signChar = \"-\";\n bytesBE = bytesBE.map((v) => ~v & 0xff);\n }\n\n let hex = signChar + \"0x\" + bytesBE.map((v) => v.toString(16).padStart(2, \"0\")).join(\"\");\n let decoded = new Decimal(hex).dividedBy(I80F48_DIVISOR);\n\n return new BigNumber(decoded.toString());\n}\n\nexport function bigNumberToWrappedI80F48(value: Amount): WrappedI80F48 {\n let decimalValue = new Decimal(value.toString());\n const isNegative = decimalValue.isNegative();\n\n decimalValue = decimalValue.times(I80F48_DIVISOR);\n let wrappedValue = new BN(decimalValue.round().toFixed()).toArray();\n\n if (wrappedValue.length < I80F48_TOTAL_BYTES) {\n const padding = Array(I80F48_TOTAL_BYTES - wrappedValue.length).fill(0);\n wrappedValue.unshift(...padding);\n }\n\n if (isNegative) {\n wrappedValue[wrappedValue.length - 1] |= 0x80;\n wrappedValue = wrappedValue.map((v) => ~v & 0xff);\n }\n\n wrappedValue.reverse();\n\n return { value: wrappedValue };\n}\n\n/**\n * Converts a ui representation of a token amount into its native value as `BN`, given the specified mint decimal amount (default to 6 for USDC).\n */\nexport function toNumber(amount: Amount): number {\n let amt: number;\n if (typeof amount === \"number\") {\n amt = amount;\n } else if (typeof amount === \"string\") {\n amt = Number(amount);\n } else {\n amt = amount.toNumber();\n }\n return amt;\n}\n\n/**\n * Converts a ui representation of a token amount into its native value as `BN`, given the specified mint decimal amount (default to 6 for USDC).\n */\nexport function toBigNumber(amount: Amount | BN): BigNumber {\n let amt: BigNumber;\n if (amount instanceof BigNumber) {\n amt = amount;\n } else {\n amt = new BigNumber(amount.toString());\n }\n return amt;\n}\n\n/**\n * Converts a UI representation of a token amount into its native value as `BN`, given the specified mint decimal amount (default to 6 for USDC).\n */\nexport function uiToNative(amount: Amount, decimals: number): BN {\n let amt = toBigNumber(amount);\n return new BN(amt.times(10 ** decimals).toFixed(0, BigNumber.ROUND_FLOOR));\n}\n\nexport function uiToNativeBigNumber(amount: Amount, decimals: number): BigNumber {\n let amt = toBigNumber(amount);\n return amt.times(10 ** decimals);\n}\n\n/**\n * Converts a native representation of a token amount into its UI value as `number`, given the specified mint decimal amount.\n */\nexport function nativeToUi(amount: Amount | BN, decimals: number): number {\n let amt = toBigNumber(amount);\n return amt.div(10 ** decimals).toNumber();\n}\n\n// shorten the checksummed version of the input address to have 4 characters at start and end\nexport function shortenAddress(pubkey: Address, chars = 4): string {\n const pubkeyStr = pubkey.toString();\n return `${pubkeyStr.slice(0, chars)}...${pubkeyStr.slice(-chars)}`;\n}\n\n/**\n * Converts basis points (bps) to a decimal percentage value.\n */\nexport function bpsToPercentile(bps: number): number {\n return bps / 10000;\n}\n\n/**\n * Prepares transaction remaining accounts by processing bank-oracle groups:\n * 1. Sorts groups in descending order by bank public key (pushes inactive accounts to end)\n * 2. Flattens the structure into a single public key array\n *\n * Stable on most JS implementations (this shouldn't matter since we do not generally have duplicate\n * banks), in place, and uses the raw 32-byte value to sort in byte-wise lexicographical order (like\n * Rust's b.key.cmp(&a.key))\n *\n * @param banksAndOracles - Array where each element is a bank-oracle group: [bankPubkey,\n * oracle1Pubkey, oracle2Pubkey?, ...] Note: SystemProgram keys (111..111)\n * represent inactive accounts\n * @returns Flattened array of public keys with inactive accounts at the end, ready for transaction\n * composition\n */\nexport const composeRemainingAccounts = (banksAndOracles: PublicKey[][]): PublicKey[] => {\n banksAndOracles.sort((a, b) => {\n const A = a[0].toBytes();\n const B = b[0].toBytes();\n // find the first differing byte\n for (let i = 0; i < 32; i++) {\n if (A[i] !== B[i]) {\n // descending: bigger byte should come first\n return B[i] - A[i];\n }\n }\n return 0; // identical keys\n });\n\n // flatten out [bank, oracle…, oracle…] → [bank, oracle…, bank, oracle…, …]\n return banksAndOracles.flat();\n};\n","import {\n TransactionError,\n PublicKey,\n RpcResponseAndContext,\n VersionedTransaction,\n SolanaJSONRPCError,\n Transaction,\n} from \"@solana/web3.js\";\n\nclass BundleSimulationError extends Error {\n constructor(\n message: string,\n public readonly logs?: string[],\n public readonly cause?: unknown\n ) {\n super(message);\n this.name = \"BundleSimulationError\";\n }\n\n static fromHttpError(\n status: number,\n statusText: string\n ): BundleSimulationError {\n return new BundleSimulationError(`HTTP error ${status}: ${statusText}`);\n }\n\n static fromEncodingError(\n error: unknown,\n index?: number\n ): BundleSimulationError {\n return new BundleSimulationError(\n `Failed to encode transaction${index !== undefined ? ` at index ${index}` : \"s\"}`\n );\n }\n}\n\ntype JsonRpcResponse<T> =\n | {\n id: number;\n jsonrpc: string;\n result: RpcResponseAndContext<T>;\n }\n | {\n id: number;\n jsonrpc: string;\n error: SolanaJSONRPCError;\n };\n\ninterface RpcSimulateBundleResult {\n summary:\n | \"succeeded\"\n | {\n failed: {\n error: any;\n txSignature?: string;\n };\n };\n transactionResults: RpcSimulateBundleTransactionResult[];\n}\n\ninterface RpcSimulateBundleTransactionResult {\n err?: TransactionError;\n logs: string[];\n preExecutionAccounts?: any; //UiAccount[],\n postExecutionAccounts?: any; //UiAccount[],\n unitsConsumed?: string;\n returnData?: any; //UiTransactionReturnData,\n}\n\ninterface RpcSimulateBundleConfig {\n preExecutionAccountsConfigs: (\n | RpcSimulateTransactionAccountsConfig\n | undefined\n )[];\n postExecutionAccountsConfigs: (\n | RpcSimulateTransactionAccountsConfig\n | undefined\n )[];\n transactionEncoding?: any;\n simulationBank?: SimulationSlotConfig;\n skipSigVerify?: boolean;\n replaceRecentBlockhash?: boolean;\n}\n\ninterface RpcSimulateTransactionAccountsConfig {\n encoding?: any; // UiAccountEncoding,\n addresses: string[];\n}\n\ntype SimulationSlotConfig = \"confirmed\" | \"processed\" | number;\n\nexport async function simulateBundle(\n rpcEndpoint: string,\n transactions: (VersionedTransaction | Transaction)[],\n includeAccounts?: Array<PublicKey>\n): Promise<RpcSimulateBundleTransactionResult[]> {\n // Validate input\n if (!transactions.length) {\n throw new BundleSimulationError(\"No bundle provided for simulation\");\n }\n\n try {\n // Prepare transaction data\n const encodedTransactions = encodeTransactions(transactions);\n const config = createBundleConfig(transactions, includeAccounts);\n\n // Execute simulation\n const result = await executeBundleSimulation(\n rpcEndpoint,\n encodedTransactions,\n config\n );\n\n return result;\n } catch (error) {\n // If it's already a SolanaJSONRPCError or BundleSimulationError, rethrow it\n if (\n error instanceof SolanaJSONRPCError ||\n error instanceof BundleSimulationError\n ) {\n throw error;\n } else {\n throw new BundleSimulationError(\n \"Failed to execute bundle simulation\",\n undefined,\n error\n );\n }\n }\n}\n\nfunction encodeTransactions(\n transactions: (VersionedTransaction | Transaction)[]\n): string[] {\n try {\n return transactions.map((tx, index) => {\n try {\n const serialized = tx.serialize();\n return Buffer.from(serialized).toString(\"base64\");\n } catch (error) {\n throw BundleSimulationError.fromEncodingError(error, index);\n }\n });\n } catch (error) {\n if (error instanceof BundleSimulationError) throw error;\n throw BundleSimulationError.fromEncodingError(error);\n }\n}\n\nfunction createBundleConfig(\n transactions: (VersionedTransaction | Transaction)[],\n includeAccounts?: Array<PublicKey>\n): RpcSimulateBundleConfig {\n return {\n skipSigVerify: true,\n replaceRecentBlockhash: true,\n preExecutionAccountsConfigs: transactions.map(() => ({ addresses: [] })),\n postExecutionAccountsConfigs: transactions.map((_, index) => ({\n addresses:\n index === transactions.length - 1 && includeAccounts\n ? includeAccounts.map((account) => account.toBase58())\n : [],\n })),\n };\n}\n\nasync function executeBundleSimulation(\n rpcEndpoint: string,\n encodedTransactions: string[],\n config: RpcSimulateBundleConfig\n): Promise<RpcSimulateBundleTransactionResult[]> {\n const response = await fetch(rpcEndpoint, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n jsonrpc: \"2.0\",\n id: 1,\n method: \"simulateBundle\",\n params: [{ encodedTransactions }, config],\n }),\n });\n\n if (!response.ok) {\n throw BundleSimulationError.fromHttpError(\n response.status,\n response.statusText\n );\n }\n\n const jsonResponse =\n (await response.json()) as JsonRpcResponse<RpcSimulateBundleResult>;\n\n if (\"error\" in jsonResponse) {\n throw jsonResponse.error;\n }\n\n const value = jsonResponse.result.value;\n\n if (value.summary !== \"succeeded\") {\n const logs = value.transactionResults.flatMap((tx) => tx.logs);\n\n throw new BundleSimulationError(\n JSON.stringify(value.summary.failed.error),\n logs\n );\n }\n\n return value.transactionResults;\n}\n","import {\n PublicKey,\n TransactionInstruction,\n SystemProgram,\n LAMPORTS_PER_SOL,\n ComputeBudgetProgram,\n} from \"@solana/web3.js\";\n\n/**\n * Creates a compute budget instruction to set the priority fee for a transaction.\n * The priority fee is specified in micro-lamports per compute unit.\n *\n * @param priorityFeeMicro - Priority fee in micro-lamports per compute unit. If not provided, defaults to 1.\n * @returns A compute budget instruction with the specified priority fee\n */\nexport function makePriorityFeeMicroIx(priorityFeeMicro?: number): TransactionInstruction {\n return ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: Math.floor(priorityFeeMicro ?? 1),\n });\n}\n\n/*\n deprecated use makePriorityFeeMicroIx instead\n*/\nexport function makePriorityFeeIx(\n priorityFeeUi?: number,\n computeUnitsLimit?: number\n): TransactionInstruction[] {\n const priorityFeeIx: TransactionInstruction[] = [];\n const limit = computeUnitsLimit ?? 1_400_000;\n\n let microLamports: number = 1;\n\n if (priorityFeeUi) {\n // if priority fee is above 0.2 SOL discard it for safety reasons\n const isAbsurdPriorityFee = priorityFeeUi > 0.1;\n\n if (!isAbsurdPriorityFee) {\n const priorityFeeMicroLamports = priorityFeeUi * LAMPORTS_PER_SOL * 1_000_000;\n microLamports = Math.round(priorityFeeMicroLamports / limit);\n }\n }\n\n priorityFeeIx.push(\n ComputeBudgetProgram.setComputeUnitPrice({\n microLamports,\n })\n );\n\n return priorityFeeIx;\n}\n\n/**\n * @deprecated This method is deprecated.\n * Creates transaction priority instructions for different broadcast types.\n */\nexport function makeTxPriorityIx(\n feePayer: PublicKey,\n feeUi: number = 0,\n broadcastType: \"BUNDLE\" | \"RPC\" | \"DYNAMIC\"\n) {\n let bundleTipIx: TransactionInstruction | undefined = undefined;\n let priorityFeeIx: TransactionInstruction = makePriorityFeeMicroIx();\n\n if (broadcastType === \"BUNDLE\") {\n bundleTipIx = makeBundleTipIx(feePayer, Math.trunc(feeUi * LAMPORTS_PER_SOL));\n } else {\n priorityFeeIx = makePriorityFeeMicroIx(feeUi);\n }\n\n return {\n bundleTipIx,\n priorityFeeIx,\n };\n}\n\n/**\n * Creates a bundle tip instruction for Jito bundles.\n */\nexport function makeBundleTipIx(\n feePayer: PublicKey,\n bundleTip: number = 100_000\n): TransactionInstruction {\n // they have remained constant so function not used (for now)\n const getTipAccounts = async () => {\n const response = await fetch(\"https://mainnet.block-engine.jito.wtf/api/v1/bundles\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n jsonrpc: \"2.0\",\n id: 1,\n method: \"getTipAccounts\",\n params: [],\n }),\n });\n return response.json();\n };\n\n const tipAccounts = [\n \"96gYZGLnJYVFmbjzopPSU6QiEV5fGqZNyN9nmNhvrZU5\",\n \"HFqU5x63VTqvQss8hp11i4wVV8bD44PvwucfZ2bU7gRe\",\n \"Cw8CFyM9FkoMi7K7Crf6HNQqf4uEMzpKw6QNghXLvLkY\",\n \"ADaUMid9yfUytqMBgopwjb2DTLSokTSzL1zt6iGPaS49\",\n \"DfXygSm4jCyNCybVYYK6DwvWqjKee8pbDmJGcLWNDXjh\",\n \"ADuUkR4vqLUMWXxW9gh6D6L8pMSawimctcNZ5pGwDcEt\",\n \"DttWaMuVvTiduZRnguLF7jNxTgiMBZ1hyAumKUiL2KRL\",\n \"3AVi9Tg9Uo68tJfuvoKvqKNWKkC5wPdSSdeBnizKZ6jT\",\n ];\n\n const tipAccount = tipAccounts[Math.floor(Math.random() * tipAccounts.length)]!;\n\n const bundleTipInstruction = SystemProgram.transfer({\n fromPubkey: feePayer,\n toPubkey: new PublicKey(tipAccount),\n lamports: bundleTip,\n });\n\n return bundleTipInstruction;\n}\n","{\n \"address\": \"\",\n \"metadata\": {\n \"name\": \"marginfi\",\n \"version\": \"0.1.6\",\n \"spec\": \"0.1.0\",\n \"description\": \"Borrow Lending Prime Broker\"\n },\n \"instructions\": [\n {\n \"name\": \"config_group_fee\",\n \"docs\": [\n \"(global fee admin only) Enable or disable program fees for any group. Does not require the\",\n \"group admin to sign: the global fee state admin can turn program fees on or off for any\",\n \"group\"\n ],\n \"discriminator\": [231, 205, 66, 242, 220, 87, 145, 38],\n \"accounts\": [\n {\n \"name\": \"marginfi_group\",\n \"writable\": true\n },\n {\n \"name\": \"global_fee_admin\",\n \"docs\": [\"`global_fee_admin` of the FeeState\"],\n \"signer\": true,\n \"relations\": [\"fee_state\"]\n },\n {\n \"name\": \"fee_state\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [102, 101, 101, 115, 116, 97, 116, 101]\n }\n ]\n }\n }\n ],\n \"args\": [\n {\n \"name\": \"enable_program_fee\",\n \"type\": \"bool\"\n }\n ]\n },\n {\n \"name\": \"configure_deleverage_withdrawal_limit\",\n \"docs\": [\n \"(group admin only) Set the daily withdrawal limit for deleverages per group.\"\n ],\n \"discriminator\": [28, 132, 205, 158, 67, 77, 177, 63],\n \"accounts\": [\n {\n \"name\": \"marginfi_group\",\n \"writable\": true\n },\n {\n \"name\": \"admin\",\n \"signer\": true,\n \"relations\": [\"marginfi_group\"]\n }\n ],\n \"args\": [\n {\n \"name\": \"limit\",\n \"type\": \"u32\"\n }\n ]\n },\n {\n \"name\": \"edit_global_fee_state\",\n \"docs\": [\n \"(global fee admin only) Adjust fees, admin, or the destination wallet\"\n ],\n \"discriminator\": [52, 62, 35, 129, 93, 69, 165, 202],\n \"accounts\": [\n {\n \"name\": \"global_fee_admin\",\n \"docs\": [\"Admin of the global FeeState\"],\n \"signer\": true,\n \"relations\": [\"fee_state\"]\n },\n {\n \"name\": \"fee_state\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [102, 101, 101, 115, 116, 97, 116, 101]\n }\n ]\n }\n }\n ],\n \"args\": [\n {\n \"name\": \"admin\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"fee_wallet\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"bank_init_flat_sol_fee\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"liquidation_flat_sol_fee\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"program_fee_fixed\",\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"program_fee_rate\",\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"liquidation_max_fee\",\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"edit_staked_settings\",\n \"discriminator\": [11, 108, 215, 87, 240, 9, 66, 241],\n \"accounts\": [\n {\n \"name\": \"marginfi_group\",\n \"relations\": [\"staked_settings\"]\n },\n {\n \"name\": \"admin\",\n \"signer\": true,\n \"relations\": [\"marginfi_group\"]\n },\n {\n \"name\": \"staked_settings\",\n \"writable\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"settings\",\n \"type\": {\n \"defined\": {\n \"name\": \"StakedSettingsEditConfig\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"end_deleverage\",\n \"discriminator\": [114, 14, 250, 143, 252, 104, 214, 209],\n \"accounts\": [\n {\n \"name\": \"marginfi_account\",\n \"writable\": true\n },\n {\n \"name\": \"liquidation_record\",\n \"writable\": true,\n \"relations\": [\"marginfi_account\"]\n },\n {\n \"name\": \"group\",\n \"relations\": [\"marginfi_account\"]\n },\n {\n \"name\": \"risk_admin\",\n \"signer\": true,\n \"relations\": [\"group\"]\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"end_liquidation\",\n \"discriminator\": [110, 11, 244, 54, 229, 181, 22, 184],\n \"accounts\": [\n {\n \"name\": \"marginfi_account\",\n \"docs\": [\"Account under liquidation\"],\n \"writable\": true\n },\n {\n \"name\": \"liquidation_record\",\n \"docs\": [\n \"The associated liquidation record PDA for the given `marginfi_account`\"\n ],\n \"writable\": true,\n \"relations\": [\"marginfi_account\"]\n },\n {\n \"name\": \"liquidation_receiver\",\n \"writable\": true,\n \"signer\": true,\n \"relations\": [\"liquidation_record\"]\n },\n {\n \"name\": \"fee_state\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [102, 101, 101, 115, 116, 97, 116, 101]\n }\n ]\n }\n },\n {\n \"name\": \"global_fee_wallet\",\n \"writable\": true,\n \"relations\": [\"fee_state\"]\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"init_bank_metadata\",\n \"docs\": [\"(permissionless) pay the rent to open a bank's metadata.\"],\n \"discriminator\": [94, 239, 50, 136, 137, 204, 254, 213],\n \"accounts\": [\n {\n \"name\": \"bank\"\n },\n {\n \"name\": \"fee_payer\",\n \"docs\": [\"Pays the init fee\"],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"metadata\",\n \"docs\": [\"Note: unique per-bank.\"],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [109, 101, 116, 97, 100, 97, 116, 97]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"init_global_fee_state\",\n \"docs\": [\n \"(Runs once per program) Configures the fee state account, where the global admin sets fees\",\n \"that are assessed to the protocol\"\n ],\n \"discriminator\": [82, 48, 247, 59, 220, 109, 231, 44],\n \"accounts\": [\n {\n \"name\": \"payer\",\n \"docs\": [\"Pays the init fee\"],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"fee_state\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [102, 101, 101, 115, 116, 97, 116, 101]\n }\n ]\n }\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"admin\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"fee_wallet\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"bank_init_flat_sol_fee\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"liquidation_flat_sol_fee\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"program_fee_fixed\",\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"program_fee_rate\",\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"liquidation_max_fee\",\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"init_staked_settings\",\n \"docs\": [\n \"(group admin only) Init the Staked Settings account, which is used to create staked\",\n \"collateral banks, and must run before any staked collateral bank can be created with\",\n \"`add_pool_permissionless`. Running this ix effectively opts the group into the staked\",\n \"collateral feature.\"\n ],\n \"discriminator\": [52, 35, 149, 44, 69, 86, 69, 80],\n \"accounts\": [\n {\n \"name\": \"marginfi_group\"\n },\n {\n \"name\": \"admin\",\n \"signer\": true,\n \"relations\": [\"marginfi_group\"]\n },\n {\n \"name\": \"fee_payer\",\n \"docs\": [\"Pays the init fee\"],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"staked_settings\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 115, 116, 97, 107, 101, 100, 95, 115, 101, 116, 116, 105, 110,\n 103, 115\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"marginfi_group\"\n }\n ]\n }\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"settings\",\n \"type\": {\n \"defined\": {\n \"name\": \"StakedSettingsConfig\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"kamino_deposit\",\n \"docs\": [\n \"(user) Deposit into a Kamino pool through a marginfi account\",\n \"* amount - in the liquidity token (e.g. if there is a Kamino USDC bank, pass the amount of\",\n \"USDC desired), in native decimals.\"\n ],\n \"discriminator\": [237, 8, 188, 187, 115, 99, 49, 85],\n \"accounts\": [\n {\n \"name\": \"group\",\n \"relations\": [\"marginfi_account\", \"bank\"]\n },\n {\n \"name\": \"marginfi_account\",\n \"writable\": true\n },\n {\n \"name\": \"authority\",\n \"signer\": true,\n \"relations\": [\"marginfi_account\"]\n },\n {\n \"name\": \"bank\",\n \"writable\": true\n },\n {\n \"name\": \"signer_token_account\",\n \"docs\": [\n \"Owned by authority, the source account for the token deposit.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"liquidity_vault_authority\",\n \"docs\": [\n \"The bank's liquidity vault authority, which owns the Kamino obligation. Note: Kamino needs\",\n \"this to be mut because `deposit` might return the rent here\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 108, 105, 113, 117, 105, 100, 105, 116, 121, 95, 118, 97, 117,\n 108, 116, 95, 97, 117, 116, 104\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"liquidity_vault\",\n \"docs\": [\"Used as an intermediary to deposit token into Kamino\"],\n \"writable\": true,\n \"relations\": [\"bank\"]\n },\n {\n \"name\": \"kamino_obligation\",\n \"writable\": true,\n \"relations\": [\"bank\"]\n },\n {\n \"name\": \"lending_market\"\n },\n {\n \"name\": \"lending_market_authority\"\n },\n {\n \"name\": \"kamino_reserve\",\n \"docs\": [\"The Kamino reserve that holds liquidity\"],\n \"writable\": true,\n \"relations\": [\"bank\"]\n },\n {\n \"name\": \"mint\",\n \"docs\": [\n \"Bank's liquidity token mint (e.g., USDC). Kamino calls this the `reserve_liquidity_mint`\"\n ],\n \"relations\": [\"bank\"]\n },\n {\n \"name\": \"reserve_liquidity_supply\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_collateral_mint\",\n \"docs\": [\n \"The reserve's mint for tokenized representations of Kamino deposits.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"reserve_destination_deposit_collateral\",\n \"docs\": [\n \"The reserve's destination for tokenized representations of deposits. Note: the\",\n \"`reserve_collateral_mint` will mint tokens directly to this account.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"obligation_farm_user_state\",\n \"docs\": [\"Required if the Kamino reserve has an active farm.\"],\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"reserve_farm_state\",\n \"docs\": [\"Required if the Kamino reserve has an active farm.\"],\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"kamino_program\",\n \"address\": \"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD\"\n },\n {\n \"name\": \"farms_program\",\n \"docs\": [\"Farms program for Kamino staking functionality\"],\n \"address\": \"FarmsPZpWu9i7Kky8tPN37rs2TpmMrAZrC7S7vJa91Hr\"\n },\n {\n \"name\": \"collateral_token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"liquidity_token_program\"\n },\n {\n \"name\": \"instruction_sysvar_account\",\n \"address\": \"Sysvar1nstructions1111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"kamino_harvest_reward\",\n \"docs\": [\n \"(fee admin only) Harvest the specified reward index from the Kamino Farm attached to this bank.\",\n \"\",\n \"* `reward_index` — index of the reward token in the Kamino Farm's reward list\"\n ],\n \"discriminator\": [163, 202, 248, 141, 106, 20, 116, 5],\n \"accounts\": [\n {\n \"name\": \"bank\"\n },\n {\n \"name\": \"fee_state\",\n \"docs\": [\"Global fee state that contains the global_fee_admin\"]\n },\n {\n \"name\": \"destination_token_account\",\n \"docs\": [\n \"Destination token account must be owned by the global fee admin\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"fee_state\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"reward_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140, 151, 37, 143, 78, 36, 137, 241, 187, 61, 16, 41, 20, 142,\n 13, 131, 11, 90, 19, 153, 218, 255, 16, 132, 4, 142, 123, 216,\n 219, 233, 248, 89\n ]\n }\n }\n },\n {\n \"name\": \"liquidity_vault_authority\",\n \"docs\": [\n \"The bank's liquidity vault authority, which owns the Kamino obligation.\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 108, 105, 113, 117, 105, 100, 105, 116, 121, 95, 118, 97, 117,\n 108, 116, 95, 97, 117, 116, 104\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"user_state\",\n \"writable\": true\n },\n {\n \"name\": \"farm_state\",\n \"writable\": true\n },\n {\n \"name\": \"global_config\"\n },\n {\n \"name\": \"reward_mint\"\n },\n {\n \"name\": \"user_reward_ata\",\n \"docs\": [\n \"An initialized ATA of type reward mint owned by liquidity vault\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"rewards_vault\",\n \"writable\": true\n },\n {\n \"name\": \"rewards_treasury_vault\",\n \"writable\": true\n },\n {\n \"name\": \"farm_vaults_authority\"\n },\n {\n \"name\": \"scope_prices\",\n \"optional\": true\n },\n {\n \"name\": \"farms_program\",\n \"address\": \"FarmsPZpWu9i7Kky8tPN37rs2TpmMrAZrC7S7vJa91Hr\"\n },\n {\n \"name\": \"token_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"reward_index\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"kamino_init_obligation\",\n \"docs\": [\n \"(permissionless) Initialize a Kamino obligation for a marginfi bank\",\n \"* amount - In token, in native decimals. Must be >10 (i.e. 10 lamports, not 10 tokens). Lost\",\n \"forever. Generally, try to make this the equivalent of around $1, in case Kamino ever\",\n \"rounds small balances down to zero.\"\n ],\n \"discriminator\": [253, 177, 160, 225, 70, 156, 217, 109],\n \"accounts\": [\n {\n \"name\": \"fee_payer\",\n \"docs\": [\n \"Pays to init the obligation and pays a nominal amount to ensure the obligation has a\",\n \"non-zero balance.\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"bank\"\n },\n {\n \"name\": \"signer_token_account\",\n \"docs\": [\n \"The fee payer must provide a nominal amount of bank tokens so the obligation is not empty.\",\n \"This amount is irrecoverable and and will prevent the obligation from ever being closed,\",\n \"even if the bank is otherwise empty (Kamino normally closes empty obligations automatically)\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"liquidity_vault_authority\",\n \"docs\": [\n \"The liquidity vault authority (PDA that will own the Kamino obligation). Note: Kamino needs\",\n \"this to be mut because `deposit` might return the rent here\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 108, 105, 113, 117, 105, 100, 105, 116, 121, 95, 118, 97, 117,\n 108, 116, 95, 97, 117, 116, 104\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"liquidity_vault\",\n \"docs\": [\n \"Used as an intermediary to deposit a nominal amount of token into the obligation.\"\n ],\n \"writable\": true,\n \"relations\": [\"bank\"]\n },\n {\n \"name\": \"kamino_obligation\",\n \"docs\": [\n \"The obligation account to be created. Note that the key was already derived when\",\n \"initializing the bank, and this must match the obligation recorded at that time.\"\n ],\n \"writable\": true,\n \"relations\": [\"bank\"]\n },\n {\n \"name\": \"user_metadata\",\n \"writable\": true\n },\n {\n \"name\": \"lending_market\"\n },\n {\n \"name\": \"lending_market_authority\"\n },\n {\n \"name\": \"kamino_reserve\",\n \"writable\": true,\n \"relations\": [\"bank\"]\n },\n {\n \"name\": \"mint\",\n \"docs\": [\n \"Bank's liquidity token mint (e.g., USDC). Kamino calls this the `reserve_liquidity_mint`\"\n ],\n \"writable\": true,\n \"relations\": [\"bank\"]\n },\n {\n \"name\": \"reserve_liquidity_supply\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_collateral_mint\",\n \"docs\": [\n \"The reserve's mint for tokenized representations of Kamino deposits.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"reserve_destination_deposit_collateral\",\n \"docs\": [\n \"The reserve's destination for tokenized representations of deposits. Note: the\",\n \"`reserve_collateral_mint` will mint tokens directly to this account.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"pyth_oracle\",\n \"optional\": true\n },\n {\n \"name\": \"switchboard_price_oracle\",\n \"optional\": true\n },\n {\n \"name\": \"switchboard_twap_oracle\",\n \"optional\": true\n },\n {\n \"name\": \"scope_prices\",\n \"optional\": true\n },\n {\n \"name\": \"obligation_farm_user_state\",\n \"docs\": [\"Required if the Kamino reserve has an active farm.\"],\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"reserve_farm_state\",\n \"docs\": [\"Required if the Kamino reserve has an active farm.\"],\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"kamino_program\",\n \"address\": \"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD\"\n },\n {\n \"name\": \"farms_program\",\n \"docs\": [\"Farms program for Kamino staking functionality\"],\n \"address\": \"FarmsPZpWu9i7Kky8tPN37rs2TpmMrAZrC7S7vJa91Hr\"\n },\n {\n \"name\": \"collateral_token_program\",\n \"docs\": [\n \"Note: the collateral token always uses Token classic, never Token22.\"\n ],\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"liquidity_token_program\",\n \"docs\": [\n \"Note: Kamino does not have full Token22 support, certain Token22 features are disallowed.\",\n \"Expect this to update over time. Check with the Kamino source.\"\n ]\n },\n {\n \"name\": \"instruction_sysvar_account\",\n \"address\": \"Sysvar1nstructions1111111111111111111111111\"\n },\n {\n \"name\": \"rent\",\n \"address\": \"SysvarRent111111111111111111111111111111111\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"kamino_withdraw\",\n \"docs\": [\n \"(user) Withdraw from a Kamino pool through a marginfi account\",\n \"* amount - in the collateral token (NOT liquidity token), in native decimals. Must convert\",\n \"from collateral to liquidity token amounts using the current exchange rate.\",\n \"* withdraw_all - if true, withdraw the entire mrgn balance (Note: due to rounding down, a\",\n \"deposit and withdraw back to back may result in several lamports less)\"\n ],\n \"discriminator\": [199, 101, 41, 45, 213, 98, 224, 200],\n \"accounts\": [\n {\n \"name\": \"group\",\n \"writable\": true,\n \"relations\": [\"marginfi_account\", \"bank\"]\n },\n {\n \"name\": \"marginfi_account\",\n \"writable\": true\n },\n {\n \"name\": \"authority\",\n \"signer\": true\n },\n {\n \"name\": \"bank\",\n \"writable\": true\n },\n {\n \"name\": \"destination_token_account\",\n \"docs\": [\n \"Token account that will get tokens back\",\n \"WARN: Completely unchecked!\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"liquidity_vault_authority\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 108, 105, 113, 117, 105, 100, 105, 116, 121, 95, 118, 97, 117,\n 108, 116, 95, 97, 117, 116, 104\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"liquidity_vault\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 108, 105, 113, 117, 105, 100, 105, 116, 121, 95, 118, 97, 117,\n 108, 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n },\n \"relations\": [\"bank\"]\n },\n {\n \"name\": \"kamino_obligation\",\n \"writable\": true,\n \"relations\": [\"bank\"]\n },\n {\n \"name\": \"lending_market\",\n \"docs\": [\"The Kamino lending market\"]\n },\n {\n \"name\": \"lending_market_authority\",\n \"docs\": [\"The Kamino lending market authority\"]\n },\n {\n \"name\": \"kamino_reserve\",\n \"docs\": [\"The Kamino reserve that holds liquidity\"],\n \"writable\": true,\n \"relations\": [\"bank\"]\n },\n {\n \"name\": \"reserve_liquidity_mint\",\n \"docs\": [\n \"The liquidity token mint (e.g., USDC)\",\n \"Needs serde to get the mint decimals for transfer checked\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"reserve_liquidity_supply\",\n \"docs\": [\"The reserve's liquidity supply account\"],\n \"writable\": true\n },\n {\n \"name\": \"reserve_collateral_mint\",\n \"docs\": [\"The reserve's collateral mint\"],\n \"writable\": true\n },\n {\n \"name\": \"reserve_source_collateral\",\n \"docs\": [\"The reserve's source for collateral tokens\"],\n \"writable\": true\n },\n {\n \"name\": \"obligation_farm_user_state\",\n \"docs\": [\"Optional farms accounts for Kamino staking functionality\"],\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"reserve_farm_state\",\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"kamino_program\",\n \"address\": \"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD\"\n },\n {\n \"name\": \"farms_program\",\n \"docs\": [\"Farms program for Kamino staking functionality\"],\n \"address\": \"FarmsPZpWu9i7Kky8tPN37rs2TpmMrAZrC7S7vJa91Hr\"\n },\n {\n \"name\": \"collateral_token_program\",\n \"docs\": [\"The token program for the collateral token\"],\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"liquidity_token_program\",\n \"docs\": [\"The token program for the liquidity token\"]\n },\n {\n \"name\": \"instruction_sysvar_account\",\n \"docs\": [\"Used by kamino validate CPI calls\"],\n \"address\": \"Sysvar1nstructions1111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"withdraw_all\",\n \"type\": {\n \"option\": \"bool\"\n }\n }\n ]\n },\n {\n \"name\": \"lending_account_borrow\",\n \"discriminator\": [4, 126, 116, 53, 48, 5, 212, 31],\n \"accounts\": [\n {\n \"name\": \"group\",\n \"relations\": [\"marginfi_account\", \"bank\"]\n },\n {\n \"name\": \"marginfi_account\",\n \"writable\": true\n },\n {\n \"name\": \"authority\",\n \"signer\": true,\n \"relations\": [\"marginfi_account\"]\n },\n {\n \"name\": \"bank\",\n \"writable\": true\n },\n {\n \"name\": \"destination_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"bank_liquidity_vault_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 108, 105, 113, 117, 105, 100, 105, 116, 121, 95, 118, 97, 117,\n 108, 116, 95, 97, 117, 116, 104\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"liquidity_vault\",\n \"writable\": true,\n \"relations\": [\"bank\"]\n },\n {\n \"name\": \"token_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"lending_account_close_balance\",\n \"discriminator\": [245, 54, 41, 4, 243, 202, 31, 17],\n \"accounts\": [\n {\n \"name\": \"group\",\n \"relations\": [\"marginfi_account\", \"bank\"]\n },\n {\n \"name\": \"marginfi_account\",\n \"writable\": true\n },\n {\n \"name\": \"authority\",\n \"signer\": true,\n \"relations\": [\"marginfi_account\"]\n },\n {\n \"name\": \"bank\",\n \"writable\": true\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"lending_account_deposit\",\n \"discriminator\": [171, 94, 235, 103, 82, 64, 212, 140],\n \"accounts\": [\n {\n \"name\": \"group\",\n \"relations\": [\"marginfi_account\", \"bank\"]\n },\n {\n \"name\": \"marginfi_account\",\n \"writable\": true\n },\n {\n \"name\": \"authority\",\n \"signer\": true,\n \"relations\": [\"marginfi_account\"]\n },\n {\n \"name\": \"bank\",\n \"writable\": true\n },\n {\n \"name\": \"signer_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"liquidity_vault\",\n \"writable\": true,\n \"relations\": [\"bank\"]\n },\n {\n \"name\": \"token_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"deposit_up_to_limit\",\n \"type\": {\n \"option\": \"bool\"\n }\n }\n ]\n },\n {\n \"name\": \"lending_account_end_flashloan\",\n \"discriminator\": [105, 124, 201, 106, 153, 2, 8, 156],\n \"accounts\": [\n {\n \"name\": \"marginfi_account\",\n \"writable\": true\n },\n {\n \"name\": \"authority\",\n \"signer\": true,\n \"relations\": [\"marginfi_account\"]\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"lending_account_liquidate\",\n \"docs\": [\n \"Liquidate a lending account balance of an unhealthy marginfi account\"\n ],\n \"discriminator\": [214, 169, 151, 213, 251, 167, 86, 219],\n \"accounts\": [\n {\n \"name\": \"group\",\n \"relations\": [\n \"asset_bank\",\n \"liab_bank\",\n \"liquidator_marginfi_account\",\n \"liquidatee_marginfi_account\"\n ]\n },\n {\n \"name\": \"asset_bank\",\n \"writable\": true\n },\n {\n \"name\": \"liab_bank\",\n \"writable\": true\n },\n {\n \"name\": \"liquidator_marginfi_account\",\n \"writable\": true\n },\n {\n \"name\": \"authority\",\n \"signer\": true,\n \"relations\": [\"liquidator_marginfi_account\"]\n },\n {\n \"name\": \"liquidatee_marginfi_account\",\n \"writable\": true\n },\n {\n \"name\": \"bank_liquidity_vault_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 108, 105, 113, 117, 105, 100, 105, 116, 121, 95, 118, 97, 117,\n 108, 116, 95, 97, 117, 116, 104\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"liab_bank\"\n }\n ]\n }\n },\n {\n \"name\": \"bank_liquidity_vault\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 108, 105, 113, 117, 105, 100, 105, 116, 121, 95, 118, 97, 117,\n 108, 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"liab_bank\"\n }\n ]\n }\n },\n {\n \"name\": \"bank_insurance_vault\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 105, 110, 115, 117, 114, 97, 110, 99, 101, 95, 118, 97, 117,\n 108, 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"liab_bank\"\n }\n ]\n }\n },\n {\n \"name\": \"token_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"asset_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"liquidatee_accounts\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"liquidator_accounts\",\n \"type\": \"u8\"\n }\n ]\n },\n {\n \"name\": \"lending_account_pulse_health\",\n \"docs\": [\n \"(Permissionless) Refresh the internal risk engine health cache. Useful for liquidators and\",\n \"other consumers that want to see the internal risk state of a user account. This cache is\",\n \"read-only and serves no purpose except being populated by this ix.\",\n \"* remaining accounts expected in the same order as borrow, etc. I.e., for each balance the\",\n \"user has, pass bank and oracle: <bank1, oracle1, bank2, oracle2>\"\n ],\n \"discriminator\": [186, 52, 117, 97, 34, 74, 39, 253],\n \"accounts\": [\n {\n \"name\": \"marginfi_account\",\n \"writable\": true\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"lending_account_repay\",\n \"discriminator\": [79, 209, 172, 177, 222, 51, 173, 151],\n \"accounts\": [\n {\n \"name\": \"group\",\n \"relations\": [\"marginfi_account\", \"bank\"]\n },\n {\n \"name\": \"marginfi_account\",\n \"writable\": true\n },\n {\n \"name\": \"authority\",\n \"docs\": [\n \"Must be marginfi_account's authority, unless in liquidation/deleverage receivership\",\n \"\",\n \"Note: during receivership, there are no signer checks whatsoever: any key can repay as\",\n \"long as the invariants checked at the end of receivership are met.\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"bank\",\n \"writable\": true\n },\n {\n \"name\": \"signer_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"liquidity_vault\",\n \"writable\": true,\n \"relations\": [\"bank\"]\n },\n {\n \"name\": \"token_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"repay_all\",\n \"type\": {\n \"option\": \"bool\"\n }\n }\n ]\n },\n {\n \"name\": \"lending_account_settle_emissions\",\n \"discriminator\": [161, 58, 136, 174, 242, 223, 156, 176],\n \"accounts\": [\n {\n \"name\": \"marginfi_account\",\n \"writable\": true\n },\n {\n \"name\": \"bank\",\n \"writable\": true\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"lending_account_start_flashloan\",\n \"discriminator\": [14, 131, 33, 220, 81, 186, 180, 107],\n \"accounts\": [\n {\n \"name\": \"marginfi_account\",\n \"writable\": true\n },\n {\n \"name\": \"authority\",\n \"signer\": true,\n \"relations\": [\"marginfi_account\"]\n },\n {\n \"name\": \"ixs_sysvar\",\n \"address\": \"Sysvar1nstructions1111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"end_index\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"lending_account_withdraw\",\n \"discriminator\": [36, 72, 74, 19, 210, 210, 192, 192],\n \"accounts\": [\n {\n \"name\": \"group\",\n \"writable\": true,\n \"relations\": [\"marginfi_account\", \"bank\"]\n },\n {\n \"name\": \"marginfi_account\",\n \"writable\": true\n },\n {\n \"name\": \"authority\",\n \"docs\": [\n \"Must be marginfi_account's authority, unless in liquidation/deleverage receivership\",\n \"\",\n \"Note: during receivership, there are no signer checks whatsoever: any key can repay as\",\n \"long as the invariants checked at the end of receivership are met.\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"bank\",\n \"writable\": true\n },\n {\n \"name\": \"destination_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"bank_liquidity_vault_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 108, 105, 113, 117, 105, 100, 105, 116, 121, 95, 118, 97, 117,\n 108, 116, 95, 97, 117, 116, 104\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"liquidity_vault\",\n \"writable\": true,\n \"relations\": [\"bank\"]\n },\n {\n \"name\": \"token_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"withdraw_all\",\n \"type\": {\n \"option\": \"bool\"\n }\n }\n ]\n },\n {\n \"name\": \"lending_account_withdraw_emissions\",\n \"discriminator\": [234, 22, 84, 214, 118, 176, 140, 170],\n \"accounts\": [\n {\n \"name\": \"group\",\n \"relations\": [\"marginfi_account\", \"bank\"]\n },\n {\n \"name\": \"marginfi_account\",\n \"writable\": true\n },\n {\n \"name\": \"authority\",\n \"signer\": true,\n \"relations\": [\"marginfi_account\"]\n },\n {\n \"name\": \"bank\",\n \"writable\": true\n },\n {\n \"name\": \"emissions_mint\",\n \"relations\": [\"bank\"]\n },\n {\n \"name\": \"emissions_auth\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 101, 109, 105, 115, 115, 105, 111, 110, 115, 95, 97, 117, 116,\n 104, 95, 115, 101, 101, 100\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"emissions_mint\"\n }\n ]\n }\n },\n {\n \"name\": \"emissions_vault\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 101, 109, 105, 115, 115, 105, 111, 110, 115, 95, 116, 111,\n 107, 101, 110, 95, 97, 99, 99, 111, 117, 110, 116, 95, 115,\n 101, 101, 100\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"emissions_mint\"\n }\n ]\n }\n },\n {\n \"name\": \"destination_account\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"lending_account_withdraw_emissions_permissionless\",\n \"discriminator\": [4, 174, 124, 203, 44, 49, 145, 150],\n \"accounts\": [\n {\n \"name\": \"group\",\n \"relations\": [\"marginfi_account\", \"bank\"]\n },\n {\n \"name\": \"marginfi_account\",\n \"writable\": true\n },\n {\n \"name\": \"bank\",\n \"writable\": true\n },\n {\n \"name\": \"emissions_mint\",\n \"relations\": [\"bank\"]\n },\n {\n \"name\": \"emissions_auth\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 101, 109, 105, 115, 115, 105, 111, 110, 115, 95, 97, 117, 116,\n 104, 95, 115, 101, 101, 100\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"emissions_mint\"\n }\n ]\n }\n },\n {\n \"name\": \"emissions_vault\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 101, 109, 105, 115, 115, 105, 111, 110, 115, 95, 116, 111,\n 107, 101, 110, 95, 97, 99, 99, 111, 117, 110, 116, 95, 115,\n 101, 101, 100\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"emissions_mint\"\n }\n ]\n }\n },\n {\n \"name\": \"destination_account\",\n \"docs\": [\"registered on `marginfi_account`\"],\n \"writable\": true\n },\n {\n \"name\": \"token_program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"lending_pool_accrue_bank_interest\",\n \"discriminator\": [108, 201, 30, 87, 47, 65, 97, 188],\n \"accounts\": [\n {\n \"name\": \"group\",\n \"relations\": [\"bank\"]\n },\n {\n \"name\": \"bank\",\n \"writable\": true\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"lending_pool_add_bank\",\n \"discriminator\": [215, 68, 72, 78, 208, 218, 103, 182],\n \"accounts\": [\n {\n \"name\": \"marginfi_group\",\n \"writable\": true\n },\n {\n \"name\": \"admin\",\n \"signer\": true,\n \"relations\": [\"marginfi_group\"]\n },\n {\n \"name\": \"fee_payer\",\n \"docs\": [\n \"Pays to init accounts and pays `fee_state.bank_init_flat_sol_fee` lamports to the protocol\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"fee_state\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [102, 101, 101, 115, 116, 97, 116, 101]\n }\n ]\n }\n },\n {\n \"name\": \"global_fee_wallet\",\n \"writable\": true,\n \"relations\": [\"fee_state\"]\n },\n {\n \"name\": \"bank_mint\"\n },\n {\n \"name\": \"bank\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"liquidity_vault_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 108, 105, 113, 117, 105, 100, 105, 116, 121, 95, 118, 97, 117,\n 108, 116, 95, 97, 117, 116, 104\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"liquidity_vault\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 108, 105, 113, 117, 105, 100, 105, 116, 121, 95, 118, 97, 117,\n 108, 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"insurance_vault_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 105, 110, 115, 117, 114, 97, 110, 99, 101, 95, 118, 97, 117,\n 108, 116, 95, 97, 117, 116, 104\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"insurance_vault\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 105, 110, 115, 117, 114, 97, 110, 99, 101, 95, 118, 97, 117,\n 108, 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"fee_vault_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 102, 101, 101, 95, 118, 97, 117, 108, 116, 95, 97, 117, 116,\n 104\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"fee_vault\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [102, 101, 101, 95, 118, 97, 117, 108, 116]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"bank_config\",\n \"type\": {\n \"defined\": {\n \"name\": \"BankConfigCompact\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"lending_pool_add_bank_kamino\",\n \"docs\": [\n \"(group admin only) Add a Kamino bank to the group. Pass the oracle and reserve in remaining\",\n \"accounts 0 and 1 respectively.\"\n ],\n \"discriminator\": [118, 53, 16, 243, 255, 245, 149, 241],\n \"accounts\": [\n {\n \"name\": \"group\",\n \"writable\": true\n },\n {\n \"name\": \"admin\",\n \"signer\": true,\n \"relations\": [\"group\"]\n },\n {\n \"name\": \"fee_payer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"bank_mint\",\n \"docs\": [\n \"Must match the mint used by `kamino_reserve`, Kamino calls this the `reserve_liquidity_mint`\",\n \"aka `liquidity.mint_pubkey`\"\n ]\n },\n {\n \"name\": \"bank\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"group\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank_mint\"\n },\n {\n \"kind\": \"arg\",\n \"path\": \"bank_seed\"\n }\n ]\n }\n },\n {\n \"name\": \"kamino_reserve\"\n },\n {\n \"name\": \"kamino_obligation\",\n \"docs\": [\n \"Note: not yet initialized in this instruction, run `init_obligation` after.\"\n ]\n },\n {\n \"name\": \"liquidity_vault_authority\",\n \"docs\": [\n \"Will be authority of the bank's `kamino_obligation`. Note: When depositing/withdrawing\",\n \"Kamino assets, the source/destination must also be owned by the obligation authority. This\",\n \"account owns the `liquidity_vault`, and thus acts as intermediary for deposits/withdraws\"\n ],\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 108, 105, 113, 117, 105, 100, 105, 116, 121, 95, 118, 97, 117,\n 108, 116, 95, 97, 117, 116, 104\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"liquidity_vault\",\n \"docs\": [\n \"For Kamino banks, the `liquidity_vault` never holds assets, but is instead used as an\",\n \"intermediary when depositing/withdrawing, e.g., withdrawn funds move from Kamino -> here ->\",\n \"the user's token account.\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 108, 105, 113, 117, 105, 100, 105, 116, 121, 95, 118, 97, 117,\n 108, 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"insurance_vault_authority\",\n \"docs\": [\"Note: Currently does nothing.\"],\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 105, 110, 115, 117, 114, 97, 110, 99, 101, 95, 118, 97, 117,\n 108, 116, 95, 97, 117, 116, 104\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"insurance_vault\",\n \"docs\": [\"Note: Currently does nothing.\"],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 105, 110, 115, 117, 114, 97, 110, 99, 101, 95, 118, 97, 117,\n 108, 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"fee_vault_authority\",\n \"docs\": [\"Note: Currently does nothing.\"],\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 102, 101, 101, 95, 118, 97, 117, 108, 116, 95, 97, 117, 116,\n 104\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"fee_vault\",\n \"docs\": [\"Note: Currently does nothing.\"],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [102, 101, 101, 95, 118, 97, 117, 108, 116]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"bank_config\",\n \"type\": {\n \"defined\": {\n \"name\": \"KaminoConfigCompact\"\n }\n }\n },\n {\n \"name\": \"bank_seed\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"lending_pool_add_bank_permissionless\",\n \"discriminator\": [127, 187, 121, 34, 187, 167, 238, 102],\n \"accounts\": [\n {\n \"name\": \"marginfi_group\",\n \"writable\": true,\n \"relations\": [\"staked_settings\"]\n },\n {\n \"name\": \"staked_settings\"\n },\n {\n \"name\": \"fee_payer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"bank_mint\",\n \"docs\": [\n \"Mint of the spl-single-pool LST (a PDA derived from `stake_pool`)\",\n \"\",\n \"because the sol_pool and stake_pool will not derive to a valid PDA which is also owned by\",\n \"the staking program and spl-single-pool program.\"\n ]\n },\n {\n \"name\": \"sol_pool\"\n },\n {\n \"name\": \"stake_pool\",\n \"docs\": [\n \"this key.\",\n \"\",\n \"If derives the same `bank_mint`, then this must be the correct stake pool for that mint, and\",\n \"we can subsequently use it to validate the `sol_pool`\"\n ]\n },\n {\n \"name\": \"bank\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"marginfi_group\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank_mint\"\n },\n {\n \"kind\": \"arg\",\n \"path\": \"bank_seed\"\n }\n ]\n }\n },\n {\n \"name\": \"liquidity_vault_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 108, 105, 113, 117, 105, 100, 105, 116, 121, 95, 118, 97, 117,\n 108, 116, 95, 97, 117, 116, 104\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"liquidity_vault\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 108, 105, 113, 117, 105, 100, 105, 116, 121, 95, 118, 97, 117,\n 108, 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"insurance_vault_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 105, 110, 115, 117, 114, 97, 110, 99, 101, 95, 118, 97, 117,\n 108, 116, 95, 97, 117, 116, 104\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"insurance_vault\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 105, 110, 115, 117, 114, 97, 110, 99, 101, 95, 118, 97, 117,\n 108, 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"fee_vault_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 102, 101, 101, 95, 118, 97, 117, 108, 116, 95, 97, 117, 116,\n 104\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"fee_vault\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [102, 101, 101, 95, 118, 97, 117, 108, 116]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"bank_seed\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"lending_pool_add_bank_with_seed\",\n \"docs\": [\n \"A copy of lending_pool_add_bank with an additional bank seed.\",\n \"This seed is used to create a PDA for the bank's signature.\",\n \"lending_pool_add_bank is preserved for backwards compatibility.\"\n ],\n \"discriminator\": [76, 211, 213, 171, 117, 78, 158, 76],\n \"accounts\": [\n {\n \"name\": \"marginfi_group\",\n \"writable\": true\n },\n {\n \"name\": \"admin\",\n \"signer\": true,\n \"relations\": [\"marginfi_group\"]\n },\n {\n \"name\": \"fee_payer\",\n \"docs\": [\n \"Pays to init accounts and pays `fee_state.bank_init_flat_sol_fee` lamports to the protocol\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"fee_state\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [102, 101, 101, 115, 116, 97, 116, 101]\n }\n ]\n }\n },\n {\n \"name\": \"global_fee_wallet\",\n \"writable\": true,\n \"relations\": [\"fee_state\"]\n },\n {\n \"name\": \"bank_mint\"\n },\n {\n \"name\": \"bank\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"marginfi_group\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank_mint\"\n },\n {\n \"kind\": \"arg\",\n \"path\": \"bank_seed\"\n }\n ]\n }\n },\n {\n \"name\": \"liquidity_vault_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 108, 105, 113, 117, 105, 100, 105, 116, 121, 95, 118, 97, 117,\n 108, 116, 95, 97, 117, 116, 104\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"liquidity_vault\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 108, 105, 113, 117, 105, 100, 105, 116, 121, 95, 118, 97, 117,\n 108, 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"insurance_vault_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 105, 110, 115, 117, 114, 97, 110, 99, 101, 95, 118, 97, 117,\n 108, 116, 95, 97, 117, 116, 104\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"insurance_vault\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 105, 110, 115, 117, 114, 97, 110, 99, 101, 95, 118, 97, 117,\n 108, 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"fee_vault_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 102, 101, 101, 95, 118, 97, 117, 108, 116, 95, 97, 117, 116,\n 104\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"fee_vault\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [102, 101, 101, 95, 118, 97, 117, 108, 116]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"bank_config\",\n \"type\": {\n \"defined\": {\n \"name\": \"BankConfigCompact\"\n }\n }\n },\n {\n \"name\": \"bank_seed\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"lending_pool_clone_bank\",\n \"docs\": [\"Staging or localnet only, panics on mainnet\"],\n \"discriminator\": [214, 93, 17, 236, 177, 228, 78, 17],\n \"accounts\": [\n {\n \"name\": \"marginfi_group\",\n \"writable\": true\n },\n {\n \"name\": \"admin\",\n \"writable\": true,\n \"signer\": true,\n \"relations\": [\"marginfi_group\"]\n },\n {\n \"name\": \"fee_payer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"bank_mint\"\n },\n {\n \"name\": \"source_bank\",\n \"docs\": [\"Source bank to clone from mainnet program\", \"\"]\n },\n {\n \"name\": \"bank\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"marginfi_group\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank_mint\"\n },\n {\n \"kind\": \"arg\",\n \"path\": \"bank_seed\"\n }\n ]\n }\n },\n {\n \"name\": \"liquidity_vault_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 108, 105, 113, 117, 105, 100, 105, 116, 121, 95, 118, 97, 117,\n 108, 116, 95, 97, 117, 116, 104\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"liquidity_vault\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 108, 105, 113, 117, 105, 100, 105, 116, 121, 95, 118, 97, 117,\n 108, 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"insurance_vault_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 105, 110, 115, 117, 114, 97, 110, 99, 101, 95, 118, 97, 117,\n 108, 116, 95, 97, 117, 116, 104\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"insurance_vault\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 105, 110, 115, 117, 114, 97, 110, 99, 101, 95, 118, 97, 117,\n 108, 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"fee_vault_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 102, 101, 101, 95, 118, 97, 117, 108, 116, 95, 97, 117, 116,\n 104\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"fee_vault\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [102, 101, 101, 95, 118, 97, 117, 108, 116]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"bank_seed\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"lending_pool_close_bank\",\n \"discriminator\": [22, 115, 7, 130, 227, 85, 0, 47],\n \"accounts\": [\n {\n \"name\": \"group\",\n \"writable\": true,\n \"relations\": [\"bank\"]\n },\n {\n \"name\": \"bank\",\n \"writable\": true\n },\n {\n \"name\": \"admin\",\n \"writable\": true,\n \"signer\": true,\n \"relations\": [\"group\"]\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"lending_pool_collect_bank_fees\",\n \"discriminator\": [201, 5, 215, 116, 230, 92, 75, 150],\n \"accounts\": [\n {\n \"name\": \"group\",\n \"relations\": [\"bank\"]\n },\n {\n \"name\": \"bank\",\n \"writable\": true\n },\n {\n \"name\": \"liquidity_vault_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 108, 105, 113, 117, 105, 100, 105, 116, 121, 95, 118, 97, 117,\n 108, 116, 95, 97, 117, 116, 104\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"liquidity_vault\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 108, 105, 113, 117, 105, 100, 105, 116, 121, 95, 118, 97, 117,\n 108, 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"insurance_vault\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 105, 110, 115, 117, 114, 97, 110, 99, 101, 95, 118, 97, 117,\n 108, 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"fee_vault\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [102, 101, 101, 95, 118, 97, 117, 108, 116]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"fee_state\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [102, 101, 101, 115, 116, 97, 116, 101]\n }\n ]\n }\n },\n {\n \"name\": \"fee_ata\",\n \"docs\": [\n \"(validated in handler). Must already exist, may require initializing the ATA if it does not\",\n \"already exist prior to this ix.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"lending_pool_configure_bank\",\n \"docs\": [\"(admin only)\"],\n \"discriminator\": [121, 173, 156, 40, 93, 148, 56, 237],\n \"accounts\": [\n {\n \"name\": \"group\",\n \"relations\": [\"bank\"]\n },\n {\n \"name\": \"admin\",\n \"signer\": true,\n \"relations\": [\"group\"]\n },\n {\n \"name\": \"bank\",\n \"writable\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"bank_config_opt\",\n \"type\": {\n \"defined\": {\n \"name\": \"BankConfigOpt\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"lending_pool_configure_bank_emode\",\n \"docs\": [\"(emode_admin only)\"],\n \"discriminator\": [17, 175, 91, 57, 239, 86, 49, 71],\n \"accounts\": [\n {\n \"name\": \"group\",\n \"relations\": [\"bank\"]\n },\n {\n \"name\": \"emode_admin\",\n \"signer\": true,\n \"relations\": [\"group\"]\n },\n {\n \"name\": \"bank\",\n \"writable\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"emode_tag\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"entries\",\n \"type\": {\n \"array\": [\n {\n \"defined\": {\n \"name\": \"EmodeEntry\"\n }\n },\n 10\n ]\n }\n }\n ]\n },\n {\n \"name\": \"lending_pool_configure_bank_interest_only\",\n \"docs\": [\"(delegate_curve_admin only)\"],\n \"discriminator\": [245, 107, 83, 38, 103, 219, 163, 241],\n \"accounts\": [\n {\n \"name\": \"group\",\n \"relations\": [\"bank\"]\n },\n {\n \"name\": \"delegate_curve_admin\",\n \"signer\": true,\n \"relations\": [\"group\"]\n },\n {\n \"name\": \"bank\",\n \"writable\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"interest_rate_config\",\n \"type\": {\n \"defined\": {\n \"name\": \"InterestRateConfigOpt\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"lending_pool_configure_bank_limits_only\",\n \"docs\": [\"(delegate_limits_admin only)\"],\n \"discriminator\": [157, 196, 221, 200, 202, 62, 84, 21],\n \"accounts\": [\n {\n \"name\": \"group\",\n \"relations\": [\"bank\"]\n },\n {\n \"name\": \"delegate_limit_admin\",\n \"signer\": true,\n \"relations\": [\"group\"]\n },\n {\n \"name\": \"bank\",\n \"writable\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"deposit_limit\",\n \"type\": {\n \"option\": \"u64\"\n }\n },\n {\n \"name\": \"borrow_limit\",\n \"type\": {\n \"option\": \"u64\"\n }\n },\n {\n \"name\": \"total_asset_value_init_limit\",\n \"type\": {\n \"option\": \"u64\"\n }\n }\n ]\n },\n {\n \"name\": \"lending_pool_configure_bank_oracle\",\n \"docs\": [\"(admin only)\"],\n \"discriminator\": [209, 82, 255, 171, 124, 21, 71, 81],\n \"accounts\": [\n {\n \"name\": \"group\",\n \"relations\": [\"bank\"]\n },\n {\n \"name\": \"admin\",\n \"signer\": true,\n \"relations\": [\"group\"]\n },\n {\n \"name\": \"bank\",\n \"writable\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"setup\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"oracle\",\n \"type\": \"pubkey\"\n }\n ]\n },\n {\n \"name\": \"lending_pool_handle_bankruptcy\",\n \"docs\": [\n \"Handle bad debt of a bankrupt marginfi account for a given bank.\"\n ],\n \"discriminator\": [162, 11, 56, 139, 90, 128, 70, 173],\n \"accounts\": [\n {\n \"name\": \"group\",\n \"relations\": [\"bank\", \"marginfi_account\"]\n },\n {\n \"name\": \"signer\",\n \"docs\": [\"PERMISSIONLESS_BAD_DEBT_SETTLEMENT_FLAG is not set\"],\n \"signer\": true\n },\n {\n \"name\": \"bank\",\n \"writable\": true\n },\n {\n \"name\": \"marginfi_account\",\n \"writable\": true\n },\n {\n \"name\": \"liquidity_vault\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 108, 105, 113, 117, 105, 100, 105, 116, 121, 95, 118, 97, 117,\n 108, 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"insurance_vault\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 105, 110, 115, 117, 114, 97, 110, 99, 101, 95, 118, 97, 117,\n 108, 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"insurance_vault_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 105, 110, 115, 117, 114, 97, 110, 99, 101, 95, 118, 97, 117,\n 108, 116, 95, 97, 117, 116, 104\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"token_program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"lending_pool_set_fixed_oracle_price\",\n \"docs\": [\"(admin only)\"],\n \"discriminator\": [28, 126, 127, 127, 60, 37, 211, 125],\n \"accounts\": [\n {\n \"name\": \"group\",\n \"relations\": [\"bank\"]\n },\n {\n \"name\": \"admin\",\n \"signer\": true,\n \"relations\": [\"group\"]\n },\n {\n \"name\": \"bank\",\n \"writable\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"price\",\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"lending_pool_setup_emissions\",\n \"docs\": [\"(delegate_emissions_admin only)\"],\n \"discriminator\": [206, 97, 120, 172, 113, 204, 169, 70],\n \"accounts\": [\n {\n \"name\": \"group\",\n \"relations\": [\"bank\"]\n },\n {\n \"name\": \"delegate_emissions_admin\",\n \"writable\": true,\n \"signer\": true,\n \"relations\": [\"group\"]\n },\n {\n \"name\": \"bank\",\n \"writable\": true\n },\n {\n \"name\": \"emissions_mint\"\n },\n {\n \"name\": \"emissions_auth\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 101, 109, 105, 115, 115, 105, 111, 110, 115, 95, 97, 117, 116,\n 104, 95, 115, 101, 101, 100\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"emissions_mint\"\n }\n ]\n }\n },\n {\n \"name\": \"emissions_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 101, 109, 105, 115, 115, 105, 111, 110, 115, 95, 116, 111,\n 107, 101, 110, 95, 97, 99, 99, 111, 117, 110, 116, 95, 115,\n 101, 101, 100\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"emissions_mint\"\n }\n ]\n }\n },\n {\n \"name\": \"emissions_funding_account\",\n \"docs\": [\n \"NOTE: This is a TokenAccount, spl transfer will validate it.\",\n \"\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"flags\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"rate\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_emissions\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"lending_pool_update_emissions_parameters\",\n \"docs\": [\"(delegate_emissions_admin only)\"],\n \"discriminator\": [55, 213, 224, 168, 153, 53, 197, 40],\n \"accounts\": [\n {\n \"name\": \"group\",\n \"relations\": [\"bank\"]\n },\n {\n \"name\": \"delegate_emissions_admin\",\n \"writable\": true,\n \"signer\": true,\n \"relations\": [\"group\"]\n },\n {\n \"name\": \"bank\",\n \"writable\": true\n },\n {\n \"name\": \"emissions_mint\"\n },\n {\n \"name\": \"emissions_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 101, 109, 105, 115, 115, 105, 111, 110, 115, 95, 116, 111,\n 107, 101, 110, 95, 97, 99, 99, 111, 117, 110, 116, 95, 115,\n 101, 101, 100\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"emissions_mint\"\n }\n ]\n }\n },\n {\n \"name\": \"emissions_funding_account\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"emissions_flags\",\n \"type\": {\n \"option\": \"u64\"\n }\n },\n {\n \"name\": \"emissions_rate\",\n \"type\": {\n \"option\": \"u64\"\n }\n },\n {\n \"name\": \"additional_emissions\",\n \"type\": {\n \"option\": \"u64\"\n }\n }\n ]\n },\n {\n \"name\": \"lending_pool_update_fees_destination_account\",\n \"discriminator\": [102, 4, 121, 243, 237, 110, 95, 13],\n \"accounts\": [\n {\n \"name\": \"group\",\n \"relations\": [\"bank\"]\n },\n {\n \"name\": \"bank\",\n \"writable\": true\n },\n {\n \"name\": \"admin\",\n \"signer\": true,\n \"relations\": [\"group\"]\n },\n {\n \"name\": \"destination_account\",\n \"docs\": [\n \"Bank fees will be sent to this account which must be an ATA of the bank's mint.\"\n ]\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"lending_pool_withdraw_fees\",\n \"discriminator\": [92, 140, 215, 254, 170, 0, 83, 174],\n \"accounts\": [\n {\n \"name\": \"group\",\n \"relations\": [\"bank\"]\n },\n {\n \"name\": \"bank\"\n },\n {\n \"name\": \"admin\",\n \"signer\": true,\n \"relations\": [\"group\"]\n },\n {\n \"name\": \"fee_vault\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [102, 101, 101, 95, 118, 97, 117, 108, 116]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"fee_vault_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 102, 101, 101, 95, 118, 97, 117, 108, 116, 95, 97, 117, 116,\n 104\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"dst_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"lending_pool_withdraw_fees_permissionless\",\n \"discriminator\": [57, 245, 1, 208, 130, 18, 145, 113],\n \"accounts\": [\n {\n \"name\": \"group\",\n \"relations\": [\"bank\"]\n },\n {\n \"name\": \"bank\"\n },\n {\n \"name\": \"fee_vault\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [102, 101, 101, 95, 118, 97, 117, 108, 116]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"fee_vault_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 102, 101, 101, 95, 118, 97, 117, 108, 116, 95, 97, 117, 116,\n 104\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"fees_destination_account\",\n \"writable\": true,\n \"relations\": [\"bank\"]\n },\n {\n \"name\": \"token_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"lending_pool_withdraw_insurance\",\n \"discriminator\": [108, 60, 60, 246, 104, 79, 159, 243],\n \"accounts\": [\n {\n \"name\": \"group\",\n \"relations\": [\"bank\"]\n },\n {\n \"name\": \"bank\"\n },\n {\n \"name\": \"admin\",\n \"signer\": true,\n \"relations\": [\"group\"]\n },\n {\n \"name\": \"insurance_vault\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 105, 110, 115, 117, 114, 97, 110, 99, 101, 95, 118, 97, 117,\n 108, 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"insurance_vault_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 105, 110, 115, 117, 114, 97, 110, 99, 101, 95, 118, 97, 117,\n 108, 116, 95, 97, 117, 116, 104\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"bank\"\n }\n ]\n }\n },\n {\n \"name\": \"dst_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"marginfi_account_close\",\n \"discriminator\": [186, 221, 93, 34, 50, 97, 194, 241],\n \"accounts\": [\n {\n \"name\": \"marginfi_account\",\n \"writable\": true\n },\n {\n \"name\": \"authority\",\n \"signer\": true,\n \"relations\": [\"marginfi_account\"]\n },\n {\n \"name\": \"fee_payer\",\n \"writable\": true,\n \"signer\": true\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"marginfi_account_init_liq_record\",\n \"discriminator\": [236, 213, 238, 126, 147, 251, 164, 8],\n \"accounts\": [\n {\n \"name\": \"marginfi_account\",\n \"writable\": true\n },\n {\n \"name\": \"fee_payer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"liquidation_record\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [108, 105, 113, 95, 114, 101, 99, 111, 114, 100]\n },\n {\n \"kind\": \"account\",\n \"path\": \"marginfi_account\"\n }\n ]\n }\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"marginfi_account_initialize\",\n \"docs\": [\n \"Initialize a marginfi account for a given group. The account is a fresh keypair, and must\",\n \"sign. If you are a CPI caller, consider using `marginfi_account_initialize_pda` instead, or\",\n \"create the account manually and use `transfer_to_new_account` to gift it to the owner you\",\n \"wish.\"\n ],\n \"discriminator\": [43, 78, 61, 255, 148, 52, 249, 154],\n \"accounts\": [\n {\n \"name\": \"marginfi_group\"\n },\n {\n \"name\": \"marginfi_account\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"authority\",\n \"signer\": true\n },\n {\n \"name\": \"fee_payer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"marginfi_account_initialize_pda\",\n \"docs\": [\n \"The same as `marginfi_account_initialize`, except the created marginfi account uses a PDA\",\n \"(Program Derived Address)\",\n \"\",\n \"seeds:\",\n \"- marginfi_group\",\n \"- authority: The account authority (owner)\",\n \"- account_index: A u16 value to allow multiple accounts per authority\",\n \"- third_party_id: Optional u16 for third-party tagging. Seeds < PDA_FREE_THRESHOLD can be\",\n \"used freely. For a dedicated seed used by just your program (via CPI), contact us.\"\n ],\n \"discriminator\": [87, 177, 91, 80, 218, 119, 245, 31],\n \"accounts\": [\n {\n \"name\": \"marginfi_group\"\n },\n {\n \"name\": \"marginfi_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109, 97, 114, 103, 105, 110, 102, 105, 95, 97, 99, 99, 111,\n 117, 110, 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"marginfi_group\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"authority\"\n },\n {\n \"kind\": \"arg\",\n \"path\": \"account_index\"\n },\n {\n \"kind\": \"arg\",\n \"path\": \"third_party_id.unwrap_or(0)\"\n }\n ]\n }\n },\n {\n \"name\": \"authority\",\n \"signer\": true\n },\n {\n \"name\": \"fee_payer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"instructions_sysvar\",\n \"docs\": [\"Instructions sysvar for CPI validation\", \"\"],\n \"address\": \"Sysvar1nstructions1111111111111111111111111\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"account_index\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"third_party_id\",\n \"type\": {\n \"option\": \"u16\"\n }\n }\n ]\n },\n {\n \"name\": \"marginfi_account_update_emissions_destination_account\",\n \"discriminator\": [73, 185, 162, 201, 111, 24, 116, 185],\n \"accounts\": [\n {\n \"name\": \"marginfi_account\",\n \"writable\": true\n },\n {\n \"name\": \"authority\",\n \"signer\": true,\n \"relations\": [\"marginfi_account\"]\n },\n {\n \"name\": \"destination_account\",\n \"docs\": [\n \"User's earned emissions will be sent to the canonical ATA of this wallet.\",\n \"\"\n ]\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"marginfi_group_configure\",\n \"discriminator\": [62, 199, 81, 78, 33, 13, 236, 61],\n \"accounts\": [\n {\n \"name\": \"marginfi_group\",\n \"writable\": true\n },\n {\n \"name\": \"admin\",\n \"signer\": true,\n \"relations\": [\"marginfi_group\"]\n }\n ],\n \"args\": [\n {\n \"name\": \"new_admin\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"new_emode_admin\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"new_curve_admin\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"new_limit_admin\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"new_emissions_admin\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"new_metadata_admin\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"new_risk_admin\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"is_arena_group\",\n \"type\": \"bool\"\n }\n ]\n },\n {\n \"name\": \"marginfi_group_initialize\",\n \"discriminator\": [255, 67, 67, 26, 94, 31, 34, 20],\n \"accounts\": [\n {\n \"name\": \"marginfi_group\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"admin\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"fee_state\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [102, 101, 101, 115, 116, 97, 116, 101]\n }\n ]\n }\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"is_arena_group\",\n \"type\": \"bool\"\n }\n ]\n },\n {\n \"name\": \"migrate_curve\",\n \"docs\": [\n \"(Permissionless) Convert a bank from the legacy curve setup to the new setup, with no effect\",\n \"on how interest accrues.\"\n ],\n \"discriminator\": [151, 254, 50, 13, 112, 235, 152, 72],\n \"accounts\": [\n {\n \"name\": \"bank\",\n \"writable\": true\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"panic_pause\",\n \"discriminator\": [76, 164, 123, 25, 4, 43, 79, 165],\n \"accounts\": [\n {\n \"name\": \"global_fee_admin\",\n \"docs\": [\"Admin of the global FeeState (can trigger panic pause)\"],\n \"signer\": true,\n \"relations\": [\"fee_state\"]\n },\n {\n \"name\": \"fee_state\",\n \"docs\": [\"Global fee state account containing the panic state\"],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [102, 101, 101, 115, 116, 97, 116, 101]\n }\n ]\n }\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"panic_unpause\",\n \"discriminator\": [236, 107, 194, 242, 99, 51, 121, 128],\n \"accounts\": [\n {\n \"name\": \"global_fee_admin\",\n \"docs\": [\"Admin of the global FeeState (can manually unpause)\"],\n \"writable\": true,\n \"signer\": true,\n \"relations\": [\"fee_state\"]\n },\n {\n \"name\": \"fee_state\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [102, 101, 101, 115, 116, 97, 116, 101]\n }\n ]\n }\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"panic_unpause_permissionless\",\n \"docs\": [\n \"(permissionless) Unpause the protocol when pause time has expired\"\n ],\n \"discriminator\": [245, 139, 50, 159, 213, 62, 91, 248],\n \"accounts\": [\n {\n \"name\": \"fee_state\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [102, 101, 101, 115, 116, 97, 116, 101]\n }\n ]\n }\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"propagate_fee_state\",\n \"docs\": [\n \"(Permissionless) Force any group to adopt the current FeeState settings\"\n ],\n \"discriminator\": [64, 3, 166, 194, 129, 21, 101, 155],\n \"accounts\": [\n {\n \"name\": \"fee_state\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [102, 101, 101, 115, 116, 97, 116, 101]\n }\n ]\n }\n },\n {\n \"name\": \"marginfi_group\",\n \"docs\": [\n \"Any group, this ix is permisionless and can propagate the fee to any group\"\n ],\n \"writable\": true\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"propagate_staked_settings\",\n \"discriminator\": [210, 30, 152, 69, 130, 99, 222, 170],\n \"accounts\": [\n {\n \"name\": \"marginfi_group\",\n \"relations\": [\"staked_settings\"]\n },\n {\n \"name\": \"staked_settings\"\n },\n {\n \"name\": \"bank\",\n \"writable\": true\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"purge_deleverage_balance\",\n \"docs\": [\n \"(risk admin only) Purge a user's lending balance without withdrawing anything. Only usable\",\n \"after all the debt has been settled on a bank in deleveraging mode, e.g. when\",\n \"`TOKENLESS_REPAYMENTS_ALLOWED` and `TOKENLESS_REPAYMENTS_COMPLETE`. used to purge remaining\",\n \"lending assets in a now-worthless bank before it is fully sunset.\"\n ],\n \"discriminator\": [132, 187, 25, 149, 181, 59, 253, 136],\n \"accounts\": [\n {\n \"name\": \"group\",\n \"relations\": [\"marginfi_account\", \"bank\"]\n },\n {\n \"name\": \"marginfi_account\",\n \"writable\": true\n },\n {\n \"name\": \"risk_admin\",\n \"signer\": true,\n \"relations\": [\"group\"]\n },\n {\n \"name\": \"bank\",\n \"writable\": true\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"start_deleverage\",\n \"discriminator\": [10, 138, 10, 57, 40, 232, 182, 193],\n \"accounts\": [\n {\n \"name\": \"marginfi_account\",\n \"docs\": [\"Account to deleverage\"],\n \"writable\": true\n },\n {\n \"name\": \"liquidation_record\",\n \"docs\": [\n \"The associated liquidation record PDA for the given `marginfi_account`\"\n ],\n \"writable\": true,\n \"relations\": [\"marginfi_account\"]\n },\n {\n \"name\": \"group\",\n \"relations\": [\"marginfi_account\"]\n },\n {\n \"name\": \"risk_admin\",\n \"docs\": [\n \"The risk admin will have the authority to withdraw/repay as if they are the user authority\",\n \"until the end of the tx.\"\n ],\n \"signer\": true,\n \"relations\": [\"group\"]\n },\n {\n \"name\": \"instruction_sysvar\",\n \"address\": \"Sysvar1nstructions1111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"start_liquidation\",\n \"discriminator\": [244, 93, 90, 214, 192, 166, 191, 21],\n \"accounts\": [\n {\n \"name\": \"marginfi_account\",\n \"docs\": [\"Account under liquidation\"],\n \"writable\": true\n },\n {\n \"name\": \"liquidation_record\",\n \"docs\": [\n \"The associated liquidation record PDA for the given `marginfi_account`\"\n ],\n \"writable\": true,\n \"relations\": [\"marginfi_account\"]\n },\n {\n \"name\": \"liquidation_receiver\",\n \"docs\": [\n \"This account will have the authority to withdraw/repay as if they are the user authority\",\n \"until the end of the tx.\",\n \"\"\n ]\n },\n {\n \"name\": \"instruction_sysvar\",\n \"address\": \"Sysvar1nstructions1111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"transfer_to_new_account\",\n \"discriminator\": [28, 79, 129, 231, 169, 69, 69, 65],\n \"accounts\": [\n {\n \"name\": \"group\",\n \"relations\": [\"old_marginfi_account\"]\n },\n {\n \"name\": \"old_marginfi_account\",\n \"writable\": true\n },\n {\n \"name\": \"new_marginfi_account\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"authority\",\n \"signer\": true,\n \"relations\": [\"old_marginfi_account\"]\n },\n {\n \"name\": \"fee_payer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"new_authority\"\n },\n {\n \"name\": \"global_fee_wallet\",\n \"writable\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"transfer_to_new_account_pda\",\n \"docs\": [\n \"Same as `transfer_to_new_account` except the resulting account is a PDA\",\n \"\",\n \"seeds:\",\n \"- marginfi_group\",\n \"- authority: The account authority (owner)\",\n \"- account_index: A u32 value to allow multiple accounts per authority\",\n \"- third_party_id: Optional u32 for third-party tagging. Seeds < PDA_FREE_THRESHOLD can be\",\n \"used freely. For a dedicated seed used by just your program (via CPI), contact us.\"\n ],\n \"discriminator\": [172, 210, 224, 220, 146, 212, 253, 49],\n \"accounts\": [\n {\n \"name\": \"group\",\n \"relations\": [\"old_marginfi_account\"]\n },\n {\n \"name\": \"old_marginfi_account\",\n \"writable\": true\n },\n {\n \"name\": \"new_marginfi_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109, 97, 114, 103, 105, 110, 102, 105, 95, 97, 99, 99, 111,\n 117, 110, 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"group\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"new_authority\"\n },\n {\n \"kind\": \"arg\",\n \"path\": \"account_index\"\n },\n {\n \"kind\": \"arg\",\n \"path\": \"third_party_id.unwrap_or(0)\"\n }\n ]\n }\n },\n {\n \"name\": \"authority\",\n \"signer\": true,\n \"relations\": [\"old_marginfi_account\"]\n },\n {\n \"name\": \"fee_payer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"new_authority\"\n },\n {\n \"name\": \"global_fee_wallet\",\n \"writable\": true\n },\n {\n \"name\": \"instructions_sysvar\",\n \"docs\": [\"Instructions sysvar for CPI validation\"],\n \"address\": \"Sysvar1nstructions1111111111111111111111111\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"account_index\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"third_party_id\",\n \"type\": {\n \"option\": \"u16\"\n }\n }\n ]\n },\n {\n \"name\": \"write_bank_metadata\",\n \"docs\": [\n \"(metadata admin only) Write ticker/descrption information for a bank on-chain. Optional, not\",\n \"all Banks are guranteed to have metadata.\"\n ],\n \"discriminator\": [147, 78, 81, 133, 129, 138, 233, 59],\n \"accounts\": [\n {\n \"name\": \"group\",\n \"relations\": [\"bank\"]\n },\n {\n \"name\": \"bank\",\n \"relations\": [\"metadata\"]\n },\n {\n \"name\": \"metadata_admin\",\n \"writable\": true,\n \"signer\": true,\n \"relations\": [\"group\"]\n },\n {\n \"name\": \"metadata\",\n \"writable\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"ticker\",\n \"type\": {\n \"option\": \"bytes\"\n }\n },\n {\n \"name\": \"description\",\n \"type\": {\n \"option\": \"bytes\"\n }\n }\n ]\n }\n ],\n \"accounts\": [\n {\n \"name\": \"Bank\",\n \"discriminator\": [142, 49, 166, 242, 50, 66, 97, 188]\n },\n {\n \"name\": \"BankMetadata\",\n \"discriminator\": [49, 207, 31, 34, 67, 225, 169, 186]\n },\n {\n \"name\": \"FeeState\",\n \"discriminator\": [63, 224, 16, 85, 193, 36, 235, 220]\n },\n {\n \"name\": \"LiquidationRecord\",\n \"discriminator\": [95, 116, 23, 132, 89, 210, 245, 162]\n },\n {\n \"name\": \"MarginfiAccount\",\n \"discriminator\": [67, 178, 130, 109, 126, 114, 28, 42]\n },\n {\n \"name\": \"MarginfiGroup\",\n \"discriminator\": [182, 23, 173, 240, 151, 206, 182, 67]\n },\n {\n \"name\": \"MinimalObligation\",\n \"discriminator\": [168, 206, 141, 106, 88, 76, 172, 167]\n },\n {\n \"name\": \"MinimalReserve\",\n \"discriminator\": [43, 242, 204, 202, 26, 247, 59, 127]\n },\n {\n \"name\": \"StakedSettings\",\n \"discriminator\": [157, 140, 6, 77, 89, 173, 173, 125]\n }\n ],\n \"events\": [\n {\n \"name\": \"DeleverageEvent\",\n \"discriminator\": [161, 8, 108, 204, 209, 198, 12, 30]\n },\n {\n \"name\": \"EditStakedSettingsEvent\",\n \"discriminator\": [29, 58, 155, 191, 75, 220, 145, 206]\n },\n {\n \"name\": \"HealthPulseEvent\",\n \"discriminator\": [183, 159, 218, 110, 61, 220, 65, 1]\n },\n {\n \"name\": \"LendingAccountBorrowEvent\",\n \"discriminator\": [223, 96, 81, 10, 156, 99, 26, 59]\n },\n {\n \"name\": \"LendingAccountDepositEvent\",\n \"discriminator\": [161, 54, 237, 217, 105, 248, 122, 151]\n },\n {\n \"name\": \"LendingAccountLiquidateEvent\",\n \"discriminator\": [166, 160, 249, 154, 183, 39, 23, 242]\n },\n {\n \"name\": \"LendingAccountRepayEvent\",\n \"discriminator\": [16, 220, 55, 111, 7, 80, 16, 25]\n },\n {\n \"name\": \"LendingAccountWithdrawEvent\",\n \"discriminator\": [3, 220, 148, 243, 33, 249, 54, 88]\n },\n {\n \"name\": \"LendingPoolBankAccrueInterestEvent\",\n \"discriminator\": [104, 117, 187, 156, 111, 154, 106, 186]\n },\n {\n \"name\": \"LendingPoolBankCollectFeesEvent\",\n \"discriminator\": [101, 119, 97, 250, 169, 175, 156, 253]\n },\n {\n \"name\": \"LendingPoolBankConfigureEvent\",\n \"discriminator\": [246, 35, 233, 110, 93, 152, 235, 40]\n },\n {\n \"name\": \"LendingPoolBankConfigureFrozenEvent\",\n \"discriminator\": [24, 10, 55, 18, 49, 150, 157, 179]\n },\n {\n \"name\": \"LendingPoolBankConfigureOracleEvent\",\n \"discriminator\": [119, 140, 110, 253, 150, 64, 210, 62]\n },\n {\n \"name\": \"LendingPoolBankCreateEvent\",\n \"discriminator\": [236, 220, 201, 63, 239, 126, 136, 249]\n },\n {\n \"name\": \"LendingPoolBankHandleBankruptcyEvent\",\n \"discriminator\": [166, 77, 41, 140, 36, 94, 10, 57]\n },\n {\n \"name\": \"LendingPoolBankSetFixedOraclePriceEvent\",\n \"discriminator\": [65, 72, 8, 85, 229, 20, 90, 26]\n },\n {\n \"name\": \"LiquidationReceiverEvent\",\n \"discriminator\": [40, 131, 224, 220, 151, 83, 24, 230]\n },\n {\n \"name\": \"MarginfiAccountCreateEvent\",\n \"discriminator\": [183, 5, 117, 104, 122, 199, 68, 51]\n },\n {\n \"name\": \"MarginfiAccountTransferToNewAccount\",\n \"discriminator\": [59, 105, 171, 110, 223, 136, 80, 89]\n },\n {\n \"name\": \"MarginfiGroupConfigureEvent\",\n \"discriminator\": [241, 104, 172, 167, 41, 195, 199, 170]\n },\n {\n \"name\": \"MarginfiGroupCreateEvent\",\n \"discriminator\": [233, 125, 61, 14, 98, 240, 136, 253]\n }\n ],\n \"errors\": [\n {\n \"code\": 6000,\n \"name\": \"InternalLogicError\",\n \"msg\": \"Internal Marginfi logic error\"\n },\n {\n \"code\": 6001,\n \"name\": \"BankNotFound\",\n \"msg\": \"Invalid bank index\"\n },\n {\n \"code\": 6002,\n \"name\": \"LendingAccountBalanceNotFound\",\n \"msg\": \"Lending account balance not found\"\n },\n {\n \"code\": 6003,\n \"name\": \"BankAssetCapacityExceeded\",\n \"msg\": \"Bank deposit capacity exceeded\"\n },\n {\n \"code\": 6004,\n \"name\": \"InvalidTransfer\",\n \"msg\": \"Invalid transfer\"\n },\n {\n \"code\": 6005,\n \"name\": \"MissingPythOrBankAccount\",\n \"msg\": \"Missing Oracle, Bank, LST mint, or Sol Pool\"\n },\n {\n \"code\": 6006,\n \"name\": \"MissingPythAccount\",\n \"msg\": \"Missing Pyth account\"\n },\n {\n \"code\": 6007,\n \"name\": \"MissingBankAccount\",\n \"msg\": \"Missing Bank account\"\n },\n {\n \"code\": 6008,\n \"name\": \"InvalidBankAccount\",\n \"msg\": \"Invalid Bank account\"\n },\n {\n \"code\": 6009,\n \"name\": \"RiskEngineInitRejected\",\n \"msg\": \"RiskEngine rejected due to either bad health or stale oracles\"\n },\n {\n \"code\": 6010,\n \"name\": \"LendingAccountBalanceSlotsFull\",\n \"msg\": \"Lending account balance slots are full\"\n },\n {\n \"code\": 6011,\n \"name\": \"BankAlreadyExists\",\n \"msg\": \"Bank already exists\"\n },\n {\n \"code\": 6012,\n \"name\": \"ZeroLiquidationAmount\",\n \"msg\": \"Amount to liquidate must be positive\"\n },\n {\n \"code\": 6013,\n \"name\": \"AccountNotBankrupt\",\n \"msg\": \"Account is not bankrupt\"\n },\n {\n \"code\": 6014,\n \"name\": \"BalanceNotBadDebt\",\n \"msg\": \"Account balance is not bad debt\"\n },\n {\n \"code\": 6015,\n \"name\": \"InvalidConfig\",\n \"msg\": \"Invalid group config\"\n },\n {\n \"code\": 6016,\n \"name\": \"BankPaused\",\n \"msg\": \"Bank paused\"\n },\n {\n \"code\": 6017,\n \"name\": \"BankReduceOnly\",\n \"msg\": \"Bank is ReduceOnly mode\"\n },\n {\n \"code\": 6018,\n \"name\": \"BankAccountNotFound\",\n \"msg\": \"Bank is missing\"\n },\n {\n \"code\": 6019,\n \"name\": \"OperationDepositOnly\",\n \"msg\": \"Operation is deposit-only\"\n },\n {\n \"code\": 6020,\n \"name\": \"OperationWithdrawOnly\",\n \"msg\": \"Operation is withdraw-only\"\n },\n {\n \"code\": 6021,\n \"name\": \"OperationBorrowOnly\",\n \"msg\": \"Operation is borrow-only\"\n },\n {\n \"code\": 6022,\n \"name\": \"OperationRepayOnly\",\n \"msg\": \"Operation is repay-only\"\n },\n {\n \"code\": 6023,\n \"name\": \"NoAssetFound\",\n \"msg\": \"No asset found\"\n },\n {\n \"code\": 6024,\n \"name\": \"NoLiabilityFound\",\n \"msg\": \"No liability found\"\n },\n {\n \"code\": 6025,\n \"name\": \"InvalidOracleSetup\",\n \"msg\": \"Invalid oracle setup\"\n },\n {\n \"code\": 6026,\n \"name\": \"IllegalUtilizationRatio\",\n \"msg\": \"Invalid bank utilization ratio\"\n },\n {\n \"code\": 6027,\n \"name\": \"BankLiabilityCapacityExceeded\",\n \"msg\": \"Bank borrow cap exceeded\"\n },\n {\n \"code\": 6028,\n \"name\": \"InvalidPrice\",\n \"msg\": \"Invalid Price\"\n },\n {\n \"code\": 6029,\n \"name\": \"IsolatedAccountIllegalState\",\n \"msg\": \"Account can have only one liability when account is under isolated risk\"\n },\n {\n \"code\": 6030,\n \"name\": \"EmissionsAlreadySetup\",\n \"msg\": \"Emissions already setup\"\n },\n {\n \"code\": 6031,\n \"name\": \"OracleNotSetup\",\n \"msg\": \"Oracle is not set\"\n },\n {\n \"code\": 6032,\n \"name\": \"InvalidSwitchboardDecimalConversion\",\n \"msg\": \"Invalid switchboard decimal conversion\"\n },\n {\n \"code\": 6033,\n \"name\": \"CannotCloseOutstandingEmissions\",\n \"msg\": \"Cannot close balance because of outstanding emissions\"\n },\n {\n \"code\": 6034,\n \"name\": \"EmissionsUpdateError\",\n \"msg\": \"Update emissions error\"\n },\n {\n \"code\": 6035,\n \"name\": \"AccountDisabled\",\n \"msg\": \"Account disabled\"\n },\n {\n \"code\": 6036,\n \"name\": \"AccountTempActiveBalanceLimitExceeded\",\n \"msg\": \"Account can't temporarily open 3 balances, please close a balance first\"\n },\n {\n \"code\": 6037,\n \"name\": \"AccountInFlashloan\",\n \"msg\": \"Illegal action during flashloan\"\n },\n {\n \"code\": 6038,\n \"name\": \"IllegalFlashloan\",\n \"msg\": \"Illegal flashloan\"\n },\n {\n \"code\": 6039,\n \"name\": \"IllegalFlag\",\n \"msg\": \"Illegal flag\"\n },\n {\n \"code\": 6040,\n \"name\": \"IllegalBalanceState\",\n \"msg\": \"Illegal balance state\"\n },\n {\n \"code\": 6041,\n \"name\": \"IllegalAccountAuthorityTransfer\",\n \"msg\": \"Illegal account authority transfer\"\n },\n {\n \"code\": 6042,\n \"name\": \"Unauthorized\",\n \"msg\": \"Unauthorized\"\n },\n {\n \"code\": 6043,\n \"name\": \"IllegalAction\",\n \"msg\": \"Invalid account authority\"\n },\n {\n \"code\": 6044,\n \"name\": \"T22MintRequired\",\n \"msg\": \"Token22 Banks require mint account as first remaining account\"\n },\n {\n \"code\": 6045,\n \"name\": \"InvalidFeeAta\",\n \"msg\": \"Invalid ATA for global fee account\"\n },\n {\n \"code\": 6046,\n \"name\": \"AddedStakedPoolManually\",\n \"msg\": \"Use add pool permissionless instead\"\n },\n {\n \"code\": 6047,\n \"name\": \"AssetTagMismatch\",\n \"msg\": \"Staked SOL accounts can only deposit staked assets and borrow SOL\"\n },\n {\n \"code\": 6048,\n \"name\": \"StakePoolValidationFailed\",\n \"msg\": \"Stake pool validation failed: check the stake pool, mint, or sol pool\"\n },\n {\n \"code\": 6049,\n \"name\": \"SwitchboardStalePrice\",\n \"msg\": \"Switchboard oracle: stale price\"\n },\n {\n \"code\": 6050,\n \"name\": \"PythPushStalePrice\",\n \"msg\": \"Pyth Push oracle: stale price\"\n },\n {\n \"code\": 6051,\n \"name\": \"WrongNumberOfOracleAccounts\",\n \"msg\": \"Oracle error: wrong number of accounts\"\n },\n {\n \"code\": 6052,\n \"name\": \"WrongOracleAccountKeys\",\n \"msg\": \"Oracle error: wrong account keys\"\n },\n {\n \"code\": 6053,\n \"name\": \"PythPushWrongAccountOwner\",\n \"msg\": \"Pyth Push oracle: wrong account owner\"\n },\n {\n \"code\": 6054,\n \"name\": \"StakedPythPushWrongAccountOwner\",\n \"msg\": \"Staked Pyth Push oracle: wrong account owner\"\n },\n {\n \"code\": 6055,\n \"name\": \"OracleMaxConfidenceExceeded\",\n \"msg\": \"Oracle max confidence exceeded: try again later\"\n },\n {\n \"code\": 6056,\n \"name\": \"PythPushInsufficientVerificationLevel\",\n \"msg\": \"Pyth Push oracle: insufficient verification level\"\n },\n {\n \"code\": 6057,\n \"name\": \"ZeroAssetPrice\",\n \"msg\": \"Zero asset price\"\n },\n {\n \"code\": 6058,\n \"name\": \"ZeroLiabilityPrice\",\n \"msg\": \"Zero liability price\"\n },\n {\n \"code\": 6059,\n \"name\": \"SwitchboardWrongAccountOwner\",\n \"msg\": \"Switchboard oracle: wrong account owner\"\n },\n {\n \"code\": 6060,\n \"name\": \"PythPushInvalidAccount\",\n \"msg\": \"Pyth Push oracle: invalid account\"\n },\n {\n \"code\": 6061,\n \"name\": \"SwitchboardInvalidAccount\",\n \"msg\": \"Switchboard oracle: invalid account\"\n },\n {\n \"code\": 6062,\n \"name\": \"MathError\",\n \"msg\": \"Math error\"\n },\n {\n \"code\": 6063,\n \"name\": \"InvalidEmissionsDestinationAccount\",\n \"msg\": \"Invalid emissions destination account\"\n },\n {\n \"code\": 6064,\n \"name\": \"SameAssetAndLiabilityBanks\",\n \"msg\": \"Asset and liability bank cannot be the same\"\n },\n {\n \"code\": 6065,\n \"name\": \"OverliquidationAttempt\",\n \"msg\": \"Trying to withdraw more assets than available\"\n },\n {\n \"code\": 6066,\n \"name\": \"NoLiabilitiesInLiabilityBank\",\n \"msg\": \"Liability bank has no liabilities\"\n },\n {\n \"code\": 6067,\n \"name\": \"AssetsInLiabilityBank\",\n \"msg\": \"Liability bank has assets\"\n },\n {\n \"code\": 6068,\n \"name\": \"HealthyAccount\",\n \"msg\": \"Account is healthy and cannot be liquidated\"\n },\n {\n \"code\": 6069,\n \"name\": \"ExhaustedLiability\",\n \"msg\": \"Liability payoff too severe, exhausted liability\"\n },\n {\n \"code\": 6070,\n \"name\": \"TooSeverePayoff\",\n \"msg\": \"Liability payoff too severe, liability balance has assets\"\n },\n {\n \"code\": 6071,\n \"name\": \"TooSevereLiquidation\",\n \"msg\": \"Liquidation too severe, account above maintenance requirement\"\n },\n {\n \"code\": 6072,\n \"name\": \"WorseHealthPostLiquidation\",\n \"msg\": \"Liquidation would worsen account health\"\n },\n {\n \"code\": 6073,\n \"name\": \"ArenaBankLimit\",\n \"msg\": \"Arena groups can only support two banks\"\n },\n {\n \"code\": 6074,\n \"name\": \"ArenaSettingCannotChange\",\n \"msg\": \"Arena groups cannot return to non-arena status\"\n },\n {\n \"code\": 6075,\n \"name\": \"BadEmodeConfig\",\n \"msg\": \"The Emode config was invalid\"\n },\n {\n \"code\": 6076,\n \"name\": \"PythPushInvalidWindowSize\",\n \"msg\": \"TWAP window size does not match expected duration\"\n },\n {\n \"code\": 6077,\n \"name\": \"InvalidFeesDestinationAccount\",\n \"msg\": \"Invalid fees destination account\"\n },\n {\n \"code\": 6078,\n \"name\": \"BankCannotClose\",\n \"msg\": \"Banks cannot close when they have open positions or emissions outstanding\"\n },\n {\n \"code\": 6079,\n \"name\": \"AccountAlreadyMigrated\",\n \"msg\": \"Account already migrated\"\n },\n {\n \"code\": 6080,\n \"name\": \"ProtocolPaused\",\n \"msg\": \"Protocol is paused\"\n },\n {\n \"code\": 6081,\n \"name\": \"MetadataTooLong\",\n \"msg\": \"Metadata is too long\"\n },\n {\n \"code\": 6082,\n \"name\": \"PauseLimitExceeded\",\n \"msg\": \"Pause limit exceeded\"\n },\n {\n \"code\": 6083,\n \"name\": \"ProtocolNotPaused\",\n \"msg\": \"Protocol is not paused\"\n },\n {\n \"code\": 6084,\n \"name\": \"BankKilledByBankruptcy\",\n \"msg\": \"Bank killed by bankruptcy: bank shutdown and value of all holdings is zero\"\n },\n {\n \"code\": 6085,\n \"name\": \"UnexpectedLiquidationState\",\n \"msg\": \"Liquidation state issue. Check start before end, end last, and both unique\"\n },\n {\n \"code\": 6086,\n \"name\": \"StartNotFirst\",\n \"msg\": \"Liquidation start must be first instruction (other than compute program ixes)\"\n },\n {\n \"code\": 6087,\n \"name\": \"StartRepeats\",\n \"msg\": \"Only one liquidation event allowed per tx\"\n },\n {\n \"code\": 6088,\n \"name\": \"EndNotLast\",\n \"msg\": \"The end instruction must be the last ix in the tx\"\n },\n {\n \"code\": 6089,\n \"name\": \"ForbiddenIx\",\n \"msg\": \"Tried to call an instruction that is forbidden during liquidation\"\n },\n {\n \"code\": 6090,\n \"name\": \"LiquidationPremiumTooHigh\",\n \"msg\": \"Seized too much of the asset relative to liability repaid\"\n },\n {\n \"code\": 6091,\n \"name\": \"NotAllowedInCPI\",\n \"msg\": \"Start and end liquidation and flashloan must be top-level instructions\"\n },\n {\n \"code\": 6092,\n \"name\": \"ZeroSupplyInStakePool\",\n \"msg\": \"Stake pool supply is zero: cannot compute price\"\n },\n {\n \"code\": 6093,\n \"name\": \"InvalidGroup\",\n \"msg\": \"Invalid group: account constraint violated\"\n },\n {\n \"code\": 6094,\n \"name\": \"InvalidLiquidityVault\",\n \"msg\": \"Invalid liquidity vault: account constraint violated\"\n },\n {\n \"code\": 6095,\n \"name\": \"InvalidLiquidationRecord\",\n \"msg\": \"Invalid liquidation record: account constraint violated\"\n },\n {\n \"code\": 6096,\n \"name\": \"InvalidLiquidationReceiver\",\n \"msg\": \"Invalid liquidation receiver: account constraint violated\"\n },\n {\n \"code\": 6097,\n \"name\": \"InvalidEmissionsMint\",\n \"msg\": \"Invalid emissions mint: account constraint violated\"\n },\n {\n \"code\": 6098,\n \"name\": \"InvalidMint\",\n \"msg\": \"Invalid mint: account constraint violated\"\n },\n {\n \"code\": 6099,\n \"name\": \"InvalidFeeWallet\",\n \"msg\": \"Invalid fee wallet: account constraint violated\"\n },\n {\n \"code\": 6100,\n \"name\": \"FixedOraclePriceNegative\",\n \"msg\": \"Fixed oracle price must be zero or greater\"\n },\n {\n \"code\": 6101,\n \"name\": \"DailyWithdrawalLimitExceeded\",\n \"msg\": \"Daily withdrawal limit exceeded: try again later\"\n },\n {\n \"code\": 6102,\n \"name\": \"ZeroWithdrawalLimit\",\n \"msg\": \"Cannot set daily withdrawal limit to zero\"\n },\n {\n \"code\": 6200,\n \"name\": \"WrongAssetTagForStandardInstructions\",\n \"msg\": \"Wrong asset tag for standard instructions, expected DEFAULT, SOL, or STAKED asset tag\"\n },\n {\n \"code\": 6201,\n \"name\": \"WrongAssetTagForKaminoInstructions\",\n \"msg\": \"Wrong asset tag for Kamino instructions, expected KAMINO asset tag\"\n },\n {\n \"code\": 6202,\n \"name\": \"CantAddPool\",\n \"msg\": \"Cannot create a kamino bank with this instruction, use add_bank_kamino\"\n },\n {\n \"code\": 6203,\n \"name\": \"KaminoReserveMintAddressMismatch\",\n \"msg\": \"Kamino reserve mint address doesn't match the bank mint address\"\n },\n {\n \"code\": 6204,\n \"name\": \"KaminoDepositFailed\",\n \"msg\": \"Deposit failed: obligation deposit amount increase did not match the expected increase, left - actual, right - expected\"\n },\n {\n \"code\": 6205,\n \"name\": \"KaminoWithdrawFailed\",\n \"msg\": \"Withdraw failed: token vault increase did not match the expected increase, left - actual, right - expected\"\n },\n {\n \"code\": 6206,\n \"name\": \"ReserveStale\",\n \"msg\": \"Kamino Reserve data is stale - run refresh_reserve on kamino program first\"\n },\n {\n \"code\": 6207,\n \"name\": \"InvalidObligationDepositCount\",\n \"msg\": \"Kamino obligation must have exactly one active deposit, at index 0\"\n },\n {\n \"code\": 6208,\n \"name\": \"ObligationDepositReserveMismatch\",\n \"msg\": \"Kamino obligation deposit doesn't match the expected reserve\"\n },\n {\n \"code\": 6209,\n \"name\": \"ObligationInitDepositInsufficient\",\n \"msg\": \"Failed to meet minimum deposit amount requirement for init obligation\"\n },\n {\n \"code\": 6210,\n \"name\": \"KaminoReserveValidationFailed\",\n \"msg\": \"Kamino reserve validation failed\"\n },\n {\n \"code\": 6211,\n \"name\": \"KaminoInvalidOracleSetup\",\n \"msg\": \"Invalid oracle setup: only KaminoPythPush and KaminoSwitchboardPull are supported\"\n },\n {\n \"code\": 6212,\n \"name\": \"KaminoPositionLimitExceeded\",\n \"msg\": \"Maximum Kamino positions limit exceeded (max 8 positions per account)\"\n },\n {\n \"code\": 6213,\n \"name\": \"InvalidKaminoReserve\",\n \"msg\": \"Invalid Kamino reserve: account constraint violated\"\n },\n {\n \"code\": 6214,\n \"name\": \"InvalidKaminoObligation\",\n \"msg\": \"Invalid Kamino obligation: account constraint violated\"\n }\n ],\n \"types\": [\n {\n \"name\": \"AccountEventHeader\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"signer\",\n \"type\": {\n \"option\": \"pubkey\"\n }\n },\n {\n \"name\": \"marginfi_account\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"marginfi_account_authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"marginfi_group\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"Balance\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"active\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"bank_pk\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"bank_asset_tag\",\n \"docs\": [\n \"Inherited from the bank when the position is first created and CANNOT BE CHANGED after that.\",\n \"Note that all balances created before the addition of this feature use `ASSET_TAG_DEFAULT`\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"_pad0\",\n \"type\": {\n \"array\": [\"u8\", 6]\n }\n },\n {\n \"name\": \"asset_shares\",\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"liability_shares\",\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"emissions_outstanding\",\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"last_update\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"_padding\",\n \"type\": {\n \"array\": [\"u64\", 1]\n }\n }\n ]\n }\n },\n {\n \"name\": \"Bank\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"mint_decimals\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"group\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"_pad0\",\n \"type\": {\n \"array\": [\"u8\", 7]\n }\n },\n {\n \"name\": \"asset_share_value\",\n \"docs\": [\n \"Monotonically increases as interest rate accumulates. For typical banks, a user's asset\",\n \"value in token = (number of shares the user has * asset_share_value).\",\n \"* A float (arbitrary decimals)\",\n \"* Initially 1\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"liability_share_value\",\n \"docs\": [\n \"Monotonically increases as interest rate accumulates. For typical banks, a user's liabilty\",\n \"value in token = (number of shares the user has * liability_share_value)\",\n \"* A float (arbitrary decimals)\",\n \"* Initially 1\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"liquidity_vault\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"liquidity_vault_bump\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"liquidity_vault_authority_bump\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"insurance_vault\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"insurance_vault_bump\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"insurance_vault_authority_bump\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"_pad1\",\n \"type\": {\n \"array\": [\"u8\", 4]\n }\n },\n {\n \"name\": \"collected_insurance_fees_outstanding\",\n \"docs\": [\n \"Fees collected and pending withdraw for the `insurance_vault`\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"fee_vault\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"fee_vault_bump\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"fee_vault_authority_bump\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"_pad2\",\n \"type\": {\n \"array\": [\"u8\", 6]\n }\n },\n {\n \"name\": \"collected_group_fees_outstanding\",\n \"docs\": [\"Fees collected and pending withdraw for the `fee_vault`\"],\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"total_liability_shares\",\n \"docs\": [\n \"Sum of all liability shares held by all borrowers in this bank.\",\n \"* Uses `mint_decimals`\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"total_asset_shares\",\n \"docs\": [\n \"Sum of all asset shares held by all depositors in this bank.\",\n \"* Uses `mint_decimals`\",\n \"* For Kamino banks, this is the quantity of collateral tokens (NOT liquidity tokens) in the\",\n \"bank, and also uses `mint_decimals`, though the mint itself will always show (6) decimals\",\n \"exactly (i.e Kamino ignores this and treats it as if it was using `mint_decimals`)\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"last_update\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"config\",\n \"type\": {\n \"defined\": {\n \"name\": \"BankConfig\"\n }\n }\n },\n {\n \"name\": \"flags\",\n \"docs\": [\n \"Bank Config Flags\",\n \"\",\n \"- EMISSIONS_FLAG_BORROW_ACTIVE: 1\",\n \"- EMISSIONS_FLAG_LENDING_ACTIVE: 2\",\n \"- PERMISSIONLESS_BAD_DEBT_SETTLEMENT: 4\",\n \"- FREEZE_SETTINGS: 8\",\n \"- CLOSE_ENABLED_FLAG: 16\",\n \"- TOKENLESS_REPAYMENTS_ACTIVE: 32\",\n \"\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"emissions_rate\",\n \"docs\": [\n \"Emissions APR. Number of emitted tokens (emissions_mint) per 1e(bank.mint_decimal) tokens\",\n \"(bank mint) (native amount) per 1 YEAR.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"emissions_remaining\",\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"emissions_mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"collected_program_fees_outstanding\",\n \"docs\": [\n \"Fees collected and pending withdraw for the `FeeState.global_fee_wallet`'s canonical ATA for `mint`\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"emode\",\n \"docs\": [\n \"Controls this bank's emode configuration, which enables some banks to treat the assets of\",\n \"certain other banks more preferentially as collateral.\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"EmodeSettings\"\n }\n }\n },\n {\n \"name\": \"fees_destination_account\",\n \"docs\": [\n \"Set with `update_fees_destination_account`. Fees can be withdrawn to the canonical ATA of\",\n \"this wallet without the admin's input (withdraw_fees_permissionless). If pubkey default, the\",\n \"bank doesn't support this feature, and the fees must be collected manually (withdraw_fees).\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"cache\",\n \"type\": {\n \"defined\": {\n \"name\": \"BankCache\"\n }\n }\n },\n {\n \"name\": \"lending_position_count\",\n \"docs\": [\n \"Number of user lending positions currently open in this bank\",\n \"* For banks created prior to 0.1.4, this is the number of positions opened/closed after\",\n \"0.1.4 goes live, and may be negative.\",\n \"* For banks created in 0.1.4 or later, this is the number of positions open in total, and\",\n \"the bank may safely be closed if this is zero. Will never go negative.\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"borrowing_position_count\",\n \"docs\": [\n \"Number of user borrowing positions currently open in this bank\",\n \"* For banks created prior to 0.1.4, this is the number of positions opened/closed after\",\n \"0.1.4 goes live, and may be negative.\",\n \"* For banks created in 0.1.4 or later, this is the number of positions open in total, and\",\n \"the bank may safely be closed if this is zero. Will never go negative.\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"_padding_0\",\n \"type\": {\n \"array\": [\"u8\", 16]\n }\n },\n {\n \"name\": \"kamino_reserve\",\n \"docs\": [\"Kamino banks only, otherwise Pubkey default\"],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"kamino_obligation\",\n \"docs\": [\"Kamino banks only, otherwise Pubkey default\"],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"_padding_1\",\n \"type\": {\n \"array\": [\n {\n \"array\": [\"u64\", 2]\n },\n 15\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"BankCache\",\n \"docs\": [\n \"A read-only cache of the bank's key metrics, e.g. spot interest/fee rates.\"\n ],\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"base_rate\",\n \"docs\": [\n \"Actual (spot) interest/fee rates of the bank, based on utilization\",\n \"* APR (annual percentage rate) values\",\n \"* From 0-1000%, as u32, e.g. u32::MAX = 1000%, u:32::MAX/2 = 500%, etc\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"lending_rate\",\n \"docs\": [\n \"Equivalent to `base_rate` * utilization\",\n \"* From 0-1000%, as u32, e.g. u32::MAX = 1000%, u:32::MAX/2 = 500%, etc\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"borrowing_rate\",\n \"docs\": [\n \"Equivalent to `base_rate` * (1 + ir_fees) + fixed_fees\",\n \"* From 0-1000%, as u32, e.g. u32::MAX = 1000%, u:32::MAX/2 = 500%, etc\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"interest_accumulated_for\",\n \"docs\": [\"* in seconds\"],\n \"type\": \"u32\"\n },\n {\n \"name\": \"accumulated_since_last_update\",\n \"docs\": [\n \"equivalent to (share value increase in the last `interest_accumulated_for` seconds *\",\n \"shares), i.e. the delta in `asset_share_value`, in token.\",\n \"* Note: if the tx that triggered this cache update increased or decreased the net shares,\",\n \"this value still reports using the PRE-CHANGE share amount, since interest is always\",\n \"earned on that amount.\",\n \"* in token, in native decimals, as I80F48\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"_reserved0\",\n \"type\": {\n \"array\": [\"u8\", 128]\n }\n }\n ]\n }\n },\n {\n \"name\": \"BankConfig\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"asset_weight_init\",\n \"docs\": [\n \"TODO: Convert weights to (u64, u64) to avoid precision loss (maybe?)\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"asset_weight_maint\",\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"liability_weight_init\",\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"liability_weight_maint\",\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"deposit_limit\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"interest_rate_config\",\n \"type\": {\n \"defined\": {\n \"name\": \"InterestRateConfig\"\n }\n }\n },\n {\n \"name\": \"operational_state\",\n \"type\": {\n \"defined\": {\n \"name\": \"BankOperationalState\"\n }\n }\n },\n {\n \"name\": \"oracle_setup\",\n \"type\": {\n \"defined\": {\n \"name\": \"OracleSetup\"\n }\n }\n },\n {\n \"name\": \"oracle_keys\",\n \"type\": {\n \"array\": [\"pubkey\", 5]\n }\n },\n {\n \"name\": \"_pad0\",\n \"type\": {\n \"array\": [\"u8\", 6]\n }\n },\n {\n \"name\": \"borrow_limit\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"risk_tier\",\n \"type\": {\n \"defined\": {\n \"name\": \"RiskTier\"\n }\n }\n },\n {\n \"name\": \"asset_tag\",\n \"docs\": [\n \"Determines what kinds of assets users of this bank can interact with.\",\n \"Options:\",\n \"* ASSET_TAG_DEFAULT (0) - A regular asset that can be comingled with any other regular asset\",\n \"or with `ASSET_TAG_SOL`\",\n \"* ASSET_TAG_SOL (1) - Accounts with a SOL position can comingle with **either**\",\n \"`ASSET_TAG_DEFAULT` or `ASSET_TAG_STAKED` positions, but not both\",\n \"* ASSET_TAG_STAKED (2) - Staked SOL assets. Accounts with a STAKED position can only deposit\",\n \"other STAKED assets or SOL (`ASSET_TAG_SOL`) and can only borrow SOL\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"config_flags\",\n \"docs\": [\n \"Flags for various config options\",\n \"* 1 - Always set if bank created in 0.1.4 or later, or if migrated to the new pyth\",\n \"oracle setup from a prior version. Not set in 0.1.3 or earlier banks using pyth that have\",\n \"not yet migrated. Does nothing for banks that use switchboard.\",\n \"* 2, 4, 8, 16, etc - reserved for future use.\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"_pad1\",\n \"type\": {\n \"array\": [\"u8\", 5]\n }\n },\n {\n \"name\": \"total_asset_value_init_limit\",\n \"docs\": [\n \"USD denominated limit for calculating asset value for initialization margin requirements.\",\n \"Example, if total SOL deposits are equal to $1M and the limit it set to $500K,\",\n \"then SOL assets will be discounted by 50%.\",\n \"\",\n \"In other words the max value of liabilities that can be backed by the asset is $500K.\",\n \"This is useful for limiting the damage of orcale attacks.\",\n \"\",\n \"Value is UI USD value, for example value 100 -> $100\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"oracle_max_age\",\n \"docs\": [\n \"Time window in seconds for the oracle price feed to be considered live.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"_padding0\",\n \"type\": {\n \"array\": [\"u8\", 2]\n }\n },\n {\n \"name\": \"oracle_max_confidence\",\n \"docs\": [\n \"From 0-100%, if the confidence exceeds this value, the oracle is considered invalid. Note:\",\n \"the confidence adjustment is capped at 5% regardless of this value.\",\n \"* 0 falls back to using the default 10% instead, i.e., U32_MAX_DIV_10\",\n \"* A %, as u32, e.g. 100% = u32::MAX, 50% = u32::MAX/2, etc.\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"fixed_price\",\n \"docs\": [\n \"Stored oracle price for `OracleSetup::Fixed`, otherwise does nothing\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"_padding1\",\n \"type\": {\n \"array\": [\"u8\", 16]\n }\n }\n ]\n }\n },\n {\n \"name\": \"BankConfigCompact\",\n \"docs\": [\n \"TODO: Convert weights to (u64, u64) to avoid precision loss (maybe?)\"\n ],\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"asset_weight_init\",\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"asset_weight_maint\",\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"liability_weight_init\",\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"liability_weight_maint\",\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"deposit_limit\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"interest_rate_config\",\n \"type\": {\n \"defined\": {\n \"name\": \"InterestRateConfigCompact\"\n }\n }\n },\n {\n \"name\": \"operational_state\",\n \"type\": {\n \"defined\": {\n \"name\": \"BankOperationalState\"\n }\n }\n },\n {\n \"name\": \"borrow_limit\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"risk_tier\",\n \"type\": {\n \"defined\": {\n \"name\": \"RiskTier\"\n }\n }\n },\n {\n \"name\": \"asset_tag\",\n \"docs\": [\n \"Determines what kinds of assets users of this bank can interact with.\",\n \"Options:\",\n \"* ASSET_TAG_DEFAULT (0) - A regular asset that can be comingled with any other regular asset\",\n \"or with `ASSET_TAG_SOL`\",\n \"* ASSET_TAG_SOL (1) - Accounts with a SOL position can comingle with **either**\",\n \"`ASSET_TAG_DEFAULT` or `ASSET_TAG_STAKED` positions, but not both\",\n \"* ASSET_TAG_STAKED (2) - Staked SOL assets. Accounts with a STAKED position can only deposit\",\n \"other STAKED assets or SOL (`ASSET_TAG_SOL`) and can only borrow SOL\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"config_flags\",\n \"docs\": [\n \"Flags for various config options\",\n \"* 1 - Always set if bank created in 0.1.4 or later, or if migrated to the new oracle\",\n \"setup from a prior version. Not set in 0.1.3 or earlier banks that have not yet migrated.\",\n \"* 2, 4, 8, 16, etc - reserved for future use.\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"_pad0\",\n \"type\": {\n \"array\": [\"u8\", 5]\n }\n },\n {\n \"name\": \"total_asset_value_init_limit\",\n \"docs\": [\n \"USD denominated limit for calculating asset value for initialization margin requirements.\",\n \"Example, if total SOL deposits are equal to $1M and the limit it set to $500K,\",\n \"then SOL assets will be discounted by 50%.\",\n \"\",\n \"In other words the max value of liabilities that can be backed by the asset is $500K.\",\n \"This is useful for limiting the damage of orcale attacks.\",\n \"\",\n \"Value is UI USD value, for example value 100 -> $100\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"oracle_max_age\",\n \"docs\": [\n \"Time window in seconds for the oracle price feed to be considered live.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"oracle_max_confidence\",\n \"docs\": [\n \"From 0-100%, if the confidence exceeds this value, the oracle is considered invalid. Note:\",\n \"the confidence adjustment is capped at 5% regardless of this value.\",\n \"* 0% = use the default (10%)\",\n \"* A %, as u32, e.g. 100% = u32::MAX, 50% = u32::MAX/2, etc.\"\n ],\n \"type\": \"u32\"\n }\n ]\n }\n },\n {\n \"name\": \"BankConfigOpt\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"asset_weight_init\",\n \"type\": {\n \"option\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n }\n },\n {\n \"name\": \"asset_weight_maint\",\n \"type\": {\n \"option\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n }\n },\n {\n \"name\": \"liability_weight_init\",\n \"type\": {\n \"option\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n }\n },\n {\n \"name\": \"liability_weight_maint\",\n \"type\": {\n \"option\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n }\n },\n {\n \"name\": \"deposit_limit\",\n \"type\": {\n \"option\": \"u64\"\n }\n },\n {\n \"name\": \"borrow_limit\",\n \"type\": {\n \"option\": \"u64\"\n }\n },\n {\n \"name\": \"operational_state\",\n \"type\": {\n \"option\": {\n \"defined\": {\n \"name\": \"BankOperationalState\"\n }\n }\n }\n },\n {\n \"name\": \"interest_rate_config\",\n \"type\": {\n \"option\": {\n \"defined\": {\n \"name\": \"InterestRateConfigOpt\"\n }\n }\n }\n },\n {\n \"name\": \"risk_tier\",\n \"type\": {\n \"option\": {\n \"defined\": {\n \"name\": \"RiskTier\"\n }\n }\n }\n },\n {\n \"name\": \"asset_tag\",\n \"type\": {\n \"option\": \"u8\"\n }\n },\n {\n \"name\": \"total_asset_value_init_limit\",\n \"type\": {\n \"option\": \"u64\"\n }\n },\n {\n \"name\": \"oracle_max_confidence\",\n \"type\": {\n \"option\": \"u32\"\n }\n },\n {\n \"name\": \"oracle_max_age\",\n \"type\": {\n \"option\": \"u16\"\n }\n },\n {\n \"name\": \"permissionless_bad_debt_settlement\",\n \"type\": {\n \"option\": \"bool\"\n }\n },\n {\n \"name\": \"freeze_settings\",\n \"type\": {\n \"option\": \"bool\"\n }\n },\n {\n \"name\": \"tokenless_repayments_allowed\",\n \"type\": {\n \"option\": \"bool\"\n }\n }\n ]\n }\n },\n {\n \"name\": \"BankMetadata\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"bank\",\n \"docs\": [\"Bank this metadata corresponds to\"],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"placeholder\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"ticker\",\n \"docs\": [\"The token's ticker name, e.g. USDC\", \"* utf-8\"],\n \"type\": {\n \"array\": [\"u8\", 64]\n }\n },\n {\n \"name\": \"description\",\n \"docs\": [\n \"The token's plain english descripion, e.g US Dollar Coin\",\n \"* utf-8\"\n ],\n \"type\": {\n \"array\": [\"u8\", 128]\n }\n },\n {\n \"name\": \"data_blob\",\n \"docs\": [\n \"Reserved for future use. Room for a very small icon or something else cool\"\n ],\n \"type\": {\n \"array\": [\"u8\", 256]\n }\n },\n {\n \"name\": \"end_description_byte\",\n \"docs\": [\"The last data byte in description (padding follows)\"],\n \"type\": \"u16\"\n },\n {\n \"name\": \"end_data_blob\",\n \"docs\": [\"The last data byte in data_blob (padding follows)\"],\n \"type\": \"u16\"\n },\n {\n \"name\": \"end_ticker_byte\",\n \"docs\": [\"The last data byte in ticker (padding follows)\"],\n \"type\": \"u8\"\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"_pad0\",\n \"type\": {\n \"array\": [\"u8\", 2]\n }\n }\n ]\n }\n },\n {\n \"name\": \"BankOperationalState\",\n \"repr\": {\n \"kind\": \"rust\"\n },\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Paused\"\n },\n {\n \"name\": \"Operational\"\n },\n {\n \"name\": \"ReduceOnly\"\n },\n {\n \"name\": \"KilledByBankruptcy\"\n }\n ]\n }\n },\n {\n \"name\": \"DeleverageEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"marginfi_account\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"risk_admin\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"deleveragee_assets_seized\",\n \"type\": \"f64\"\n },\n {\n \"name\": \"deleveragee_liability_repaid\",\n \"type\": \"f64\"\n }\n ]\n }\n },\n {\n \"name\": \"EditStakedSettingsEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"group\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"settings\",\n \"type\": {\n \"defined\": {\n \"name\": \"StakedSettingsEditConfig\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"EmodeConfig\",\n \"docs\": [\n \"An emode configuration. Each bank has one such configuration, but this may also be the\",\n \"intersection of many configurations (see `reconcile_emode_configs`). For example, the risk\",\n \"engine creates such an intersection from all the emode config of all banks the user is borrowing\",\n \"from.\"\n ],\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"entries\",\n \"type\": {\n \"array\": [\n {\n \"defined\": {\n \"name\": \"EmodeEntry\"\n }\n },\n 10\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"EmodeEntry\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"collateral_bank_emode_tag\",\n \"docs\": [\n \"emode_tag of the bank(s) whose collateral you wish to treat preferentially.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"flags\",\n \"docs\": [\n \"* APPLIES_TO_ISOLATED (1) - (NOT YET IMPLEMENTED) if set, isolated banks with this tag\",\n \"also benefit. If not set, isolated banks continue to offer zero collateral, even if they\",\n \"use this tag.\",\n \"* 2, 4, 8, 16, 32, etc - reserved for future use\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"pad0\",\n \"type\": {\n \"array\": [\"u8\", 5]\n }\n },\n {\n \"name\": \"asset_weight_init\",\n \"docs\": [\n \"Note: If set below the collateral bank's weight, does nothing.\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"asset_weight_maint\",\n \"docs\": [\n \"Note: If set below the collateral bank's weight, does nothing.\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"EmodeSettings\",\n \"docs\": [\n \"Controls the bank's e-mode configuration, allowing certain collateral sources to be treated more\",\n \"favorably as collateral when used to borrow from this bank.\"\n ],\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"emode_tag\",\n \"docs\": [\n \"This bank's NON-unique id that other banks will use to determine what emode rate to use when\",\n \"this bank is offered as collateral.\",\n \"\",\n \"For example, all stablecoin banks might share the same emode_tag, and in their entries, each\",\n \"such stablecoin bank will recognize that collateral sources with this \\\"stable\\\" tag get\",\n \"preferential weights. When a new stablecoin is added that is considered riskier, it may get\",\n \"a new, less favorable emode tag, and eventually get upgraded to the same one as the other\",\n \"stables\",\n \"\",\n \"* 0 is in an invalid tag and will do nothing.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"pad0\",\n \"type\": {\n \"array\": [\"u8\", 6]\n }\n },\n {\n \"name\": \"timestamp\",\n \"docs\": [\n \"Unix timestamp from the system clock when emode state was last updated\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"flags\",\n \"docs\": [\n \"EMODE_ON (1) - If set, at least one entry is configured\",\n \"2, 4, 8, etc, Reserved for future use\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"emode_config\",\n \"type\": {\n \"defined\": {\n \"name\": \"EmodeConfig\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"FeeState\",\n \"docs\": [\n \"Unique per-program. The Program Owner uses this account to administrate fees collected by the protocol\"\n ],\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"key\",\n \"docs\": [\n \"The fee state's own key. A PDA derived from just `b\\\"feestate\\\"`\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"global_fee_admin\",\n \"docs\": [\"Can modify fees\"],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"global_fee_wallet\",\n \"docs\": [\n \"The base wallet for all protocol fees. All SOL fees go to this wallet. All non-SOL fees go\",\n \"to the cannonical ATA of this wallet for that asset.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"placeholder0\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"bank_init_flat_sol_fee\",\n \"docs\": [\n \"Flat fee assessed when a new bank is initialized, in lamports.\",\n \"* In SOL, in native decimals.\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"bump_seed\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"_padding0\",\n \"type\": {\n \"array\": [\"u8\", 3]\n }\n },\n {\n \"name\": \"liquidation_max_fee\",\n \"docs\": [\n \"Liquidators can claim at this premium, when liquidating an asset in receivership\",\n \"liquidation, e.g. (1 + this) * amount repaid <= asset seized\",\n \"* A percentage\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"program_fee_fixed\",\n \"docs\": [\n \"Fee collected by the program owner from all groups\",\n \"* A percentage\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"program_fee_rate\",\n \"docs\": [\n \"Fee collected by the program owner from all groups\",\n \"* A percentage\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"panic_state\",\n \"docs\": [\n \"When the global admin pauses the protocol in the event of an emergency, information about\",\n \"the pause duration will be stored here and propagated to groups.\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"PanicState\"\n }\n }\n },\n {\n \"name\": \"placeholder1\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"liquidation_flat_sol_fee\",\n \"docs\": [\n \"Flat fee assessed for insurance/program use when a liquidation is executed\",\n \"* In SOL, in native decimals.\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"_reserved0\",\n \"type\": {\n \"array\": [\"u8\", 20]\n }\n },\n {\n \"name\": \"_reserved1\",\n \"type\": {\n \"array\": [\"u8\", 32]\n }\n }\n ]\n }\n },\n {\n \"name\": \"FeeStateCache\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"global_fee_wallet\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"program_fee_fixed\",\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"program_fee_rate\",\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"last_update\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"GroupEventHeader\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"signer\",\n \"type\": {\n \"option\": \"pubkey\"\n }\n },\n {\n \"name\": \"marginfi_group\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"HealthCache\",\n \"docs\": [\n \"A read-only cache of the internal risk engine's information. Only valid in borrow/withdraw if\",\n \"the tx does not fail. To see the state in any context, e.g. to figure out if the risk engine is\",\n \"failing due to some bad price information, use `pulse_health`.\"\n ],\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"asset_value\",\n \"docs\": [\n \"Internal risk engine asset value, using initial weight (e.g. what is used for borrowing\",\n \"purposes), with all confidence adjustments, and other discounts on price.\",\n \"* Uses EMA price\",\n \"* In dollars\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"liability_value\",\n \"docs\": [\n \"Internal risk engine liability value, using initial weight (e.g. what is used for borrowing\",\n \"purposes), with all confidence adjustments, and other discounts on price.\",\n \"* Uses EMA price\",\n \"* In dollars\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"asset_value_maint\",\n \"docs\": [\n \"Internal risk engine asset value, using maintenance weight (e.g. what is used for\",\n \"liquidation purposes), with all confidence adjustments.\",\n \"* Zero if the risk engine failed to load\",\n \"* Uses SPOT price\",\n \"* In dollars\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"liability_value_maint\",\n \"docs\": [\n \"Internal risk engine liability value, using maintenance weight (e.g. what is used for\",\n \"liquidation purposes), with all confidence adjustments.\",\n \"* Zero if the risk engine failed to load\",\n \"* Uses SPOT price\",\n \"* In dollars\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"asset_value_equity\",\n \"docs\": [\n \"The \\\"true\\\" value of assets without any confidence or weight adjustments. Internally, used\",\n \"only for bankruptcies.\",\n \"* Zero if the risk engine failed to load\",\n \"* Uses EMA price\",\n \"* In dollars\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"liability_value_equity\",\n \"docs\": [\n \"The \\\"true\\\" value of liabilities without any confidence or weight adjustments.\",\n \"Internally, used only for bankruptcies.\",\n \"* Zero if the risk engine failed to load\",\n \"* Uses EMA price\",\n \"* In dollars\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"timestamp\",\n \"docs\": [\n \"Unix timestamp from the system clock when this cache was last updated\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"flags\",\n \"docs\": [\n \"The flags that indicate the state of the health cache. This is a u64 bitfield, where each\",\n \"bit represents a flag.\",\n \"\",\n \"* HEALTHY = 1 - If set, the account cannot be liquidated. If 0, the account is unhealthy and\",\n \"can be liquidated.\",\n \"* ENGINE STATUS = 2 - If set, the engine did not error during the last health pulse. If 0,\",\n \"the engine would have errored and this cache is likely invalid. `RiskEngineInitRejected`\",\n \"is ignored and will allow the flag to be set anyways.\",\n \"* ORACLE OK = 4 - If set, the engine did not error due to an oracle issue. If 0, engine was\",\n \"passed a bad bank or oracle account, or an oracle was stale. Check the order in which\",\n \"accounts were passed and ensure each balance has the correct banks/oracles, and that\",\n \"oracle cranks ran recently enough. Check `internal_err` and `err_index` for more details\",\n \"in some circumstances. Invalid if generated after borrow/withdraw (these instructions will\",\n \"ignore oracle issues if health is still satisfactory with some balance zeroed out).\",\n \"* 8, 16, 32, 64, 128, etc - reserved for future use\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"mrgn_err\",\n \"docs\": [\n \"If the engine errored, look here for the error code. If the engine returns ok, you may also\",\n \"check here to see if the risk engine rejected this tx (3009).\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"prices\",\n \"docs\": [\n \"Each price corresponds to that index of Balances in the LendingAccount. Useful for debugging\",\n \"or liquidator consumption, to determine how a user's position is priced internally.\",\n \"* An f64 stored as bytes\"\n ],\n \"type\": {\n \"array\": [\n {\n \"array\": [\"u8\", 8]\n },\n 16\n ]\n }\n },\n {\n \"name\": \"internal_err\",\n \"docs\": [\n \"Errors in asset oracles are ignored (with prices treated as zero). If you see a zero price\",\n \"and the `ORACLE_OK` flag is not set, check here to see what error was ignored internally.\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"err_index\",\n \"docs\": [\"Index in `balances` where `internal_err` appeared\"],\n \"type\": \"u8\"\n },\n {\n \"name\": \"program_version\",\n \"docs\": [\n \"Since 0.1.3, the version will be encoded here. See PROGRAM_VERSION.\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"pad0\",\n \"type\": {\n \"array\": [\"u8\", 2]\n }\n },\n {\n \"name\": \"internal_liq_err\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"internal_bankruptcy_err\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"reserved0\",\n \"type\": {\n \"array\": [\"u8\", 32]\n }\n },\n {\n \"name\": \"reserved1\",\n \"type\": {\n \"array\": [\"u8\", 16]\n }\n }\n ]\n }\n },\n {\n \"name\": \"HealthPulseEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"account\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"health_cache\",\n \"type\": {\n \"defined\": {\n \"name\": \"HealthCache\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"InterestRateConfig\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"optimal_utilization_rate\",\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"plateau_interest_rate\",\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"max_interest_rate\",\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"insurance_fee_fixed_apr\",\n \"docs\": [\n \"Goes to insurance, funds `collected_insurance_fees_outstanding`\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"insurance_ir_fee\",\n \"docs\": [\n \"Goes to insurance, funds `collected_insurance_fees_outstanding`\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"protocol_fixed_fee_apr\",\n \"docs\": [\n \"Earned by the group, goes to `collected_group_fees_outstanding`\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"protocol_ir_fee\",\n \"docs\": [\n \"Earned by the group, goes to `collected_group_fees_outstanding`\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"protocol_origination_fee\",\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"zero_util_rate\",\n \"docs\": [\n \"The base rate at utilization = 0\",\n \"* a %, as u32, out of 1000%, e.g. 100% = 0.1 * u32::MAX\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"hundred_util_rate\",\n \"docs\": [\n \"The base rate at utilization = 100\",\n \"* a %, as u32, out of 1000%, e.g. 100% = 0.1 * u32::MAX\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"points\",\n \"docs\": [\n \"The base rate at various points between 0 and 100%, exclusive. Essentially a piece-wise\",\n \"linear curve.\",\n \"* always in ascending order, e.g. points[0] = first kink point, points[1] = second kink\",\n \"point, and so forth.\",\n \"* points where util = 0 are unused\"\n ],\n \"type\": {\n \"array\": [\n {\n \"defined\": {\n \"name\": \"RatePoint\"\n }\n },\n 5\n ]\n }\n },\n {\n \"name\": \"curve_type\",\n \"docs\": [\n \"Determines which interest rate curve implementation is active. 0 (INTEREST_CURVE_LEGACY) =\",\n \"legacy three point curve, 1 (INTEREST_CURVE_SEVEN_POINT) = multi-point curve.\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"_pad0\",\n \"type\": {\n \"array\": [\"u8\", 7]\n }\n },\n {\n \"name\": \"_padding1\",\n \"type\": {\n \"array\": [\"u8\", 32]\n }\n },\n {\n \"name\": \"_padding2\",\n \"type\": {\n \"array\": [\"u8\", 16]\n }\n },\n {\n \"name\": \"_padding3\",\n \"type\": {\n \"array\": [\"u8\", 8]\n }\n }\n ]\n }\n },\n {\n \"name\": \"InterestRateConfigCompact\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"insurance_fee_fixed_apr\",\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"insurance_ir_fee\",\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"protocol_fixed_fee_apr\",\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"protocol_ir_fee\",\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"protocol_origination_fee\",\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"zero_util_rate\",\n \"docs\": [\n \"The base rate at utilization = 0\",\n \"* a %, as u32, out of 1000%, e.g. 100% = 0.1 * u32::MAX\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"hundred_util_rate\",\n \"docs\": [\n \"The base rate at utilization = 100\",\n \"* a %, as u32, out of 1000%, e.g. 100% = 0.1 * u32::MAX\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"points\",\n \"docs\": [\n \"The base rate at various points between 0 and 100%, exclusive. Essentially a piece-wise\",\n \"linear curve.\",\n \"* always in ascending order, e.g. points[0] = first kink point, points[1] = second kink\",\n \"point, and so forth.\",\n \"* points where util = 0 are unused\"\n ],\n \"type\": {\n \"array\": [\n {\n \"defined\": {\n \"name\": \"RatePoint\"\n }\n },\n 5\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"InterestRateConfigOpt\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"insurance_fee_fixed_apr\",\n \"type\": {\n \"option\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n }\n },\n {\n \"name\": \"insurance_ir_fee\",\n \"type\": {\n \"option\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n }\n },\n {\n \"name\": \"protocol_fixed_fee_apr\",\n \"type\": {\n \"option\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n }\n },\n {\n \"name\": \"protocol_ir_fee\",\n \"type\": {\n \"option\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n }\n },\n {\n \"name\": \"protocol_origination_fee\",\n \"type\": {\n \"option\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n }\n },\n {\n \"name\": \"zero_util_rate\",\n \"docs\": [\n \"The base rate at utilization = 0\",\n \"* a %, as u32, out of 1000%, e.g. 100% = 0.1 * u32::MAX\"\n ],\n \"type\": {\n \"option\": \"u32\"\n }\n },\n {\n \"name\": \"hundred_util_rate\",\n \"docs\": [\n \"The base rate at utilization = 100\",\n \"* a %, as u32, out of 1000%, e.g. 100% = 0.1 * u32::MAX\"\n ],\n \"type\": {\n \"option\": \"u32\"\n }\n },\n {\n \"name\": \"points\",\n \"docs\": [\n \"The base rate at various points between 0 and 100%, exclusive. Essentially a piece-wise\",\n \"linear curve.\",\n \"* always in ascending order, e.g. points[0] = first kink point, points[1] = second kink\",\n \"point, and so forth.\",\n \"* points where util = 0 are unused\"\n ],\n \"type\": {\n \"option\": {\n \"array\": [\n {\n \"defined\": {\n \"name\": \"RatePoint\"\n }\n },\n 5\n ]\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"KaminoConfigCompact\",\n \"docs\": [\n \"Used to configure Kamino banks. A simplified version of `BankConfigCompact` which omits most\",\n \"values related to interest since Kamino banks cannot earn interest or be borrowed against.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"oracle\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"asset_weight_init\",\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"asset_weight_maint\",\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"deposit_limit\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"oracle_setup\",\n \"docs\": [\"Either `KaminoPythPush` or `KaminoSwitchboardPull`\"],\n \"type\": {\n \"defined\": {\n \"name\": \"OracleSetup\"\n }\n }\n },\n {\n \"name\": \"operational_state\",\n \"docs\": [\n \"Bank operational state - allows starting banks in paused state\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"BankOperationalState\"\n }\n }\n },\n {\n \"name\": \"risk_tier\",\n \"docs\": [\n \"Risk tier - determines if assets can be borrowed in isolation\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"RiskTier\"\n }\n }\n },\n {\n \"name\": \"config_flags\",\n \"docs\": [\"Config flags for future-proofing\"],\n \"type\": \"u8\"\n },\n {\n \"name\": \"total_asset_value_init_limit\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"oracle_max_age\",\n \"docs\": [\n \"Currently unused: Kamino's oracle age applies to kamino banks.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"oracle_max_confidence\",\n \"docs\": [\"Oracle confidence threshold (0 = use default 10%)\"],\n \"type\": \"u32\"\n }\n ]\n }\n },\n {\n \"name\": \"LendingAccount\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"balances\",\n \"type\": {\n \"array\": [\n {\n \"defined\": {\n \"name\": \"Balance\"\n }\n },\n 16\n ]\n }\n },\n {\n \"name\": \"_padding\",\n \"type\": {\n \"array\": [\"u64\", 8]\n }\n }\n ]\n }\n },\n {\n \"name\": \"LendingAccountBorrowEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"header\",\n \"type\": {\n \"defined\": {\n \"name\": \"AccountEventHeader\"\n }\n }\n },\n {\n \"name\": \"bank\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"LendingAccountDepositEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"header\",\n \"type\": {\n \"defined\": {\n \"name\": \"AccountEventHeader\"\n }\n }\n },\n {\n \"name\": \"bank\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"LendingAccountLiquidateEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"header\",\n \"type\": {\n \"defined\": {\n \"name\": \"AccountEventHeader\"\n }\n }\n },\n {\n \"name\": \"liquidatee_marginfi_account\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"liquidatee_marginfi_account_authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"asset_bank\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"asset_mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"liability_bank\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"liability_mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"liquidatee_pre_health\",\n \"type\": \"f64\"\n },\n {\n \"name\": \"liquidatee_post_health\",\n \"type\": \"f64\"\n },\n {\n \"name\": \"pre_balances\",\n \"type\": {\n \"defined\": {\n \"name\": \"LiquidationBalances\"\n }\n }\n },\n {\n \"name\": \"post_balances\",\n \"type\": {\n \"defined\": {\n \"name\": \"LiquidationBalances\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"LendingAccountRepayEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"header\",\n \"type\": {\n \"defined\": {\n \"name\": \"AccountEventHeader\"\n }\n }\n },\n {\n \"name\": \"bank\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"close_balance\",\n \"type\": \"bool\"\n }\n ]\n }\n },\n {\n \"name\": \"LendingAccountWithdrawEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"header\",\n \"type\": {\n \"defined\": {\n \"name\": \"AccountEventHeader\"\n }\n }\n },\n {\n \"name\": \"bank\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"close_balance\",\n \"type\": \"bool\"\n }\n ]\n }\n },\n {\n \"name\": \"LendingPoolBankAccrueInterestEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"header\",\n \"type\": {\n \"defined\": {\n \"name\": \"GroupEventHeader\"\n }\n }\n },\n {\n \"name\": \"bank\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"delta\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"fees_collected\",\n \"type\": \"f64\"\n },\n {\n \"name\": \"insurance_collected\",\n \"type\": \"f64\"\n }\n ]\n }\n },\n {\n \"name\": \"LendingPoolBankCollectFeesEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"header\",\n \"type\": {\n \"defined\": {\n \"name\": \"GroupEventHeader\"\n }\n }\n },\n {\n \"name\": \"bank\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"group_fees_collected\",\n \"type\": \"f64\"\n },\n {\n \"name\": \"group_fees_outstanding\",\n \"type\": \"f64\"\n },\n {\n \"name\": \"insurance_fees_collected\",\n \"type\": \"f64\"\n },\n {\n \"name\": \"insurance_fees_outstanding\",\n \"type\": \"f64\"\n }\n ]\n }\n },\n {\n \"name\": \"LendingPoolBankConfigureEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"header\",\n \"type\": {\n \"defined\": {\n \"name\": \"GroupEventHeader\"\n }\n }\n },\n {\n \"name\": \"bank\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"config\",\n \"type\": {\n \"defined\": {\n \"name\": \"BankConfigOpt\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"LendingPoolBankConfigureFrozenEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"header\",\n \"type\": {\n \"defined\": {\n \"name\": \"GroupEventHeader\"\n }\n }\n },\n {\n \"name\": \"bank\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"deposit_limit\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"borrow_limit\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"LendingPoolBankConfigureOracleEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"header\",\n \"type\": {\n \"defined\": {\n \"name\": \"GroupEventHeader\"\n }\n }\n },\n {\n \"name\": \"bank\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"oracle_setup\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"oracle\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"LendingPoolBankCreateEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"header\",\n \"type\": {\n \"defined\": {\n \"name\": \"GroupEventHeader\"\n }\n }\n },\n {\n \"name\": \"bank\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"mint\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"LendingPoolBankHandleBankruptcyEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"header\",\n \"type\": {\n \"defined\": {\n \"name\": \"AccountEventHeader\"\n }\n }\n },\n {\n \"name\": \"bank\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"bad_debt\",\n \"type\": \"f64\"\n },\n {\n \"name\": \"covered_amount\",\n \"type\": \"f64\"\n },\n {\n \"name\": \"socialized_amount\",\n \"type\": \"f64\"\n }\n ]\n }\n },\n {\n \"name\": \"LendingPoolBankSetFixedOraclePriceEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"header\",\n \"type\": {\n \"defined\": {\n \"name\": \"GroupEventHeader\"\n }\n }\n },\n {\n \"name\": \"bank\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"price\",\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"LiquidationBalances\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"liquidatee_asset_balance\",\n \"type\": \"f64\"\n },\n {\n \"name\": \"liquidatee_liability_balance\",\n \"type\": \"f64\"\n },\n {\n \"name\": \"liquidator_asset_balance\",\n \"type\": \"f64\"\n },\n {\n \"name\": \"liquidator_liability_balance\",\n \"type\": \"f64\"\n }\n ]\n }\n },\n {\n \"name\": \"LiquidationCache\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"asset_value_maint\",\n \"docs\": [\n \"Internal risk engine asset value snapshot taken when liquidation begins, using maintenance\",\n \"weight with all confidence adjustments.\",\n \"* Uses SPOT price\",\n \"* In dollars\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"liability_value_maint\",\n \"docs\": [\n \"Internal risk engine liability value snapshot taken when liquidation begins, using\",\n \"maintenance weight with all confidence adjustments.\",\n \"* Uses SPOT price\",\n \"* In dollars\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"asset_value_equity\",\n \"docs\": [\n \"Actual cash value of assets pre-liquidation (inclusive of price adjustment for oracle\",\n \"confidence, but without any weights)\",\n \"* Liquidator is allowed to seize up to `liability_value_equity` - this amount\",\n \"* Uses EMA price\",\n \"* In dollars\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"liability_value_equity\",\n \"docs\": [\n \"Actual cash value of liabilities pre-liquidation (inclusive of price adjustment for oracle\",\n \"confidence, but without any weights)\",\n \"* Liquidator is allowed to seize up to this amount - `asset_value_equity`\",\n \"* Uses EMA price\",\n \"* In dollars\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"_placeholder\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"_reserved0\",\n \"type\": {\n \"array\": [\"u8\", 32]\n }\n }\n ]\n }\n },\n {\n \"name\": \"LiquidationEntry\",\n \"docs\": [\n \"Used to record key details of the last few liquidation events on the account\"\n ],\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"asset_amount_seized\",\n \"docs\": [\"Dollar amount seized\", \"* An f64 stored as bytes\"],\n \"type\": {\n \"array\": [\"u8\", 8]\n }\n },\n {\n \"name\": \"liab_amount_repaid\",\n \"docs\": [\"Dollar amount repaid\", \"* An f64 stored as bytes\"],\n \"type\": {\n \"array\": [\"u8\", 8]\n }\n },\n {\n \"name\": \"placeholder0\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"_reserved0\",\n \"type\": {\n \"array\": [\"u8\", 16]\n }\n }\n ]\n }\n },\n {\n \"name\": \"LiquidationReceiverEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"marginfi_account\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"liquidation_receiver\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"liquidatee_assets_seized\",\n \"type\": \"f64\"\n },\n {\n \"name\": \"liquidatee_liability_repaid\",\n \"type\": \"f64\"\n },\n {\n \"name\": \"lamps_fee_paid\",\n \"type\": \"u32\"\n }\n ]\n }\n },\n {\n \"name\": \"LiquidationRecord\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"key\",\n \"docs\": [\n \"This account's own key. A PDA derived from `marginfi_account`\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"marginfi_account\",\n \"docs\": [\"Account this record tracks\"],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"record_payer\",\n \"docs\": [\n \"The key that paid to create this account. At some point, we may allow this wallet to reclaim\",\n \"the rent paid to open a record.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"liquidation_receiver\",\n \"docs\": [\n \"The liquidator taking receivership of the `marginfi_account` to complete a liquidation. Pays\",\n \"the liquidation fee.\",\n \"* Always pubkey default unless actively within a liquidation event.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"entries\",\n \"docs\": [\n \"Basic historical data for the last few liquidation events on this account\"\n ],\n \"type\": {\n \"array\": [\n {\n \"defined\": {\n \"name\": \"LiquidationEntry\"\n }\n },\n 4\n ]\n }\n },\n {\n \"name\": \"cache\",\n \"type\": {\n \"defined\": {\n \"name\": \"LiquidationCache\"\n }\n }\n },\n {\n \"name\": \"_reserved0\",\n \"type\": {\n \"array\": [\"u8\", 64]\n }\n },\n {\n \"name\": \"_reserved2\",\n \"type\": {\n \"array\": [\"u8\", 16]\n }\n },\n {\n \"name\": \"_reserved3\",\n \"type\": {\n \"array\": [\"u8\", 8]\n }\n }\n ]\n }\n },\n {\n \"name\": \"MarginfiAccount\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"group\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"lending_account\",\n \"type\": {\n \"defined\": {\n \"name\": \"LendingAccount\"\n }\n }\n },\n {\n \"name\": \"account_flags\",\n \"docs\": [\n \"The flags that indicate the state of the account. This is u64 bitfield, where each bit\",\n \"represents a flag.\",\n \"\",\n \"Flags:MarginfiAccount\",\n \"- 1: `ACCOUNT_DISABLED` - Indicates that the account is disabled and no further actions can\",\n \"be taken on it.\",\n \"- 2: `ACCOUNT_IN_FLASHLOAN` - Only set when an account is within a flash loan, e.g. when\",\n \"start_flashloan is called, then unset when the flashloan ends.\",\n \"- 4: `ACCOUNT_FLAG_DEPRECATED` - Deprecated, available for future use\",\n \"- 8: `ACCOUNT_TRANSFER_AUTHORITY_DEPRECATED` - the admin has flagged with account to be\",\n \"moved, original owner can now call `set_account_transfer_authority`\",\n \"- 16: `ACCOUNT_IN_RECEIVERSHIP` - the account is eligible to be liquidated and has entered\",\n \"receivership, a liquidator is able to control borrows and withdraws until the end of the\",\n \"tx. This flag will only appear within a tx.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"emissions_destination_account\",\n \"docs\": [\n \"Set with `update_emissions_destination_account`. Emissions rewards can be withdrawn to the\",\n \"cannonical ATA of this wallet without the user's input (withdraw_emissions_permissionless).\",\n \"If pubkey default, the user has not opted into this feature, and must claim emissions\",\n \"manually (withdraw_emissions).\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"health_cache\",\n \"type\": {\n \"defined\": {\n \"name\": \"HealthCache\"\n }\n }\n },\n {\n \"name\": \"migrated_from\",\n \"docs\": [\n \"If this account was migrated from another one, store the original account key\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"migrated_to\",\n \"docs\": [\n \"If this account has been migrated to another one, store the destination account key\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"last_update\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"account_index\",\n \"docs\": [\n \"If a PDA-based account, the account index, a seed used to derive the PDA that can be chosen\",\n \"arbitrarily (0.1.5 or later). Otherwise, does nothing.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"third_party_index\",\n \"docs\": [\n \"If a PDA-based account (0.1.5 or later), a \\\"vendor specific\\\" id. Values < PDA_FREE_THRESHOLD\",\n \"can be used by anyone with no restrictions. Values >= PDA_FREE_THRESHOLD can only be used by\",\n \"a particular program via CPI. These values require being added to a list, contact us for\",\n \"more details. For legacy non-pda accounts, does nothing.\",\n \"\",\n \"Note: use a unique seed to tag accounts related to some particular program or campaign so\",\n \"you can easily fetch them all later.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"bump\",\n \"docs\": [\n \"This account's bump, if a PDA-based account (0.1.5 or later). Otherwise, does nothing.\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"_pad0\",\n \"type\": {\n \"array\": [\"u8\", 3]\n }\n },\n {\n \"name\": \"liquidation_record\",\n \"docs\": [\n \"Stores information related to liquidations made against this account. A pda of this\",\n \"account's key, and \\\"liq_record\\\"\",\n \"* Typically pubkey default if this account has never been liquidated or close to liquidation\",\n \"* Opening this account is permissionless. Typically the liquidator pays, but e.g. we may\",\n \"also charge the user if they are opening a risky position on the front end.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"_padding0\",\n \"type\": {\n \"array\": [\"u64\", 7]\n }\n }\n ]\n }\n },\n {\n \"name\": \"MarginfiAccountCreateEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"header\",\n \"type\": {\n \"defined\": {\n \"name\": \"AccountEventHeader\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"MarginfiAccountTransferToNewAccount\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"header\",\n \"type\": {\n \"defined\": {\n \"name\": \"AccountEventHeader\"\n }\n }\n },\n {\n \"name\": \"old_account\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"old_account_authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"new_account_authority\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"MarginfiGroup\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"admin\",\n \"docs\": [\n \"Broadly able to modify anything, and can set/remove other admins at will.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"group_flags\",\n \"docs\": [\n \"Bitmask for group settings flags.\",\n \"* 0: `PROGRAM_FEES_ENABLED` If set, program-level fees are enabled.\",\n \"* 1: `ARENA_GROUP` If set, this is an arena group, which can only have two banks\",\n \"* Bits 2-63: Reserved for future use.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"fee_state_cache\",\n \"docs\": [\n \"Caches information from the global `FeeState` so the FeeState can be omitted on certain ixes\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"FeeStateCache\"\n }\n }\n },\n {\n \"name\": \"banks\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"pad0\",\n \"type\": {\n \"array\": [\"u8\", 6]\n }\n },\n {\n \"name\": \"emode_admin\",\n \"docs\": [\n \"This admin can configure collateral ratios above (but not below) the collateral ratio of\",\n \"certain banks , e.g. allow SOL to count as 90% collateral when borrowing an LST instead of\",\n \"the default rate.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"delegate_curve_admin\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"delegate_limit_admin\",\n \"docs\": [\n \"Can modify the `deposit_limit`, `borrow_limit`, `total_asset_value_init_limit` but nothing\",\n \"else, for every bank under this group\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"delegate_emissions_admin\",\n \"docs\": [\n \"Can modify the emissions `flags`, `emissions_rate` and `emissions_mint`, but nothing else,\",\n \"for every bank under this group\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"panic_state_cache\",\n \"docs\": [\n \"When program keeper temporarily puts the program into panic mode, information about the\",\n \"duration of the lockup will be available here.\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"PanicStateCache\"\n }\n }\n },\n {\n \"name\": \"deleverage_withdraw_window_cache\",\n \"docs\": [\n \"Keeps track of the liquidity withdrawn from the group over the day as a result of\",\n \"deleverages. Used as a protection mechanism against too big (and unwanted) withdrawals (e.g.\",\n \"when the risk admin is compromised).\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"WithdrawWindowCache\"\n }\n }\n },\n {\n \"name\": \"risk_admin\",\n \"docs\": [\n \"Can run bankruptcy and forced deleverage ixes to e.g. sunset risky/illiquid assets\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"metadata_admin\",\n \"docs\": [\"Can modify a Bank's metadata, and nothing else.\"],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"_padding_0\",\n \"type\": {\n \"array\": [\n {\n \"array\": [\"u64\", 2]\n },\n 12\n ]\n }\n },\n {\n \"name\": \"_padding_1\",\n \"type\": {\n \"array\": [\n {\n \"array\": [\"u64\", 2]\n },\n 32\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"MarginfiGroupConfigureEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"header\",\n \"type\": {\n \"defined\": {\n \"name\": \"GroupEventHeader\"\n }\n }\n },\n {\n \"name\": \"admin\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"flags\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"MarginfiGroupCreateEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"header\",\n \"type\": {\n \"defined\": {\n \"name\": \"GroupEventHeader\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"MinimalObligation\",\n \"docs\": [\n \"A minimal copy of Kamino's Obligation for zero-copy deserialization\"\n ],\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"tag\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"last_update_slot\",\n \"docs\": [\n \"Kamino obligations are only good for one slot, e.g. `refresh_obligation` must have run within the\",\n \"same slot as any ix that needs a non-stale obligation e.g. withdraw.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"last_update_stale\",\n \"docs\": [\n \"True if the obligation is stale, which will cause various ixes like withdraw to fail. Typically\",\n \"set to true in any tx that modifies obligation balance, and set to false at the end of a\",\n \"successful `refresh_obligation`\",\n \"* 0 = false, 1 = true\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"last_update_price_status\",\n \"docs\": [\n \"Each bit represents a passed check in price status.\",\n \"* 63 = all checks passed\",\n \"\",\n \"Otherwise:\",\n \"* PRICE_LOADED = 0b_0000_0001; // 1\",\n \"* PRICE_AGE_CHECKED = 0b_0000_0010; // 2\",\n \"* TWAP_CHECKED = 0b_0000_0100; // 4\",\n \"* TWAP_AGE_CHECKED = 0b_0000_1000; // 8\",\n \"* HEURISTIC_CHECKED = 0b_0001_0000; // 16\",\n \"* PRICE_USAGE_ALLOWED = 0b_0010_0000; // 32\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"last_update_placeholder\",\n \"type\": {\n \"array\": [\"u8\", 6]\n }\n },\n {\n \"name\": \"lending_market\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"docs\": [\n \"For mrgn banks, the bank's Liquidity Vault Authority (a pda which can be derived if the bank\",\n \"key is known)\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"deposits\",\n \"type\": {\n \"array\": [\n {\n \"defined\": {\n \"name\": \"MinimalObligationCollateral\"\n }\n },\n 8\n ]\n }\n },\n {\n \"name\": \"lowest_reserve_deposit_liquidation_ltv\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"deposited_value_sf\",\n \"type\": {\n \"array\": [\"u8\", 16]\n }\n },\n {\n \"name\": \"padding_part1\",\n \"type\": {\n \"array\": [\"u8\", 512]\n }\n },\n {\n \"name\": \"padding_part2\",\n \"type\": {\n \"array\": [\"u8\", 512]\n }\n },\n {\n \"name\": \"padding_part3\",\n \"type\": {\n \"array\": [\"u8\", 512]\n }\n },\n {\n \"name\": \"padding_part4\",\n \"type\": {\n \"array\": [\"u8\", 512]\n }\n },\n {\n \"name\": \"padding_part5a\",\n \"type\": {\n \"array\": [\"u8\", 64]\n }\n },\n {\n \"name\": \"padding_part5c\",\n \"type\": {\n \"array\": [\"u8\", 24]\n }\n }\n ]\n }\n },\n {\n \"name\": \"MinimalObligationCollateral\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"deposit_reserve\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"deposited_amount\",\n \"docs\": [\n \"In collateral token (NOT liquidity token), use `collateral_to_liquidity` to convert back to\",\n \"liquidity token!\",\n \"* Always 6 decimals\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"market_value_sf\",\n \"docs\": [\n \"* In dollars, based on last oracle price update\",\n \"* Actually an I68F60, stored as a u128 (i.e. BN) in Kamino.\",\n \"* A float (arbitrary decimals)\"\n ],\n \"type\": {\n \"array\": [\"u8\", 16]\n }\n },\n {\n \"name\": \"borrowed_amount_against_this_collateral_in_elevation_group\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"padding\",\n \"type\": {\n \"array\": [\"u64\", 9]\n }\n }\n ]\n }\n },\n {\n \"name\": \"MinimalReserve\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"version\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"slot\",\n \"docs\": [\n \"Kamino reserves are only good for one slot, e.g. `refresh_reserve` must have run within the\",\n \"same slot as any ix that needs a non-stale reserve e.g. withdraw.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"stale\",\n \"docs\": [\n \"True if the reserve is stale, which will cause various ixes like withdraw to fail. Typically\",\n \"set to true in any tx that modifies reserve balance, and set to false at the end of a\",\n \"successful `refresh_reserve`\",\n \"* 0 = false, 1 = true\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"price_status\",\n \"docs\": [\n \"Each bit represents a passed check in price status.\",\n \"* 63 = all checks passed\",\n \"\",\n \"Otherwise:\",\n \"* PRICE_LOADED = 0b_0000_0001; // 1\",\n \"* PRICE_AGE_CHECKED = 0b_0000_0010; // 2\",\n \"* TWAP_CHECKED = 0b_0000_0100; // 4\",\n \"* TWAP_AGE_CHECKED = 0b_0000_1000; // 8\",\n \"* HEURISTIC_CHECKED = 0b_0001_0000; // 16\",\n \"* PRICE_USAGE_ALLOWED = 0b_0010_0000; // 32\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"placeholder\",\n \"type\": {\n \"array\": [\"u8\", 6]\n }\n },\n {\n \"name\": \"lending_market\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"farm_collateral\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"farm_debt\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"mint_pubkey\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"supply_vault\",\n \"docs\": [\"* A PDA\"],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"fee_vault\",\n \"docs\": [\"* A PDA\"],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"available_amount\",\n \"docs\": [\n \"In simple terms: (amount in supply vault - outstanding borrows)\",\n \"* In token, with `mint_decimals`\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"borrowed_amount_sf\",\n \"docs\": [\n \"* In token, with `mint_decimals`\",\n \"* Actually an I68F60, stored as a u128 (i.e. BN) in Kamino.\"\n ],\n \"type\": {\n \"array\": [\"u8\", 16]\n }\n },\n {\n \"name\": \"market_price_sf\",\n \"docs\": [\n \"* Actually an I68F60, stored as a u128 (i.e. BN) in Kamino.\"\n ],\n \"type\": {\n \"array\": [\"u8\", 16]\n }\n },\n {\n \"name\": \"market_price_last_updated_ts\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"mint_decimals\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"deposit_limit_crossed_timestamp\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"borrow_limit_crossed_timestamp\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"cumulative_borrow_rate_bsf\",\n \"type\": {\n \"array\": [\"u8\", 48]\n }\n },\n {\n \"name\": \"accumulated_protocol_fees_sf\",\n \"docs\": [\n \"* In token, with `mint_decimals`\",\n \"* Actually an I68F60, stored as a u128 (i.e. BN) in Kamino.\"\n ],\n \"type\": {\n \"array\": [\"u8\", 16]\n }\n },\n {\n \"name\": \"accumulated_referrer_fees_sf\",\n \"docs\": [\n \"* In token, with `mint_decimals`\",\n \"* Actually an I68F60, stored as a u128 (i.e. BN) in Kamino.\"\n ],\n \"type\": {\n \"array\": [\"u8\", 16]\n }\n },\n {\n \"name\": \"pending_referrer_fees_sf\",\n \"docs\": [\n \"* In token, with `mint_decimals`\",\n \"* Actually an I68F60, stored as a u128 (i.e. BN) in Kamino.\"\n ],\n \"type\": {\n \"array\": [\"u8\", 16]\n }\n },\n {\n \"name\": \"absolute_referral_rate_sf\",\n \"docs\": [\n \"* In token, with `mint_decimals`\",\n \"* Actually an I68F60, stored as a u128 (i.e. BN) in Kamino.\"\n ],\n \"type\": {\n \"array\": [\"u8\", 16]\n }\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"Token or Token22. If token22, note that Kamino does not support all Token22 extensions.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"padding2_part1\",\n \"type\": {\n \"array\": [\"u8\", 256]\n }\n },\n {\n \"name\": \"padding2_part2\",\n \"type\": {\n \"array\": [\"u8\", 128]\n }\n },\n {\n \"name\": \"padding2_part3\",\n \"type\": {\n \"array\": [\"u8\", 24]\n }\n },\n {\n \"name\": \"padding3\",\n \"type\": {\n \"array\": [\"u8\", 512]\n }\n },\n {\n \"name\": \"padding_part1\",\n \"type\": {\n \"array\": [\"u8\", 512]\n }\n },\n {\n \"name\": \"padding_part2\",\n \"type\": {\n \"array\": [\"u8\", 512]\n }\n },\n {\n \"name\": \"padding_part3\",\n \"type\": {\n \"array\": [\"u8\", 128]\n }\n },\n {\n \"name\": \"padding_part4\",\n \"type\": {\n \"array\": [\"u8\", 48]\n }\n },\n {\n \"name\": \"collateral_mint_pubkey\",\n \"docs\": [\n \"Mints collateral tokens\",\n \"* A PDA\",\n \"* technically 6 decimals, but uses `mint_decimals` regardless for all purposes\",\n \"* authority = lending_market_authority\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"mint_total_supply\",\n \"docs\": [\n \"Total number of collateral tokens\",\n \"* uses `mint_decimals`, even though it's technically 6 decimals under the hood\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"collateral_supply_vault\",\n \"docs\": [\"* A PDA\"],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"padding1_reserve_collateral\",\n \"type\": {\n \"array\": [\"u8\", 512]\n }\n },\n {\n \"name\": \"padding2_reserve_collateral\",\n \"type\": {\n \"array\": [\"u8\", 512]\n }\n },\n {\n \"name\": \"padding4_part1\",\n \"type\": {\n \"array\": [\"u8\", 4096]\n }\n },\n {\n \"name\": \"padding4_part2\",\n \"type\": {\n \"array\": [\"u8\", 512]\n }\n },\n {\n \"name\": \"padding4_part3\",\n \"type\": {\n \"array\": [\"u8\", 256]\n }\n },\n {\n \"name\": \"padding4_part4\",\n \"type\": {\n \"array\": [\"u8\", 64]\n }\n },\n {\n \"name\": \"padding4_part5\",\n \"type\": {\n \"array\": [\"u8\", 32]\n }\n },\n {\n \"name\": \"padding4_part6\",\n \"type\": {\n \"array\": [\"u8\", 8]\n }\n }\n ]\n }\n },\n {\n \"name\": \"OracleSetup\",\n \"repr\": {\n \"kind\": \"rust\"\n },\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"None\"\n },\n {\n \"name\": \"PythLegacy\"\n },\n {\n \"name\": \"SwitchboardV2\"\n },\n {\n \"name\": \"PythPushOracle\"\n },\n {\n \"name\": \"SwitchboardPull\"\n },\n {\n \"name\": \"StakedWithPythPush\"\n },\n {\n \"name\": \"KaminoPythPush\"\n },\n {\n \"name\": \"KaminoSwitchboardPull\"\n },\n {\n \"name\": \"Fixed\"\n }\n ]\n }\n },\n {\n \"name\": \"PanicState\",\n \"docs\": [\"Panic state for emergency protocol pausing\"],\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pause_flags\",\n \"docs\": [\n \"Whether the protocol is currently paused (1 = paused, 0 = not paused)\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"daily_pause_count\",\n \"docs\": [\"Number of times paused today (resets every 24 hours)\"],\n \"type\": \"u8\"\n },\n {\n \"name\": \"consecutive_pause_count\",\n \"docs\": [\n \"Number of consecutive pauses (resets when unpause happens)\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"_reserved\",\n \"type\": {\n \"array\": [\"u8\", 5]\n }\n },\n {\n \"name\": \"pause_start_timestamp\",\n \"docs\": [\n \"Timestamp when the current pause started (0 if not paused)\",\n \"* When a pause is extended before expiring, this could be in the future.\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"last_daily_reset_timestamp\",\n \"docs\": [\n \"Timestamp of the last daily reset (for tracking daily pause count)\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"_reserved_space\",\n \"docs\": [\"Reserved for future use (making total struct 32 bytes)\"],\n \"type\": {\n \"array\": [\"u8\", 8]\n }\n }\n ]\n }\n },\n {\n \"name\": \"PanicStateCache\",\n \"docs\": [\n \"Cached panic state information for fast checking during user operations\"\n ],\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pause_flags\",\n \"docs\": [\n \"Whether the protocol is currently paused (1 = paused, 0 = not paused)\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"_reserved\",\n \"type\": {\n \"array\": [\"u8\", 7]\n }\n },\n {\n \"name\": \"pause_start_timestamp\",\n \"docs\": [\n \"Timestamp when the current pause started (0 if not paused)\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"last_cache_update\",\n \"docs\": [\"Timestamp when this cache was last updated\"],\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"RatePoint\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"util\",\n \"docs\": [\n \"The utilization rate where `rate` applies\",\n \"* a %, as u32, out of 100%, e.g. 50% = .5 * u32::MAX\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"rate\",\n \"docs\": [\n \"The base rate that applies\",\n \"* a %, as u32, out of 1000%, e.g. 100% = 0.1 * u32::MAX\"\n ],\n \"type\": \"u32\"\n }\n ]\n }\n },\n {\n \"name\": \"RiskTier\",\n \"repr\": {\n \"kind\": \"rust\"\n },\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Collateral\"\n },\n {\n \"name\": \"Isolated\"\n }\n ]\n }\n },\n {\n \"name\": \"StakedSettings\",\n \"docs\": [\n \"Unique per-group. Staked Collateral banks created under a group automatically use these\",\n \"settings. Groups that have not created this struct cannot create staked collateral banks. When\",\n \"this struct updates, changes must be permissionlessly propogated to staked collateral banks.\",\n \"Administrators can also edit the bank manually, i.e. with configure_bank, to temporarily make\",\n \"changes such as raising the deposit limit for a single bank.\"\n ],\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"key\",\n \"docs\": [\n \"This account's own key. A PDA derived from `marginfi_group` and `STAKED_SETTINGS_SEED`\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"marginfi_group\",\n \"docs\": [\"Group for which these settings apply\"],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"oracle\",\n \"docs\": [\"Generally, the Pyth push oracle for SOL\"],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"asset_weight_init\",\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"asset_weight_maint\",\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"deposit_limit\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_asset_value_init_limit\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"oracle_max_age\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"risk_tier\",\n \"type\": {\n \"defined\": {\n \"name\": \"RiskTier\"\n }\n }\n },\n {\n \"name\": \"_pad0\",\n \"type\": {\n \"array\": [\"u8\", 5]\n }\n },\n {\n \"name\": \"_reserved0\",\n \"docs\": [\n \"The following values are irrelevant because staked collateral positions do not support\",\n \"borrowing.\"\n ],\n \"type\": {\n \"array\": [\"u8\", 8]\n }\n },\n {\n \"name\": \"_reserved1\",\n \"type\": {\n \"array\": [\"u8\", 32]\n }\n },\n {\n \"name\": \"_reserved2\",\n \"type\": {\n \"array\": [\"u8\", 64]\n }\n }\n ]\n }\n },\n {\n \"name\": \"StakedSettingsConfig\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"oracle\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"asset_weight_init\",\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"asset_weight_maint\",\n \"type\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n },\n {\n \"name\": \"deposit_limit\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_asset_value_init_limit\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"oracle_max_age\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"risk_tier\",\n \"docs\": [\n \"WARN: You almost certainly want \\\"Collateral\\\", using Isolated risk tier makes the asset\",\n \"worthless as collateral, and is generally useful only when creating a staked collateral pool\",\n \"for rewards purposes only.\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"RiskTier\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"StakedSettingsEditConfig\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"oracle\",\n \"type\": {\n \"option\": \"pubkey\"\n }\n },\n {\n \"name\": \"asset_weight_init\",\n \"type\": {\n \"option\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n }\n },\n {\n \"name\": \"asset_weight_maint\",\n \"type\": {\n \"option\": {\n \"defined\": {\n \"name\": \"WrappedI80F48\"\n }\n }\n }\n },\n {\n \"name\": \"deposit_limit\",\n \"type\": {\n \"option\": \"u64\"\n }\n },\n {\n \"name\": \"total_asset_value_init_limit\",\n \"type\": {\n \"option\": \"u64\"\n }\n },\n {\n \"name\": \"oracle_max_age\",\n \"type\": {\n \"option\": \"u16\"\n }\n },\n {\n \"name\": \"risk_tier\",\n \"docs\": [\n \"WARN: You almost certainly want \\\"Collateral\\\", using Isolated risk tier makes the asset\",\n \"worthless as collateral, making all outstanding accounts eligible to be liquidated, and is\",\n \"generally useful only when creating a staked collateral pool for rewards purposes only.\"\n ],\n \"type\": {\n \"option\": {\n \"defined\": {\n \"name\": \"RiskTier\"\n }\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"WithdrawWindowCache\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"daily_limit\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"withdrawn_today\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"last_daily_reset_timestamp\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"WrappedI80F48\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\",\n \"align\": 8\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"value\",\n \"type\": {\n \"array\": [\"u8\", 16]\n }\n }\n ]\n }\n }\n ]\n}\n","import { Marginfi as MarginfiIdlTypeV0_1_6 } from \"./marginfi-types_0.1.6\";\nimport MARGINFI_IDL_V0_1_6_JSON from \"./marginfi_0.1.6.json\";\n\nexport const MARGINFI_IDL = MARGINFI_IDL_V0_1_6_JSON as MarginfiIdlType;\nexport type MarginfiIdlType = MarginfiIdlTypeV0_1_6;\n","import { BorshInstructionCoder, Idl, Instruction } from \"@coral-xyz/anchor\";\nimport {\n VersionedTransaction,\n AddressLookupTableAccount,\n TransactionMessage,\n} from \"@solana/web3.js\";\n\n/**\n * Decodes a Solana transaction instruction using the provided Interface Definition Language (IDL).\n * This function utilizes the BorshInstructionCoder to interpret the encoded instruction data.\n *\n * @param idl - The Interface Definition Language object that defines the structure of the instruction.\n * @param encoded - The Buffer containing the encoded instruction data.\n * @returns The decoded instruction object.\n */\nexport function decodeInstruction(idl: Idl, encoded: Buffer): Instruction | null {\n const coder = new BorshInstructionCoder(idl);\n return coder.decode(encoded, \"base58\");\n}\n\n/**\n * Decompiles a VersionedTransaction into a TransactionMessage.\n *\n * @param tx - The VersionedTransaction to be decompiled.\n * @param lookupTableAccounts - An array of AddressLookupTableAccount used for decompiling the transaction message.\n * @returns A TransactionMessage object representing the decompiled transaction.\n */\nexport function decompileV0Transaction(\n tx: VersionedTransaction,\n lookupTableAccounts: AddressLookupTableAccount[]\n) {\n return TransactionMessage.decompile(tx.message, {\n addressLookupTableAccounts: lookupTableAccounts,\n });\n}\n","import {\n AddressLookupTableAccount,\n Transaction,\n TransactionMessage,\n VersionedTransaction,\n} from \"@solana/web3.js\";\nimport { isV0Tx } from \"./tx-formatting\";\n\n/**\n * Calculates the size of a Solana transaction in bytes.\n * This function considers the number of required signatures and other transaction components.\n *\n * @param tx - The transaction object, which can be either a VersionedTransaction or a Transaction.\n * @returns The size of the transaction in bytes.\n */\nexport function getTxSize(tx: VersionedTransaction | Transaction): number {\n const isVersioned = isV0Tx(tx);\n const numSigners = tx.signatures.length;\n const numRequiredSignatures = isVersioned ? tx.message.header.numRequiredSignatures : 0;\n const feePayerSize = isVersioned || tx.feePayer ? 0 : 32;\n const signaturesSize = (numRequiredSignatures - numSigners) * 64 + 1;\n\n try {\n const baseTxSize = isVersioned\n ? tx.serialize().length\n : tx.serialize({ requireAllSignatures: false, verifySignatures: false }).length;\n return baseTxSize + feePayerSize + signaturesSize;\n } catch {\n // tx is overflowing\n return 9999;\n }\n}\n\nexport function getAccountKeys(\n tx: VersionedTransaction | Transaction,\n lookupTableAccounts: AddressLookupTableAccount[]\n): number {\n const isVersioned = isV0Tx(tx);\n\n try {\n if (isVersioned) {\n const message = TransactionMessage.decompile(tx.message, {\n addressLookupTableAccounts: lookupTableAccounts,\n });\n return message.compileToLegacyMessage().getAccountKeys().length;\n } else {\n return tx.compileMessage().getAccountKeys().length;\n }\n } catch {\n return 9999;\n }\n}\n","import {\n PublicKey,\n VersionedTransaction,\n TransactionInstruction,\n TransactionMessage,\n AddressLookupTableAccount,\n Transaction,\n Blockhash,\n} from \"@solana/web3.js\";\n\nimport { MARGINFI_IDL, MarginfiIdlType } from \"~/idl\";\nimport { MAX_TX_SIZE } from \"~/constants\";\n\nimport { ExtendedTransactionProperties, SolanaTransaction } from \"../types\";\n\nimport { decodeInstruction, decompileV0Transaction } from \"./decode\";\nimport { getTxSize } from \"./tx-size\";\n\n/**\n * Determines if a given transaction is a VersionedTransaction.\n * This function checks for the presence of a 'message' property to identify\n * if the transaction is of type VersionedTransaction.\n *\n * @param tx - The transaction object, which can be either a VersionedTransaction or a Transaction.\n * @returns A boolean indicating whether the transaction is a VersionedTransaction.\n */\nexport function isV0Tx(tx: Transaction | VersionedTransaction): tx is VersionedTransaction {\n return \"message\" in tx;\n}\n\nexport function isFlashloan(tx: SolanaTransaction): boolean {\n if (isV0Tx(tx)) {\n const addressLookupTableAccounts = tx.addressLookupTables ?? [];\n const message = decompileV0Transaction(tx, addressLookupTableAccounts);\n const idl = {\n ...MARGINFI_IDL,\n address: new PublicKey(0),\n } as unknown as MarginfiIdlType;\n const decoded = message.instructions.map((ix) => decodeInstruction(idl, ix.data));\n return decoded.some((ix) => ix?.name.toLowerCase().includes(\"flashloan\"));\n }\n //TODO: add legacy tx check\n return false;\n}\n\nexport async function makeVersionedTransaction(\n blockhash: Blockhash,\n transaction: Transaction,\n payer: PublicKey,\n addressLookupTables?: AddressLookupTableAccount[]\n): Promise<VersionedTransaction> {\n const message = new TransactionMessage({\n instructions: transaction.instructions,\n payerKey: payer,\n recentBlockhash: blockhash,\n });\n\n const versionedMessage = addressLookupTables\n ? message.compileToV0Message(addressLookupTables)\n : message.compileToLegacyMessage();\n\n return new VersionedTransaction(versionedMessage);\n}\n\n/**\n * Splits your instructions into as many VersionedTransactions as needed\n * so that none exceed MAX_TX_SIZE.\n */\nexport function splitInstructionsToFitTransactions(\n mandatoryIxs: TransactionInstruction[],\n ixs: TransactionInstruction[],\n opts: {\n blockhash: string;\n payerKey: PublicKey;\n luts: AddressLookupTableAccount[];\n }\n): VersionedTransaction[] {\n const result: VersionedTransaction[] = [];\n let buffer: TransactionInstruction[] = [];\n\n function buildTx(\n mandatoryIxs: TransactionInstruction[],\n extraIxs: TransactionInstruction[],\n opts: {\n blockhash: string;\n payerKey: PublicKey;\n luts: AddressLookupTableAccount[];\n }\n ): VersionedTransaction {\n const messageV0 = new TransactionMessage({\n payerKey: opts.payerKey,\n recentBlockhash: opts.blockhash,\n instructions: [...mandatoryIxs, ...extraIxs],\n }).compileToV0Message(opts.luts);\n\n return new VersionedTransaction(messageV0);\n }\n\n for (const ix of ixs) {\n // Try adding this ix to the current buffer\n const trial = buildTx(mandatoryIxs, [...buffer, ix], opts);\n if (getTxSize(trial) <= MAX_TX_SIZE) {\n buffer.push(ix);\n } else {\n // If buffer is empty, this single ix won't fit even alone\n if (buffer.length === 0) {\n throw new Error(\"Single instruction too large to fit in a transaction\");\n }\n // Flush current buffer as its own tx\n const tx = buildTx(mandatoryIxs, buffer, opts);\n result.push(tx);\n\n // Start new buffer with this ix\n buffer = [ix];\n\n // And check if that alone fits\n const solo = buildTx(mandatoryIxs, buffer, opts);\n if (getTxSize(solo) > MAX_TX_SIZE) {\n throw new Error(\"Single instruction too large to fit in a transaction\");\n }\n }\n }\n\n // Flush any remaining\n if (buffer.length > 0) {\n const tx = buildTx(mandatoryIxs, buffer, opts);\n result.push(tx);\n }\n\n return result;\n}\n\n/**\n * Enhances a given transaction with additional metadata.\n *\n * @param transaction - The transaction to be enhanced, can be either VersionedTransaction or Transaction.\n * @param options - An object containing optional metadata:\n * - signers: An array of Signer objects that are associated with the transaction.\n * - addressLookupTables: An array of AddressLookupTableAccount objects for address resolution.\n * - unitsConsumed: A number representing the compute units consumed by the transaction.\n * - type: The type of the transaction, as defined by TransactionType.\n * @returns A SolanaTransaction object that includes the original transaction and the additional metadata.\n */\nexport function addTransactionMetadata<T extends Transaction | VersionedTransaction>(\n transaction: T,\n options: ExtendedTransactionProperties\n): T & ExtendedTransactionProperties {\n return Object.assign(transaction, options);\n}\n","/** Base class for errors */\nexport abstract class TokenError extends Error {\n constructor(message?: string) {\n super(message);\n }\n}\n\n/** Thrown if an account is not found at the expected address */\nexport class TokenAccountNotFoundError extends TokenError {\n name = \"TokenAccountNotFoundError\";\n}\n\n/** Thrown if a program state account is not a valid Account */\nexport class TokenInvalidAccountError extends TokenError {\n name = \"TokenInvalidAccountError\";\n}\n\n/** Thrown if a program state account is not owned by the expected token program */\nexport class TokenInvalidAccountOwnerError extends TokenError {\n name = \"TokenInvalidAccountOwnerError\";\n}\n\n/** Thrown if the byte length of an program state account doesn't match the expected size */\nexport class TokenInvalidAccountSizeError extends TokenError {\n name = \"TokenInvalidAccountSizeError\";\n}\n\n/** Thrown if the mint of a token account doesn't match the expected mint */\nexport class TokenInvalidMintError extends TokenError {\n name = \"TokenInvalidMintError\";\n}\n\n/** Thrown if the owner of a token account doesn't match the expected owner */\nexport class TokenInvalidOwnerError extends TokenError {\n name = \"TokenInvalidOwnerError\";\n}\n\n/** Thrown if the owner of a token account is a PDA (Program Derived Address) */\nexport class TokenOwnerOffCurveError extends TokenError {\n name = \"TokenOwnerOffCurveError\";\n}\n\n/** Thrown if an instruction's program is invalid */\nexport class TokenInvalidInstructionProgramError extends TokenError {\n name = \"TokenInvalidInstructionProgramError\";\n}\n\n/** Thrown if an instruction's keys are invalid */\nexport class TokenInvalidInstructionKeysError extends TokenError {\n name = \"TokenInvalidInstructionKeysError\";\n}\n\n/** Thrown if an instruction's data is invalid */\nexport class TokenInvalidInstructionDataError extends TokenError {\n name = \"TokenInvalidInstructionDataError\";\n}\n\n/** Thrown if an instruction's type is invalid */\nexport class TokenInvalidInstructionTypeError extends TokenError {\n name = \"TokenInvalidInstructionTypeError\";\n}\n\n/** Thrown if the program does not support the desired instruction */\nexport class TokenUnsupportedInstructionError extends TokenError {\n name = \"TokenUnsupportedInstructionError\";\n}\n","import { PublicKey } from \"@solana/web3.js\";\n\nexport const MEMO_PROGRAM_ID: PublicKey = new PublicKey(\n \"MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr\"\n);\n\n/** Address of the SPL Associated Token Account program */\nexport const ASSOCIATED_TOKEN_PROGRAM_ID: PublicKey = new PublicKey(\n \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n);\n\nexport const TOKEN_PROGRAM_ID = new PublicKey(\"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\");\nexport const TOKEN_2022_PROGRAM_ID = new PublicKey(\"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb\");\n","import { struct, u32, u8 } from \"@solana/buffer-layout\";\nimport { publicKey, u64 } from \"@solana/buffer-layout-utils\";\nimport { AccountInfo, Commitment, Connection, PublicKey } from \"@solana/web3.js\";\nimport { Buffer } from \"buffer\";\n\nimport { Account, AccountState, RawAccount } from \"../types\";\nimport {\n TokenAccountNotFoundError,\n TokenInvalidAccountError,\n TokenInvalidAccountOwnerError,\n TokenInvalidAccountSizeError,\n} from \"../errors\";\nimport { MULTISIG_SIZE } from \"./multisig.utils\";\nimport { TOKEN_PROGRAM_ID } from \"../constants\";\n\nexport enum SplAccountType {\n Uninitialized,\n Mint,\n Account,\n}\n\nexport const ACCOUNT_TYPE_SIZE = 1;\n\n/** Buffer layout for de/serializing a token account */\nexport const AccountLayout = struct<RawAccount>([\n publicKey(\"mint\"),\n publicKey(\"owner\"),\n u64(\"amount\"),\n u32(\"delegateOption\"),\n publicKey(\"delegate\"),\n u8(\"state\"),\n u32(\"isNativeOption\"),\n u64(\"isNative\"),\n u64(\"delegatedAmount\"),\n u32(\"closeAuthorityOption\"),\n publicKey(\"closeAuthority\"),\n]);\n\n/** Byte length of a token account */\nexport const ACCOUNT_SIZE = AccountLayout.span;\n\nexport const NATIVE_MINT = new PublicKey(\"So11111111111111111111111111111111111111112\");\n\n/**\n * Retrieve information about a token account\n *\n * @param connection Connection to use\n * @param address Token account\n * @param commitment Desired level of commitment for querying the state\n * @param programId SPL Token program account\n *\n * @return Token account information\n */\nexport async function getAccount(\n connection: Connection,\n address: PublicKey,\n commitment?: Commitment,\n programId = TOKEN_PROGRAM_ID\n): Promise<Account> {\n const info = await connection.getAccountInfo(address, commitment);\n return unpackAccount(address, info, programId);\n}\n\n/**\n * Retrieve information about multiple token accounts in a single RPC call\n *\n * @param connection Connection to use\n * @param addresses Token accounts\n * @param commitment Desired level of commitment for querying the state\n * @param programId SPL Token program account\n *\n * @return Token account information\n */\nexport async function getMultipleAccounts(\n connection: Connection,\n addresses: PublicKey[],\n commitment?: Commitment,\n programId = TOKEN_PROGRAM_ID\n): Promise<Account[]> {\n const infos = await connection.getMultipleAccountsInfo(addresses, commitment);\n return addresses.map((address, i) =>\n //@ts-ignore\n unpackAccount(address, infos[i], programId)\n );\n}\n\n/** Get the minimum lamport balance for a base token account to be rent exempt\n *\n * @param connection Connection to use\n * @param commitment Desired level of commitment for querying the state\n *\n * @return Amount of lamports required\n */\nexport async function getMinimumBalanceForRentExemptAccount(\n connection: Connection,\n commitment?: Commitment\n): Promise<number> {\n return await getMinimumBalanceForRentExemptAccountWithExtensions(connection, [], commitment);\n}\n\nexport enum ExtensionType {\n Uninitialized,\n TransferFeeConfig,\n TransferFeeAmount,\n MintCloseAuthority,\n ConfidentialTransferMint,\n ConfidentialTransferAccount,\n DefaultAccountState,\n ImmutableOwner,\n MemoTransfer,\n NonTransferable,\n InterestBearingMint,\n}\n\nexport function getAccountLen(extensionTypes: ExtensionType[]): number {\n return getLen(extensionTypes, ACCOUNT_SIZE);\n}\n\nexport const TYPE_SIZE = 2;\nexport const LENGTH_SIZE = 2;\n\nfunction getLen(extensionTypes: ExtensionType[], baseSize: number): number {\n if (extensionTypes.length === 0) {\n return baseSize;\n } else {\n const accountLength = ACCOUNT_SIZE + ACCOUNT_TYPE_SIZE;\n if (accountLength === MULTISIG_SIZE) {\n return accountLength + TYPE_SIZE;\n } else {\n return accountLength;\n }\n }\n}\n\n/** Get the minimum lamport balance for a rent-exempt token account with extensions\n *\n * @param connection Connection to use\n * @param extensions\n * @param commitment Desired level of commitment for querying the state\n *\n * @return Amount of lamports required\n */\nexport async function getMinimumBalanceForRentExemptAccountWithExtensions(\n connection: Connection,\n extensions: ExtensionType[],\n commitment?: Commitment\n): Promise<number> {\n const accountLen = getAccountLen(extensions);\n return await connection.getMinimumBalanceForRentExemption(accountLen, commitment);\n}\n\n/**\n * Unpack a token account\n *\n * @param address Token account\n * @param info Token account data\n * @param programId SPL Token program account\n *\n * @return Unpacked token account\n */\nexport function unpackAccount(\n address: PublicKey,\n info: AccountInfo<Buffer> | null,\n programId = TOKEN_PROGRAM_ID\n): Account {\n if (!info) throw new TokenAccountNotFoundError();\n if (!info.owner.equals(programId)) throw new TokenInvalidAccountOwnerError();\n if (info.data.length < ACCOUNT_SIZE) throw new TokenInvalidAccountSizeError();\n\n const rawAccount = AccountLayout.decode(info.data.slice(0, ACCOUNT_SIZE));\n let tlvData = Buffer.alloc(0);\n if (info.data.length > ACCOUNT_SIZE) {\n if (info.data.length === MULTISIG_SIZE) throw new TokenInvalidAccountSizeError();\n if (info.data[ACCOUNT_SIZE] != SplAccountType.Account) throw new TokenInvalidAccountError();\n tlvData = info.data.slice(ACCOUNT_SIZE + ACCOUNT_TYPE_SIZE);\n }\n\n return {\n address,\n mint: rawAccount.mint,\n owner: rawAccount.owner,\n amount: rawAccount.amount,\n delegate: rawAccount.delegateOption ? rawAccount.delegate : null,\n delegatedAmount: rawAccount.delegatedAmount,\n isInitialized: rawAccount.state !== AccountState.Uninitialized,\n isFrozen: rawAccount.state === AccountState.Frozen,\n isNative: !!rawAccount.isNativeOption,\n rentExemptReserve: rawAccount.isNativeOption ? rawAccount.isNative : null,\n closeAuthority: rawAccount.closeAuthorityOption ? rawAccount.closeAuthority : null,\n tlvData,\n };\n}\n","import { PublicKey } from \"@solana/web3.js\";\n\nimport { TokenOwnerOffCurveError } from \"../errors\";\nimport { ASSOCIATED_TOKEN_PROGRAM_ID, TOKEN_PROGRAM_ID } from \"../constants\";\n\n/**\n * Get the address of the associated token account for a given mint and owner\n *\n * @param mint Token mint account\n * @param owner Owner of the new account\n * @param allowOwnerOffCurve Allow the owner account to be a PDA (Program Derived Address)\n * @param programId SPL Token program account\n * @param associatedTokenProgramId SPL Associated Token program account\n *\n * @return Address of the associated token account\n */\nexport function getAssociatedTokenAddressSync(\n mint: PublicKey,\n owner: PublicKey,\n allowOwnerOffCurve = false,\n programId = TOKEN_PROGRAM_ID,\n associatedTokenProgramId = ASSOCIATED_TOKEN_PROGRAM_ID\n): PublicKey {\n if (!allowOwnerOffCurve && !PublicKey.isOnCurve(owner.toBuffer()))\n throw new TokenOwnerOffCurveError();\n\n const [address] = PublicKey.findProgramAddressSync(\n [owner.toBuffer(), programId.toBuffer(), mint.toBuffer()],\n associatedTokenProgramId\n );\n\n return address;\n}\n","import { AccountMeta, PublicKey, Signer } from \"@solana/web3.js\";\n\n/** @internal */\nexport function addSigners(\n keys: AccountMeta[],\n ownerOrAuthority: PublicKey,\n multiSigners: Signer[]\n): AccountMeta[] {\n if (multiSigners.length) {\n keys.push({ pubkey: ownerOrAuthority, isSigner: false, isWritable: false });\n for (const signer of multiSigners) {\n keys.push({\n pubkey: signer.publicKey,\n isSigner: true,\n isWritable: false,\n });\n }\n } else {\n keys.push({ pubkey: ownerOrAuthority, isSigner: true, isWritable: false });\n }\n return keys;\n}\n","import { struct, u8 } from \"@solana/buffer-layout\";\nimport { u64 } from \"@solana/buffer-layout-utils\";\nimport {\n PublicKey,\n Signer,\n SystemProgram,\n SYSVAR_RENT_PUBKEY,\n TransactionInstruction,\n} from \"@solana/web3.js\";\n\nimport { Buffer } from \"buffer\";\n\nimport { ASSOCIATED_TOKEN_PROGRAM_ID, MEMO_PROGRAM_ID, TOKEN_PROGRAM_ID } from \"./constants\";\nimport { addSigners } from \"./utils/instruction.utils\";\n\n/**\n * Creates and returns an instruction which validates a string of UTF-8\n * encoded characters and verifies that any accounts provided are signers of\n * the transaction. The program also logs the memo, as well as any verified\n * signer addresses, to the transaction log, so that anyone can easily observe\n * memos and know they were approved by zero or more addresses by inspecting\n * the transaction log from a trusted provider.\n *\n * Public keys passed in via the signerPubkeys will identify Signers which\n * must subsequently sign the Transaction including the returned\n * TransactionInstruction in order for the transaction to be valid.\n *\n * @param memo The UTF-8 encoded memo string to validate\n * @param signerPubkeys An array of public keys which must sign the\n * Transaction including the returned TransactionInstruction in order\n * for the transaction to be valid and the memo verification to\n * succeed. null is allowed if there are no signers for the memo\n * verification.\n **/\nexport function createMemoInstruction(\n memo: string,\n signerPubkeys?: Array<PublicKey>\n): TransactionInstruction {\n const keys =\n signerPubkeys == null\n ? []\n : signerPubkeys.map(function (key) {\n return { pubkey: key, isSigner: true, isWritable: false };\n });\n\n return new TransactionInstruction({\n keys: keys,\n programId: MEMO_PROGRAM_ID,\n data: Buffer.from(memo, \"utf8\"),\n });\n}\n\n/** Instructions defined by the program */\nexport enum TokenInstruction {\n InitializeAccount = 1,\n TransferChecked = 12,\n CloseAccount = 9,\n SyncNative = 17,\n}\n\n/** TODO: docs */\nexport interface InitializeAccountInstructionData {\n instruction: TokenInstruction.InitializeAccount;\n}\n\nexport const initializeAccountInstructionData = struct<InitializeAccountInstructionData>([\n u8(\"instruction\"),\n]);\n\n/**\n * Construct an InitializeAccount instruction\n *\n * @param account New token account\n * @param mint Mint account\n * @param owner Owner of the new account\n * @param programId SPL Token program account\n *\n * @return Instruction to add to a transaction\n */\nexport function createInitializeAccountInstruction(\n account: PublicKey,\n mint: PublicKey,\n owner: PublicKey,\n programId = TOKEN_PROGRAM_ID\n): TransactionInstruction {\n const keys = [\n { pubkey: account, isSigner: false, isWritable: true },\n { pubkey: mint, isSigner: false, isWritable: false },\n { pubkey: owner, isSigner: false, isWritable: false },\n { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false },\n ];\n\n const data = Buffer.alloc(initializeAccountInstructionData.span);\n initializeAccountInstructionData.encode(\n { instruction: TokenInstruction.InitializeAccount },\n data\n );\n\n return new TransactionInstruction({ keys, programId, data });\n}\n\n/**\n * Construct an AssociatedTokenAccount instruction\n *\n * @param payer Payer of the initialization fees\n * @param associatedToken New associated token account\n * @param owner Owner of the new account\n * @param mint Token mint account\n * @param programId SPL Token program account\n * @param associatedTokenProgramId SPL Associated Token program account\n *\n * @return Instruction to add to a transaction\n */\nexport function createAssociatedTokenAccountInstruction(\n payer: PublicKey,\n associatedToken: PublicKey,\n owner: PublicKey,\n mint: PublicKey,\n programId = TOKEN_PROGRAM_ID,\n associatedTokenProgramId = ASSOCIATED_TOKEN_PROGRAM_ID\n): TransactionInstruction {\n const keys = [\n { pubkey: payer, isSigner: true, isWritable: true },\n { pubkey: associatedToken, isSigner: false, isWritable: true },\n { pubkey: owner, isSigner: false, isWritable: false },\n { pubkey: mint, isSigner: false, isWritable: false },\n { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },\n { pubkey: programId, isSigner: false, isWritable: false },\n { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false },\n ];\n\n return new TransactionInstruction({\n keys,\n programId: associatedTokenProgramId,\n data: Buffer.alloc(0),\n });\n}\n\n/**\n * Construct a CreateAssociatedTokenAccountIdempotent instruction\n *\n * @param payer Payer of the initialization fees\n * @param associatedToken New associated token account\n * @param owner Owner of the new account\n * @param mint Token mint account\n * @param programId SPL Token program account\n * @param associatedTokenProgramId SPL Associated Token program account\n *\n * @return Instruction to add to a transaction\n */\nexport function createAssociatedTokenAccountIdempotentInstruction(\n payer: PublicKey,\n associatedToken: PublicKey,\n owner: PublicKey,\n mint: PublicKey,\n programId = TOKEN_PROGRAM_ID,\n associatedTokenProgramId = ASSOCIATED_TOKEN_PROGRAM_ID\n): TransactionInstruction {\n return buildAssociatedTokenAccountInstruction(\n payer,\n associatedToken,\n owner,\n mint,\n Buffer.from([1]),\n programId,\n associatedTokenProgramId\n );\n}\n\n/** TODO: docs */\nexport interface SyncNativeInstructionData {\n instruction: TokenInstruction.SyncNative;\n}\n\n/** TODO: docs */\nexport const syncNativeInstructionData = struct<SyncNativeInstructionData>([u8(\"instruction\")]);\n\n/**\n * Construct a SyncNative instruction\n *\n * @param account Native account to sync lamports from\n * @param programId SPL Token program account\n *\n * @return Instruction to add to a transaction\n */\nexport function createSyncNativeInstruction(\n account: PublicKey,\n programId = TOKEN_PROGRAM_ID\n): TransactionInstruction {\n const keys = [{ pubkey: account, isSigner: false, isWritable: true }];\n\n const data = Buffer.alloc(syncNativeInstructionData.span);\n syncNativeInstructionData.encode({ instruction: TokenInstruction.SyncNative }, data);\n\n return new TransactionInstruction({ keys, programId, data });\n}\n\n/** TODO: docs */\nexport interface CloseAccountInstructionData {\n instruction: TokenInstruction.CloseAccount;\n}\n\n/** TODO: docs */\nexport const closeAccountInstructionData = struct<CloseAccountInstructionData>([u8(\"instruction\")]);\n\n/**\n * Construct a CloseAccount instruction\n *\n * @param account Account to close\n * @param destination Account to receive the remaining balance of the closed account\n * @param authority Account close authority\n * @param multiSigners Signing accounts if `authority` is a multisig\n * @param programId SPL Token program account\n *\n * @return Instruction to add to a transaction\n */\nexport function createCloseAccountInstruction(\n account: PublicKey,\n destination: PublicKey,\n authority: PublicKey,\n multiSigners: Signer[] = [],\n programId = TOKEN_PROGRAM_ID\n): TransactionInstruction {\n const keys = addSigners(\n [\n { pubkey: account, isSigner: false, isWritable: true },\n { pubkey: destination, isSigner: false, isWritable: true },\n ],\n authority,\n multiSigners\n );\n\n const data = Buffer.alloc(closeAccountInstructionData.span);\n closeAccountInstructionData.encode({ instruction: TokenInstruction.CloseAccount }, data);\n\n return new TransactionInstruction({ keys, programId, data });\n}\n\nfunction buildAssociatedTokenAccountInstruction(\n payer: PublicKey,\n associatedToken: PublicKey,\n owner: PublicKey,\n mint: PublicKey,\n instructionData: Buffer,\n programId = TOKEN_PROGRAM_ID,\n associatedTokenProgramId = ASSOCIATED_TOKEN_PROGRAM_ID\n): TransactionInstruction {\n const keys = [\n { pubkey: payer, isSigner: true, isWritable: true },\n { pubkey: associatedToken, isSigner: false, isWritable: true },\n { pubkey: owner, isSigner: false, isWritable: false },\n { pubkey: mint, isSigner: false, isWritable: false },\n { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },\n { pubkey: programId, isSigner: false, isWritable: false },\n ];\n\n return new TransactionInstruction({\n keys,\n programId: associatedTokenProgramId,\n data: instructionData,\n });\n}\n\n/** TODO: docs */\nexport interface TransferCheckedInstructionData {\n instruction: TokenInstruction.TransferChecked;\n amount: bigint;\n decimals: number;\n}\n\n/** TODO: docs */\nexport const transferCheckedInstructionData = struct<TransferCheckedInstructionData>([\n u8(\"instruction\"),\n u64(\"amount\"),\n u8(\"decimals\"),\n]);\n\n/**\n * Construct a TransferChecked instruction\n *\n * @param source Source account\n * @param mint Mint account\n * @param destination Destination account\n * @param owner Owner of the source account\n * @param amount Number of tokens to transfer\n * @param decimals Number of decimals in transfer amount\n * @param multiSigners Signing accounts if `owner` is a multisig\n * @param programId SPL Token program account\n *\n * @return Instruction to add to a transaction\n */\nexport function createTransferCheckedInstruction(\n source: PublicKey,\n mint: PublicKey,\n destination: PublicKey,\n owner: PublicKey,\n amount: number | bigint,\n decimals: number,\n multiSigners: Signer[] = [],\n programId = TOKEN_PROGRAM_ID\n): TransactionInstruction {\n const keys = addSigners(\n [\n { pubkey: source, isSigner: false, isWritable: true },\n { pubkey: mint, isSigner: false, isWritable: false },\n { pubkey: destination, isSigner: false, isWritable: true },\n ],\n owner,\n multiSigners\n );\n\n const data = Buffer.alloc(transferCheckedInstructionData.span);\n transferCheckedInstructionData.encode(\n {\n instruction: TokenInstruction.TransferChecked,\n amount: BigInt(amount),\n decimals,\n },\n data\n );\n\n return new TransactionInstruction({ keys, programId, data });\n}\n","import { PublicKey, SystemProgram, TransactionInstruction } from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\n\nimport { uiToNative } from \"~/utils\";\n\nimport {\n createAssociatedTokenAccountIdempotentInstruction,\n createCloseAccountInstruction,\n createSyncNativeInstruction,\n getAssociatedTokenAddressSync,\n NATIVE_MINT,\n} from \"~/vendor/spl\";\n\nexport function makeUnwrapSolIx(walletAddress: PublicKey): TransactionInstruction {\n const address = getAssociatedTokenAddressSync(NATIVE_MINT, walletAddress, true); // We allow off curve addresses here to support Fuse.\n return createCloseAccountInstruction(address, walletAddress, walletAddress);\n}\n\nexport function makeWrapSolIxs(\n walletAddress: PublicKey,\n amount: BigNumber\n): TransactionInstruction[] {\n const address = getAssociatedTokenAddressSync(NATIVE_MINT, walletAddress, true);\n const ixs = [\n createAssociatedTokenAccountIdempotentInstruction(\n walletAddress,\n address,\n walletAddress,\n NATIVE_MINT\n ),\n ];\n\n if (amount.gt(0)) {\n const nativeAmount = uiToNative(amount, 9).toNumber() + 10000;\n ixs.push(\n SystemProgram.transfer({\n fromPubkey: walletAddress,\n toPubkey: address,\n lamports: nativeAmount,\n }),\n createSyncNativeInstruction(address)\n );\n }\n\n return ixs;\n}\n","import {\n VersionedTransaction,\n Transaction,\n Signer,\n AddressLookupTableAccount,\n PublicKey,\n TransactionInstruction,\n Keypair,\n} from \"@solana/web3.js\";\n\nexport interface InstructionsWrapper {\n instructions: TransactionInstruction[];\n keys: Keypair[];\n}\n\nexport enum TransactionType {\n // BASE LENDING ACTIONS\n DEPOSIT = \"DEPOSIT\",\n WITHDRAW = \"WITHDRAW\",\n REPAY = \"REPAY\",\n BORROW = \"BORROW\",\n\n // FLASHLOANS\n FLASHLOAN = \"FLASHLOAN\",\n LOOP = \"LOOP\",\n REPAY_COLLAT = \"REPAY_COLLAT\",\n LONG = \"LONG\",\n SHORT = \"SHORT\",\n\n // SETUP\n CREATE_ACCOUNT = \"CREATE_ACCOUNT\",\n CREATE_ATA = \"CREATE_ATA\",\n\n // ACCOUNT MANAGEMENT\n CLOSE_ACCOUNT = \"CLOSE_ACCOUNT\",\n CLOSE_POSITION = \"CLOSE_POSITION\",\n MOVE_POSITION_WITHDRAW = \"MOVE_POSITION_WITHDRAW\",\n MOVE_POSITION_DEPOSIT = \"MOVE_POSITION_DEPOSIT\",\n WITHDRAW_ALL = \"WITHDRAW_ALL\",\n TRANSFER_AUTH = \"TRANSFER_AUTH\",\n\n // SWB\n CRANK = \"CRANK\",\n\n // NATIVE STAKE ACTIONS\n DEPOSIT_STAKE = \"DEPOSIT_STAKE\",\n WITHDRAW_STAKE = \"WITHDRAW_STAKE\",\n INITIALIZE_STAKED_POOL = \"INITIALIZE_STAKED_POOL\",\n ADD_STAKED_BANK = \"ADD_STAKED_BANK\",\n\n MERGE_STAKE_ACCOUNTS = \"MERGE_STAKE_ACCOUNTS\",\n\n // LST\n STAKE_TO_STAKE = \"STAKE_TO_STAKE\",\n MINT_LST_NATIVE = \"MINT_LST_NATIVE\",\n SWAP_TO_SOL = \"SWAP_TO_SOL\",\n SOL_TO_LST = \"SOL_TO_LST\",\n UNSTAKE_LST = \"UNSTAKE_LST\",\n\n // EMISSIONS\n WITHDRAW_EMISSIONS = \"WITHDRAW_EMISSIONS\",\n\n // LIQUIDATE\n LIQUIDATE_ACCOUNT = \"LIQUIDATE_ACCOUNT\",\n\n // BANK and GROUPS\n CREATE_PERM_BANK = \"CREATE_PERM_BANK\",\n CREATE_GROUP = \"CREATE_GROUP\",\n JUPITER_SWAP = \"JUPITER_SWAP\",\n}\ninterface TransactionConfig {\n label: (infoProps?: Record<string, any>) => string; // Always a function\n fallback?: string; // Only for dynamic messages\n}\n\nexport const TransactionConfigMap: Record<TransactionType, TransactionConfig> = {\n // BASE LENDING ACTIONS\n [TransactionType.DEPOSIT]: {\n label: ({ amount, token } = {}) => (amount && token ? `Deposit ${amount} ${token}` : \"Deposit\"),\n },\n [TransactionType.WITHDRAW]: {\n label: ({ amount, token } = {}) =>\n amount && token ? `Withdraw ${amount} ${token}` : \"Withdraw\",\n },\n [TransactionType.REPAY]: {\n label: ({ amount, token } = {}) => (amount && token ? `Repay ${amount} ${token}` : \"Repay\"),\n },\n [TransactionType.BORROW]: {\n label: ({ amount, token } = {}) => (amount && token ? `Borrow ${amount} ${token}` : \"Borrow\"),\n },\n\n // FLASHLOANS\n [TransactionType.FLASHLOAN]: { label: () => \"Executing Flashloan\" },\n [TransactionType.LOOP]: {\n label: ({ depositAmount, depositToken, borrowAmount, borrowToken } = {}) =>\n depositAmount && depositToken && borrowAmount && borrowToken\n ? `Loop ${depositAmount} ${depositToken} with ${borrowAmount} ${borrowToken}`\n : \"Loop\",\n },\n [TransactionType.REPAY_COLLAT]: {\n label: ({ repayAmount, repayToken, amount, token } = {}) =>\n repayAmount && repayToken && amount && token\n ? `Repay ${repayAmount} ${token} with ${amount} ${repayToken}`\n : \"Repay with collateral\",\n },\n [TransactionType.LONG]: {\n label: ({ depositToken, depositAmount, borrowToken } = {}) =>\n depositToken && depositAmount && borrowToken\n ? `Long ${depositToken} with ${depositAmount} ${borrowToken}`\n : \"Open long position\",\n },\n [TransactionType.SHORT]: {\n label: ({ borrowToken, depositAmount, depositToken } = {}) =>\n borrowToken && depositAmount && depositToken\n ? `Short ${borrowToken} with ${depositAmount} ${depositToken}`\n : \"Open short position\",\n },\n\n // SWB\n [TransactionType.CRANK]: { label: () => \"Updating latest prices\" },\n [TransactionType.JUPITER_SWAP]: {\n label: ({ originAmount, originToken, destinationAmount, destinationToken } = {}) =>\n originAmount && originToken && destinationAmount && destinationToken\n ? `Swap ${originAmount} ${originToken} for ${destinationAmount} ${destinationToken}`\n : \"Swap tokens\",\n },\n\n // SETUP\n [TransactionType.CREATE_ACCOUNT]: { label: () => \"Create marginfi account\" },\n [TransactionType.CREATE_ATA]: { label: () => \"Configure token account\" },\n\n // ACCOUNT MANAGEMENT\n [TransactionType.CLOSE_ACCOUNT]: { label: () => \"Close marginfi account\" },\n [TransactionType.CLOSE_POSITION]: { label: () => \"Close position\" },\n [TransactionType.MOVE_POSITION_WITHDRAW]: {\n label: ({ originAccountAddress } = {}) => `Move position from ${originAccountAddress}`,\n },\n [TransactionType.MOVE_POSITION_DEPOSIT]: {\n label: ({ destinationAccountAddress } = {}) => `Move position to ${destinationAccountAddress}`,\n },\n [TransactionType.TRANSFER_AUTH]: { label: () => \"Authorize account transfer\" },\n\n // NATIVE STAKE ACTIONS\n [TransactionType.DEPOSIT_STAKE]: {\n label: ({ amount, token } = {}) =>\n amount && token\n ? `Authorize stake account and deposit ${amount} ${token}`\n : \"Authorize stake and deposit\",\n },\n [TransactionType.WITHDRAW_STAKE]: {\n label: ({ amount, token } = {}) => \"Authorize stake account\",\n },\n [TransactionType.INITIALIZE_STAKED_POOL]: { label: () => \"Initialize stake pool\" },\n [TransactionType.ADD_STAKED_BANK]: { label: () => \"Create staked asset bank\" },\n [TransactionType.MERGE_STAKE_ACCOUNTS]: { label: () => \"Merge stake accounts\" },\n\n // LST (Liquid Staking Tokens)\n [TransactionType.STAKE_TO_STAKE]: { label: () => \"Convert stake\" },\n [TransactionType.MINT_LST_NATIVE]: { label: () => \"Mint LST\" },\n [TransactionType.SWAP_TO_SOL]: {\n label: ({ swapAmount, token } = {}) =>\n swapAmount && token ? `Swap ${swapAmount} ${token} to SOL` : \"Swap to SOL\",\n },\n [TransactionType.SOL_TO_LST]: {\n label: ({ amount } = {}) => (amount ? `Mint LST with ${amount} SOL` : \"Mint LST with SOL\"),\n },\n [TransactionType.UNSTAKE_LST]: {\n label: ({ amount } = {}) => (amount ? `Unstake ${amount} LST` : \"Unstake LST\"),\n },\n // EMISSIONS\n [TransactionType.WITHDRAW_EMISSIONS]: { label: () => \"Withdraw emissions\" },\n\n // LIQUIDATE\n [TransactionType.LIQUIDATE_ACCOUNT]: { label: () => \"Liquidate account\" },\n\n // BANK and GROUPS\n [TransactionType.CREATE_PERM_BANK]: { label: () => \"Create permissionless bank\" },\n [TransactionType.CREATE_GROUP]: { label: () => \"Create marginfi group\" },\n [TransactionType.WITHDRAW_ALL]: {\n label: ({ amount, token } = {}) =>\n amount && token ? `Withdraw ${amount} ${token}` : \"Withdraw all\",\n },\n};\n\nexport const TransactionArenaKeyMap: Partial<Record<TransactionType, PublicKey>> = {\n [TransactionType.DEPOSIT]: new PublicKey(\"ArenaDeposit1111111111111111111111111111111\"),\n [TransactionType.WITHDRAW]: new PublicKey(\"ArenaWithdraw111111111111111111111111111111\"),\n [TransactionType.BORROW]: new PublicKey(\"ArenaBorrow11111111111111111111111111111111\"),\n [TransactionType.REPAY]: new PublicKey(\"ArenaRepay111111111111111111111111111111111\"),\n [TransactionType.REPAY_COLLAT]: new PublicKey(\"ArenaRepayCo11at111111111111111111111111111\"),\n [TransactionType.LONG]: new PublicKey(\"ArenaLong1111111111111111111111111111111111\"),\n [TransactionType.SHORT]: new PublicKey(\"ArenaShort111111111111111111111111111111111\"),\n [TransactionType.CLOSE_POSITION]: new PublicKey(\"ArenaC1ose111111111111111111111111111111111\"),\n // Add more mappings if needed\n};\n\nexport type ExtendedTransactionProperties = {\n type: TransactionType;\n signers?: Array<Signer>;\n addressLookupTables?: AddressLookupTableAccount[];\n unitsConsumed?: number;\n};\n\nexport type ExtendedTransaction = Transaction & ExtendedTransactionProperties;\n\nexport type ExtendedV0Transaction = VersionedTransaction & ExtendedTransactionProperties;\n\nexport type SolanaTransaction = ExtendedTransaction | ExtendedV0Transaction;\n","import { AccountMeta, PublicKey } from \"@solana/web3.js\";\nimport BN from \"bn.js\";\n\nimport { MarginfiProgram } from \"./types\";\nimport type { BankConfigCompactRaw, BankConfigOptRaw } from \"./services\";\nimport { TOKEN_PROGRAM_ID } from \"./vendor/spl\";\n\nasync function makeInitMarginfiAccountIx(\n mfProgram: MarginfiProgram,\n accounts: {\n marginfiGroup: PublicKey;\n marginfiAccount: PublicKey;\n authority: PublicKey;\n feePayer: PublicKey;\n }\n) {\n return mfProgram.methods.marginfiAccountInitialize().accounts(accounts).instruction();\n}\n\nasync function makeInitMarginfiAccountPdaIx(\n mfProgram: MarginfiProgram,\n accounts: {\n marginfiGroup: PublicKey;\n marginfiAccount: PublicKey;\n authority: PublicKey;\n feePayer: PublicKey;\n },\n args: {\n accountIndex: number;\n thirdPartyId?: number;\n }\n) {\n return mfProgram.methods\n .marginfiAccountInitializePda(args.accountIndex, args.thirdPartyId ?? null)\n .accountsPartial({\n marginfiGroup: accounts.marginfiGroup,\n marginfiAccount: accounts.marginfiAccount,\n authority: accounts.authority,\n feePayer: accounts.feePayer,\n })\n .instruction();\n}\n\nasync function makeKaminoDepositIx(\n mfProgram: MarginfiProgram,\n accounts: {\n marginfiAccount: PublicKey;\n bank: PublicKey;\n signerTokenAccount: PublicKey;\n lendingMarket: PublicKey;\n reserveLiquidityMint: PublicKey;\n\n lendingMarketAuthority: PublicKey;\n reserveLiquiditySupply: PublicKey;\n reserveCollateralMint: PublicKey;\n reserveDestinationDepositCollateral: PublicKey;\n liquidityTokenProgram: PublicKey;\n\n obligationFarmUserState: PublicKey | null;\n reserveFarmState: PublicKey | null;\n\n // Optional accounts - to override inference\n group?: PublicKey;\n authority?: PublicKey;\n liquidityVault?: PublicKey;\n kaminoObligation?: PublicKey;\n kaminoReserve?: PublicKey;\n mint?: PublicKey;\n },\n args: {\n amount: BN;\n },\n remainingAccounts: AccountMeta[] = []\n) {\n const {\n marginfiAccount,\n bank,\n signerTokenAccount,\n lendingMarket,\n reserveLiquidityMint,\n lendingMarketAuthority,\n reserveLiquiditySupply,\n reserveCollateralMint,\n reserveDestinationDepositCollateral,\n liquidityTokenProgram,\n obligationFarmUserState,\n reserveFarmState,\n ...optionalAccounts\n } = accounts;\n\n return mfProgram.methods\n .kaminoDeposit(args.amount)\n .accounts(accounts)\n .accountsPartial(optionalAccounts)\n .remainingAccounts(remainingAccounts)\n .instruction();\n}\n\nasync function makeDepositIx(\n mfProgram: MarginfiProgram,\n accounts: {\n // Required accounts\n marginfiAccount: PublicKey;\n signerTokenAccount: PublicKey;\n bank: PublicKey;\n tokenProgram: PublicKey;\n // Optional accounts - to override inference\n group?: PublicKey;\n authority?: PublicKey;\n liquidityVault?: PublicKey;\n },\n args: {\n amount: BN;\n depositUpToLimit?: boolean;\n },\n remainingAccounts: AccountMeta[] = []\n) {\n const { marginfiAccount, signerTokenAccount, bank, tokenProgram, ...optionalAccounts } = accounts;\n\n return mfProgram.methods\n .lendingAccountDeposit(args.amount, args.depositUpToLimit ?? null)\n .accounts({\n marginfiAccount,\n signerTokenAccount,\n bank,\n tokenProgram,\n })\n .accountsPartial(optionalAccounts)\n .remainingAccounts(remainingAccounts)\n .instruction();\n}\n\nasync function makeRepayIx(\n mfProgram: MarginfiProgram,\n accounts: {\n // Required accounts\n marginfiAccount: PublicKey;\n signerTokenAccount: PublicKey;\n bank: PublicKey;\n tokenProgram: PublicKey;\n // Optional accounts - to override inference\n group?: PublicKey;\n authority?: PublicKey;\n liquidityVault?: PublicKey;\n },\n args: {\n amount: BN;\n repayAll?: boolean;\n },\n remainingAccounts: AccountMeta[] = []\n) {\n const { marginfiAccount, signerTokenAccount, bank, tokenProgram, ...optionalAccounts } = accounts;\n\n return mfProgram.methods\n .lendingAccountRepay(args.amount, args.repayAll ?? null)\n .accounts({\n marginfiAccount,\n signerTokenAccount,\n bank,\n tokenProgram,\n })\n .accountsPartial(optionalAccounts)\n .remainingAccounts(remainingAccounts)\n .instruction();\n}\n\nasync function makeKaminoWithdrawIx(\n mfProgram: MarginfiProgram,\n accounts: {\n marginfiAccount: PublicKey;\n bank: PublicKey;\n destinationTokenAccount: PublicKey;\n lendingMarket: PublicKey;\n reserveLiquidityMint: PublicKey;\n\n lendingMarketAuthority: PublicKey;\n reserveLiquiditySupply: PublicKey;\n reserveCollateralMint: PublicKey;\n reserveSourceCollateral: PublicKey;\n liquidityTokenProgram: PublicKey;\n\n obligationFarmUserState: PublicKey | null;\n reserveFarmState: PublicKey | null;\n\n // Optional accounts - to override inference\n group?: PublicKey;\n authority?: PublicKey;\n },\n args: {\n amount: BN;\n isFinalWithdrawal: boolean;\n },\n remainingAccounts: AccountMeta[] = []\n) {\n const {\n marginfiAccount,\n bank,\n destinationTokenAccount,\n lendingMarket,\n reserveLiquidityMint,\n lendingMarketAuthority,\n reserveLiquiditySupply,\n reserveCollateralMint,\n reserveSourceCollateral,\n liquidityTokenProgram,\n obligationFarmUserState,\n reserveFarmState,\n ...optionalAccounts\n } = accounts;\n\n return mfProgram.methods\n .kaminoWithdraw(args.amount, args.isFinalWithdrawal)\n .accounts({\n marginfiAccount,\n bank,\n destinationTokenAccount,\n lendingMarket,\n reserveLiquidityMint,\n lendingMarketAuthority,\n reserveLiquiditySupply,\n reserveCollateralMint,\n reserveSourceCollateral,\n liquidityTokenProgram,\n obligationFarmUserState,\n reserveFarmState,\n })\n .accountsPartial(optionalAccounts)\n .remainingAccounts(remainingAccounts)\n .instruction();\n}\n\nasync function makeWithdrawIx(\n mfProgram: MarginfiProgram,\n accounts: {\n // Required accounts\n marginfiAccount: PublicKey;\n bank: PublicKey;\n destinationTokenAccount: PublicKey;\n tokenProgram: PublicKey;\n // Optional accounts - to override inference\n group?: PublicKey;\n authority?: PublicKey;\n },\n args: {\n amount: BN;\n withdrawAll?: boolean;\n },\n remainingAccounts: AccountMeta[] = []\n) {\n const { marginfiAccount, bank, destinationTokenAccount, tokenProgram, ...optionalAccounts } =\n accounts;\n\n return mfProgram.methods\n .lendingAccountWithdraw(args.amount, args.withdrawAll ?? null)\n .accounts({\n marginfiAccount,\n destinationTokenAccount,\n bank,\n tokenProgram,\n })\n .accountsPartial(optionalAccounts)\n .remainingAccounts(remainingAccounts)\n .instruction();\n}\n\nasync function makeBorrowIx(\n mfProgram: MarginfiProgram,\n accounts: {\n // Required accounts\n marginfiAccount: PublicKey;\n bank: PublicKey;\n destinationTokenAccount: PublicKey;\n tokenProgram: PublicKey;\n // Optional accounts - to override inference\n group?: PublicKey;\n authority?: PublicKey;\n },\n args: {\n amount: BN;\n },\n remainingAccounts: AccountMeta[] = []\n) {\n const { marginfiAccount, bank, destinationTokenAccount, tokenProgram, ...optionalAccounts } =\n accounts;\n\n return mfProgram.methods\n .lendingAccountBorrow(args.amount)\n .accounts({\n marginfiAccount,\n destinationTokenAccount,\n bank,\n tokenProgram,\n })\n .accountsPartial(optionalAccounts)\n .remainingAccounts(remainingAccounts)\n .instruction();\n}\n\nfunction makeLendingAccountLiquidateIx(\n mfiProgram: MarginfiProgram,\n accounts: {\n // Required accounts\n assetBank: PublicKey;\n liabBank: PublicKey;\n liquidatorMarginfiAccount: PublicKey;\n liquidateeMarginfiAccount: PublicKey;\n tokenProgram: PublicKey;\n // Optional accounts - to override inference\n group?: PublicKey;\n authority?: PublicKey;\n },\n args: {\n assetAmount: BN;\n liquidateeAccounts: number;\n liquidatorAccounts: number;\n },\n remainingAccounts: AccountMeta[] = []\n) {\n const {\n assetBank,\n liabBank,\n liquidatorMarginfiAccount,\n liquidateeMarginfiAccount,\n tokenProgram,\n ...optionalAccounts\n } = accounts;\n\n return mfiProgram.methods\n .lendingAccountLiquidate(args.assetAmount, args.liquidateeAccounts, args.liquidatorAccounts)\n .accounts({\n assetBank,\n liabBank,\n liquidatorMarginfiAccount,\n liquidateeMarginfiAccount,\n tokenProgram,\n })\n .accountsPartial(optionalAccounts)\n .remainingAccounts(remainingAccounts)\n .instruction();\n}\n\nfunction makelendingAccountWithdrawEmissionIx(\n mfiProgram: MarginfiProgram,\n accounts: {\n // Required accounts\n marginfiAccount: PublicKey;\n destinationAccount: PublicKey;\n bank: PublicKey;\n tokenProgram: PublicKey;\n // Optional accounts - to override inference\n group?: PublicKey;\n authority?: PublicKey;\n emissionsMint?: PublicKey;\n }\n) {\n const { marginfiAccount, destinationAccount, bank, tokenProgram, ...optionalAccounts } = accounts;\n\n return mfiProgram.methods\n .lendingAccountWithdrawEmissions()\n .accounts({\n marginfiAccount,\n destinationAccount,\n bank,\n tokenProgram,\n })\n .accountsPartial(optionalAccounts)\n .instruction();\n}\n\nfunction makePoolConfigureBankIx(\n mfiProgram: MarginfiProgram,\n accounts: {\n // Required accounts\n bank: PublicKey;\n // Optional accounts - to override inference\n group?: PublicKey;\n admin?: PublicKey;\n },\n args: {\n bankConfigOpt: BankConfigOptRaw;\n }\n) {\n const { bank, ...optionalAccounts } = accounts;\n\n return mfiProgram.methods\n .lendingPoolConfigureBank(args.bankConfigOpt)\n .accounts({\n bank,\n })\n .accountsPartial(optionalAccounts)\n .instruction();\n}\n\nfunction makeBeginFlashLoanIx(\n mfiProgram: MarginfiProgram,\n accounts: {\n // Required accounts\n marginfiAccount: PublicKey;\n // Optional accounts - to override inference\n authority?: PublicKey;\n ixsSysvar?: PublicKey;\n },\n args: {\n endIndex: BN;\n }\n) {\n const { marginfiAccount, ...optionalAccounts } = accounts;\n\n return mfiProgram.methods\n .lendingAccountStartFlashloan(args.endIndex)\n .accounts({\n marginfiAccount,\n })\n .accountsPartial(optionalAccounts)\n .instruction();\n}\n\nfunction makeEndFlashLoanIx(\n mfiProgram: MarginfiProgram,\n accounts: {\n // Required accounts\n marginfiAccount: PublicKey;\n // Optional accounts - to override inference\n authority?: PublicKey;\n },\n remainingAccounts: AccountMeta[] = []\n) {\n const { marginfiAccount, ...optionalAccounts } = accounts;\n\n return mfiProgram.methods\n .lendingAccountEndFlashloan()\n .accounts({\n marginfiAccount,\n })\n .accountsPartial(optionalAccounts)\n .remainingAccounts(remainingAccounts)\n .instruction();\n}\n\nasync function makeAccountTransferToNewAccountIx(\n mfProgram: MarginfiProgram,\n accounts: {\n // Required accounts\n oldMarginfiAccount: PublicKey;\n newMarginfiAccount: PublicKey;\n newAuthority: PublicKey;\n feePayer: PublicKey;\n // Optional accounts - to override inference\n group?: PublicKey;\n authority?: PublicKey;\n }\n) {\n const { oldMarginfiAccount, newMarginfiAccount, newAuthority, feePayer, ...optionalAccounts } =\n accounts;\n\n return mfProgram.methods\n .transferToNewAccount()\n .accounts({\n oldMarginfiAccount,\n newMarginfiAccount,\n newAuthority,\n globalFeeWallet: feePayer,\n })\n .accountsPartial(optionalAccounts)\n .instruction();\n}\n\nasync function makeGroupInitIx(\n mfProgram: MarginfiProgram,\n accounts: {\n marginfiGroup: PublicKey;\n admin: PublicKey;\n },\n args?: {\n isArenaGroup?: boolean;\n }\n) {\n return mfProgram.methods\n .marginfiGroupInitialize(args?.isArenaGroup ?? false)\n .accounts({\n marginfiGroup: accounts.marginfiGroup,\n admin: accounts.admin,\n })\n .instruction();\n}\n\n/**\n * Configure the oracle for a bank\n * @param mfProgram The marginfi program\n * @param accounts The accounts required for this instruction\n * @param args The oracle setup index and feed id\n * @param remainingAccounts The remaining accounts required for this instruction, should include the feed oracle key\n */\nasync function makeLendingPoolConfigureBankOracleIx(\n mfProgram: MarginfiProgram,\n accounts: {\n // Required accounts\n bank: PublicKey;\n // Optional accounts - to override inference\n group?: PublicKey;\n admin?: PublicKey;\n },\n args: {\n /**\n * The oracle setup index, see {@link serializeOracleSetupToIndex}\n */\n setup: number;\n /**\n * The oracle feed id\n */\n feedId: PublicKey;\n },\n /**\n * The remaining accounts required for this instruction, should include the feed oracle key (non writable & signable)\n */\n remainingAccounts: AccountMeta[] = []\n) {\n const { bank, ...optionalAccounts } = accounts;\n\n return mfProgram.methods\n .lendingPoolConfigureBankOracle(args.setup, args.feedId)\n .accounts({\n bank,\n })\n .accountsPartial(optionalAccounts)\n .remainingAccounts(remainingAccounts)\n .instruction();\n}\n\n/**\n * Creates an instruction to add a permissionless staked bank to a lending pool.\n * @param mfProgram - The marginfi program instance\n * @param accounts - The accounts required for this instruction\n * @param remainingAccounts - The remaining accounts required for this instruction, including pythOracle, solPool and bankMint\n * @param args - Optional arguments for this instruction\n */\nasync function makePoolAddPermissionlessStakedBankIx(\n mfProgram: MarginfiProgram,\n accounts: {\n // Required accounts\n stakedSettings: PublicKey;\n feePayer: PublicKey;\n bankMint: PublicKey;\n solPool: PublicKey;\n stakePool: PublicKey;\n // Optional accounts - to override inference\n marginfiGroup?: PublicKey;\n /**\n * The token program to use for this instruction, defaults to the SPL token program\n */\n tokenProgram?: PublicKey;\n },\n /**\n * The remaining accounts required for this instruction. Should include:\n * - pythOracle: The pyth oracle key (non writable & non signer)\n * - solPool: The sol pool key (non writable & non signer)\n * - bankMint: The bank mint key (non writable & non signer)\n */\n remainingAccounts: AccountMeta[] = [],\n args: {\n /**\n * The seed to use for the bank account. Defaults to 0 (new BN(0)).\n * If the seed is not specified, the seed is set to 0, and the bank account\n * will be created at the address {@link findPoolAddress} with the default\n * bump.\n */\n seed?: BN;\n }\n) {\n const {\n stakedSettings,\n feePayer,\n bankMint,\n solPool,\n stakePool,\n tokenProgram = TOKEN_PROGRAM_ID,\n ...optionalAccounts\n } = accounts;\n\n return mfProgram.methods\n .lendingPoolAddBankPermissionless(args.seed ?? new BN(0))\n .accounts({\n stakedSettings,\n feePayer,\n bankMint,\n solPool,\n stakePool,\n tokenProgram,\n })\n .accountsPartial(optionalAccounts)\n .remainingAccounts(remainingAccounts)\n .instruction();\n}\n\nasync function makePoolAddBankIx(\n mfProgram: MarginfiProgram,\n accounts: {\n // Required accounts\n marginfiGroup: PublicKey;\n feePayer: PublicKey;\n bankMint: PublicKey;\n bank: PublicKey;\n tokenProgram: PublicKey;\n // Optional accounts - to override inference\n admin?: PublicKey;\n globalFeeWallet?: PublicKey;\n },\n args: {\n bankConfig: BankConfigCompactRaw;\n }\n) {\n const { marginfiGroup, feePayer, bankMint, bank, tokenProgram, ...optionalAccounts } = accounts;\n\n return mfProgram.methods\n .lendingPoolAddBank({\n ...args.bankConfig,\n configFlags: 0,\n pad0: [0, 0, 0, 0, 0, 0, 0, 0],\n })\n .accounts({\n marginfiGroup,\n feePayer,\n bankMint,\n bank,\n tokenProgram,\n })\n .accountsPartial(optionalAccounts)\n .instruction();\n}\n\nasync function makeCloseAccountIx(\n mfProgram: MarginfiProgram,\n accounts: {\n // Required accounts\n marginfiAccount: PublicKey;\n feePayer: PublicKey;\n // Optional accounts - to override inference\n authority?: PublicKey;\n }\n) {\n const { marginfiAccount, feePayer, ...optionalAccounts } = accounts;\n return mfProgram.methods\n .marginfiAccountClose()\n .accounts({\n marginfiAccount,\n feePayer,\n })\n .accountsPartial(optionalAccounts)\n .instruction();\n}\n\n// Deprecated\n// async function makeLendingAccountSortBalancesIx(\n// mfProgram: MarginfiProgram,\n// accounts: {\n// marginfiAccount: PublicKey;\n// }\n// ) {\n// return mfProgram.methods\n// .lendingAccountSortBalances()\n// .accounts({\n// marginfiAccount: accounts.marginfiAccount,\n// })\n// .instruction();\n// }\n\nasync function makePulseHealthIx(\n mfProgram: MarginfiProgram,\n accounts: {\n marginfiAccount: PublicKey;\n },\n /**\n * The remaining accounts required for this instruction. Should include:\n * - For each balance the user has, pass bank and oracle: <bank1, oracle1, bank2, oracle2>\n */\n remainingAccounts: AccountMeta[] = []\n) {\n return mfProgram.methods\n .lendingAccountPulseHealth()\n .accounts({\n marginfiAccount: accounts.marginfiAccount,\n })\n .remainingAccounts(remainingAccounts)\n .instruction();\n}\n\nconst instructions = {\n makeDepositIx,\n makeKaminoDepositIx,\n makeRepayIx,\n makeWithdrawIx,\n makeKaminoWithdrawIx,\n makeBorrowIx,\n makeInitMarginfiAccountIx,\n makeInitMarginfiAccountPdaIx,\n makeLendingAccountLiquidateIx,\n makelendingAccountWithdrawEmissionIx,\n makePoolAddBankIx,\n makePoolConfigureBankIx,\n makeBeginFlashLoanIx,\n makeEndFlashLoanIx,\n makeAccountTransferToNewAccountIx,\n makeGroupInitIx,\n makeCloseAccountIx,\n makePoolAddPermissionlessStakedBankIx,\n makeLendingPoolConfigureBankOracleIx,\n makePulseHealthIx,\n};\n\nexport default instructions;\n","import { PublicKey } from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\n\nexport enum RiskTier {\n Collateral = \"Collateral\",\n Isolated = \"Isolated\",\n}\n\nexport enum OperationalState {\n Paused = \"Paused\",\n Operational = \"Operational\",\n ReduceOnly = \"ReduceOnly\",\n KilledByBankruptcy = \"KilledByBankruptcy\",\n}\n\nexport interface RatePoint {\n util: number;\n rate: number;\n}\n\nexport interface InterestRateConfig {\n // Curve Params\n optimalUtilizationRate: BigNumber;\n plateauInterestRate: BigNumber;\n maxInterestRate: BigNumber;\n\n // Fees\n insuranceFeeFixedApr: BigNumber;\n insuranceIrFee: BigNumber;\n protocolFixedFeeApr: BigNumber;\n protocolIrFee: BigNumber;\n protocolOriginationFee: BigNumber;\n\n zeroUtilRate: number;\n hundredUtilRate: number;\n points: RatePoint[];\n curveType: number;\n}\n\nexport interface InterestRateConfigOpt\n extends Omit<\n InterestRateConfig,\n | \"optimalUtilizationRate\"\n | \"plateauInterestRate\"\n | \"maxInterestRate\"\n | \"curveType\"\n > {}\n\nexport enum OracleSetup {\n None = \"None\",\n PythLegacy = \"PythLegacy\",\n SwitchboardV2 = \"SwitchboardV2\",\n PythPushOracle = \"PythPushOracle\",\n SwitchboardPull = \"SwitchboardPull\",\n StakedWithPythPush = \"StakedWithPythPush\",\n KaminoPythPush = \"KaminoPythPush\",\n KaminoSwitchboardPull = \"KaminoSwitchboardPull\",\n Fixed = \"Fixed\",\n}\nexport enum AssetTag {\n DEFAULT = 0,\n SOL = 1,\n STAKED = 2,\n KAMINO = 3,\n}\n\nexport enum BankConfigFlag {\n PYTH_MIGRATED = 1 << 0, // 1\n}\n\n// BankConfigOpt Args\nexport interface BankConfigOpt {\n assetWeightInit: BigNumber | null;\n assetWeightMaint: BigNumber | null;\n\n liabilityWeightInit: BigNumber | null;\n liabilityWeightMaint: BigNumber | null;\n\n depositLimit: BigNumber | null;\n borrowLimit: BigNumber | null;\n operationalState: OperationalState | null;\n interestRateConfig: InterestRateConfigOpt | null;\n\n riskTier: RiskTier | null;\n assetTag: AssetTag | null;\n totalAssetValueInitLimit: BigNumber | null;\n\n oracleMaxConfidence: number | null;\n oracleMaxAge: number | null;\n permissionlessBadDebtSettlement: boolean | null;\n freezeSettings: boolean | null;\n tokenlessRepaymentsAllowed: boolean | null;\n}\n\nexport interface BankConfigType {\n assetWeightInit: BigNumber;\n assetWeightMaint: BigNumber;\n\n liabilityWeightInit: BigNumber;\n liabilityWeightMaint: BigNumber;\n\n depositLimit: BigNumber;\n borrowLimit: BigNumber;\n\n riskTier: RiskTier;\n totalAssetValueInitLimit: BigNumber;\n assetTag: AssetTag;\n configFlags?: BankConfigFlag;\n\n interestRateConfig: InterestRateConfig;\n operationalState: OperationalState;\n\n oracleSetup: OracleSetup;\n oracleKeys: PublicKey[];\n oracleMaxAge: number;\n oracleMaxConfidence: number;\n fixedPrice: BigNumber;\n}\n\nexport interface BankType {\n address: PublicKey;\n tokenSymbol?: string;\n group: PublicKey;\n mint: PublicKey;\n mintDecimals: number;\n mintRate: number | null;\n mintPrice: number;\n\n assetShareValue: BigNumber;\n liabilityShareValue: BigNumber;\n\n liquidityVault: PublicKey;\n liquidityVaultBump: number;\n liquidityVaultAuthorityBump: number;\n\n insuranceVault: PublicKey;\n insuranceVaultBump: number;\n insuranceVaultAuthorityBump: number;\n collectedInsuranceFeesOutstanding: BigNumber;\n\n feeVault: PublicKey;\n feeVaultBump: number;\n feeVaultAuthorityBump: number;\n collectedGroupFeesOutstanding: BigNumber;\n\n lastUpdate: number;\n\n config: BankConfigType;\n\n totalAssetShares: BigNumber;\n totalLiabilityShares: BigNumber;\n\n emissionsActiveBorrowing: boolean;\n emissionsActiveLending: boolean;\n emissionsRate: number;\n emissionsMint: PublicKey;\n emissionsRemaining: BigNumber;\n\n oracleKey: PublicKey;\n emode: EmodeSettingsType;\n feesDestinationAccount?: PublicKey;\n lendingPositionCount?: BigNumber;\n borrowingPositionCount?: BigNumber;\n\n kaminoReserve: PublicKey;\n kaminoObligation: PublicKey;\n}\n\n/**\n * Bitwise flags for EMode entry\n */\nexport enum EmodeEntryFlags {\n /**\n * If set, isolated banks with this tag also benefit.\n * If not set, isolated banks continue to offer zero collateral, even if they use this tag.\n * (NOT YET IMPLEMENTED)\n */\n APPLIES_TO_ISOLATED = 1 << 0, // 1\n /** Reserved for future use */\n RESERVED_1 = 1 << 1, // 2\n RESERVED_2 = 1 << 2, // 4\n RESERVED_3 = 1 << 3, // 8\n RESERVED_4 = 1 << 4, // 16\n RESERVED_5 = 1 << 5, // 32\n}\n\nexport interface EmodeEntry {\n collateralBankEmodeTag: EmodeTag;\n flags: EmodeEntryFlags[];\n assetWeightInit: BigNumber;\n assetWeightMaint: BigNumber;\n}\n\n/**\n * Bitwise flags for EMode settings\n */\nexport enum EmodeFlags {\n /** If set, at least one entry is configured */\n EMODE_ON = 1 << 0, // 1\n /** Reserved for future use */\n RESERVED_1 = 1 << 1, // 2\n RESERVED_2 = 1 << 2, // 4\n RESERVED_3 = 1 << 3, // 8\n}\n\nexport enum EmodeTag {\n UNSET = 0,\n SOL = 501,\n LST_T1 = 1571,\n LST_T2 = 1572,\n JLP = 619,\n STABLE_T1 = 57481,\n STABLE_T2 = 57482,\n BTC_T1 = 871,\n BTC_T2 = 872,\n}\n\nexport interface EmodeSettingsType {\n emodeTag: EmodeTag;\n timestamp: number;\n flags: EmodeFlags[];\n emodeEntries: EmodeEntry[];\n}\n\nexport interface OracleConfigOpt {\n setup: OracleSetup;\n keys: PublicKey[];\n}\n\nexport type EmodePair = {\n collateralBanks: PublicKey[];\n collateralBankTag: EmodeTag;\n liabilityBank: PublicKey;\n liabilityBankTag: EmodeTag;\n assetWeightMaint: BigNumber;\n assetWeightInit: BigNumber;\n};\n\nexport type ActiveEmodePair = {\n collateralBanks: PublicKey[];\n collateralBankTags: EmodeTag[];\n liabilityBanks: PublicKey[];\n liabilityBankTags: EmodeTag[];\n assetWeightMaint: BigNumber;\n assetWeightInit: BigNumber;\n};\n\nexport enum EmodeImpactStatus {\n ActivateEmode,\n ExtendEmode,\n IncreaseEmode,\n ReduceEmode,\n RemoveEmode,\n InactiveEmode,\n}\n\nexport interface EmodeImpact {\n status: EmodeImpactStatus;\n resultingPairs: EmodePair[];\n activePair?: ActiveEmodePair;\n}\n\nexport interface ActionEmodeImpact {\n borrowImpact?: EmodeImpact;\n supplyImpact?: EmodeImpact;\n repayAllImpact?: EmodeImpact;\n withdrawAllImpact?: EmodeImpact;\n}\n\n/**\n * Marginfi bank vault type\n */\nexport enum BankVaultType {\n LiquidityVault,\n InsuranceVault,\n FeeVault,\n}\n","import BigNumber from \"bignumber.js\";\nimport BN from \"bn.js\";\n\nimport { bigNumberToWrappedI80F48 } from \"~/utils\";\n\nimport {\n BankConfigOptRaw,\n RiskTierRaw,\n BankConfigOpt,\n RiskTier,\n OperationalState,\n OracleSetup,\n OracleSetupRaw,\n BankTypeDto,\n BankType,\n EmodeSettingsDto,\n EmodeSettingsType,\n BankConfigType,\n BankConfigDto,\n InterestRateConfigDto,\n InterestRateConfig,\n BankRaw,\n BankRawDto,\n BankConfigRaw,\n BankConfigRawDto,\n EmodeSettingsRaw,\n EmodeSettingsRawDto,\n InterestRateConfigOptRaw,\n InterestRateConfigRaw,\n} from \"../types\";\n\nfunction serializeBankConfigOpt(bankConfigOpt: BankConfigOpt): BankConfigOptRaw {\n const toWrappedI80F48 = (value: BigNumber | null) => value && bigNumberToWrappedI80F48(value);\n const toBN = (value: BigNumber | null) => value && new BN(value.toString());\n\n return {\n assetWeightInit: toWrappedI80F48(bankConfigOpt.assetWeightInit),\n assetWeightMaint: toWrappedI80F48(bankConfigOpt.assetWeightMaint),\n liabilityWeightInit: toWrappedI80F48(bankConfigOpt.liabilityWeightInit),\n liabilityWeightMaint: toWrappedI80F48(bankConfigOpt.liabilityWeightMaint),\n depositLimit: toBN(bankConfigOpt.depositLimit),\n borrowLimit: toBN(bankConfigOpt.borrowLimit),\n riskTier: bankConfigOpt.riskTier && serializeRiskTier(bankConfigOpt.riskTier),\n totalAssetValueInitLimit: toBN(bankConfigOpt.totalAssetValueInitLimit),\n assetTag: bankConfigOpt.assetTag !== null ? Number(bankConfigOpt.assetTag) : 0,\n interestRateConfig:\n bankConfigOpt.interestRateConfig &&\n ({\n insuranceFeeFixedApr: toWrappedI80F48(\n bankConfigOpt.interestRateConfig.insuranceFeeFixedApr\n ),\n insuranceIrFee: toWrappedI80F48(bankConfigOpt.interestRateConfig.insuranceIrFee),\n protocolFixedFeeApr: toWrappedI80F48(bankConfigOpt.interestRateConfig.protocolFixedFeeApr),\n protocolIrFee: toWrappedI80F48(bankConfigOpt.interestRateConfig.protocolIrFee),\n protocolOriginationFee: toWrappedI80F48(\n bankConfigOpt.interestRateConfig.protocolOriginationFee\n ),\n zeroUtilRate: bankConfigOpt.interestRateConfig.zeroUtilRate,\n hundredUtilRate: bankConfigOpt.interestRateConfig.hundredUtilRate,\n points: bankConfigOpt.interestRateConfig.points,\n } as InterestRateConfigOptRaw),\n operationalState:\n bankConfigOpt.operationalState && serializeOperationalState(bankConfigOpt.operationalState),\n oracleMaxAge: bankConfigOpt.oracleMaxAge,\n permissionlessBadDebtSettlement: bankConfigOpt.permissionlessBadDebtSettlement,\n freezeSettings: bankConfigOpt.freezeSettings,\n tokenlessRepaymentsAllowed: bankConfigOpt.tokenlessRepaymentsAllowed,\n oracleMaxConfidence: bankConfigOpt.oracleMaxConfidence,\n };\n}\n\nfunction serializeInterestRateConfig(\n interestRateConfig: InterestRateConfig\n): InterestRateConfigRaw {\n return {\n optimalUtilizationRate: bigNumberToWrappedI80F48(interestRateConfig.optimalUtilizationRate),\n plateauInterestRate: bigNumberToWrappedI80F48(interestRateConfig.plateauInterestRate),\n maxInterestRate: bigNumberToWrappedI80F48(interestRateConfig.maxInterestRate),\n\n insuranceFeeFixedApr: bigNumberToWrappedI80F48(interestRateConfig.insuranceFeeFixedApr),\n insuranceIrFee: bigNumberToWrappedI80F48(interestRateConfig.insuranceIrFee),\n protocolFixedFeeApr: bigNumberToWrappedI80F48(interestRateConfig.protocolFixedFeeApr),\n protocolIrFee: bigNumberToWrappedI80F48(interestRateConfig.protocolIrFee),\n protocolOriginationFee: bigNumberToWrappedI80F48(interestRateConfig.protocolOriginationFee),\n zeroUtilRate: interestRateConfig.zeroUtilRate,\n hundredUtilRate: interestRateConfig.hundredUtilRate,\n points: interestRateConfig.points,\n curveType: interestRateConfig.curveType,\n };\n}\n\nfunction serializeRiskTier(riskTier: RiskTier): RiskTierRaw {\n switch (riskTier) {\n case RiskTier.Collateral:\n return { collateral: {} };\n case RiskTier.Isolated:\n return { isolated: {} };\n default:\n throw new Error(`Invalid risk tier \"${riskTier}\"`);\n }\n}\n\nfunction serializeOperationalState(\n operationalState: OperationalState\n): { paused: {} } | { operational: {} } | { reduceOnly: {} } {\n switch (operationalState) {\n case OperationalState.Paused:\n return { paused: {} };\n case OperationalState.Operational:\n return { operational: {} };\n case OperationalState.ReduceOnly:\n return { reduceOnly: {} };\n default:\n throw new Error(`Invalid operational state \"${operationalState}\"`);\n }\n}\n\nfunction serializeOracleSetupToIndex(oracleSetup: OracleSetup): number {\n switch (oracleSetup) {\n case OracleSetup.None:\n return 0;\n case OracleSetup.PythLegacy:\n return 1;\n case OracleSetup.SwitchboardV2:\n return 2;\n case OracleSetup.PythPushOracle:\n return 3;\n case OracleSetup.SwitchboardPull:\n return 4;\n case OracleSetup.StakedWithPythPush:\n return 5;\n case OracleSetup.KaminoPythPush:\n return 6;\n case OracleSetup.KaminoSwitchboardPull:\n return 7;\n case OracleSetup.Fixed:\n return 8;\n default:\n return 0;\n }\n}\n\nfunction serializeOracleSetup(oracleSetup: OracleSetup): OracleSetupRaw {\n switch (oracleSetup) {\n case OracleSetup.None:\n return { none: {} };\n case OracleSetup.PythLegacy:\n return { pythLegacy: {} };\n case OracleSetup.SwitchboardV2:\n return { switchboardV2: {} };\n case OracleSetup.PythPushOracle:\n return { pythPushOracle: {} };\n case OracleSetup.SwitchboardPull:\n return { switchboardPull: {} };\n case OracleSetup.StakedWithPythPush:\n return { stakedWithPythPush: {} };\n case OracleSetup.KaminoPythPush:\n return { kaminoPythPush: {} };\n case OracleSetup.KaminoSwitchboardPull:\n return { kaminoSwitchboardPull: {} };\n case OracleSetup.Fixed:\n return { fixed: {} };\n default:\n throw new Error(`Invalid oracle setup \"${oracleSetup}\"`);\n }\n}\n\nfunction toBankDto(bank: BankType): BankTypeDto {\n return {\n address: bank.address.toBase58(),\n group: bank.group.toBase58(),\n mint: bank.mint.toBase58(),\n mintDecimals: bank.mintDecimals,\n assetShareValue: bank.assetShareValue.toString(),\n liabilityShareValue: bank.liabilityShareValue.toString(),\n liquidityVault: bank.liquidityVault.toBase58(),\n liquidityVaultBump: bank.liquidityVaultBump,\n liquidityVaultAuthorityBump: bank.liquidityVaultAuthorityBump,\n insuranceVault: bank.insuranceVault.toBase58(),\n insuranceVaultBump: bank.insuranceVaultBump,\n insuranceVaultAuthorityBump: bank.insuranceVaultAuthorityBump,\n collectedInsuranceFeesOutstanding: bank.collectedInsuranceFeesOutstanding.toString(),\n feeVault: bank.feeVault.toBase58(),\n feeVaultBump: bank.feeVaultBump,\n feeVaultAuthorityBump: bank.feeVaultAuthorityBump,\n collectedGroupFeesOutstanding: bank.collectedGroupFeesOutstanding.toString(),\n lastUpdate: bank.lastUpdate,\n config: toBankConfigDto(bank.config),\n totalAssetShares: bank.totalAssetShares.toString(),\n totalLiabilityShares: bank.totalLiabilityShares.toString(),\n emissionsActiveBorrowing: bank.emissionsActiveBorrowing,\n emissionsActiveLending: bank.emissionsActiveLending,\n emissionsRate: bank.emissionsRate,\n emissionsMint: bank.emissionsMint.toBase58(),\n emissionsRemaining: bank.emissionsRemaining.toString(),\n oracleKey: bank.oracleKey.toBase58(),\n emode: toEmodeSettingsDto(bank.emode),\n tokenSymbol: bank.tokenSymbol,\n feesDestinationAccount: bank.feesDestinationAccount?.toBase58(),\n lendingPositionCount: bank.lendingPositionCount?.toString(),\n borrowingPositionCount: bank.borrowingPositionCount?.toString(),\n kaminoReserve: bank.kaminoReserve.toBase58(),\n kaminoObligation: bank.kaminoObligation.toBase58(),\n };\n}\n\nfunction toEmodeSettingsDto(emodeSettings: EmodeSettingsType): EmodeSettingsDto {\n return {\n emodeTag: emodeSettings.emodeTag,\n timestamp: emodeSettings.timestamp,\n flags: emodeSettings.flags,\n emodeEntries: emodeSettings.emodeEntries.map((entry) => {\n return {\n collateralBankEmodeTag: entry.collateralBankEmodeTag,\n flags: entry.flags,\n assetWeightInit: entry.assetWeightInit.toString(),\n assetWeightMaint: entry.assetWeightMaint.toString(),\n };\n }),\n };\n}\n\nfunction toBankConfigDto(bankConfig: BankConfigType): BankConfigDto {\n return {\n assetWeightInit: bankConfig.assetWeightInit.toString(),\n assetWeightMaint: bankConfig.assetWeightMaint.toString(),\n liabilityWeightInit: bankConfig.liabilityWeightInit.toString(),\n liabilityWeightMaint: bankConfig.liabilityWeightMaint.toString(),\n depositLimit: bankConfig.depositLimit.toString(),\n borrowLimit: bankConfig.borrowLimit.toString(),\n riskTier: bankConfig.riskTier,\n operationalState: bankConfig.operationalState,\n totalAssetValueInitLimit: bankConfig.totalAssetValueInitLimit.toString(),\n assetTag: bankConfig.assetTag,\n oracleSetup: bankConfig.oracleSetup,\n oracleKeys: bankConfig.oracleKeys.map((key) => key.toBase58()),\n oracleMaxAge: bankConfig.oracleMaxAge,\n interestRateConfig: toInterestRateConfigDto(bankConfig.interestRateConfig),\n configFlags: bankConfig.configFlags,\n oracleMaxConfidence: bankConfig.oracleMaxConfidence,\n fixedPrice: bankConfig.fixedPrice.toString(),\n };\n}\n\nfunction toInterestRateConfigDto(interestRateConfig: InterestRateConfig): InterestRateConfigDto {\n return {\n optimalUtilizationRate: interestRateConfig.optimalUtilizationRate.toString(),\n plateauInterestRate: interestRateConfig.plateauInterestRate.toString(),\n maxInterestRate: interestRateConfig.maxInterestRate.toString(),\n insuranceFeeFixedApr: interestRateConfig.insuranceFeeFixedApr.toString(),\n insuranceIrFee: interestRateConfig.insuranceIrFee.toString(),\n protocolFixedFeeApr: interestRateConfig.protocolFixedFeeApr.toString(),\n protocolIrFee: interestRateConfig.protocolIrFee.toString(),\n protocolOriginationFee: interestRateConfig.protocolOriginationFee.toString(),\n zeroUtilRate: interestRateConfig.zeroUtilRate,\n hundredUtilRate: interestRateConfig.hundredUtilRate,\n points: interestRateConfig.points,\n curveType: interestRateConfig.curveType,\n };\n}\n\nexport function bankRawToDto(bankRaw: BankRaw): BankRawDto {\n return {\n group: bankRaw.group.toBase58(),\n mint: bankRaw.mint.toBase58(),\n mintDecimals: bankRaw.mintDecimals,\n\n assetShareValue: bankRaw.assetShareValue,\n liabilityShareValue: bankRaw.liabilityShareValue,\n\n liquidityVault: bankRaw.liquidityVault.toBase58(),\n liquidityVaultBump: bankRaw.liquidityVaultBump,\n liquidityVaultAuthorityBump: bankRaw.liquidityVaultAuthorityBump,\n\n insuranceVault: bankRaw.insuranceVault.toBase58(),\n insuranceVaultBump: bankRaw.insuranceVaultBump,\n insuranceVaultAuthorityBump: bankRaw.insuranceVaultAuthorityBump,\n collectedInsuranceFeesOutstanding: bankRaw.collectedInsuranceFeesOutstanding,\n\n feeVault: bankRaw.feeVault.toBase58(),\n feeVaultBump: bankRaw.feeVaultBump,\n feeVaultAuthorityBump: bankRaw.feeVaultAuthorityBump,\n collectedGroupFeesOutstanding: bankRaw.collectedGroupFeesOutstanding,\n\n lastUpdate: bankRaw.lastUpdate.toString(),\n\n config: bankConfigRawToDto(bankRaw.config),\n\n totalAssetShares: bankRaw.totalAssetShares,\n totalLiabilityShares: bankRaw.totalLiabilityShares,\n\n flags: bankRaw.flags.toString(),\n emissionsRate: bankRaw.emissionsRate.toString(),\n emissionsRemaining: bankRaw.emissionsRemaining,\n emissionsMint: bankRaw.emissionsMint.toBase58(),\n feesDestinationAccount: bankRaw?.feesDestinationAccount?.toBase58(),\n lendingPositionCount: bankRaw?.lendingPositionCount?.toString(),\n borrowingPositionCount: bankRaw?.borrowingPositionCount?.toString(),\n\n emode: emodeSettingsRawToDto(bankRaw.emode),\n kaminoReserve: bankRaw.kaminoReserve.toBase58(),\n kaminoObligation: bankRaw.kaminoObligation.toBase58(),\n };\n}\n\nexport function emodeSettingsRawToDto(emodeSettingsRaw: EmodeSettingsRaw): EmodeSettingsRawDto {\n return {\n emodeTag: emodeSettingsRaw.emodeTag,\n timestamp: emodeSettingsRaw.timestamp.toString(),\n flags: emodeSettingsRaw.flags.toString(),\n emodeConfig: {\n entries: emodeSettingsRaw.emodeConfig.entries.map((entry) => {\n return {\n collateralBankEmodeTag: entry.collateralBankEmodeTag,\n flags: entry.flags,\n assetWeightInit: entry.assetWeightInit,\n assetWeightMaint: entry.assetWeightMaint,\n };\n }),\n },\n };\n}\n\nfunction bankConfigToBankConfigRaw(config: BankConfigType): BankConfigRaw {\n return {\n assetWeightInit: bigNumberToWrappedI80F48(config.assetWeightInit),\n assetWeightMaint: bigNumberToWrappedI80F48(config.assetWeightMaint),\n liabilityWeightInit: bigNumberToWrappedI80F48(config.liabilityWeightInit),\n liabilityWeightMaint: bigNumberToWrappedI80F48(config.liabilityWeightMaint),\n depositLimit: new BN(config.depositLimit.toString()),\n interestRateConfig: serializeInterestRateConfig(config.interestRateConfig),\n operationalState: serializeOperationalState(config.operationalState),\n oracleSetup: serializeOracleSetup(config.oracleSetup),\n oracleKeys: config.oracleKeys,\n configFlags: config.configFlags,\n borrowLimit: new BN(config.borrowLimit.toString()),\n riskTier: serializeRiskTier(config.riskTier),\n assetTag: config.assetTag,\n totalAssetValueInitLimit: new BN(config.totalAssetValueInitLimit.toString()),\n oracleMaxAge: config.oracleMaxAge,\n oracleMaxConfidence: config.oracleMaxConfidence,\n fixedPrice: bigNumberToWrappedI80F48(config.fixedPrice),\n };\n}\n\nexport function bankConfigRawToDto(bankConfigRaw: BankConfigRaw): BankConfigRawDto {\n return {\n assetWeightInit: bankConfigRaw.assetWeightInit,\n assetWeightMaint: bankConfigRaw.assetWeightMaint,\n liabilityWeightInit: bankConfigRaw.liabilityWeightInit,\n liabilityWeightMaint: bankConfigRaw.liabilityWeightMaint,\n depositLimit: bankConfigRaw.depositLimit.toString(),\n borrowLimit: bankConfigRaw.borrowLimit.toString(),\n riskTier: bankConfigRaw.riskTier,\n operationalState: bankConfigRaw.operationalState,\n totalAssetValueInitLimit: bankConfigRaw.totalAssetValueInitLimit.toString(),\n assetTag: bankConfigRaw.assetTag,\n oracleSetup: bankConfigRaw.oracleSetup,\n oracleKeys: bankConfigRaw.oracleKeys.map((key) => key.toBase58()),\n oracleMaxAge: bankConfigRaw.oracleMaxAge,\n interestRateConfig: bankConfigRaw.interestRateConfig,\n configFlags: bankConfigRaw.configFlags,\n oracleMaxConfidence: bankConfigRaw.oracleMaxConfidence,\n fixedPrice: bankConfigRaw.fixedPrice,\n };\n}\n\nexport {\n serializeInterestRateConfig,\n serializeOracleSetupToIndex,\n bankConfigToBankConfigRaw,\n serializeBankConfigOpt,\n serializeRiskTier,\n serializeOperationalState,\n serializeOracleSetup,\n toBankDto,\n toEmodeSettingsDto,\n toBankConfigDto,\n toInterestRateConfigDto,\n};\n","import { PublicKey, Transaction, VersionedTransaction } from \"@solana/web3.js\";\nimport { Program as AnchorProgram, AnchorProvider, Idl } from \"@coral-xyz/anchor\";\n\nimport { MarginfiIdlType } from \"./idl\";\nimport { Bank } from \"./models/bank\";\nimport { OraclePrice } from \"./services\";\nimport {\n FarmStateJSON,\n FarmStateRaw,\n ObligationJSON,\n ObligationRaw,\n ReserveJSON,\n ReserveRaw,\n} from \"./vendor\";\n\n// Define MintData here to break circular dependencies\nexport type MintData = {\n mint: PublicKey;\n tokenProgram: PublicKey;\n // deprecated\n emissionTokenProgram?: PublicKey | null;\n};\n\nexport type Program<T extends Idl> = Omit<AnchorProgram<T>, \"provider\"> & {\n provider: AnchorProvider;\n};\n\nexport type MarginfiProgram = Program<MarginfiIdlType>;\n\nexport type Wallet = {\n publicKey: PublicKey;\n signTransaction<T extends Transaction | VersionedTransaction>(transaction: T): Promise<T>;\n signAllTransactions<T extends Transaction | VersionedTransaction>(\n transactions: T[]\n ): Promise<T[]>;\n signMessage?: (message: Uint8Array) => Promise<Uint8Array>;\n};\n\nexport interface BankMetadata {\n validatorVoteAccount?: string;\n tokenAddress: string;\n tokenName: string;\n tokenSymbol: string;\n}\n\n/**\n * Supported config environments.\n */\nexport type Environment = \"production\" | \"staging\" | \"staging-mainnet-clone\" | \"staging-alt\";\n\nexport interface Project0Config {\n environment: Environment;\n programId: PublicKey;\n groupPk: PublicKey;\n}\n\nexport interface BankAddress {\n label: string;\n address: PublicKey;\n}\n\n// --- On-chain account structs\n\nexport enum AccountType {\n MarginfiGroup = \"marginfiGroup\",\n MarginfiAccount = \"marginfiAccount\",\n Bank = \"bank\",\n}\n\nexport type KaminoStates = {\n reserveState: ReserveRaw;\n obligationState: ObligationRaw;\n farmState?: FarmStateRaw;\n};\n\nexport type BankIntegrationMetadata = {\n kaminoStates?: {\n reserveState: ReserveRaw;\n obligationState: ObligationRaw;\n farmState?: FarmStateRaw;\n };\n};\n\nexport type BankIntegrationMetadataDto = {\n kaminoStates?: {\n reserveState: ReserveJSON;\n obligationState: ObligationJSON;\n farmState?: FarmStateJSON;\n };\n};\n\nexport type BankIntegrationMetadataMap = {\n [address: string]: BankIntegrationMetadata;\n};\nexport type BankIntegrationMetadataMapDto = {\n [address: string]: BankIntegrationMetadataDto;\n};\nexport type BankMap = Map<string, Bank>;\nexport type OraclePriceMap = Map<string, OraclePrice>;\nexport type MintDataMap = Map<string, MintData>;\n\nexport interface WrappedI80F48 {\n value: number[];\n}\n\nexport type Amount = BigNumber | number | string;\n","import { BorshCoder } from \"@coral-xyz/anchor\";\nimport BigNumber from \"bignumber.js\";\nimport { PublicKey } from \"@solana/web3.js\";\nimport BN from \"bn.js\";\n\nimport { wrappedI80F48toBigNumber } from \"~/utils\";\n\nimport { DEFAULT_ORACLE_MAX_AGE } from \"~/constants\";\nimport { MarginfiIdlType } from \"~/idl\";\nimport { AccountType } from \"~/types\";\n\nimport {\n AssetTag,\n BankConfigRaw,\n BankConfigType,\n BankRaw,\n BankType,\n EmodeEntryFlags,\n EmodeFlags,\n EmodeSettingsType,\n EmodeTag,\n InterestRateConfig,\n OperationalState,\n OperationalStateRaw,\n OracleSetup,\n OracleSetupRaw,\n RiskTier,\n RiskTierRaw,\n BankConfigDto,\n BankTypeDto,\n EmodeSettingsDto,\n InterestRateConfigDto,\n BankRawDto,\n EmodeSettingsRaw,\n EmodeSettingsRawDto,\n BankConfigRawDto,\n} from \"../types\";\n\n/*\n * Bank deserialization\n */\n\nexport function decodeBankRaw(encoded: Buffer, idl: MarginfiIdlType): BankRaw {\n const coder = new BorshCoder(idl);\n return coder.accounts.decode(AccountType.Bank, encoded);\n}\n\nexport function parseEmodeSettingsRaw(emodeSettingsRaw: EmodeSettingsRaw): EmodeSettingsType {\n const emodeTag = parseEmodeTag(emodeSettingsRaw.emodeTag);\n const timestamp = emodeSettingsRaw.timestamp.toNumber();\n const flags = getActiveEmodeFlags(emodeSettingsRaw.flags);\n const emodeEntries = emodeSettingsRaw.emodeConfig.entries\n .filter((entry) => entry.collateralBankEmodeTag !== 0)\n .map((entry) => {\n return {\n collateralBankEmodeTag: parseEmodeTag(entry.collateralBankEmodeTag),\n flags: getActiveEmodeEntryFlags(entry.flags),\n assetWeightInit: wrappedI80F48toBigNumber(entry.assetWeightInit),\n assetWeightMaint: wrappedI80F48toBigNumber(entry.assetWeightMaint),\n };\n });\n\n const emodeSettings: EmodeSettingsType = {\n emodeTag,\n timestamp,\n flags,\n emodeEntries,\n };\n\n return emodeSettings;\n}\n\ninterface BankMetadata {\n tokenAddress: string;\n tokenName: string;\n tokenSymbol: string;\n}\n\nexport function parseBankRaw(\n address: PublicKey,\n accountParsed: BankRaw,\n bankMetadata?: BankMetadata,\n mintData?: {\n mintRate: number | null;\n mintPrice: number;\n }\n): BankType {\n const flags = accountParsed.flags.toNumber();\n\n const mint = accountParsed.mint;\n const mintDecimals = accountParsed.mintDecimals;\n const group = accountParsed.group;\n\n const assetShareValue = wrappedI80F48toBigNumber(accountParsed.assetShareValue);\n const liabilityShareValue = wrappedI80F48toBigNumber(accountParsed.liabilityShareValue);\n\n const liquidityVault = accountParsed.liquidityVault;\n const liquidityVaultBump = accountParsed.liquidityVaultBump;\n const liquidityVaultAuthorityBump = accountParsed.liquidityVaultAuthorityBump;\n\n const insuranceVault = accountParsed.insuranceVault;\n const insuranceVaultBump = accountParsed.insuranceVaultBump;\n const insuranceVaultAuthorityBump = accountParsed.insuranceVaultAuthorityBump;\n\n const collectedInsuranceFeesOutstanding = wrappedI80F48toBigNumber(\n accountParsed.collectedInsuranceFeesOutstanding\n );\n\n const feeVault = accountParsed.feeVault;\n const feeVaultBump = accountParsed.feeVaultBump;\n const feeVaultAuthorityBump = accountParsed.feeVaultAuthorityBump;\n\n const collectedGroupFeesOutstanding = wrappedI80F48toBigNumber(\n accountParsed.collectedGroupFeesOutstanding\n );\n\n const config = parseBankConfigRaw(accountParsed.config);\n\n const lastUpdate = accountParsed.lastUpdate.toNumber();\n\n const totalAssetShares = wrappedI80F48toBigNumber(accountParsed.totalAssetShares);\n const totalLiabilityShares = wrappedI80F48toBigNumber(accountParsed.totalLiabilityShares);\n\n const emissionsActiveBorrowing = (flags & 1) > 0;\n const emissionsActiveLending = (flags & 2) > 0;\n\n // @todo existence checks here should be temporary - remove once all banks have emission configs\n const emissionsRate = accountParsed.emissionsRate.toNumber();\n const emissionsMint = accountParsed.emissionsMint;\n const emissionsRemaining = accountParsed.emissionsRemaining\n ? wrappedI80F48toBigNumber(accountParsed.emissionsRemaining)\n : new BigNumber(0);\n\n const { oracleKey } = { oracleKey: config.oracleKeys[0]! };\n const emode = parseEmodeSettingsRaw(accountParsed.emode);\n\n const tokenSymbol = bankMetadata?.tokenSymbol;\n\n const feesDestinationAccount = accountParsed.feesDestinationAccount;\n const lendingPositionCount = accountParsed.lendingPositionCount\n ? new BigNumber(accountParsed.lendingPositionCount.toString())\n : new BigNumber(0);\n const borrowingPositionCount = accountParsed.borrowingPositionCount\n ? new BigNumber(accountParsed.borrowingPositionCount.toString())\n : new BigNumber(0);\n\n const kaminoReserve = accountParsed.kaminoReserve;\n const kaminoObligation = accountParsed.kaminoObligation;\n\n return {\n address,\n group,\n mint,\n mintDecimals,\n assetShareValue,\n liabilityShareValue,\n liquidityVault,\n liquidityVaultBump,\n liquidityVaultAuthorityBump,\n insuranceVault,\n insuranceVaultBump,\n insuranceVaultAuthorityBump,\n collectedInsuranceFeesOutstanding,\n feeVault,\n feeVaultBump,\n feeVaultAuthorityBump,\n collectedGroupFeesOutstanding,\n lastUpdate,\n config,\n totalAssetShares,\n totalLiabilityShares,\n emissionsActiveBorrowing,\n emissionsActiveLending,\n emissionsRate,\n emissionsMint,\n emissionsRemaining,\n oracleKey,\n feesDestinationAccount,\n lendingPositionCount,\n borrowingPositionCount,\n emode,\n tokenSymbol,\n mintRate: mintData?.mintRate ?? null,\n mintPrice: mintData?.mintPrice ?? 0,\n kaminoReserve,\n kaminoObligation,\n };\n}\n\n/*\n * DTO Bank deserialization\n */\n\nexport function dtoToBank(bankDto: BankTypeDto): BankType {\n return {\n address: new PublicKey(bankDto.address),\n group: new PublicKey(bankDto.group),\n mint: new PublicKey(bankDto.mint),\n mintDecimals: bankDto.mintDecimals,\n assetShareValue: new BigNumber(bankDto.assetShareValue),\n liabilityShareValue: new BigNumber(bankDto.liabilityShareValue),\n liquidityVault: new PublicKey(bankDto.liquidityVault),\n liquidityVaultBump: bankDto.liquidityVaultBump,\n liquidityVaultAuthorityBump: bankDto.liquidityVaultAuthorityBump,\n insuranceVault: new PublicKey(bankDto.insuranceVault),\n insuranceVaultBump: bankDto.insuranceVaultBump,\n insuranceVaultAuthorityBump: bankDto.insuranceVaultAuthorityBump,\n collectedInsuranceFeesOutstanding: new BigNumber(bankDto.collectedInsuranceFeesOutstanding),\n feeVault: new PublicKey(bankDto.feeVault),\n feeVaultBump: bankDto.feeVaultBump,\n feeVaultAuthorityBump: bankDto.feeVaultAuthorityBump,\n collectedGroupFeesOutstanding: new BigNumber(bankDto.collectedGroupFeesOutstanding),\n lastUpdate: bankDto.lastUpdate,\n config: dtoToBankConfig(bankDto.config),\n totalAssetShares: new BigNumber(bankDto.totalAssetShares),\n totalLiabilityShares: new BigNumber(bankDto.totalLiabilityShares),\n emissionsActiveBorrowing: bankDto.emissionsActiveBorrowing,\n emissionsActiveLending: bankDto.emissionsActiveLending,\n emissionsRate: bankDto.emissionsRate,\n emissionsMint: new PublicKey(bankDto.emissionsMint),\n emissionsRemaining: new BigNumber(bankDto.emissionsRemaining),\n oracleKey: new PublicKey(bankDto.oracleKey),\n emode: dtoToEmodeSettings(bankDto.emode),\n tokenSymbol: bankDto.tokenSymbol,\n feesDestinationAccount: bankDto.feesDestinationAccount\n ? new PublicKey(bankDto.feesDestinationAccount)\n : undefined,\n lendingPositionCount: bankDto.lendingPositionCount\n ? new BigNumber(bankDto.lendingPositionCount)\n : undefined,\n borrowingPositionCount: bankDto.borrowingPositionCount\n ? new BigNumber(bankDto.borrowingPositionCount)\n : undefined,\n mintRate: null, // TODO: move these out\n mintPrice: 0,\n kaminoReserve: new PublicKey(bankDto.kaminoReserve),\n kaminoObligation: new PublicKey(bankDto.kaminoObligation),\n };\n}\n\nexport function dtoToEmodeSettings(emodeSettingsDto: EmodeSettingsDto): EmodeSettingsType {\n return {\n emodeTag: emodeSettingsDto.emodeTag,\n timestamp: emodeSettingsDto.timestamp,\n flags: emodeSettingsDto.flags,\n emodeEntries: emodeSettingsDto.emodeEntries.map((entry) => {\n return {\n collateralBankEmodeTag: entry.collateralBankEmodeTag,\n flags: entry.flags,\n assetWeightInit: new BigNumber(entry.assetWeightInit),\n assetWeightMaint: new BigNumber(entry.assetWeightMaint),\n };\n }),\n };\n}\n\nexport function dtoToBankConfig(bankConfigDto: BankConfigDto): BankConfigType {\n return {\n assetWeightInit: new BigNumber(bankConfigDto.assetWeightInit),\n assetWeightMaint: new BigNumber(bankConfigDto.assetWeightMaint),\n liabilityWeightInit: new BigNumber(bankConfigDto.liabilityWeightInit),\n liabilityWeightMaint: new BigNumber(bankConfigDto.liabilityWeightMaint),\n depositLimit: new BigNumber(bankConfigDto.depositLimit),\n borrowLimit: new BigNumber(bankConfigDto.borrowLimit),\n riskTier: bankConfigDto.riskTier,\n operationalState: bankConfigDto.operationalState,\n totalAssetValueInitLimit: new BigNumber(bankConfigDto.totalAssetValueInitLimit),\n assetTag: bankConfigDto.assetTag,\n configFlags: bankConfigDto.configFlags,\n oracleSetup: bankConfigDto.oracleSetup,\n oracleKeys: bankConfigDto.oracleKeys.map((key) => new PublicKey(key)),\n oracleMaxAge: bankConfigDto.oracleMaxAge,\n interestRateConfig: dtoToInterestRateConfig(bankConfigDto.interestRateConfig),\n oracleMaxConfidence: bankConfigDto.oracleMaxConfidence,\n fixedPrice: new BigNumber(bankConfigDto.fixedPrice),\n };\n}\n\nexport function dtoToInterestRateConfig(\n interestRateConfigDto: InterestRateConfigDto\n): InterestRateConfig {\n return {\n optimalUtilizationRate: new BigNumber(interestRateConfigDto.optimalUtilizationRate),\n plateauInterestRate: new BigNumber(interestRateConfigDto.plateauInterestRate),\n maxInterestRate: new BigNumber(interestRateConfigDto.maxInterestRate),\n insuranceFeeFixedApr: new BigNumber(interestRateConfigDto.insuranceFeeFixedApr),\n insuranceIrFee: new BigNumber(interestRateConfigDto.insuranceIrFee),\n protocolFixedFeeApr: new BigNumber(interestRateConfigDto.protocolFixedFeeApr),\n protocolIrFee: new BigNumber(interestRateConfigDto.protocolIrFee),\n protocolOriginationFee: new BigNumber(interestRateConfigDto.protocolOriginationFee),\n zeroUtilRate: interestRateConfigDto.zeroUtilRate,\n hundredUtilRate: interestRateConfigDto.hundredUtilRate,\n points: interestRateConfigDto.points,\n curveType: interestRateConfigDto.curveType,\n };\n}\n\nexport function dtoToBankRaw(bankDto: BankRawDto): BankRaw {\n return {\n group: new PublicKey(bankDto.group),\n mint: new PublicKey(bankDto.mint),\n mintDecimals: bankDto.mintDecimals,\n\n assetShareValue: bankDto.assetShareValue,\n liabilityShareValue: bankDto.liabilityShareValue,\n\n liquidityVault: new PublicKey(bankDto.liquidityVault),\n liquidityVaultBump: bankDto.liquidityVaultBump,\n liquidityVaultAuthorityBump: bankDto.liquidityVaultAuthorityBump,\n\n insuranceVault: new PublicKey(bankDto.insuranceVault),\n insuranceVaultBump: bankDto.insuranceVaultBump,\n insuranceVaultAuthorityBump: bankDto.insuranceVaultAuthorityBump,\n collectedInsuranceFeesOutstanding: bankDto.collectedInsuranceFeesOutstanding,\n\n feeVault: new PublicKey(bankDto.feeVault),\n feeVaultBump: bankDto.feeVaultBump,\n feeVaultAuthorityBump: bankDto.feeVaultAuthorityBump,\n collectedGroupFeesOutstanding: bankDto.collectedGroupFeesOutstanding,\n\n lastUpdate: new BN(bankDto.lastUpdate),\n\n config: dtoToBankConfigRaw(bankDto.config),\n\n totalAssetShares: bankDto.totalAssetShares,\n totalLiabilityShares: bankDto.totalLiabilityShares,\n\n flags: new BN(bankDto.flags),\n emissionsRate: new BN(bankDto.emissionsRate),\n emissionsRemaining: bankDto.emissionsRemaining,\n emissionsMint: new PublicKey(bankDto.emissionsMint),\n feesDestinationAccount: bankDto.feesDestinationAccount\n ? new PublicKey(bankDto.feesDestinationAccount)\n : undefined,\n lendingPositionCount: bankDto.lendingPositionCount\n ? Number(bankDto.lendingPositionCount)\n : undefined,\n borrowingPositionCount: bankDto.borrowingPositionCount\n ? Number(bankDto.borrowingPositionCount)\n : undefined,\n\n emode: dtoToEmodeSettingsRaw(bankDto.emode),\n kaminoReserve: new PublicKey(bankDto.kaminoReserve),\n kaminoObligation: new PublicKey(bankDto.kaminoObligation),\n };\n}\n\nexport function dtoToEmodeSettingsRaw(emodeSettingsDto: EmodeSettingsRawDto): EmodeSettingsRaw {\n return {\n emodeTag: emodeSettingsDto.emodeTag,\n timestamp: new BN(emodeSettingsDto.timestamp),\n flags: new BN(emodeSettingsDto.flags),\n emodeConfig: {\n entries: emodeSettingsDto.emodeConfig.entries.map((entry) => {\n return {\n collateralBankEmodeTag: entry.collateralBankEmodeTag,\n flags: entry.flags,\n assetWeightInit: entry.assetWeightInit,\n assetWeightMaint: entry.assetWeightMaint,\n };\n }),\n },\n };\n}\n\nexport function dtoToBankConfigRaw(bankConfigDto: BankConfigRawDto): BankConfigRaw {\n return {\n assetWeightInit: bankConfigDto.assetWeightInit,\n assetWeightMaint: bankConfigDto.assetWeightMaint,\n liabilityWeightInit: bankConfigDto.liabilityWeightInit,\n liabilityWeightMaint: bankConfigDto.liabilityWeightMaint,\n depositLimit: new BN(bankConfigDto.depositLimit),\n borrowLimit: new BN(bankConfigDto.borrowLimit),\n riskTier: bankConfigDto.riskTier,\n operationalState: bankConfigDto.operationalState,\n totalAssetValueInitLimit: new BN(bankConfigDto.totalAssetValueInitLimit),\n assetTag: bankConfigDto.assetTag,\n configFlags: bankConfigDto.configFlags,\n oracleSetup: bankConfigDto.oracleSetup,\n oracleKeys: bankConfigDto.oracleKeys.map((key: string) => new PublicKey(key)),\n oracleMaxAge: bankConfigDto.oracleMaxAge,\n interestRateConfig: bankConfigDto.interestRateConfig,\n oracleMaxConfidence: bankConfigDto.oracleMaxConfidence,\n fixedPrice: bankConfigDto.fixedPrice,\n };\n}\n\n/*\n * Bank config deserialization\n */\n\nexport function parseBankConfigRaw(bankConfigRaw: BankConfigRaw): BankConfigType {\n const assetWeightInit = wrappedI80F48toBigNumber(bankConfigRaw.assetWeightInit);\n const assetWeightMaint = wrappedI80F48toBigNumber(bankConfigRaw.assetWeightMaint);\n const liabilityWeightInit = wrappedI80F48toBigNumber(bankConfigRaw.liabilityWeightInit);\n const liabilityWeightMaint = wrappedI80F48toBigNumber(bankConfigRaw.liabilityWeightMaint);\n const depositLimit = BigNumber(bankConfigRaw.depositLimit.toString());\n const borrowLimit = BigNumber(bankConfigRaw.borrowLimit.toString());\n const riskTier = parseRiskTier(bankConfigRaw.riskTier);\n const operationalState = parseOperationalState(bankConfigRaw.operationalState);\n const totalAssetValueInitLimit = BigNumber(bankConfigRaw.totalAssetValueInitLimit.toString());\n const assetTag = bankConfigRaw.assetTag as AssetTag;\n const configFlags = bankConfigRaw.configFlags;\n const oracleSetup = parseOracleSetup(bankConfigRaw.oracleSetup);\n const oracleKeys = bankConfigRaw.oracleKeys;\n const oracleMaxAge =\n bankConfigRaw.oracleMaxAge === 0 ? DEFAULT_ORACLE_MAX_AGE : bankConfigRaw.oracleMaxAge;\n const interestRateConfig = {\n insuranceFeeFixedApr: wrappedI80F48toBigNumber(\n bankConfigRaw.interestRateConfig.insuranceFeeFixedApr\n ),\n maxInterestRate: wrappedI80F48toBigNumber(bankConfigRaw.interestRateConfig.maxInterestRate),\n insuranceIrFee: wrappedI80F48toBigNumber(bankConfigRaw.interestRateConfig.insuranceIrFee),\n optimalUtilizationRate: wrappedI80F48toBigNumber(\n bankConfigRaw.interestRateConfig.optimalUtilizationRate\n ),\n plateauInterestRate: wrappedI80F48toBigNumber(\n bankConfigRaw.interestRateConfig.plateauInterestRate\n ),\n protocolFixedFeeApr: wrappedI80F48toBigNumber(\n bankConfigRaw.interestRateConfig.protocolFixedFeeApr\n ),\n protocolIrFee: wrappedI80F48toBigNumber(bankConfigRaw.interestRateConfig.protocolIrFee),\n protocolOriginationFee: wrappedI80F48toBigNumber(\n bankConfigRaw.interestRateConfig.protocolOriginationFee\n ),\n zeroUtilRate: bankConfigRaw.interestRateConfig.zeroUtilRate,\n hundredUtilRate: bankConfigRaw.interestRateConfig.hundredUtilRate,\n points: bankConfigRaw.interestRateConfig.points,\n curveType: bankConfigRaw.interestRateConfig.curveType,\n };\n const oracleMaxConfidence = bankConfigRaw.oracleMaxConfidence;\n const fixedPrice = wrappedI80F48toBigNumber(bankConfigRaw.fixedPrice);\n\n return {\n assetWeightInit,\n assetWeightMaint,\n liabilityWeightInit,\n liabilityWeightMaint,\n depositLimit,\n borrowLimit,\n riskTier,\n operationalState,\n totalAssetValueInitLimit,\n assetTag,\n configFlags,\n oracleSetup,\n oracleKeys,\n oracleMaxAge,\n interestRateConfig,\n oracleMaxConfidence,\n fixedPrice,\n };\n}\n\nexport function parseRiskTier(riskTierRaw: RiskTierRaw): RiskTier {\n switch (Object.keys(riskTierRaw)[0]!.toLowerCase()) {\n case \"collateral\":\n return RiskTier.Collateral;\n case \"isolated\":\n return RiskTier.Isolated;\n default:\n throw new Error(`Invalid risk tier \"${riskTierRaw}\"`);\n }\n}\n\nexport function parseOperationalState(operationalStateRaw: OperationalStateRaw): OperationalState {\n switch (Object.keys(operationalStateRaw)[0]!.toLowerCase()) {\n case \"paused\":\n return OperationalState.Paused;\n case \"operational\":\n return OperationalState.Operational;\n case \"reduceonly\":\n return OperationalState.ReduceOnly;\n default:\n throw new Error(`Invalid operational state \"${operationalStateRaw}\"`);\n }\n}\n\nexport function parseOracleSetup(oracleSetupRaw: OracleSetupRaw): OracleSetup {\n const oracleKey = Object.keys(oracleSetupRaw)[0]!.toLowerCase();\n switch (oracleKey) {\n case \"none\":\n return OracleSetup.None;\n case \"pythlegacy\":\n return OracleSetup.PythLegacy;\n case \"switchboardv2\":\n return OracleSetup.SwitchboardV2;\n case \"pythpushoracle\":\n return OracleSetup.PythPushOracle;\n case \"switchboardpull\":\n return OracleSetup.SwitchboardPull;\n case \"stakedwithpythpush\":\n return OracleSetup.StakedWithPythPush;\n case \"kaminopythpush\":\n return OracleSetup.KaminoPythPush;\n case \"kaminoswitchboardpull\":\n return OracleSetup.KaminoSwitchboardPull;\n case \"fixed\":\n return OracleSetup.Fixed;\n default:\n return OracleSetup.None;\n }\n}\n\n/**\n * Get all active EMode flags as an array of flag names\n */\nexport function getActiveEmodeFlags(flags: BN): EmodeFlags[] {\n const activeFlags: EmodeFlags[] = [];\n\n for (const flagName in EmodeFlags) {\n const flag = EmodeFlags[flagName];\n\n if (typeof flag === \"number\" && hasEmodeFlag(flags, flag)) {\n activeFlags.push(flag);\n }\n }\n\n return activeFlags;\n}\n\n/**\n * Check if a specific EMode flag is set\n */\nexport function hasEmodeFlag(flags: BN, flag: number): boolean {\n return !flags.and(new BN(flag)).isZero();\n}\n\n/**\n * Get all active EMode entry flags as an array of flag names\n */\nexport function getActiveEmodeEntryFlags(flags: number): EmodeEntryFlags[] {\n const activeFlags: EmodeEntryFlags[] = [];\n\n for (const flagName in EmodeEntryFlags) {\n const flag = EmodeEntryFlags[flagName];\n\n if (typeof flag === \"number\" && hasEmodeEntryFlag(flags, flag)) {\n activeFlags.push(flag);\n }\n }\n\n return activeFlags;\n}\n\n/**\n * Check if a specific EMode entry flag is set\n */\nexport function hasEmodeEntryFlag(flags: number, flag: number): boolean {\n return (flags & flag) === flag;\n}\n\n/**\n * Parse a raw EMode tag number into the corresponding EmodeTag enum value\n */\nexport function parseEmodeTag(emodeTagRaw: number): EmodeTag {\n switch (emodeTagRaw) {\n case 501:\n return EmodeTag.SOL;\n case 1571:\n return EmodeTag.LST_T1;\n case 1572:\n return EmodeTag.LST_T2;\n case 0:\n default:\n return EmodeTag.UNSET;\n }\n}\n","{\n \"address\": \"SBondMDrcV3K4kxZR1HNVT7osZxAHVHgYXL5Ze1oMUv\",\n \"metadata\": {\n \"name\": \"sb_on_demand\",\n \"version\": \"0.1.0\",\n \"spec\": \"0.1.0\",\n \"description\": \"Created with Anchor\"\n },\n \"instructions\": [\n {\n \"name\": \"guardian_quote_verify\",\n \"discriminator\": [168, 36, 93, 156, 157, 150, 148, 45],\n \"accounts\": [\n { \"name\": \"guardian\", \"writable\": true },\n { \"name\": \"oracle\", \"writable\": true },\n { \"name\": \"authority\", \"signer\": true, \"relations\": [\"oracle\"] },\n { \"name\": \"guardian_queue\", \"writable\": true, \"relations\": [\"state\"] },\n { \"name\": \"state\" },\n {\n \"name\": \"recent_slothashes\",\n \"address\": \"SysvarS1otHashes111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": { \"defined\": { \"name\": \"GuardianQuoteVerifyParams\" } }\n }\n ]\n },\n {\n \"name\": \"guardian_register\",\n \"discriminator\": [159, 76, 53, 117, 219, 29, 116, 135],\n \"accounts\": [\n { \"name\": \"oracle\", \"writable\": true },\n { \"name\": \"state\" },\n { \"name\": \"guardian_queue\", \"relations\": [\"state\"] },\n { \"name\": \"authority\", \"signer\": true, \"relations\": [\"state\"] }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": { \"defined\": { \"name\": \"GuardianRegisterParams\" } }\n }\n ]\n },\n {\n \"name\": \"guardian_unregister\",\n \"discriminator\": [215, 19, 61, 120, 155, 224, 120, 60],\n \"accounts\": [\n { \"name\": \"oracle\", \"writable\": true },\n { \"name\": \"state\" },\n { \"name\": \"guardian_queue\", \"writable\": true, \"relations\": [\"state\"] },\n { \"name\": \"authority\", \"signer\": true, \"relations\": [\"state\"] }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": { \"defined\": { \"name\": \"GuardianUnregisterParams\" } }\n }\n ]\n },\n {\n \"name\": \"oracle_heartbeat\",\n \"discriminator\": [10, 175, 217, 130, 111, 35, 117, 54],\n \"accounts\": [\n { \"name\": \"oracle\", \"writable\": true },\n {\n \"name\": \"oracle_stats\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [79, 114, 97, 99, 108, 101, 83, 116, 97, 116, 115]\n },\n { \"kind\": \"account\", \"path\": \"oracle\" }\n ]\n }\n },\n { \"name\": \"oracle_signer\", \"signer\": true },\n {\n \"name\": \"queue\",\n \"writable\": true,\n \"relations\": [\"oracle\", \"gc_node\"]\n },\n { \"name\": \"gc_node\", \"writable\": true },\n { \"name\": \"program_state\", \"writable\": true },\n { \"name\": \"payer\", \"writable\": true, \"signer\": true },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"native_mint\",\n \"address\": \"So11111111111111111111111111111111111111112\"\n },\n { \"name\": \"queue_escrow\", \"writable\": true },\n { \"name\": \"stake_program\" },\n { \"name\": \"delegation_pool\" },\n { \"name\": \"delegation_group\" }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": { \"defined\": { \"name\": \"OracleHeartbeatParams\" } }\n }\n ]\n },\n {\n \"name\": \"oracle_heartbeat_v2\",\n \"discriminator\": [122, 231, 66, 32, 226, 62, 144, 103],\n \"accounts\": [\n { \"name\": \"oracle\", \"writable\": true },\n {\n \"name\": \"oracle_stats\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [79, 114, 97, 99, 108, 101, 83, 116, 97, 116, 115]\n },\n { \"kind\": \"account\", \"path\": \"oracle\" }\n ]\n }\n },\n { \"name\": \"oracle_signer\", \"signer\": true },\n {\n \"name\": \"queue\",\n \"writable\": true,\n \"relations\": [\"oracle\", \"gc_node\"]\n },\n { \"name\": \"gc_node\", \"writable\": true },\n { \"name\": \"program_state\", \"writable\": true }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": { \"defined\": { \"name\": \"OracleHeartbeatV2Params\" } }\n }\n ]\n },\n {\n \"name\": \"oracle_init\",\n \"discriminator\": [21, 158, 66, 65, 60, 221, 148, 61],\n \"accounts\": [\n { \"name\": \"oracle\", \"writable\": true, \"signer\": true },\n {\n \"name\": \"oracle_stats\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [79, 114, 97, 99, 108, 101, 83, 116, 97, 116, 115]\n },\n { \"kind\": \"account\", \"path\": \"oracle\" }\n ]\n }\n },\n { \"name\": \"program_state\", \"writable\": true },\n { \"name\": \"payer\", \"writable\": true, \"signer\": true },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n { \"name\": \"lut_signer\" },\n { \"name\": \"lut\", \"writable\": true },\n {\n \"name\": \"address_lookup_table_program\",\n \"address\": \"AddressLookupTab1e1111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": { \"defined\": { \"name\": \"OracleInitParams\" } }\n }\n ]\n },\n {\n \"name\": \"oracle_init_svm\",\n \"discriminator\": [106, 20, 36, 117, 166, 175, 131, 83],\n \"accounts\": [\n {\n \"name\": \"oracle\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n { \"kind\": \"const\", \"value\": [79, 114, 97, 99, 108, 101] },\n { \"kind\": \"arg\", \"path\": \"params.queue\" },\n { \"kind\": \"arg\", \"path\": \"params.source_oracle_key\" }\n ]\n }\n },\n {\n \"name\": \"oracle_stats\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [79, 114, 97, 99, 108, 101, 83, 116, 97, 116, 115]\n },\n { \"kind\": \"account\", \"path\": \"oracle\" }\n ]\n }\n },\n { \"name\": \"program_state\", \"writable\": true },\n { \"name\": \"payer\", \"writable\": true, \"signer\": true },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n { \"name\": \"lut_signer\" },\n { \"name\": \"lut\", \"writable\": true },\n {\n \"name\": \"address_lookup_table_program\",\n \"address\": \"AddressLookupTab1e1111111111111111111111111\"\n },\n { \"name\": \"stake_program\" },\n { \"name\": \"stake_pool\" }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": { \"defined\": { \"name\": \"OracleInitSVMParams\" } }\n }\n ]\n },\n {\n \"name\": \"oracle_reset_lut\",\n \"discriminator\": [147, 244, 108, 198, 152, 219, 0, 22],\n \"accounts\": [\n { \"name\": \"oracle\", \"writable\": true },\n { \"name\": \"authority\", \"signer\": true, \"relations\": [\"oracle\"] },\n { \"name\": \"payer\", \"writable\": true, \"signer\": true },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n { \"name\": \"program_state\" },\n { \"name\": \"lut_signer\" },\n { \"name\": \"lut\", \"writable\": true },\n {\n \"name\": \"address_lookup_table_program\",\n \"address\": \"AddressLookupTab1e1111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": { \"defined\": { \"name\": \"OracleResetLutParams\" } }\n }\n ]\n },\n {\n \"name\": \"oracle_set_configs\",\n \"discriminator\": [129, 111, 223, 4, 191, 188, 70, 180],\n \"accounts\": [\n { \"name\": \"oracle\" },\n { \"name\": \"authority\", \"signer\": true, \"relations\": [\"oracle\"] }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": { \"defined\": { \"name\": \"OracleSetConfigsParams\" } }\n }\n ]\n },\n {\n \"name\": \"oracle_set_operator\",\n \"discriminator\": [210, 232, 155, 124, 69, 176, 242, 133],\n \"accounts\": [\n { \"name\": \"oracle\", \"writable\": true },\n { \"name\": \"authority\", \"signer\": true, \"relations\": [\"oracle\"] },\n { \"name\": \"operator\" }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": { \"defined\": { \"name\": \"OracleSetOperatorParams\" } }\n }\n ]\n },\n {\n \"name\": \"oracle_sync_lut\",\n \"discriminator\": [138, 99, 12, 59, 18, 170, 171, 45],\n \"accounts\": [\n { \"name\": \"oracle\" },\n { \"name\": \"queue\", \"relations\": [\"oracle\"] },\n { \"name\": \"ncn\" },\n { \"name\": \"vault\" },\n { \"name\": \"state\" },\n { \"name\": \"authority\", \"signer\": true, \"relations\": [\"oracle\"] },\n { \"name\": \"operator\", \"relations\": [\"oracle\"] },\n { \"name\": \"ncn_operator_state\" },\n { \"name\": \"operator_vault_ticket\" },\n { \"name\": \"vault_operator_delegation\" },\n { \"name\": \"lut_signer\" },\n { \"name\": \"lut\", \"writable\": true },\n {\n \"name\": \"address_lookup_table_program\",\n \"address\": \"AddressLookupTab1e1111111111111111111111111\"\n },\n { \"name\": \"payer\", \"signer\": true },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": { \"defined\": { \"name\": \"OracleSyncLutParams\" } }\n }\n ]\n },\n {\n \"name\": \"permission_set\",\n \"discriminator\": [211, 122, 185, 120, 129, 182, 55, 103],\n \"accounts\": [\n { \"name\": \"authority\", \"signer\": true },\n { \"name\": \"granter\" }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": { \"defined\": { \"name\": \"PermissionSetParams\" } }\n }\n ]\n },\n {\n \"name\": \"pull_feed_close\",\n \"discriminator\": [19, 134, 50, 142, 177, 215, 196, 83],\n \"accounts\": [\n { \"name\": \"pull_feed\", \"writable\": true },\n { \"name\": \"reward_escrow\", \"writable\": true },\n { \"name\": \"lut\", \"writable\": true },\n { \"name\": \"lut_signer\" },\n { \"name\": \"payer\", \"writable\": true, \"signer\": true },\n { \"name\": \"state\" },\n {\n \"name\": \"authority\",\n \"writable\": true,\n \"signer\": true,\n \"relations\": [\"pull_feed\"]\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"associated_token_program\",\n \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"address_lookup_table_program\",\n \"address\": \"AddressLookupTab1e1111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": { \"defined\": { \"name\": \"PullFeedCloseParams\" } }\n }\n ]\n },\n {\n \"name\": \"pull_feed_init\",\n \"discriminator\": [198, 130, 53, 198, 235, 61, 143, 40],\n \"accounts\": [\n { \"name\": \"pull_feed\", \"writable\": true, \"signer\": true },\n { \"name\": \"queue\" },\n { \"name\": \"authority\" },\n { \"name\": \"payer\", \"writable\": true, \"signer\": true },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n { \"name\": \"program_state\" },\n {\n \"name\": \"reward_escrow\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n { \"kind\": \"account\", \"path\": \"pull_feed\" },\n {\n \"kind\": \"const\",\n \"value\": [\n 6, 221, 246, 225, 215, 101, 161, 147, 217, 203, 225, 70, 206,\n 235, 121, 172, 28, 180, 133, 237, 95, 91, 55, 145, 58, 140,\n 245, 133, 126, 255, 0, 169\n ]\n },\n { \"kind\": \"account\", \"path\": \"wrapped_sol_mint\" }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140, 151, 37, 143, 78, 36, 137, 241, 187, 61, 16, 41, 20, 142,\n 13, 131, 11, 90, 19, 153, 218, 255, 16, 132, 4, 142, 123, 216,\n 219, 233, 248, 89\n ]\n }\n }\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"associated_token_program\",\n \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n },\n {\n \"name\": \"wrapped_sol_mint\",\n \"address\": \"So11111111111111111111111111111111111111112\"\n },\n { \"name\": \"lut_signer\" },\n { \"name\": \"lut\", \"writable\": true },\n {\n \"name\": \"address_lookup_table_program\",\n \"address\": \"AddressLookupTab1e1111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": { \"defined\": { \"name\": \"PullFeedInitParams\" } }\n }\n ]\n },\n {\n \"name\": \"pull_feed_set_configs\",\n \"discriminator\": [217, 45, 11, 246, 64, 26, 82, 168],\n \"accounts\": [\n { \"name\": \"pull_feed\", \"writable\": true },\n { \"name\": \"authority\", \"signer\": true, \"relations\": [\"pull_feed\"] }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": { \"defined\": { \"name\": \"PullFeedSetConfigsParams\" } }\n }\n ]\n },\n {\n \"name\": \"pull_feed_submit_response\",\n \"discriminator\": [150, 22, 215, 166, 143, 93, 48, 137],\n \"accounts\": [\n { \"name\": \"feed\", \"writable\": true },\n { \"name\": \"queue\", \"relations\": [\"feed\"] },\n { \"name\": \"program_state\" },\n {\n \"name\": \"recent_slothashes\",\n \"address\": \"SysvarS1otHashes111111111111111111111111111\"\n },\n { \"name\": \"payer\", \"writable\": true, \"signer\": true },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n { \"name\": \"reward_vault\", \"writable\": true },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"token_mint\",\n \"address\": \"So11111111111111111111111111111111111111112\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": { \"defined\": { \"name\": \"PullFeedSubmitResponseParams\" } }\n }\n ]\n },\n {\n \"name\": \"pull_feed_submit_response_consensus\",\n \"discriminator\": [239, 124, 39, 184, 147, 222, 16, 248],\n \"accounts\": [\n { \"name\": \"queue\" },\n { \"name\": \"program_state\" },\n {\n \"name\": \"recent_slothashes\",\n \"address\": \"SysvarS1otHashes111111111111111111111111111\"\n },\n { \"name\": \"payer\", \"writable\": true, \"signer\": true },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n { \"name\": \"reward_vault\", \"writable\": true },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"token_mint\",\n \"address\": \"So11111111111111111111111111111111111111112\"\n },\n {\n \"name\": \"ix_sysvar\",\n \"address\": \"Sysvar1nstructions1111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": { \"name\": \"PullFeedSubmitResponseConsensusParams\" }\n }\n }\n ]\n },\n {\n \"name\": \"pull_feed_submit_response_consensus_light\",\n \"discriminator\": [178, 179, 88, 144, 175, 130, 157, 87],\n \"accounts\": [\n { \"name\": \"queue\" },\n { \"name\": \"program_state\" },\n {\n \"name\": \"recent_slothashes\",\n \"address\": \"SysvarS1otHashes111111111111111111111111111\"\n },\n {\n \"name\": \"ix_sysvar\",\n \"address\": \"Sysvar1nstructions1111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": { \"name\": \"PullFeedSubmitResponseConsensusLightParams\" }\n }\n }\n ]\n },\n {\n \"name\": \"pull_feed_submit_response_many\",\n \"discriminator\": [47, 156, 45, 25, 200, 71, 37, 215],\n \"accounts\": [\n { \"name\": \"queue\" },\n { \"name\": \"program_state\" },\n {\n \"name\": \"recent_slothashes\",\n \"address\": \"SysvarS1otHashes111111111111111111111111111\"\n },\n { \"name\": \"payer\", \"writable\": true, \"signer\": true },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n { \"name\": \"reward_vault\", \"writable\": true },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"token_mint\",\n \"address\": \"So11111111111111111111111111111111111111112\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": { \"defined\": { \"name\": \"PullFeedSubmitResponseManyParams\" } }\n }\n ]\n },\n {\n \"name\": \"pull_feed_submit_response_svm\",\n \"discriminator\": [123, 7, 190, 12, 220, 230, 198, 148],\n \"accounts\": [\n { \"name\": \"feed\", \"writable\": true },\n {\n \"name\": \"queue\",\n \"pda\": {\n \"seeds\": [\n { \"kind\": \"const\", \"value\": [81, 117, 101, 117, 101] },\n { \"kind\": \"arg\", \"path\": \"params.source_queue_key\" }\n ]\n },\n \"relations\": [\"feed\"]\n },\n { \"name\": \"program_state\" },\n {\n \"name\": \"recent_slothashes\",\n \"address\": \"SysvarS1otHashes111111111111111111111111111\"\n },\n { \"name\": \"payer\", \"writable\": true, \"signer\": true },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n { \"name\": \"reward_vault\", \"writable\": true },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"token_mint\",\n \"address\": \"So11111111111111111111111111111111111111112\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": { \"defined\": { \"name\": \"PullFeedSubmitResponseSVMParams\" } }\n }\n ]\n },\n {\n \"name\": \"queue_add_mr_enclave\",\n \"discriminator\": [199, 255, 81, 50, 60, 133, 171, 138],\n \"accounts\": [\n { \"name\": \"queue\", \"writable\": true },\n { \"name\": \"authority\", \"signer\": true },\n { \"name\": \"program_authority\" },\n { \"name\": \"state\" }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": { \"defined\": { \"name\": \"QueueAddMrEnclaveParams\" } }\n }\n ]\n },\n {\n \"name\": \"queue_allow_subsidies\",\n \"discriminator\": [94, 203, 82, 157, 188, 138, 202, 108],\n \"accounts\": [\n { \"name\": \"queue\", \"writable\": true },\n { \"name\": \"authority\", \"signer\": true, \"relations\": [\"state\"] },\n { \"name\": \"state\", \"writable\": true }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": { \"defined\": { \"name\": \"QueueAllowSubsidiesParams\" } }\n }\n ]\n },\n {\n \"name\": \"queue_garbage_collect\",\n \"discriminator\": [187, 208, 104, 247, 16, 91, 96, 98],\n \"accounts\": [\n { \"name\": \"queue\", \"writable\": true },\n { \"name\": \"oracle\", \"writable\": true },\n { \"name\": \"authority\", \"signer\": true },\n { \"name\": \"state\" }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": { \"defined\": { \"name\": \"QueueGarbageCollectParams\" } }\n }\n ]\n },\n {\n \"name\": \"queue_init\",\n \"discriminator\": [144, 18, 99, 145, 133, 27, 207, 13],\n \"accounts\": [\n { \"name\": \"queue\", \"writable\": true, \"signer\": true },\n {\n \"name\": \"queue_escrow\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n { \"kind\": \"account\", \"path\": \"queue\" },\n {\n \"kind\": \"const\",\n \"value\": [\n 6, 221, 246, 225, 215, 101, 161, 147, 217, 203, 225, 70, 206,\n 235, 121, 172, 28, 180, 133, 237, 95, 91, 55, 145, 58, 140,\n 245, 133, 126, 255, 0, 169\n ]\n },\n { \"kind\": \"account\", \"path\": \"native_mint\" }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140, 151, 37, 143, 78, 36, 137, 241, 187, 61, 16, 41, 20, 142,\n 13, 131, 11, 90, 19, 153, 218, 255, 16, 132, 4, 142, 123, 216,\n 219, 233, 248, 89\n ]\n }\n }\n },\n { \"name\": \"authority\" },\n { \"name\": \"payer\", \"writable\": true, \"signer\": true },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"native_mint\",\n \"address\": \"So11111111111111111111111111111111111111112\"\n },\n { \"name\": \"program_state\" },\n { \"name\": \"lut_signer\", \"writable\": true },\n { \"name\": \"lut\", \"writable\": true },\n {\n \"name\": \"address_lookup_table_program\",\n \"address\": \"AddressLookupTab1e1111111111111111111111111\"\n },\n {\n \"name\": \"associated_token_program\",\n \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": { \"defined\": { \"name\": \"QueueInitParams\" } }\n }\n ]\n },\n {\n \"name\": \"queue_init_svm\",\n \"discriminator\": [175, 94, 119, 151, 45, 144, 173, 235],\n \"accounts\": [\n {\n \"name\": \"queue\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n { \"kind\": \"const\", \"value\": [81, 117, 101, 117, 101] },\n { \"kind\": \"arg\", \"path\": \"params.source_queue_key\" }\n ]\n }\n },\n {\n \"name\": \"queue_escrow\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n { \"kind\": \"account\", \"path\": \"queue\" },\n {\n \"kind\": \"const\",\n \"value\": [\n 6, 221, 246, 225, 215, 101, 161, 147, 217, 203, 225, 70, 206,\n 235, 121, 172, 28, 180, 133, 237, 95, 91, 55, 145, 58, 140,\n 245, 133, 126, 255, 0, 169\n ]\n },\n { \"kind\": \"account\", \"path\": \"native_mint\" }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140, 151, 37, 143, 78, 36, 137, 241, 187, 61, 16, 41, 20, 142,\n 13, 131, 11, 90, 19, 153, 218, 255, 16, 132, 4, 142, 123, 216,\n 219, 233, 248, 89\n ]\n }\n }\n },\n { \"name\": \"authority\" },\n { \"name\": \"payer\", \"writable\": true, \"signer\": true },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"native_mint\",\n \"address\": \"So11111111111111111111111111111111111111112\"\n },\n { \"name\": \"program_state\" },\n { \"name\": \"lut_signer\", \"writable\": true },\n { \"name\": \"lut\", \"writable\": true },\n {\n \"name\": \"address_lookup_table_program\",\n \"address\": \"AddressLookupTab1e1111111111111111111111111\"\n },\n {\n \"name\": \"associated_token_program\",\n \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": { \"defined\": { \"name\": \"QueueInitSVMParams\" } }\n }\n ]\n },\n {\n \"name\": \"queue_override_svm\",\n \"discriminator\": [43, 103, 15, 35, 89, 14, 244, 165],\n \"accounts\": [\n { \"name\": \"oracle\", \"writable\": true },\n { \"name\": \"queue\", \"writable\": true },\n { \"name\": \"authority\", \"signer\": true },\n { \"name\": \"state\" }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": { \"defined\": { \"name\": \"QueueOverrideSVMParams\" } }\n }\n ]\n },\n {\n \"name\": \"queue_pay_subsidy\",\n \"discriminator\": [85, 84, 51, 251, 144, 57, 105, 200],\n \"accounts\": [\n { \"name\": \"queue\", \"writable\": true },\n { \"name\": \"program_state\" },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n { \"name\": \"vault\" },\n {\n \"name\": \"reward_vault\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n { \"kind\": \"account\", \"path\": \"vault\" },\n {\n \"kind\": \"const\",\n \"value\": [\n 6, 221, 246, 225, 215, 101, 161, 147, 217, 203, 225, 70, 206,\n 235, 121, 172, 28, 180, 133, 237, 95, 91, 55, 145, 58, 140,\n 245, 133, 126, 255, 0, 169\n ]\n },\n { \"kind\": \"account\", \"path\": \"switch_mint\" }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140, 151, 37, 143, 78, 36, 137, 241, 187, 61, 16, 41, 20, 142,\n 13, 131, 11, 90, 19, 153, 218, 255, 16, 132, 4, 142, 123, 216,\n 219, 233, 248, 89\n ]\n }\n }\n },\n {\n \"name\": \"subsidy_vault\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n { \"kind\": \"account\", \"path\": \"program_state\" },\n {\n \"kind\": \"const\",\n \"value\": [\n 6, 221, 246, 225, 215, 101, 161, 147, 217, 203, 225, 70, 206,\n 235, 121, 172, 28, 180, 133, 237, 95, 91, 55, 145, 58, 140,\n 245, 133, 126, 255, 0, 169\n ]\n },\n { \"kind\": \"account\", \"path\": \"switch_mint\" }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140, 151, 37, 143, 78, 36, 137, 241, 187, 61, 16, 41, 20, 142,\n 13, 131, 11, 90, 19, 153, 218, 255, 16, 132, 4, 142, 123, 216,\n 219, 233, 248, 89\n ]\n }\n }\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"associated_token_program\",\n \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n },\n {\n \"name\": \"wsol_mint\",\n \"address\": \"So11111111111111111111111111111111111111112\"\n },\n { \"name\": \"switch_mint\" },\n { \"name\": \"vault_config\" },\n { \"name\": \"payer\", \"writable\": true, \"signer\": true }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": { \"defined\": { \"name\": \"QueuePaySubsidyParams\" } }\n }\n ]\n },\n {\n \"name\": \"queue_remove_mr_enclave\",\n \"discriminator\": [3, 64, 135, 33, 190, 133, 68, 252],\n \"accounts\": [\n { \"name\": \"queue\", \"writable\": true },\n { \"name\": \"authority\", \"signer\": true },\n { \"name\": \"program_authority\" },\n { \"name\": \"state\" }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": { \"defined\": { \"name\": \"QueueRemoveMrEnclaveParams\" } }\n }\n ]\n },\n {\n \"name\": \"queue_reset_vault\",\n \"discriminator\": [232, 255, 48, 111, 240, 168, 253, 40],\n \"accounts\": [\n { \"name\": \"queue\", \"writable\": true },\n { \"name\": \"authority\", \"signer\": true },\n { \"name\": \"state\" },\n { \"name\": \"ncn\", \"relations\": [\"queue\"] },\n { \"name\": \"vault\" }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": { \"defined\": { \"name\": \"QueueResetVaultParams\" } }\n }\n ]\n },\n {\n \"name\": \"queue_set_configs\",\n \"discriminator\": [54, 183, 243, 199, 49, 103, 142, 48],\n \"accounts\": [\n { \"name\": \"queue\", \"writable\": true },\n { \"name\": \"authority\", \"signer\": true },\n { \"name\": \"state\" }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": { \"defined\": { \"name\": \"QueueSetConfigsParams\" } }\n }\n ]\n },\n {\n \"name\": \"queue_set_ncn\",\n \"discriminator\": [232, 223, 179, 12, 20, 136, 181, 219],\n \"accounts\": [\n { \"name\": \"queue\", \"writable\": true },\n { \"name\": \"authority\", \"signer\": true },\n { \"name\": \"state\" },\n { \"name\": \"ncn\" }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": { \"defined\": { \"name\": \"QueueSetNcnParams\" } }\n }\n ]\n },\n {\n \"name\": \"queue_set_vault\",\n \"discriminator\": [48, 47, 102, 99, 241, 249, 196, 246],\n \"accounts\": [\n { \"name\": \"queue\", \"writable\": true },\n { \"name\": \"authority\", \"signer\": true },\n { \"name\": \"state\" },\n { \"name\": \"ncn\", \"relations\": [\"queue\"] },\n { \"name\": \"vault\" }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": { \"defined\": { \"name\": \"QueueSetVaultParams\" } }\n }\n ]\n },\n {\n \"name\": \"randomness_commit\",\n \"discriminator\": [52, 170, 152, 201, 179, 133, 242, 141],\n \"accounts\": [\n { \"name\": \"randomness\", \"writable\": true },\n { \"name\": \"queue\", \"relations\": [\"randomness\", \"oracle\"] },\n { \"name\": \"oracle\", \"writable\": true },\n {\n \"name\": \"recent_slothashes\",\n \"address\": \"SysvarS1otHashes111111111111111111111111111\"\n },\n { \"name\": \"authority\", \"signer\": true, \"relations\": [\"randomness\"] }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": { \"defined\": { \"name\": \"RandomnessCommitParams\" } }\n }\n ]\n },\n {\n \"name\": \"randomness_init\",\n \"discriminator\": [9, 9, 204, 33, 50, 116, 113, 15],\n \"accounts\": [\n { \"name\": \"randomness\", \"writable\": true, \"signer\": true },\n {\n \"name\": \"reward_escrow\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n { \"kind\": \"account\", \"path\": \"randomness\" },\n {\n \"kind\": \"const\",\n \"value\": [\n 6, 221, 246, 225, 215, 101, 161, 147, 217, 203, 225, 70, 206,\n 235, 121, 172, 28, 180, 133, 237, 95, 91, 55, 145, 58, 140,\n 245, 133, 126, 255, 0, 169\n ]\n },\n { \"kind\": \"account\", \"path\": \"wrapped_sol_mint\" }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140, 151, 37, 143, 78, 36, 137, 241, 187, 61, 16, 41, 20, 142,\n 13, 131, 11, 90, 19, 153, 218, 255, 16, 132, 4, 142, 123, 216,\n 219, 233, 248, 89\n ]\n }\n }\n },\n { \"name\": \"authority\", \"signer\": true },\n { \"name\": \"queue\", \"writable\": true },\n { \"name\": \"payer\", \"writable\": true, \"signer\": true },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"associated_token_program\",\n \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n },\n {\n \"name\": \"wrapped_sol_mint\",\n \"address\": \"So11111111111111111111111111111111111111112\"\n },\n { \"name\": \"program_state\" },\n { \"name\": \"lut_signer\" },\n { \"name\": \"lut\", \"writable\": true },\n {\n \"name\": \"address_lookup_table_program\",\n \"address\": \"AddressLookupTab1e1111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": { \"defined\": { \"name\": \"RandomnessInitParams\" } }\n }\n ]\n },\n {\n \"name\": \"randomness_reveal\",\n \"discriminator\": [197, 181, 187, 10, 30, 58, 20, 73],\n \"accounts\": [\n { \"name\": \"randomness\", \"writable\": true },\n { \"name\": \"oracle\", \"relations\": [\"randomness\"] },\n { \"name\": \"queue\", \"relations\": [\"oracle\"] },\n {\n \"name\": \"stats\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 79, 114, 97, 99, 108, 101, 82, 97, 110, 100, 111, 109, 110,\n 101, 115, 115, 83, 116, 97, 116, 115\n ]\n },\n { \"kind\": \"account\", \"path\": \"oracle\" }\n ]\n }\n },\n { \"name\": \"authority\", \"signer\": true, \"relations\": [\"randomness\"] },\n { \"name\": \"payer\", \"writable\": true, \"signer\": true },\n {\n \"name\": \"recent_slothashes\",\n \"address\": \"SysvarS1otHashes111111111111111111111111111\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n { \"name\": \"reward_escrow\", \"writable\": true },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"wrapped_sol_mint\",\n \"address\": \"So11111111111111111111111111111111111111112\"\n },\n { \"name\": \"program_state\" }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": { \"defined\": { \"name\": \"RandomnessRevealParams\" } }\n }\n ]\n },\n {\n \"name\": \"state_init\",\n \"discriminator\": [103, 241, 106, 190, 217, 153, 87, 105],\n \"accounts\": [\n {\n \"name\": \"state\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [{ \"kind\": \"const\", \"value\": [83, 84, 65, 84, 69] }]\n }\n },\n { \"name\": \"payer\", \"writable\": true, \"signer\": true },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": { \"defined\": { \"name\": \"StateInitParams\" } }\n }\n ]\n },\n {\n \"name\": \"state_set_configs\",\n \"discriminator\": [40, 98, 76, 37, 206, 9, 47, 144],\n \"accounts\": [\n { \"name\": \"state\", \"writable\": true },\n { \"name\": \"authority\", \"signer\": true, \"relations\": [\"state\"] },\n { \"name\": \"queue\", \"writable\": true },\n { \"name\": \"payer\", \"writable\": true, \"signer\": true },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": { \"defined\": { \"name\": \"StateSetConfigsParams\" } }\n }\n ]\n },\n {\n \"name\": \"test_update_oracle_stats\",\n \"discriminator\": [175, 48, 162, 252, 154, 197, 149, 187],\n \"accounts\": [\n {\n \"name\": \"oracle_stats\",\n \"docs\": [\"The OracleStats account to update.\"],\n \"writable\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": { \"defined\": { \"name\": \"TestUpdateOracleStatsParams\" } }\n }\n ]\n }\n ],\n \"accounts\": [\n {\n \"name\": \"OracleAccountData\",\n \"discriminator\": [128, 30, 16, 241, 170, 73, 55, 54]\n },\n {\n \"name\": \"OracleStatsAccountData\",\n \"discriminator\": [180, 157, 178, 234, 240, 27, 152, 179]\n },\n {\n \"name\": \"PullFeedAccountData\",\n \"discriminator\": [196, 27, 108, 196, 10, 215, 219, 40]\n },\n {\n \"name\": \"QueueAccountData\",\n \"discriminator\": [217, 194, 55, 127, 184, 83, 138, 1]\n },\n {\n \"name\": \"RandomnessAccountData\",\n \"discriminator\": [10, 66, 229, 135, 220, 239, 217, 114]\n },\n { \"name\": \"State\", \"discriminator\": [216, 146, 107, 94, 104, 75, 182, 177] }\n ],\n \"events\": [\n {\n \"name\": \"CostWhitelistEvent\",\n \"discriminator\": [56, 107, 191, 127, 116, 6, 138, 149]\n },\n {\n \"name\": \"GarbageCollectionEvent\",\n \"discriminator\": [232, 235, 2, 188, 8, 143, 145, 237]\n },\n {\n \"name\": \"GuardianQuoteVerifyEvent\",\n \"discriminator\": [31, 37, 39, 6, 214, 186, 33, 115]\n },\n {\n \"name\": \"OracleHeartbeatEvent\",\n \"discriminator\": [52, 29, 166, 2, 94, 7, 188, 13]\n },\n {\n \"name\": \"OracleInitEvent\",\n \"discriminator\": [89, 193, 219, 200, 1, 83, 167, 24]\n },\n {\n \"name\": \"OracleQuoteOverrideEvent\",\n \"discriminator\": [78, 204, 191, 210, 164, 196, 244, 65]\n },\n {\n \"name\": \"OracleQuoteRotateEvent\",\n \"discriminator\": [26, 189, 196, 192, 225, 127, 26, 228]\n },\n {\n \"name\": \"OracleQuoteVerifyRequestEvent\",\n \"discriminator\": [203, 209, 79, 0, 20, 71, 226, 202]\n },\n {\n \"name\": \"PermissionSetEvent\",\n \"discriminator\": [148, 86, 123, 0, 102, 20, 119, 206]\n },\n {\n \"name\": \"PullFeedErrorValueEvent\",\n \"discriminator\": [225, 80, 192, 95, 14, 12, 83, 192]\n },\n {\n \"name\": \"PullFeedValueEvents\",\n \"discriminator\": [86, 7, 231, 28, 122, 161, 117, 69]\n },\n {\n \"name\": \"QueueAddMrEnclaveEvent\",\n \"discriminator\": [170, 186, 175, 38, 216, 51, 69, 175]\n },\n {\n \"name\": \"QueueInitEvent\",\n \"discriminator\": [44, 137, 99, 227, 107, 8, 30, 105]\n },\n {\n \"name\": \"QueueRemoveMrEnclaveEvent\",\n \"discriminator\": [4, 105, 196, 60, 84, 122, 203, 196]\n },\n {\n \"name\": \"RandomnessCommitEvent\",\n \"discriminator\": [88, 60, 172, 90, 112, 10, 206, 147]\n }\n ],\n \"errors\": [\n { \"code\": 6000, \"name\": \"GenericError\" },\n { \"code\": 6001, \"name\": \"InvalidQuote\" },\n { \"code\": 6002, \"name\": \"InsufficientQueue\" },\n { \"code\": 6003, \"name\": \"QueueFull\" },\n { \"code\": 6004, \"name\": \"InvalidEnclaveSigner\" },\n { \"code\": 6005, \"name\": \"InvalidSigner\" },\n { \"code\": 6006, \"name\": \"MrEnclaveAlreadyExists\" },\n { \"code\": 6007, \"name\": \"MrEnclaveAtCapacity\" },\n { \"code\": 6008, \"name\": \"MrEnclaveDoesntExist\" },\n { \"code\": 6009, \"name\": \"PermissionDenied\" },\n { \"code\": 6010, \"name\": \"InvalidQueue\" },\n { \"code\": 6011, \"name\": \"IncorrectMrEnclave\" },\n { \"code\": 6012, \"name\": \"InvalidAuthority\" },\n { \"code\": 6013, \"name\": \"InvalidMrEnclave\" },\n { \"code\": 6014, \"name\": \"InvalidTimestamp\" },\n { \"code\": 6015, \"name\": \"InvalidOracleIdx\" },\n { \"code\": 6016, \"name\": \"InvalidSecpSignature\" },\n { \"code\": 6017, \"name\": \"InvalidGuardianQueue\" },\n { \"code\": 6018, \"name\": \"InvalidIndex\" },\n { \"code\": 6019, \"name\": \"InvalidOracleQueue\" },\n { \"code\": 6020, \"name\": \"InvalidPermission\" },\n { \"code\": 6021, \"name\": \"InvalidePermissionedAccount\" },\n { \"code\": 6022, \"name\": \"InvalidEpochRotate\" },\n { \"code\": 6023, \"name\": \"InvalidEpochFinalize\" },\n { \"code\": 6024, \"name\": \"InvalidEscrow\" },\n { \"code\": 6025, \"name\": \"IllegalOracle\" },\n { \"code\": 6026, \"name\": \"IllegalExecuteAttempt\" },\n { \"code\": 6027, \"name\": \"IllegalFeedValue\" },\n { \"code\": 6028, \"name\": \"InvalidOracleFeedStats\" },\n { \"code\": 6029, \"name\": \"InvalidStateAuthority\" },\n { \"code\": 6030, \"name\": \"NotEnoughSamples\" },\n { \"code\": 6031, \"name\": \"OracleIsVerified\" },\n { \"code\": 6032, \"name\": \"QueueIsEmpty\" },\n { \"code\": 6033, \"name\": \"SecpRecoverFailure\" },\n { \"code\": 6034, \"name\": \"StaleSample\" },\n { \"code\": 6035, \"name\": \"SwitchboardRandomnessTooOld\" },\n { \"code\": 6036, \"name\": \"EpochIdMismatch\" },\n { \"code\": 6037, \"name\": \"GuardianAlreadyVoted\" },\n { \"code\": 6038, \"name\": \"RandomnessNotRequested\" },\n { \"code\": 6039, \"name\": \"InvalidSlotNumber\" },\n { \"code\": 6040, \"name\": \"RandomnessOracleKeyExpired\" },\n { \"code\": 6041, \"name\": \"InvalidAdvisory\" },\n { \"code\": 6042, \"name\": \"InvalidOracleStats\" },\n { \"code\": 6043, \"name\": \"InvalidStakeProgram\" },\n { \"code\": 6044, \"name\": \"InvalidStakePool\" },\n { \"code\": 6045, \"name\": \"InvalidDelegationPool\" },\n { \"code\": 6046, \"name\": \"UnparsableAccount\" },\n { \"code\": 6047, \"name\": \"InvalidInstruction\" },\n { \"code\": 6048, \"name\": \"OracleAlreadyVerified\" },\n { \"code\": 6049, \"name\": \"GuardianNotVerified\" },\n { \"code\": 6050, \"name\": \"InvalidConstraint\" },\n { \"code\": 6051, \"name\": \"InvalidDelegationGroup\" },\n { \"code\": 6052, \"name\": \"OracleKeyNotFound\" },\n { \"code\": 6053, \"name\": \"GuardianReregisterAttempt\" },\n { \"code\": 6054, \"name\": \"InvalidManySubmissionCount\" },\n { \"code\": 6055, \"name\": \"MissingSecpIx\" },\n { \"code\": 6056, \"name\": \"ChecksumMismatch\" },\n { \"code\": 6057, \"name\": \"InvalidSubmissionFeedsCount\" },\n { \"code\": 6058, \"name\": \"InvalidSecpSignatureOraclesCount\" },\n { \"code\": 6059, \"name\": \"InvalidEthAddress\" },\n { \"code\": 6060, \"name\": \"NoLutKeysAdded\" },\n { \"code\": 6061, \"name\": \"InvalidVaultOperatorDelegation\" },\n { \"code\": 6062, \"name\": \"InvalidVaultTokenAccount\" },\n { \"code\": 6063, \"name\": \"InvalidRemainingAccounts\" },\n { \"code\": 6064, \"name\": \"SubsidiesNotAllowed\" },\n { \"code\": 6065, \"name\": \"MissingVod\" },\n { \"code\": 6066, \"name\": \"InvalidVodEpoch\" },\n { \"code\": 6067, \"name\": \"InvalidOracleSubsidyWallet\" },\n { \"code\": 6068, \"name\": \"InvalidOperator\" },\n { \"code\": 6069, \"name\": \"Max128SampleValue\" },\n { \"code\": 6070, \"name\": \"RewardAlreadyPaid\" }\n ],\n \"types\": [\n {\n \"name\": \"CompactResult\",\n \"serialization\": \"bytemuck\",\n \"repr\": { \"kind\": \"c\" },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"std_dev\",\n \"docs\": [\n \"The standard deviation of the submissions needed for quorom size\"\n ],\n \"type\": \"f32\"\n },\n {\n \"name\": \"mean\",\n \"docs\": [\"The mean of the submissions needed for quorom size\"],\n \"type\": \"f32\"\n },\n {\n \"name\": \"slot\",\n \"docs\": [\"The slot at which this value was signed.\"],\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"CostWhitelistEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n { \"name\": \"feeds\", \"type\": { \"vec\": \"pubkey\" } },\n { \"name\": \"oracles\", \"type\": { \"vec\": \"pubkey\" } },\n { \"name\": \"values\", \"type\": { \"vec\": { \"vec\": \"i128\" } } },\n { \"name\": \"reward\", \"type\": \"u32\" }\n ]\n }\n },\n {\n \"name\": \"CurrentResult\",\n \"serialization\": \"bytemuck\",\n \"repr\": { \"kind\": \"c\" },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"value\",\n \"docs\": [\n \"The median value of the submissions needed for quorom size\"\n ],\n \"type\": \"i128\"\n },\n {\n \"name\": \"std_dev\",\n \"docs\": [\n \"The standard deviation of the submissions needed for quorom size\"\n ],\n \"type\": \"i128\"\n },\n {\n \"name\": \"mean\",\n \"docs\": [\"The mean of the submissions needed for quorom size\"],\n \"type\": \"i128\"\n },\n {\n \"name\": \"range\",\n \"docs\": [\"The range of the submissions needed for quorom size\"],\n \"type\": \"i128\"\n },\n {\n \"name\": \"min_value\",\n \"docs\": [\n \"The minimum value of the submissions needed for quorom size\"\n ],\n \"type\": \"i128\"\n },\n {\n \"name\": \"max_value\",\n \"docs\": [\n \"The maximum value of the submissions needed for quorom size\"\n ],\n \"type\": \"i128\"\n },\n {\n \"name\": \"num_samples\",\n \"docs\": [\"The number of samples used to calculate this result\"],\n \"type\": \"u8\"\n },\n {\n \"name\": \"submission_idx\",\n \"docs\": [\n \"The index of the submission that was used to calculate this result\"\n ],\n \"type\": \"u8\"\n },\n { \"name\": \"padding1\", \"type\": { \"array\": [\"u8\", 6] } },\n {\n \"name\": \"slot\",\n \"docs\": [\"The slot at which this value was signed.\"],\n \"type\": \"u64\"\n },\n {\n \"name\": \"min_slot\",\n \"docs\": [\n \"The slot at which the first considered submission was made\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"max_slot\",\n \"docs\": [\n \"The slot at which the last considered submission was made\"\n ],\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"GarbageCollectionEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n { \"name\": \"oracle\", \"type\": \"pubkey\" },\n { \"name\": \"queue\", \"type\": \"pubkey\" }\n ]\n }\n },\n {\n \"name\": \"GuardianQuoteVerifyEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n { \"name\": \"quote\", \"type\": \"pubkey\" },\n { \"name\": \"queue\", \"type\": \"pubkey\" },\n { \"name\": \"oracle\", \"type\": \"pubkey\" }\n ]\n }\n },\n {\n \"name\": \"GuardianQuoteVerifyParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n { \"name\": \"timestamp\", \"type\": \"i64\" },\n { \"name\": \"mr_enclave\", \"type\": { \"array\": [\"u8\", 32] } },\n { \"name\": \"_reserved1\", \"type\": \"u32\" },\n { \"name\": \"ed25519_key\", \"type\": \"pubkey\" },\n { \"name\": \"secp256k1_key\", \"type\": { \"array\": [\"u8\", 64] } },\n { \"name\": \"slot\", \"type\": \"u64\" },\n { \"name\": \"signature\", \"type\": { \"array\": [\"u8\", 64] } },\n { \"name\": \"recovery_id\", \"type\": \"u8\" },\n { \"name\": \"advisories\", \"type\": { \"vec\": \"u32\" } }\n ]\n }\n },\n {\n \"name\": \"GuardianRegisterParams\",\n \"type\": { \"kind\": \"struct\", \"fields\": [] }\n },\n {\n \"name\": \"GuardianUnregisterParams\",\n \"type\": { \"kind\": \"struct\", \"fields\": [] }\n },\n {\n \"name\": \"MegaSlotInfo\",\n \"serialization\": \"bytemuck\",\n \"repr\": { \"kind\": \"c\" },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n { \"name\": \"reserved1\", \"type\": \"u64\" },\n { \"name\": \"slot_end\", \"type\": \"u64\" },\n { \"name\": \"perf_goal\", \"type\": \"i64\" },\n { \"name\": \"current_signature_count\", \"type\": \"i64\" }\n ]\n }\n },\n {\n \"name\": \"MultiSubmission\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n { \"name\": \"values\", \"type\": { \"vec\": \"i128\" } },\n { \"name\": \"signature\", \"type\": { \"array\": [\"u8\", 64] } },\n { \"name\": \"recovery_id\", \"type\": \"u8\" }\n ]\n }\n },\n {\n \"name\": \"OracleAccountData\",\n \"serialization\": \"bytemuck\",\n \"repr\": { \"kind\": \"c\" },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"enclave\",\n \"docs\": [\"Represents the state of the quote verifiers enclave.\"],\n \"type\": { \"defined\": { \"name\": \"Quote\" } }\n },\n {\n \"name\": \"authority\",\n \"docs\": [\n \"The authority of the EnclaveAccount which is permitted to make account changes.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"queue\",\n \"docs\": [\n \"Queue used for attestation to verify a MRENCLAVE measurement.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"created_at\",\n \"docs\": [\"The unix timestamp when the quote was created.\"],\n \"type\": \"i64\"\n },\n {\n \"name\": \"last_heartbeat\",\n \"docs\": [\"The last time the quote heartbeated on-chain.\"],\n \"type\": \"i64\"\n },\n { \"name\": \"secp_authority\", \"type\": { \"array\": [\"u8\", 64] } },\n {\n \"name\": \"gateway_uri\",\n \"docs\": [\"URI location of the verifier's gateway.\"],\n \"type\": { \"array\": [\"u8\", 64] }\n },\n { \"name\": \"permissions\", \"type\": \"u64\" },\n {\n \"name\": \"is_on_queue\",\n \"docs\": [\n \"Whether the quote is located on the AttestationQueues buffer.\"\n ],\n \"type\": \"u8\"\n },\n { \"name\": \"_padding1\", \"type\": { \"array\": [\"u8\", 7] } },\n { \"name\": \"lut_slot\", \"type\": \"u64\" },\n { \"name\": \"last_reward_epoch\", \"type\": \"u64\" },\n { \"name\": \"operator\", \"type\": \"pubkey\" },\n { \"name\": \"_ebuf3\", \"type\": { \"array\": [\"u8\", 16] } },\n { \"name\": \"_ebuf2\", \"type\": { \"array\": [\"u8\", 64] } },\n { \"name\": \"_ebuf1\", \"type\": { \"array\": [\"u8\", 1024] } }\n ]\n }\n },\n {\n \"name\": \"OracleEpochInfo\",\n \"serialization\": \"bytemuck\",\n \"repr\": { \"kind\": \"c\" },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n { \"name\": \"id\", \"type\": \"u64\" },\n { \"name\": \"reserved1\", \"type\": \"u64\" },\n { \"name\": \"_reserved\", \"type\": \"u64\" },\n { \"name\": \"slash_score\", \"type\": \"u64\" },\n { \"name\": \"reward_score\", \"type\": \"u64\" },\n { \"name\": \"stake_score\", \"type\": \"u64\" }\n ]\n }\n },\n {\n \"name\": \"OracleHeartbeatEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n { \"name\": \"oracle\", \"type\": \"pubkey\" },\n { \"name\": \"queue\", \"type\": \"pubkey\" }\n ]\n }\n },\n {\n \"name\": \"OracleHeartbeatParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"gateway_uri\",\n \"type\": { \"option\": { \"array\": [\"u8\", 64] } }\n }\n ]\n }\n },\n {\n \"name\": \"OracleHeartbeatV2Params\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"gateway_uri\",\n \"type\": { \"option\": { \"array\": [\"u8\", 64] } }\n }\n ]\n }\n },\n {\n \"name\": \"OracleInitEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [{ \"name\": \"oracle\", \"type\": \"pubkey\" }]\n }\n },\n {\n \"name\": \"OracleInitParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n { \"name\": \"recent_slot\", \"type\": \"u64\" },\n { \"name\": \"authority\", \"type\": \"pubkey\" },\n { \"name\": \"queue\", \"type\": \"pubkey\" },\n {\n \"name\": \"secp_authority\",\n \"type\": { \"option\": { \"array\": [\"u8\", 64] } }\n }\n ]\n }\n },\n {\n \"name\": \"OracleInitSVMParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n { \"name\": \"recent_slot\", \"type\": \"u64\" },\n { \"name\": \"authority\", \"type\": \"pubkey\" },\n { \"name\": \"queue\", \"type\": \"pubkey\" },\n {\n \"name\": \"secp_authority\",\n \"type\": { \"option\": { \"array\": [\"u8\", 64] } }\n },\n { \"name\": \"source_oracle_key\", \"type\": \"pubkey\" }\n ]\n }\n },\n {\n \"name\": \"OracleQuoteOverrideEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n { \"name\": \"oracle\", \"type\": \"pubkey\" },\n { \"name\": \"queue\", \"type\": \"pubkey\" }\n ]\n }\n },\n {\n \"name\": \"OracleQuoteRotateEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [{ \"name\": \"oracle\", \"type\": \"pubkey\" }]\n }\n },\n {\n \"name\": \"OracleQuoteVerifyRequestEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n { \"name\": \"quote\", \"type\": \"pubkey\" },\n { \"name\": \"oracle\", \"type\": \"pubkey\" }\n ]\n }\n },\n {\n \"name\": \"OracleResetLutParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [{ \"name\": \"recent_slot\", \"type\": \"u64\" }]\n }\n },\n {\n \"name\": \"OracleSetConfigsParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n { \"name\": \"new_authority\", \"type\": { \"option\": \"pubkey\" } },\n {\n \"name\": \"new_secp_authority\",\n \"type\": { \"option\": { \"array\": [\"u8\", 64] } }\n }\n ]\n }\n },\n {\n \"name\": \"OracleSetOperatorParams\",\n \"type\": { \"kind\": \"struct\", \"fields\": [] }\n },\n {\n \"name\": \"OracleStatsAccountData\",\n \"serialization\": \"bytemuck\",\n \"repr\": { \"kind\": \"c\" },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n { \"name\": \"owner\", \"type\": \"pubkey\" },\n { \"name\": \"oracle\", \"type\": \"pubkey\" },\n {\n \"name\": \"finalized_epoch\",\n \"docs\": [\n \"The last epoch that has completed. cleared after registered with the\",\n \"staking program.\"\n ],\n \"type\": { \"defined\": { \"name\": \"OracleEpochInfo\" } }\n },\n {\n \"name\": \"current_epoch\",\n \"docs\": [\n \"The current epoch info being used by the oracle. for stake. Will moved\",\n \"to finalized_epoch as soon as the epoch is over.\"\n ],\n \"type\": { \"defined\": { \"name\": \"OracleEpochInfo\" } }\n },\n {\n \"name\": \"mega_slot_info\",\n \"type\": { \"defined\": { \"name\": \"MegaSlotInfo\" } }\n },\n { \"name\": \"last_transfer_slot\", \"type\": \"u64\" },\n { \"name\": \"bump\", \"type\": \"u8\" },\n { \"name\": \"padding1\", \"type\": { \"array\": [\"u8\", 7] } },\n {\n \"name\": \"_ebuf\",\n \"docs\": [\"Reserved.\"],\n \"type\": { \"array\": [\"u8\", 1024] }\n }\n ]\n }\n },\n {\n \"name\": \"OracleSubmission\",\n \"serialization\": \"bytemuck\",\n \"repr\": { \"kind\": \"c\" },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"oracle\",\n \"docs\": [\"The public key of the oracle that submitted this value.\"],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"slot\",\n \"docs\": [\"The slot at which this value was signed.\"],\n \"type\": \"u64\"\n },\n {\n \"name\": \"landed_at\",\n \"docs\": [\"The slot at which this value was landed on chain.\"],\n \"type\": \"u64\"\n },\n {\n \"name\": \"value\",\n \"docs\": [\"The value that was submitted.\"],\n \"type\": \"i128\"\n }\n ]\n }\n },\n {\n \"name\": \"OracleSyncLutParams\",\n \"type\": { \"kind\": \"struct\", \"fields\": [] }\n },\n {\n \"name\": \"PermissionSetEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [{ \"name\": \"permission\", \"type\": \"pubkey\" }]\n }\n },\n {\n \"name\": \"PermissionSetParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n { \"name\": \"permission\", \"type\": \"u8\" },\n { \"name\": \"enable\", \"type\": \"bool\" }\n ]\n }\n },\n {\n \"name\": \"PullFeedAccountData\",\n \"docs\": [\"A representation of the data in a pull feed account.\"],\n \"serialization\": \"bytemuck\",\n \"repr\": { \"kind\": \"c\" },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"submissions\",\n \"docs\": [\"The oracle submissions for this feed.\"],\n \"type\": {\n \"array\": [{ \"defined\": { \"name\": \"OracleSubmission\" } }, 32]\n }\n },\n {\n \"name\": \"authority\",\n \"docs\": [\n \"The public key of the authority that can update the feed hash that\",\n \"this account will use for registering updates.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"queue\",\n \"docs\": [\n \"The public key of the queue which oracles must be bound to in order to\",\n \"submit data to this feed.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"feed_hash\",\n \"docs\": [\n \"SHA-256 hash of the job schema oracles will execute to produce data\",\n \"for this feed.\"\n ],\n \"type\": { \"array\": [\"u8\", 32] }\n },\n {\n \"name\": \"initialized_at\",\n \"docs\": [\"The slot at which this account was initialized.\"],\n \"type\": \"i64\"\n },\n { \"name\": \"permissions\", \"type\": \"u64\" },\n { \"name\": \"max_variance\", \"type\": \"u64\" },\n { \"name\": \"min_responses\", \"type\": \"u32\" },\n { \"name\": \"name\", \"type\": { \"array\": [\"u8\", 32] } },\n { \"name\": \"padding1\", \"type\": { \"array\": [\"u8\", 1] } },\n { \"name\": \"permit_write_by_authority\", \"type\": \"u8\" },\n { \"name\": \"historical_result_idx\", \"type\": \"u8\" },\n { \"name\": \"min_sample_size\", \"type\": \"u8\" },\n { \"name\": \"last_update_timestamp\", \"type\": \"i64\" },\n { \"name\": \"lut_slot\", \"type\": \"u64\" },\n { \"name\": \"_reserved1\", \"type\": { \"array\": [\"u8\", 32] } },\n {\n \"name\": \"result\",\n \"type\": { \"defined\": { \"name\": \"CurrentResult\" } }\n },\n { \"name\": \"max_staleness\", \"type\": \"u32\" },\n { \"name\": \"padding2\", \"type\": { \"array\": [\"u8\", 12] } },\n {\n \"name\": \"historical_results\",\n \"type\": {\n \"array\": [{ \"defined\": { \"name\": \"CompactResult\" } }, 32]\n }\n },\n { \"name\": \"_ebuf4\", \"type\": { \"array\": [\"u8\", 8] } },\n { \"name\": \"_ebuf3\", \"type\": { \"array\": [\"u8\", 24] } },\n { \"name\": \"submission_timestamps\", \"type\": { \"array\": [\"i64\", 32] } }\n ]\n }\n },\n {\n \"name\": \"PullFeedCloseParams\",\n \"type\": { \"kind\": \"struct\", \"fields\": [] }\n },\n {\n \"name\": \"PullFeedErrorValueEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n { \"name\": \"feed\", \"type\": \"pubkey\" },\n { \"name\": \"oracle\", \"type\": \"pubkey\" }\n ]\n }\n },\n {\n \"name\": \"PullFeedInitParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n { \"name\": \"feed_hash\", \"type\": { \"array\": [\"u8\", 32] } },\n { \"name\": \"max_variance\", \"type\": \"u64\" },\n { \"name\": \"min_responses\", \"type\": \"u32\" },\n { \"name\": \"name\", \"type\": { \"array\": [\"u8\", 32] } },\n { \"name\": \"recent_slot\", \"type\": \"u64\" },\n { \"name\": \"ipfs_hash\", \"type\": { \"array\": [\"u8\", 32] } },\n { \"name\": \"min_sample_size\", \"type\": \"u8\" },\n { \"name\": \"max_staleness\", \"type\": \"u32\" },\n { \"name\": \"permit_write_by_authority\", \"type\": { \"option\": \"bool\" } }\n ]\n }\n },\n {\n \"name\": \"PullFeedSetConfigsParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"feed_hash\",\n \"type\": { \"option\": { \"array\": [\"u8\", 32] } }\n },\n { \"name\": \"authority\", \"type\": { \"option\": \"pubkey\" } },\n { \"name\": \"max_variance\", \"type\": { \"option\": \"u64\" } },\n { \"name\": \"min_responses\", \"type\": { \"option\": \"u32\" } },\n { \"name\": \"name\", \"type\": { \"option\": { \"array\": [\"u8\", 32] } } },\n {\n \"name\": \"ipfs_hash\",\n \"type\": { \"option\": { \"array\": [\"u8\", 32] } }\n },\n { \"name\": \"min_sample_size\", \"type\": { \"option\": \"u8\" } },\n { \"name\": \"max_staleness\", \"type\": { \"option\": \"u32\" } },\n { \"name\": \"permit_write_by_authority\", \"type\": { \"option\": \"bool\" } }\n ]\n }\n },\n {\n \"name\": \"PullFeedSubmitResponseConsensusLightParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n { \"name\": \"slot\", \"type\": \"u64\" },\n { \"name\": \"values\", \"type\": { \"vec\": \"i128\" } }\n ]\n }\n },\n {\n \"name\": \"PullFeedSubmitResponseConsensusParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n { \"name\": \"slot\", \"type\": \"u64\" },\n { \"name\": \"values\", \"type\": { \"vec\": \"i128\" } }\n ]\n }\n },\n {\n \"name\": \"PullFeedSubmitResponseManyParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n { \"name\": \"slot\", \"type\": \"u64\" },\n {\n \"name\": \"submissions\",\n \"type\": { \"vec\": { \"defined\": { \"name\": \"MultiSubmission\" } } }\n }\n ]\n }\n },\n {\n \"name\": \"PullFeedSubmitResponseParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n { \"name\": \"slot\", \"type\": \"u64\" },\n {\n \"name\": \"submissions\",\n \"type\": {\n \"vec\": {\n \"defined\": {\n \"name\": \"sb_on_demand::actions::pull_feed::pull_feed_submit_response_action::Submission\"\n }\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"PullFeedSubmitResponseSVMParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n { \"name\": \"slot\", \"type\": \"u64\" },\n {\n \"name\": \"submissions\",\n \"type\": {\n \"vec\": {\n \"defined\": {\n \"name\": \"sb_on_demand::actions::pull_feed::pull_feed_submit_response_svm_action::Submission\"\n }\n }\n }\n },\n { \"name\": \"source_queue_key\", \"type\": \"pubkey\" },\n { \"name\": \"queue_bump\", \"type\": \"u8\" }\n ]\n }\n },\n {\n \"name\": \"PullFeedValueEvents\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n { \"name\": \"feeds\", \"type\": { \"vec\": \"pubkey\" } },\n { \"name\": \"oracles\", \"type\": { \"vec\": \"pubkey\" } },\n { \"name\": \"values\", \"type\": { \"vec\": { \"vec\": \"i128\" } } },\n { \"name\": \"reward\", \"type\": \"u32\" }\n ]\n }\n },\n {\n \"name\": \"QueueAccountData\",\n \"docs\": [\n \"An Queue represents a round-robin queue of oracle oracles who attest on-chain\",\n \"whether a Switchboard Function was executed within an enclave against an expected set of\",\n \"enclave measurements.\",\n \"\",\n \"For an oracle to join the queue, the oracle must first submit their enclave quote on-chain and\",\n \"wait for an existing oracle to attest their quote. If the oracle's quote matches an expected\",\n \"measurement within the queues mr_enclaves config, it is granted permissions and will start\",\n \"being assigned update requests.\"\n ],\n \"serialization\": \"bytemuck\",\n \"repr\": { \"kind\": \"c\" },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"authority\",\n \"docs\": [\n \"The address of the authority which is permitted to add/remove allowed enclave measurements.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"mr_enclaves\",\n \"docs\": [\"Allowed enclave measurements.\"],\n \"type\": { \"array\": [{ \"array\": [\"u8\", 32] }, 32] }\n },\n {\n \"name\": \"oracle_keys\",\n \"docs\": [\n \"The addresses of the quote oracles who have a valid\",\n \"verification status and have heartbeated on-chain recently.\"\n ],\n \"type\": { \"array\": [\"pubkey\", 128] }\n },\n {\n \"name\": \"max_quote_verification_age\",\n \"docs\": [\n \"The maximum allowable time until a EnclaveAccount needs to be re-verified on-chain.\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"last_heartbeat\",\n \"docs\": [\n \"The unix timestamp when the last quote oracle heartbeated on-chain.\"\n ],\n \"type\": \"i64\"\n },\n { \"name\": \"node_timeout\", \"type\": \"i64\" },\n {\n \"name\": \"oracle_min_stake\",\n \"docs\": [\n \"The minimum number of lamports a quote oracle needs to lock-up in order to heartbeat and verify other quotes.\"\n ],\n \"type\": \"u64\"\n },\n { \"name\": \"allow_authority_override_after\", \"type\": \"i64\" },\n {\n \"name\": \"mr_enclaves_len\",\n \"docs\": [\"The number of allowed enclave measurements.\"],\n \"type\": \"u32\"\n },\n {\n \"name\": \"oracle_keys_len\",\n \"docs\": [\n \"The length of valid quote oracles for the given attestation queue.\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"reward\",\n \"docs\": [\n \"The reward paid to quote oracles for attesting on-chain.\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"curr_idx\",\n \"docs\": [\n \"Incrementer used to track the current quote oracle permitted to run any available functions.\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"gc_idx\",\n \"docs\": [\n \"Incrementer used to garbage collect and remove stale quote oracles.\"\n ],\n \"type\": \"u32\"\n },\n { \"name\": \"require_authority_heartbeat_permission\", \"type\": \"u8\" },\n { \"name\": \"require_authority_verify_permission\", \"type\": \"u8\" },\n { \"name\": \"require_usage_permissions\", \"type\": \"u8\" },\n { \"name\": \"signer_bump\", \"type\": \"u8\" },\n { \"name\": \"mint\", \"type\": \"pubkey\" },\n { \"name\": \"lut_slot\", \"type\": \"u64\" },\n { \"name\": \"allow_subsidies\", \"type\": \"u8\" },\n { \"name\": \"_ebuf6\", \"type\": { \"array\": [\"u8\", 15] } },\n { \"name\": \"ncn\", \"type\": \"pubkey\" },\n { \"name\": \"_resrved\", \"type\": \"u64\" },\n {\n \"name\": \"vaults\",\n \"type\": { \"array\": [{ \"defined\": { \"name\": \"VaultInfo\" } }, 4] }\n },\n { \"name\": \"_ebuf4\", \"type\": { \"array\": [\"u8\", 32] } },\n { \"name\": \"_ebuf2\", \"type\": { \"array\": [\"u8\", 256] } },\n { \"name\": \"_ebuf1\", \"type\": { \"array\": [\"u8\", 512] } }\n ]\n }\n },\n {\n \"name\": \"QueueAddMrEnclaveEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n { \"name\": \"queue\", \"type\": \"pubkey\" },\n { \"name\": \"mr_enclave\", \"type\": { \"array\": [\"u8\", 32] } }\n ]\n }\n },\n {\n \"name\": \"QueueAddMrEnclaveParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [{ \"name\": \"mr_enclave\", \"type\": { \"array\": [\"u8\", 32] } }]\n }\n },\n {\n \"name\": \"QueueAllowSubsidiesParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [{ \"name\": \"allow_subsidies\", \"type\": \"u8\" }]\n }\n },\n {\n \"name\": \"QueueGarbageCollectParams\",\n \"type\": { \"kind\": \"struct\", \"fields\": [{ \"name\": \"idx\", \"type\": \"u32\" }] }\n },\n {\n \"name\": \"QueueInitEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [{ \"name\": \"queue\", \"type\": \"pubkey\" }]\n }\n },\n {\n \"name\": \"QueueInitParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n { \"name\": \"allow_authority_override_after\", \"type\": \"u32\" },\n { \"name\": \"require_authority_heartbeat_permission\", \"type\": \"bool\" },\n { \"name\": \"require_usage_permissions\", \"type\": \"bool\" },\n { \"name\": \"max_quote_verification_age\", \"type\": \"u32\" },\n { \"name\": \"reward\", \"type\": \"u32\" },\n { \"name\": \"node_timeout\", \"type\": \"u32\" },\n { \"name\": \"recent_slot\", \"type\": \"u64\" }\n ]\n }\n },\n {\n \"name\": \"QueueInitSVMParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n { \"name\": \"allow_authority_override_after\", \"type\": \"u32\" },\n { \"name\": \"require_authority_heartbeat_permission\", \"type\": \"bool\" },\n { \"name\": \"require_usage_permissions\", \"type\": \"bool\" },\n { \"name\": \"max_quote_verification_age\", \"type\": \"u32\" },\n { \"name\": \"reward\", \"type\": \"u32\" },\n { \"name\": \"node_timeout\", \"type\": \"u32\" },\n { \"name\": \"recent_slot\", \"type\": \"u64\" },\n { \"name\": \"source_queue_key\", \"type\": \"pubkey\" }\n ]\n }\n },\n {\n \"name\": \"QueueOverrideSVMParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n { \"name\": \"secp256k1_signer\", \"type\": { \"array\": [\"u8\", 64] } },\n { \"name\": \"max_quote_verification_age\", \"type\": \"i64\" },\n { \"name\": \"mr_enclave\", \"type\": { \"array\": [\"u8\", 32] } },\n { \"name\": \"slot\", \"type\": \"u64\" }\n ]\n }\n },\n {\n \"name\": \"QueuePaySubsidyParams\",\n \"type\": { \"kind\": \"struct\", \"fields\": [] }\n },\n {\n \"name\": \"QueueRemoveMrEnclaveEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n { \"name\": \"queue\", \"type\": \"pubkey\" },\n { \"name\": \"mr_enclave\", \"type\": { \"array\": [\"u8\", 32] } }\n ]\n }\n },\n {\n \"name\": \"QueueRemoveMrEnclaveParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [{ \"name\": \"mr_enclave\", \"type\": { \"array\": [\"u8\", 32] } }]\n }\n },\n {\n \"name\": \"QueueResetVaultParams\",\n \"type\": { \"kind\": \"struct\", \"fields\": [] }\n },\n {\n \"name\": \"QueueSetConfigsParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n { \"name\": \"authority\", \"type\": { \"option\": \"pubkey\" } },\n { \"name\": \"reward\", \"type\": { \"option\": \"u32\" } },\n { \"name\": \"node_timeout\", \"type\": { \"option\": \"i64\" } }\n ]\n }\n },\n { \"name\": \"QueueSetNcnParams\", \"type\": { \"kind\": \"struct\", \"fields\": [] } },\n {\n \"name\": \"QueueSetVaultParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [{ \"name\": \"enable\", \"type\": \"bool\" }]\n }\n },\n {\n \"name\": \"Quote\",\n \"serialization\": \"bytemuck\",\n \"repr\": { \"kind\": \"c\" },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"enclave_signer\",\n \"docs\": [\"The address of the signer generated within an enclave.\"],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"mr_enclave\",\n \"docs\": [\n \"The quotes MRENCLAVE measurement dictating the contents of the secure enclave.\"\n ],\n \"type\": { \"array\": [\"u8\", 32] }\n },\n {\n \"name\": \"verification_status\",\n \"docs\": [\"The VerificationStatus of the quote.\"],\n \"type\": \"u8\"\n },\n { \"name\": \"padding1\", \"type\": { \"array\": [\"u8\", 7] } },\n {\n \"name\": \"verification_timestamp\",\n \"docs\": [\"The unix timestamp when the quote was last verified.\"],\n \"type\": \"i64\"\n },\n {\n \"name\": \"valid_until\",\n \"docs\": [\n \"The unix timestamp when the quotes verification status expires.\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"quote_registry\",\n \"docs\": [\n \"The off-chain registry where the verifiers quote can be located.\"\n ],\n \"type\": { \"array\": [\"u8\", 32] }\n },\n {\n \"name\": \"registry_key\",\n \"docs\": [\n \"Key to lookup the buffer data on IPFS or an alternative decentralized storage solution.\"\n ],\n \"type\": { \"array\": [\"u8\", 64] }\n },\n {\n \"name\": \"secp256k1_signer\",\n \"docs\": [\n \"The secp256k1 public key of the enclave signer. Derived from the enclave_signer.\"\n ],\n \"type\": { \"array\": [\"u8\", 64] }\n },\n { \"name\": \"last_ed25519_signer\", \"type\": \"pubkey\" },\n { \"name\": \"last_secp256k1_signer\", \"type\": { \"array\": [\"u8\", 64] } },\n { \"name\": \"last_rotate_slot\", \"type\": \"u64\" },\n { \"name\": \"guardian_approvers\", \"type\": { \"array\": [\"pubkey\", 64] } },\n { \"name\": \"guardian_approvers_len\", \"type\": \"u8\" },\n { \"name\": \"padding2\", \"type\": { \"array\": [\"u8\", 7] } },\n { \"name\": \"staging_ed25519_signer\", \"type\": \"pubkey\" },\n {\n \"name\": \"staging_secp256k1_signer\",\n \"type\": { \"array\": [\"u8\", 64] }\n },\n { \"name\": \"eth_signer\", \"type\": { \"array\": [\"u8\", 20] } },\n {\n \"name\": \"_ebuf4\",\n \"docs\": [\"Reserved.\"],\n \"type\": { \"array\": [\"u8\", 12] }\n },\n { \"name\": \"_ebuf3\", \"type\": { \"array\": [\"u8\", 128] } },\n { \"name\": \"_ebuf2\", \"type\": { \"array\": [\"u8\", 256] } },\n { \"name\": \"_ebuf1\", \"type\": { \"array\": [\"u8\", 512] } }\n ]\n }\n },\n {\n \"name\": \"RandomnessAccountData\",\n \"serialization\": \"bytemuck\",\n \"repr\": { \"kind\": \"c\" },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n { \"name\": \"authority\", \"type\": \"pubkey\" },\n { \"name\": \"queue\", \"type\": \"pubkey\" },\n { \"name\": \"seed_slothash\", \"type\": { \"array\": [\"u8\", 32] } },\n { \"name\": \"seed_slot\", \"type\": \"u64\" },\n { \"name\": \"oracle\", \"type\": \"pubkey\" },\n { \"name\": \"reveal_slot\", \"type\": \"u64\" },\n { \"name\": \"value\", \"type\": { \"array\": [\"u8\", 32] } },\n { \"name\": \"lut_slot\", \"type\": \"u64\" },\n { \"name\": \"_ebuf3\", \"type\": { \"array\": [\"u8\", 24] } },\n { \"name\": \"_ebuf2\", \"type\": { \"array\": [\"u8\", 64] } },\n { \"name\": \"_ebuf1\", \"type\": { \"array\": [\"u8\", 128] } },\n {\n \"name\": \"active_secp256k1_signer\",\n \"type\": { \"array\": [\"u8\", 64] }\n },\n { \"name\": \"active_secp256k1_expiration\", \"type\": \"i64\" }\n ]\n }\n },\n {\n \"name\": \"RandomnessCommitEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n { \"name\": \"randomness_account\", \"type\": \"pubkey\" },\n { \"name\": \"oracle\", \"type\": \"pubkey\" },\n { \"name\": \"slot\", \"type\": \"u64\" },\n { \"name\": \"slothash\", \"type\": { \"array\": [\"u8\", 32] } }\n ]\n }\n },\n {\n \"name\": \"RandomnessCommitParams\",\n \"type\": { \"kind\": \"struct\", \"fields\": [] }\n },\n {\n \"name\": \"RandomnessInitParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [{ \"name\": \"recent_slot\", \"type\": \"u64\" }]\n }\n },\n {\n \"name\": \"RandomnessRevealParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n { \"name\": \"signature\", \"type\": { \"array\": [\"u8\", 64] } },\n { \"name\": \"recovery_id\", \"type\": \"u8\" },\n { \"name\": \"value\", \"type\": { \"array\": [\"u8\", 32] } }\n ]\n }\n },\n {\n \"name\": \"State\",\n \"serialization\": \"bytemuck\",\n \"repr\": { \"kind\": \"c\" },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n { \"name\": \"bump\", \"type\": \"u8\" },\n { \"name\": \"test_only_disable_mr_enclave_check\", \"type\": \"u8\" },\n { \"name\": \"enable_staking\", \"type\": \"u8\" },\n { \"name\": \"padding1\", \"type\": { \"array\": [\"u8\", 5] } },\n { \"name\": \"authority\", \"type\": \"pubkey\" },\n { \"name\": \"guardian_queue\", \"type\": \"pubkey\" },\n { \"name\": \"reserved1\", \"type\": \"u64\" },\n { \"name\": \"epoch_length\", \"type\": \"u64\" },\n { \"name\": \"reserved2\", \"type\": { \"array\": [\"u8\", 136] } },\n { \"name\": \"switch_mint\", \"type\": \"pubkey\" },\n { \"name\": \"sgx_advisories\", \"type\": { \"array\": [\"u16\", 32] } },\n { \"name\": \"advisories_len\", \"type\": \"u8\" },\n { \"name\": \"padding2\", \"type\": \"u8\" },\n { \"name\": \"flat_reward_cut_percentage\", \"type\": \"u8\" },\n { \"name\": \"enable_slashing\", \"type\": \"u8\" },\n { \"name\": \"padding3\", \"type\": \"u32\" },\n { \"name\": \"lut_slot\", \"type\": \"u64\" },\n { \"name\": \"base_reward\", \"type\": \"u32\" },\n { \"name\": \"padding4\", \"type\": { \"array\": [\"u8\", 4] } },\n { \"name\": \"subsidy_amount\", \"type\": \"u64\" },\n { \"name\": \"_ebuf6\", \"type\": { \"array\": [\"u8\", 16] } },\n { \"name\": \"_ebuf5\", \"type\": { \"array\": [\"u8\", 32] } },\n { \"name\": \"_ebuf4\", \"type\": { \"array\": [\"u8\", 64] } },\n { \"name\": \"_ebuf3\", \"type\": { \"array\": [\"u8\", 128] } },\n { \"name\": \"_ebuf2\", \"type\": { \"array\": [\"u8\", 512] } },\n {\n \"name\": \"cost_whitelist\",\n \"docs\": [\"Cost whitelist by authority\"],\n \"type\": { \"array\": [\"pubkey\", 32] }\n }\n ]\n }\n },\n { \"name\": \"StateInitParams\", \"type\": { \"kind\": \"struct\", \"fields\": [] } },\n {\n \"name\": \"StateSetConfigsParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n { \"name\": \"new_authority\", \"type\": \"pubkey\" },\n { \"name\": \"test_only_disable_mr_enclave_check\", \"type\": \"u8\" },\n { \"name\": \"add_advisory\", \"type\": \"u16\" },\n { \"name\": \"rm_advisory\", \"type\": \"u16\" },\n { \"name\": \"switch_mint\", \"type\": \"pubkey\" },\n { \"name\": \"subsidy_amount\", \"type\": \"u64\" },\n { \"name\": \"base_reward\", \"type\": \"u32\" },\n { \"name\": \"add_cost_wl\", \"type\": \"pubkey\" },\n { \"name\": \"rm_cost_wl\", \"type\": \"pubkey\" }\n ]\n }\n },\n {\n \"name\": \"TestUpdateOracleStatsParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [{ \"name\": \"new_reward_score\", \"type\": \"u64\" }]\n }\n },\n {\n \"name\": \"VaultInfo\",\n \"serialization\": \"bytemuck\",\n \"repr\": { \"kind\": \"c\" },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n { \"name\": \"vault_key\", \"type\": \"pubkey\" },\n { \"name\": \"last_reward_epoch\", \"type\": \"u64\" }\n ]\n }\n },\n {\n \"name\": \"sb_on_demand::actions::pull_feed::pull_feed_submit_response_action::Submission\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n { \"name\": \"value\", \"type\": \"i128\" },\n { \"name\": \"signature\", \"type\": { \"array\": [\"u8\", 64] } },\n { \"name\": \"recovery_id\", \"type\": \"u8\" },\n { \"name\": \"offset\", \"type\": \"u8\" }\n ]\n }\n },\n {\n \"name\": \"sb_on_demand::actions::pull_feed::pull_feed_submit_response_svm_action::Submission\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n { \"name\": \"value\", \"type\": \"i128\" },\n { \"name\": \"signature\", \"type\": { \"array\": [\"u8\", 64] } },\n { \"name\": \"recovery_id\", \"type\": \"u8\" }\n ]\n }\n }\n ]\n}\n","import { BN, BorshCoder, Idl, Program, Provider } from \"@coral-xyz/anchor\";\nimport SWB_ONDEMAND_IDL from \"./idl.json\";\nimport { PublicKey } from \"@solana/web3.js\";\n\nexport const SWITCHBOARD_ONDEMANDE_PRICE_PRECISION = 18;\n\nexport interface CurrentResult {\n value: BN;\n std_dev: BN;\n mean: BN;\n range: BN;\n min_value: BN;\n max_vaalue: BN;\n slot: BN;\n min_slot: BN;\n max_slot: BN;\n}\n\nexport interface OracleSubmission {\n oracle: PublicKey;\n slot: BN;\n value: BN;\n}\n\nexport interface PullFeedAccountData {\n submissions: OracleSubmission[];\n authority: PublicKey;\n queue: PublicKey;\n feed_hash: Buffer;\n initialized_at: BN;\n permissions: BN;\n max_variance: BN;\n min_responses: number;\n name: Buffer;\n sample_size: number;\n last_update_timestamp: BN;\n lut_slot: BN;\n result: CurrentResult;\n max_staleness: number;\n min_sample_size: number;\n}\n\nexport type CrossbarSimulatePayload = FeedResponse[];\n\nexport interface FeedResponse {\n feedHash: string;\n results: number[];\n}\n\nexport const switchboardAccountCoder = new BorshCoder(\n SWB_ONDEMAND_IDL as unknown as Idl\n);\nexport function getSwitchboardProgram(provider: Provider): Program {\n return new Program(SWB_ONDEMAND_IDL as unknown as Idl, provider);\n}\n\nexport function decodeSwitchboardPullFeedData(\n data: Buffer\n): PullFeedAccountData {\n const pullFeedDAta = switchboardAccountCoder.accounts.decode(\n \"PullFeedAccountData\",\n data\n ) as PullFeedAccountData;\n return pullFeedDAta;\n}\n","import BigNumber from \"bignumber.js\";\n\nexport interface PriceWithConfidence {\n price: BigNumber;\n confidence: BigNumber;\n lowestPrice: BigNumber;\n highestPrice: BigNumber;\n}\n\nexport interface OraclePrice {\n priceRealtime: PriceWithConfidence;\n priceWeighted: PriceWithConfidence;\n timestamp: BigNumber;\n switchboardData?: {\n queue: string;\n feedHash: string;\n maxVariance: string;\n minResponses: number;\n rawPrice: string;\n stdev: string;\n };\n}\n\nexport enum PriceBias {\n Lowest = 0,\n None = 1,\n Highest = 2,\n}\n\nexport interface PriceWithConfidenceDto {\n price: string;\n confidence: string;\n lowestPrice: string;\n highestPrice: string;\n}\n\nexport interface OraclePriceDto {\n priceRealtime: PriceWithConfidenceDto;\n priceWeighted: PriceWithConfidenceDto;\n timestamp: string;\n switchboardData?: {\n queue: string;\n feedHash: string;\n maxVariance: string;\n minResponses: number;\n rawPrice: string;\n stdev: string;\n };\n}\n","import BN from \"bn.js\";\nimport BigNumber from \"bignumber.js\";\n\nimport { FeedResponse, SWITCHBOARD_ONDEMANDE_PRICE_PRECISION } from \"~/vendor/switchboard_pull\";\nimport { BankType } from \"~/services/bank\";\nimport { MAX_CONFIDENCE_INTERVAL_RATIO, SWB_PRICE_CONF_INTERVALS } from \"~/constants\";\n\nimport { capConfidenceInterval } from \"./compute.utils\";\nimport { OraclePrice, SwbOracleAiDataByKey } from \"../types\";\n\n/**\n * Maps Switchboard banks to their corresponding oracle prices using feed data and crossbar responses\n * @param banks - Array of bank objects\n * @param swbOracleAiDataByKey - Oracle account information indexed by oracle key\n * @param crossbarResponse - Crossbar feed response data indexed by feed ID\n * @returns Map of bank addresses to their corresponding oracle prices\n */\nexport const mapSwbBanksToOraclePrices = (\n banks: BankType[],\n swbOracleAiDataByKey: SwbOracleAiDataByKey,\n crossbarResponse: Record<string, FeedResponse | undefined>\n): Map<string, OraclePrice> => {\n const bankOraclePriceMap = new Map<string, OraclePrice>();\n\n banks.forEach((bank) => {\n const oracleKey = bank.config.oracleKeys[0]!.toBase58();\n const oracleData = swbOracleAiDataByKey[oracleKey];\n const oracleFeed = oracleData?.feedHash;\n if (oracleFeed && oracleData && crossbarResponse) {\n const crossbarData = crossbarResponse[oracleFeed]?.results;\n const timestamp = new Date().getTime().toString();\n\n const oraclePrice = parseSwbOraclePriceData(\n crossbarData ?? new BN(oracleData.rawPrice),\n new BN(oracleData.stdev),\n timestamp,\n oracleData\n );\n if (oraclePrice) {\n bankOraclePriceMap.set(bank.address.toBase58(), oraclePrice);\n }\n } else {\n console.warn(\n `No oracle feed found for bank ${bank.address.toBase58()} oracleKey ${oracleKey}`\n );\n }\n });\n\n return bankOraclePriceMap;\n};\n\n/**\n * Maps broken Switchboard feeds to oracle prices using Birdeye fallback data\n * @param banks - Array of bank objects\n * @param swbOracleAiDataByKey - Oracle account information indexed by oracle key\n * @param birdeyeResponse - Birdeye price data indexed by feed ID\n * @returns Map of bank addresses to their corresponding oracle prices from Birdeye fallback\n */\nexport const mapBrokenFeedsToOraclePrices = (\n banks: BankType[],\n swbOracleAiDataByKey: SwbOracleAiDataByKey,\n birdeyeResponse: Record<string, number>\n): Map<string, OraclePrice> => {\n const bankOraclePriceMap = new Map<string, OraclePrice>();\n\n banks.forEach((bank) => {\n const oracleKey = bank.config.oracleKeys[0]!.toBase58();\n const oracleData = swbOracleAiDataByKey[oracleKey];\n const oracleFeed = oracleData?.feedHash;\n const birdeyeData = oracleFeed ? birdeyeResponse[oracleFeed] : undefined;\n if (oracleFeed && oracleData && birdeyeData) {\n const timestamp = new Date().getTime().toString();\n\n const oraclePrice = parseSwbOraclePriceData(\n [birdeyeData],\n new BN(oracleData.stdev),\n timestamp,\n oracleData\n );\n if (oraclePrice) {\n bankOraclePriceMap.set(bank.address.toBase58(), oraclePrice);\n }\n } else {\n // Bank not found in birdeye fallback skipping\n }\n });\n\n return bankOraclePriceMap;\n};\n\nexport function parseSwbOraclePriceData(\n price: number[] | BN,\n stdDev: BN,\n timestamp: string,\n oracleData: {\n queue: string;\n feedHash: string;\n maxVariance: string;\n minResponses: number;\n rawPrice: string;\n stdev: string;\n }\n): OraclePrice {\n const swbPrice = Array.isArray(price)\n ? new BigNumber(median(price))\n : new BigNumber(price.toString()).div(10 ** SWITCHBOARD_ONDEMANDE_PRICE_PRECISION);\n const swbConfidence = new BigNumber(stdDev.toString()).times(SWB_PRICE_CONF_INTERVALS);\n const swbConfidenceCapped = capConfidenceInterval(\n swbPrice,\n swbConfidence,\n MAX_CONFIDENCE_INTERVAL_RATIO\n );\n const swbLowestPrice = swbPrice.minus(swbConfidenceCapped);\n const swbHighestPrice = swbPrice.plus(swbConfidenceCapped);\n\n return {\n priceRealtime: {\n price: swbPrice,\n confidence: swbConfidenceCapped,\n lowestPrice: swbLowestPrice,\n highestPrice: swbHighestPrice,\n },\n priceWeighted: {\n price: swbPrice,\n confidence: swbConfidenceCapped,\n lowestPrice: swbLowestPrice,\n highestPrice: swbHighestPrice,\n },\n timestamp: new BigNumber(timestamp),\n switchboardData: oracleData,\n };\n}\n\nfunction median(values: number[]): number {\n if (values.length === 0) {\n throw new Error(\"Input array is empty\");\n }\n\n // Sorting values, preventing original array\n // from being mutated.\n values = [...values].sort((a, b) => a - b);\n\n const half = Math.floor(values.length / 2);\n\n return values.length % 2 ? values[half] : (values[half - 1] + values[half]) / 2;\n}\n","import { Connection, PublicKey } from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\nimport { deserialize } from \"borsh\";\nimport { PYTH_PRICE_CONF_INTERVALS } from \"../../constants\";\n\ntype PriceUpdateV2 = {\n writeAuthority: Buffer;\n verificationLevel: number;\n priceMessage: {\n feedId: Buffer;\n price: bigint;\n conf: bigint;\n exponent: number;\n publishTime: bigint;\n prevPublishTime: bigint;\n emaPrice: bigint;\n emaConf: bigint;\n };\n};\n\nconst priceUpdateV2Schema = {\n struct: {\n writeAuthority: {\n array: { type: \"u8\", len: 32 },\n },\n verificationLevel: \"u8\",\n priceMessage: {\n struct: {\n feedId: { array: { type: \"u8\", len: 32 } },\n price: \"i64\",\n conf: \"u64\",\n exponent: \"i32\",\n publishTime: \"i64\",\n prevPublishTime: \"i64\",\n emaPrice: \"i64\",\n emaConf: \"u64\",\n },\n },\n postedSlot: \"u64\",\n },\n};\n\nexport const parsePriceInfo = (data: Buffer): PriceUpdateV2 => {\n let decoded: PriceUpdateV2 = deserialize(priceUpdateV2Schema, data) as any;\n return decoded;\n};\n\nfunction capConfidenceInterval(\n price: BigNumber,\n confidence: BigNumber,\n maxConfidence: BigNumber\n): BigNumber {\n let maxConfidenceInterval = price.times(maxConfidence);\n\n return BigNumber.min(confidence, maxConfidenceInterval);\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\n\nimport {\n PYTH_PRICE_CONF_INTERVALS,\n MAX_CONFIDENCE_INTERVAL_RATIO,\n} from \"~/constants\";\nimport { BankType, OracleSetup } from \"~/services/bank\";\nimport { parsePriceInfo } from \"~/vendor/pyth_push_oracle\";\n\nimport { OraclePrice, PriceWithConfidence } from \"../types\";\n\n/**\n * Categorizes banks by their oracle setup type into legacy, push, and staked collateral banks\n * @param banks - Array of bank objects\n * @returns Object containing categorized banks by oracle type\n * - pythLegacyBanks: Banks using deprecated Pyth legacy oracles\n * - pythPushBanks: Banks using Pyth push oracles\n * - pythStakedCollateralBanks: Banks using staked collateral with Pyth push oracles\n */\nexport const categorizePythBanks = (\n banks: BankType[]\n) => {\n // Depracated\n const pythLegacyBanks = banks.filter(\n (bank) => bank.config.oracleSetup === OracleSetup.PythLegacy\n );\n\n // Pyth push oracle banks\n const pythPushBanks = banks.filter(\n (bank) => bank.config.oracleSetup === OracleSetup.PythPushOracle\n );\n\n // Staked collateral pyth banks (all have sol oracle)\n const pythStakedCollateralBanks = banks.filter(\n (bank) => bank.config.oracleSetup === OracleSetup.StakedWithPythPush\n );\n\n // Pyth push kaminos banks\n const pythPushKaminosBanks = banks.filter(\n (bank) => bank.config.oracleSetup === OracleSetup.KaminoPythPush\n );\n\n return {\n pythLegacyBanks,\n pythPushBanks,\n pythStakedCollateralBanks,\n pythPushKaminosBanks,\n };\n};\n\n/**\n * Converts vote account coefficients to bank address coefficients for staked collateral pricing\n * @param pythStakedCollateralBanks - Array of staked collateral banks\n * @param validatorVoteAccountByBank - Mapping of bank addresses to validator vote accounts\n * @param voteAccCoeffs - Price coefficients indexed by vote account addresses\n * @returns Record mapping bank addresses to their corresponding price coefficients\n */\nexport const convertVoteAccCoeffsToBankCoeffs = (\n pythStakedCollateralBanks: BankType[],\n validatorVoteAccountByBank: {\n [address: string]: string;\n },\n voteAccCoeffs: Record<string, number>\n): Record<string, number> => {\n const priceCoeffByBank: Record<string, number> = {};\n\n pythStakedCollateralBanks.forEach((bank) => {\n const voteAccount = validatorVoteAccountByBank[bank.address.toBase58()];\n if (voteAccount && voteAccCoeffs[voteAccount] !== undefined) {\n priceCoeffByBank[bank.address.toBase58()] = voteAccCoeffs[voteAccount];\n }\n });\n\n return priceCoeffByBank;\n};\n\n/**\n * Extracts oracle keys from Pyth banks for price data fetching\n * @param pythBanks - Array of Pyth bank objects\n * @returns Array of oracle key strings in base58 format\n */\nexport const extractPythOracleKeys = (\n pythBanks: BankType[]\n): string[] => {\n const keys = pythBanks.map((bank) =>\n bank.config.oracleKeys[0]!.toBase58()\n );\n\n return [...keys];\n};\n\n/**\n * Maps banks to their corresponding oracle prices with optional price coefficient adjustments\n * @param pythPushBanks - Array of Pyth push oracle banks\n * @param pythStakedCollateralBanks - Array of staked collateral banks requiring price adjustments\n * @param oraclePrices - Record of oracle prices indexed by oracle key\n * @param priceCoeffByBank - Price coefficients for staked collateral banks\n * @returns Map of bank addresses to their corresponding oracle prices\n */\nexport const mapPythBanksToOraclePrices = (\n pythPushBanks: BankType[],\n pythStakedCollateralBanks: BankType[],\n oraclePrices: Record<string, OraclePrice>,\n priceCoeffByBank: Record<string, number>\n): Map<string, OraclePrice> => {\n const bankOraclePriceMap = new Map<string, OraclePrice>();\n\n // Map banks\n pythPushBanks.forEach((bank) => {\n const oracleKey = bank.config.oracleKeys[0]!.toBase58();\n const oraclePrice = oraclePrices[oracleKey];\n if (oraclePrice) {\n bankOraclePriceMap.set(bank.address.toBase58(), oraclePrice);\n }\n });\n\n // Map staked collateral banks with price coefficient adjustment\n pythStakedCollateralBanks.forEach((bank) => {\n const priceCoeff = priceCoeffByBank[bank.address.toBase58()];\n const oracleKey = bank.config.oracleKeys[0]?.toBase58();\n\n if (oracleKey && priceCoeff !== undefined) {\n const oraclePrice = oraclePrices[oracleKey];\n if (oraclePrice) {\n bankOraclePriceMap.set(bank.address.toBase58(), {\n timestamp: oraclePrice.timestamp,\n priceRealtime: adjustPriceComponent(\n oraclePrice.priceRealtime,\n priceCoeff\n ),\n priceWeighted: adjustPriceComponent(\n oraclePrice.priceWeighted,\n priceCoeff\n ),\n });\n }\n }\n });\n\n return bankOraclePriceMap;\n};\n\n/**\n * Adjusts price component values by multiplying with a price coefficient\n * @param priceComponent - Price component containing price, confidence, and bounds\n * @param priceCoeff - Multiplier coefficient to adjust the price values\n * @returns Adjusted price component with multiplied price and bounds\n */\nexport const adjustPriceComponent = (\n priceComponent: PriceWithConfidence,\n priceCoeff: number\n) => ({\n price: priceComponent.price.multipliedBy(priceCoeff),\n confidence: priceComponent.confidence,\n lowestPrice: priceComponent.lowestPrice.multipliedBy(priceCoeff),\n highestPrice: priceComponent.highestPrice.multipliedBy(priceCoeff),\n});\n\n/**\n * Parses raw Pyth price data from RPC into standardized OraclePriceDto format\n * @param rawData - Raw buffer data from Pyth price account\n * @returns Parsed oracle price data with realtime and weighted price information\n */\nexport function parseRpcPythPriceData(rawData: Buffer): OraclePrice {\n function capConfidenceInterval(\n price: BigNumber,\n confidence: BigNumber,\n maxConfidence: BigNumber\n ): BigNumber {\n const maxConfidenceInterval = price.times(maxConfidence);\n\n return BigNumber.min(confidence, maxConfidenceInterval);\n }\n\n const bytesWithoutDiscriminator = rawData.slice(8);\n const data = parsePriceInfo(bytesWithoutDiscriminator);\n\n const exponent = new BigNumber(10 ** data.priceMessage.exponent);\n\n const priceRealTime = new BigNumber(Number(data.priceMessage.price)).times(\n exponent\n );\n const confidenceRealTime = new BigNumber(Number(data.priceMessage.conf))\n .times(exponent)\n .times(PYTH_PRICE_CONF_INTERVALS);\n const cappedConfidenceRealTime = capConfidenceInterval(\n priceRealTime,\n confidenceRealTime,\n MAX_CONFIDENCE_INTERVAL_RATIO\n );\n const lowestPriceRealTime = priceRealTime.minus(cappedConfidenceRealTime);\n const highestPriceRealTime = priceRealTime.plus(cappedConfidenceRealTime);\n\n const priceTimeWeighted = new BigNumber(\n Number(data.priceMessage.emaPrice)\n ).times(exponent);\n const confidenceTimeWeighted = new BigNumber(\n Number(data.priceMessage.emaConf)\n )\n .times(exponent)\n .times(PYTH_PRICE_CONF_INTERVALS);\n const cappedConfidenceWeighted = capConfidenceInterval(\n priceTimeWeighted,\n confidenceTimeWeighted,\n MAX_CONFIDENCE_INTERVAL_RATIO\n );\n const lowestPriceWeighted = priceTimeWeighted.minus(cappedConfidenceWeighted);\n const highestPriceWeighted = priceTimeWeighted.plus(cappedConfidenceWeighted);\n\n return {\n priceRealtime: {\n price: priceRealTime,\n confidence: cappedConfidenceRealTime,\n lowestPrice: lowestPriceRealTime,\n highestPrice: highestPriceRealTime,\n },\n priceWeighted: {\n price: priceTimeWeighted,\n confidence: cappedConfidenceWeighted,\n lowestPrice: lowestPriceWeighted,\n highestPrice: highestPriceWeighted,\n },\n timestamp: new BigNumber(Number(data.priceMessage.publishTime)),\n };\n}\n","import BigNumber from \"bignumber.js\";\n\nimport { decodeSwitchboardPullFeedData } from \"~/vendor/switchboard_pull\";\nimport { OracleSetup } from \"~/services/bank/types\";\n\nimport { OraclePrice, PriceWithConfidence, PriceBias } from \"../types\";\n\nimport { parseSwbOraclePriceData } from \"./swb-data.utils\";\nimport { parseRpcPythPriceData } from \"./pyth-data.utils\";\n\nexport function getPriceWithConfidence(\n oraclePrice: OraclePrice,\n weighted: boolean\n): PriceWithConfidence {\n return weighted ? oraclePrice.priceWeighted : oraclePrice.priceRealtime;\n}\n\nexport function getPrice(\n oraclePrice: OraclePrice,\n priceBias: PriceBias = PriceBias.None,\n weightedPrice: boolean = false\n): BigNumber {\n const price = getPriceWithConfidence(oraclePrice, weightedPrice);\n switch (priceBias) {\n case PriceBias.Lowest:\n return price.lowestPrice;\n case PriceBias.Highest:\n return price.highestPrice;\n case PriceBias.None:\n return price.price;\n }\n}\n\nexport function capConfidenceInterval(\n price: BigNumber,\n confidence: BigNumber,\n maxConfidence: BigNumber\n): BigNumber {\n let maxConfidenceInterval = price.times(maxConfidence);\n\n return BigNumber.min(confidence, maxConfidenceInterval);\n}\n\nfunction parseOraclePriceData(\n oracleSetup: OracleSetup,\n rawData: Buffer\n): OraclePrice {\n switch (oracleSetup) {\n case OracleSetup.PythPushOracle:\n case OracleSetup.StakedWithPythPush:\n case OracleSetup.KaminoPythPush: {\n return parseRpcPythPriceData(rawData);\n }\n\n // deprecated\n case OracleSetup.PythLegacy:\n case OracleSetup.SwitchboardV2: {\n return {\n priceRealtime: {\n price: new BigNumber(0),\n confidence: new BigNumber(0),\n lowestPrice: new BigNumber(0),\n highestPrice: new BigNumber(0),\n },\n priceWeighted: {\n price: new BigNumber(0),\n confidence: new BigNumber(0),\n lowestPrice: new BigNumber(0),\n highestPrice: new BigNumber(0),\n },\n timestamp: new BigNumber(0),\n };\n }\n case OracleSetup.SwitchboardPull:\n const pullFeedDAta = decodeSwitchboardPullFeedData(rawData);\n\n return parseSwbOraclePriceData(\n pullFeedDAta.result.value,\n pullFeedDAta.result.std_dev,\n pullFeedDAta.last_update_timestamp.toString(),\n {\n queue: pullFeedDAta.queue.toBase58(),\n feedHash: Buffer.from(pullFeedDAta.feed_hash).toString(\"hex\"),\n maxVariance: pullFeedDAta.max_variance.toString(),\n minResponses: pullFeedDAta.min_responses,\n rawPrice: pullFeedDAta.result.value.toString(),\n stdev: pullFeedDAta.result.std_dev.toString(),\n }\n );\n default:\n console.error(\"Invalid oracle setup\", oracleSetup);\n throw new Error(`Invalid oracle setup \"${oracleSetup}\"`);\n }\n}\n\nexport { parseOraclePriceData as parsePriceInfo };\n","import { OraclePriceDto, OraclePrice } from \"../types\";\n\nexport function oraclePriceToDto(oraclePrice: OraclePrice): OraclePriceDto {\n return {\n priceRealtime: {\n price: oraclePrice.priceRealtime.price.toString(),\n confidence: oraclePrice.priceRealtime.confidence.toString(),\n lowestPrice: oraclePrice.priceRealtime.lowestPrice.toString(),\n highestPrice: oraclePrice.priceRealtime.highestPrice.toString(),\n },\n priceWeighted: {\n price: oraclePrice.priceWeighted.price.toString(),\n confidence: oraclePrice.priceWeighted.confidence.toString(),\n lowestPrice: oraclePrice.priceWeighted.lowestPrice.toString(),\n highestPrice: oraclePrice.priceWeighted.highestPrice.toString(),\n },\n timestamp: oraclePrice.timestamp.toString(),\n switchboardData: oraclePrice.switchboardData,\n };\n}\n","import BigNumber from \"bignumber.js\";\n\nimport { OraclePriceDto, OraclePrice } from \"../types\";\n\nexport function dtoToOraclePrice(dto: OraclePriceDto): OraclePrice {\n return {\n priceRealtime: {\n price: new BigNumber(dto.priceRealtime.price),\n confidence: new BigNumber(dto.priceRealtime.confidence),\n lowestPrice: new BigNumber(dto.priceRealtime.lowestPrice),\n highestPrice: new BigNumber(dto.priceRealtime.highestPrice),\n },\n priceWeighted: {\n price: new BigNumber(dto.priceWeighted.price),\n confidence: new BigNumber(dto.priceWeighted.confidence),\n lowestPrice: new BigNumber(dto.priceWeighted.lowestPrice),\n highestPrice: new BigNumber(dto.priceWeighted.highestPrice),\n },\n timestamp: new BigNumber(dto.timestamp),\n switchboardData: dto.switchboardData,\n };\n}\n","import { Connection, PublicKey } from \"@solana/web3.js\";\n\nimport { BankType } from \"~/services/bank\";\nimport { decodeSwitchboardPullFeedData } from \"~/vendor/switchboard_pull\";\n\nimport { OraclePrice } from \"../types\";\n\n/**\n * Result of checking if an oracle can be cranked\n */\nexport interface CrankabilityResult {\n oracle: PublicKey;\n crankable: boolean;\n reason?: string;\n error?: unknown;\n}\n\n/**\n * Payload structure from Crossbar simulate endpoint\n */\ninterface CrossbarFeedResponse {\n feedHash: string;\n results: (number | null)[];\n}\n\ntype CrossbarSimulatePayload = CrossbarFeedResponse[];\n\n/**\n * Checks if multiple Switchboard Pull oracles can be cranked by simulating feed updates\n *\n * @param feedHashes - Array of oracle feed hashes to check\n * @param crossbarUrl - Crossbar API endpoint (defaults to production)\n * @returns Promise resolving to map of feedHash to crankability result\n */\nexport async function checkBatchOracleCrankability(\n feedHashes: string[],\n crossbarUrl: string = \"https://integrator-crossbar.prod.mrgn.app\"\n): Promise<Map<string, { crankable: boolean; reason?: string }>> {\n const results = new Map<string, { crankable: boolean; reason?: string }>();\n\n if (feedHashes.length === 0) {\n return results;\n }\n\n try {\n // Join feed hashes with commas for batch request\n const feedHashesString = feedHashes.join(\",\");\n\n const response = await fetch(\n `${crossbarUrl}/simulate/${feedHashesString}`,\n {\n headers: {\n Accept: \"application/json\",\n },\n signal: AbortSignal.timeout(8000),\n }\n );\n\n if (!response.ok) {\n const reason = `HTTP ${response.status}: ${response.statusText}`;\n // Mark all as uncrankable if request fails\n feedHashes.forEach((hash) => {\n results.set(hash, { crankable: false, reason });\n });\n return results;\n }\n\n const payload = (await response.json()) as CrossbarSimulatePayload;\n\n // Check validity of each feed response\n payload.forEach((feed) => {\n const result = feed.results[0];\n const isValid =\n result !== null && result !== undefined && !isNaN(Number(result));\n\n results.set(feed.feedHash, {\n crankable: isValid,\n reason: isValid ? undefined : \"Invalid feed response\",\n });\n });\n\n // Mark any missing feeds as uncrankable\n feedHashes.forEach((hash) => {\n if (!results.has(hash)) {\n results.set(hash, {\n crankable: false,\n reason: \"No response from Crossbar\",\n });\n }\n });\n\n return results;\n } catch (error) {\n const reason = error instanceof Error ? error.message : \"Unknown error\";\n // Mark all as uncrankable if request fails\n feedHashes.forEach((hash) => {\n results.set(hash, { crankable: false, reason });\n });\n return results;\n }\n}\n\n/**\n * Fetches feed hashes for banks by decoding their oracle account data\n */\nasync function fetchFeedHashes(\n banks: BankType[],\n connection: Connection\n): Promise<Map<string, string>> {\n const feedHashMap = new Map<string, string>();\n\n if (banks.length === 0) {\n return feedHashMap;\n }\n\n try {\n // Fetch oracle account infos\n const oracleKeys = banks.map((bank) => bank.oracleKey);\n const oracleAis = await connection.getMultipleAccountsInfo(oracleKeys);\n\n // Process each oracle account\n oracleAis.forEach((oracleAi, idx) => {\n if (!oracleAi?.data || idx >= banks.length) return;\n\n const bank = banks[idx];\n if (!bank) return;\n\n try {\n const { feed_hash } = decodeSwitchboardPullFeedData(oracleAi.data);\n const feedHash = Buffer.from(feed_hash).toString(\"hex\");\n feedHashMap.set(bank.oracleKey.toBase58(), feedHash);\n } catch (error) {\n console.error(\n `Failed to decode feed hash for bank ${bank.address.toBase58()}:`,\n error\n );\n }\n });\n } catch (error) {\n console.error(\"Failed to fetch feed hashes:\", error);\n }\n\n return feedHashMap;\n}\n\n/**\n * Checks crankability for multiple oracles in parallel\n *\n * @param banks - Banks to check oracle crankability for\n * @param oraclePrices - Map of oracle prices (may contain feedHash)\n * @param connection - Solana connection for fetching missing feed hashes\n * @param crossbarUrl - Crossbar API endpoint\n * @returns Promise resolving to map of oracle address to crankability result\n */\nexport async function checkMultipleOraclesCrankability(\n banks: BankType[],\n oraclePrices: Map<string, OraclePrice>,\n connection?: Connection,\n crossbarUrl?: string\n): Promise<Map<string, CrankabilityResult>> {\n const results = new Map<string, CrankabilityResult>();\n const feedHashMap = new Map<string, string>();\n const banksNeedingFetch: BankType[] = [];\n\n // Check which banks already have feedHash in oraclePrices\n banks.forEach((bank) => {\n const oracleKey = bank.oracleKey.toBase58();\n const bankAddress = bank.address.toBase58();\n const feedHash = oraclePrices.get(bankAddress)?.switchboardData?.feedHash;\n\n if (feedHash) {\n feedHashMap.set(oracleKey, feedHash);\n } else {\n banksNeedingFetch.push(bank);\n }\n });\n\n // Fetch missing feed hashes if we have a connection\n if (banksNeedingFetch.length > 0 && connection) {\n const fetchedHashes = await fetchFeedHashes(banksNeedingFetch, connection);\n fetchedHashes.forEach((hash, key) => feedHashMap.set(key, hash));\n }\n\n // Collect all feed hashes for batch request\n const feedHashesToCheck: string[] = [];\n const feedHashToBanks = new Map<string, BankType[]>();\n\n banks.forEach((bank) => {\n const oracleKey = bank.oracleKey.toBase58();\n const feedHash = feedHashMap.get(oracleKey);\n\n if (!feedHash) {\n results.set(oracleKey, {\n oracle: bank.oracleKey,\n crankable: false,\n reason: \"Feed hash not available\",\n });\n } else {\n if (!feedHashToBanks.has(feedHash)) {\n feedHashesToCheck.push(feedHash);\n feedHashToBanks.set(feedHash, []);\n }\n feedHashToBanks.get(feedHash)!.push(bank);\n }\n });\n\n // Batch check all feed hashes in a single request\n if (feedHashesToCheck.length > 0) {\n // If no crossbarUrl provided, assume all feeds are crankable (test mode)\n if (!crossbarUrl) {\n feedHashesToCheck.forEach((feedHash) => {\n const banksForFeed = feedHashToBanks.get(feedHash) || [];\n banksForFeed.forEach((bank) => {\n results.set(bank.oracleKey.toBase58(), {\n oracle: bank.oracleKey,\n crankable: true,\n reason: \"Test mode - no crankability check\",\n });\n });\n });\n } else {\n const crankabilityByFeedHash = await checkBatchOracleCrankability(\n feedHashesToCheck,\n crossbarUrl\n );\n\n // Map results back to banks\n crankabilityByFeedHash.forEach((result, feedHash) => {\n const banksForFeed = feedHashToBanks.get(feedHash) || [];\n banksForFeed.forEach((bank) => {\n results.set(bank.oracleKey.toBase58(), {\n oracle: bank.oracleKey,\n crankable: result.crankable,\n reason: result.reason,\n });\n });\n });\n }\n }\n\n return results;\n}\n\n/**\n * Filters banks into crankable and uncrankable sets\n */\nexport function partitionBanksByCrankability(\n banks: BankType[],\n crankabilityResults: Map<string, CrankabilityResult>\n): {\n crankable: BankType[];\n uncrankable: Array<{ bank: BankType; reason: string }>;\n} {\n const crankable: BankType[] = [];\n const uncrankable: Array<{ bank: BankType; reason: string }> = [];\n\n for (const bank of banks) {\n const result = crankabilityResults.get(bank.oracleKey.toBase58());\n\n if (!result) {\n // If no result, assume uncrankable to be safe\n uncrankable.push({\n bank,\n reason: \"No crankability check result available\",\n });\n continue;\n }\n\n if (result.crankable) {\n crankable.push(bank);\n } else {\n uncrankable.push({\n bank,\n reason: result.reason || \"Unknown reason\",\n });\n }\n }\n\n return { crankable, uncrankable };\n}\n","interface BirdeyeTokenPriceResponse {\n success: boolean;\n data: Record<\n string,\n { value: number; updateUnixTime: number; updateHumanTime: string }\n >;\n}\n\n/**\n * Fetches Birdeye prices for specific mint addresses using the existing /api/tokens/multi endpoint.\n *\n * @param mintAddresses - Array of mint addresses to fetch prices for\n * @param apiEndpoint - Base API endpoint URL (without query parameters)\n * @param opts - Optional configuration object\n * @param opts.queryKey - Query parameter name for mint list (defaults to \"mintList\")\n * @returns Promise resolving to a record mapping mint addresses to their price values\n */\nexport async function getBirdeyePricesForMints(\n mintAddresses: string[],\n apiEndpoint: string,\n opts?: { queryKey?: string }\n): Promise<Record<string, number>> {\n const queryKey = opts?.queryKey ?? \"mintList\";\n try {\n const url = `${apiEndpoint}?${queryKey}=${mintAddresses.join(\",\")}`;\n const response = await fetch(url);\n\n if (!response.ok) {\n throw new Error(\"Response is not ok\");\n }\n\n const data = (await response.json()) as BirdeyeTokenPriceResponse;\n if (!data.success) {\n throw new Error(\"Success field is false\");\n }\n const rawPrices = data.data || {};\n\n const extractedPrices: Record<string, number> = {};\n Object.entries(rawPrices).forEach(([mint, priceData]) => {\n extractedPrices[mint] = priceData.value;\n });\n\n return extractedPrices;\n } catch (error) {\n // TODO: add sentry logging\n console.warn(\"Error fetching Birdeye prices for static feeds:\", error);\n return {};\n }\n}\n\n/**\n * Fetches Birdeye fallback prices and maps them by feed ID\n * @param feedMint - Array of objects containing feedId and mintAddress pairs\n * @returns Promise resolving to record of prices indexed by feed ID\n */\nexport const getBirdeyeFallbackPricesByFeedId = async (\n feedMint: {\n feedId: string;\n mintAddress: string;\n }[],\n apiEndpoint: string,\n opts?: { queryKey?: string }\n): Promise<Record<string, number>> => {\n const mintAddresses = feedMint.map((feedMint) => feedMint.mintAddress);\n const prices = await getBirdeyePricesForMints(\n mintAddresses,\n apiEndpoint,\n opts\n );\n\n const priceByFeedId: Record<string, number> = {};\n feedMint.forEach((feedMint) => {\n const feedId = feedMint.feedId;\n const mintAddress = feedMint.mintAddress;\n const price = prices[mintAddress];\n\n if (price) {\n priceByFeedId[feedId] = price;\n }\n });\n\n return priceByFeedId;\n};\n","import { PublicKey } from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\n\nexport interface BalanceType {\n active: boolean;\n bankPk: PublicKey;\n assetShares: BigNumber;\n liabilityShares: BigNumber;\n emissionsOutstanding: BigNumber;\n lastUpdate: number;\n}\n\nexport enum HealthCacheFlags {\n /**\n * If set (1), the account is considered healthy and cannot be liquidated.\n * If not set (0), the account is unhealthy and can be liquidated.\n */\n HEALTHY = 1 << 0, // 1\n /**\n * If set (1), the engine did not error during the last health pulse.\n * If not set (0), the engine would have errored and this cache is likely invalid.\n * `RiskEngineInitRejected` is ignored and will allow the flag to be set anyways.\n */\n ENGINE_STATUS_OK = 1 << 1, // 2\n /**\n * If set (1), the engine did not error due to an oracle issue.\n * If not set (0), engine was passed a bad bank or oracle account, or an oracle was stale.\n * Check the order in which accounts were passed and ensure each balance has the correct banks/oracles,\n * and that oracle cranks ran recently enough. Check `internal_err` and `err_index` for more details\n * in some circumstances. Invalid if generated after borrow/withdraw (these instructions will\n * ignore oracle issues if health is still satisfactory with some balance zeroed out).\n */\n ORACLE_OK = 1 << 2, // 4\n}\n\nexport enum HealthCacheStatus {\n UNSET,\n ONCHAIN,\n COMPUTED,\n}\n\nexport interface HealthCacheType {\n assetValue: BigNumber;\n liabilityValue: BigNumber;\n assetValueMaint: BigNumber;\n liabilityValueMaint: BigNumber;\n assetValueEquity: BigNumber;\n liabilityValueEquity: BigNumber;\n timestamp: BigNumber;\n flags: HealthCacheFlags[];\n prices: number[][];\n simulationStatus: HealthCacheStatus;\n}\n\nexport interface MarginfiAccountType {\n address: PublicKey;\n group: PublicKey;\n authority: PublicKey;\n balances: BalanceType[];\n accountFlags: AccountFlags[];\n emissionsDestinationAccount: PublicKey;\n healthCache: HealthCacheType;\n}\n\nexport enum AccountFlags {\n ACCOUNT_DISABLED = 1 << 0, // 1\n ACCOUNT_IN_FLASHLOAN = 1 << 1, // 2\n ACCOUNT_FLAG_DEPRECATED = 1 << 2, // 4\n ACCOUNT_TRANSFER_AUTHORITY_ALLOWED = 1 << 3, // 8\n}\n\nexport enum MarginRequirementType {\n Initial = 0,\n Maintenance = 1,\n Equity = 2,\n}\n","import { BankType } from \"~/services/bank\";\nimport { MarginfiAccountType } from \"./account.types\";\n\nexport interface SimulationResultRaw {\n marginfiAccount: MarginfiAccountType;\n banks: BankType[];\n}\n\n/**\n * Custom error class for health cache simulation failures\n */\nexport class HealthCacheSimulationError extends Error {\n mrgnErr: number | null;\n internalErr: number | null;\n\n constructor(message: string, mrgnErr: number | null, internalErr: number | null) {\n super(message);\n this.name = \"HealthCacheSimulationError\";\n this.mrgnErr = mrgnErr;\n this.internalErr = internalErr;\n\n // Maintains proper stack trace for where our error was thrown (only available on V8)\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, HealthCacheSimulationError);\n }\n }\n}\n","import BN from \"bn.js\";\nimport BigNumber from \"bignumber.js\";\n\nimport { BorshCoder } from \"@coral-xyz/anchor\";\nimport { PublicKey } from \"@solana/web3.js\";\n\nimport { AccountType } from \"~/types\";\nimport { MarginfiIdlType } from \"~/idl\";\nimport { bigNumberToWrappedI80F48, toBigNumber, wrappedI80F48toBigNumber } from \"~/utils\";\n\nimport {\n MarginfiAccountRaw,\n BalanceRaw,\n BalanceType,\n AccountFlags,\n HealthCacheFlags,\n MarginfiAccountTypeDto,\n MarginfiAccountType,\n BalanceTypeDto,\n HealthCacheTypeDto,\n HealthCacheType,\n HealthCacheRaw,\n HealthCacheStatus,\n} from \"../types\";\n\nexport const EMPTY_HEALTH_CACHE: HealthCacheRaw = {\n assetValue: {\n value: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n },\n liabilityValue: {\n value: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n },\n timestamp: new BN(0),\n flags: 0,\n prices: [],\n assetValueMaint: bigNumberToWrappedI80F48(new BigNumber(0)),\n liabilityValueMaint: bigNumberToWrappedI80F48(new BigNumber(0)),\n assetValueEquity: bigNumberToWrappedI80F48(new BigNumber(0)),\n liabilityValueEquity: bigNumberToWrappedI80F48(new BigNumber(0)),\n errIndex: 0,\n internalErr: 0,\n internalBankruptcyErr: 0,\n internalLiqErr: 0,\n mrgnErr: 0,\n};\n\nexport function decodeAccountRaw(encoded: Buffer, idl: MarginfiIdlType): MarginfiAccountRaw {\n const coder = new BorshCoder(idl);\n return coder.accounts.decode(AccountType.MarginfiAccount, encoded);\n}\n\nexport function parseBalanceRaw(balanceRaw: BalanceRaw): BalanceType {\n const active =\n typeof balanceRaw.active === \"number\" ? balanceRaw.active === 1 : balanceRaw.active;\n const bankPk = balanceRaw.bankPk;\n const assetShares = wrappedI80F48toBigNumber(balanceRaw.assetShares);\n const liabilityShares = wrappedI80F48toBigNumber(balanceRaw.liabilityShares);\n const emissionsOutstanding = wrappedI80F48toBigNumber(balanceRaw.emissionsOutstanding);\n const lastUpdate = balanceRaw.lastUpdate.toNumber();\n\n return {\n active,\n bankPk,\n assetShares,\n liabilityShares,\n emissionsOutstanding,\n lastUpdate,\n };\n}\n\nexport function parseHealthCacheRaw(healthCacheRaw: HealthCacheRaw): HealthCacheType {\n const assetValue = wrappedI80F48toBigNumber(healthCacheRaw.assetValue);\n const liabilityValue = wrappedI80F48toBigNumber(healthCacheRaw.liabilityValue);\n const assetValueMaint = wrappedI80F48toBigNumber(healthCacheRaw.assetValueMaint);\n const liabilityValueMaint = wrappedI80F48toBigNumber(healthCacheRaw.liabilityValueMaint);\n const assetValueEquity = wrappedI80F48toBigNumber(healthCacheRaw.assetValueEquity);\n const liabilityValueEquity = wrappedI80F48toBigNumber(healthCacheRaw.liabilityValueEquity);\n const timestamp = toBigNumber(healthCacheRaw.timestamp);\n const flags = getActiveHealthCacheFlags(healthCacheRaw.flags);\n const prices = healthCacheRaw.prices;\n const simulationStatus = HealthCacheStatus.UNSET;\n\n const healthCache: HealthCacheType = {\n assetValue,\n liabilityValue,\n assetValueMaint,\n liabilityValueMaint,\n assetValueEquity,\n liabilityValueEquity,\n timestamp,\n flags,\n prices,\n simulationStatus,\n };\n return healthCache;\n}\n\nexport function parseMarginfiAccountRaw(\n marginfiAccountPk: PublicKey,\n accountData: MarginfiAccountRaw\n): MarginfiAccountType {\n const address = marginfiAccountPk;\n const group = accountData.group;\n const authority = accountData.authority;\n const balances = accountData.lendingAccount.balances.map(parseBalanceRaw);\n const accountFlags = getActiveAccountFlags(accountData.accountFlags);\n const emissionsDestinationAccount = accountData.emissionsDestinationAccount;\n const healthCache = parseHealthCacheRaw(accountData.healthCache);\n\n return {\n address,\n group,\n authority,\n balances,\n accountFlags,\n emissionsDestinationAccount,\n healthCache,\n };\n}\n\n/**\n * Get all active account flags as an array of flag names\n */\nexport function getActiveAccountFlags(flags: BN): AccountFlags[] {\n const activeFlags: AccountFlags[] = [];\n\n Object.keys(AccountFlags)\n .filter((key) => isNaN(Number(key))) // Only get the string keys (not the reverse mapping)\n .forEach((key) => {\n const flag = AccountFlags[key as keyof typeof AccountFlags];\n if (typeof flag === \"number\" && hasAccountFlag(flags, flag)) {\n activeFlags.push(flag);\n }\n });\n\n return activeFlags;\n}\n\n/**\n * Check if an account flag is set\n */\nexport function hasAccountFlag(flags: BN, flag: number): boolean {\n return !flags.and(new BN(flag)).isZero();\n}\n\n/**\n * Convert on-chain health cache flags (BN) to an array of HealthCacheFlags enum values\n *\n * According to the IDL, health cache flags are defined as:\n * - HEALTHY = 1 (bit 0) - If set, the account cannot be liquidated\n * - ENGINE_STATUS_OK = 2 (bit 1) - If set, the engine did not error during health calculation\n * - ORACLE_OK = 4 (bit 2) - If set, the engine did not encounter oracle issues\n */\nexport function getActiveHealthCacheFlags(flags: number): HealthCacheFlags[] {\n const activeFlags: HealthCacheFlags[] = [];\n\n // Check each flag bit\n if (hasHealthCacheFlag(flags, HealthCacheFlags.HEALTHY)) {\n activeFlags.push(HealthCacheFlags.HEALTHY);\n }\n\n if (hasHealthCacheFlag(flags, HealthCacheFlags.ENGINE_STATUS_OK)) {\n activeFlags.push(HealthCacheFlags.ENGINE_STATUS_OK);\n }\n\n if (hasHealthCacheFlag(flags, HealthCacheFlags.ORACLE_OK)) {\n activeFlags.push(HealthCacheFlags.ORACLE_OK);\n }\n\n return activeFlags;\n}\n\n/**\n * Check if a health cache flag is set\n */\nexport function hasHealthCacheFlag(flags: number, flag: HealthCacheFlags): boolean {\n return (flags & flag) !== 0;\n}\n\n/**\n * Convert numeric health cache flags to a human-readable status message\n */\nexport function getHealthCacheStatusDescription(flags: number): string {\n const activeFlags = getActiveHealthCacheFlags(flags);\n\n // Check for critical conditions first\n if (!activeFlags.includes(HealthCacheFlags.HEALTHY)) {\n return \"UNHEALTHY: Account is eligible for liquidation\";\n }\n\n if (!activeFlags.includes(HealthCacheFlags.ENGINE_STATUS_OK)) {\n return \"ERROR: Risk engine encountered an error during health calculation\";\n }\n\n if (!activeFlags.includes(HealthCacheFlags.ORACLE_OK)) {\n return \"WARNING: Oracle price data may be stale or invalid\";\n }\n\n // All good\n if (activeFlags.length === 3) {\n return \"HEALTHY: Account is in good standing\";\n }\n\n // Default case (shouldn't happen often)\n return `Status flags: ${activeFlags.join(\", \")}`;\n}\n\nexport function dtoToMarginfiAccount(\n marginfiAccountDto: MarginfiAccountTypeDto\n): MarginfiAccountType {\n return {\n address: new PublicKey(marginfiAccountDto.address),\n group: new PublicKey(marginfiAccountDto.group),\n authority: new PublicKey(marginfiAccountDto.authority),\n balances: marginfiAccountDto.balances.map(dtoToBalance),\n accountFlags: marginfiAccountDto.accountFlags,\n emissionsDestinationAccount: new PublicKey(marginfiAccountDto.emissionsDestinationAccount),\n healthCache: dtoToHealthCache(marginfiAccountDto.healthCache),\n };\n}\n\nexport function dtoToBalance(balanceDto: BalanceTypeDto): BalanceType {\n return {\n active: balanceDto.active,\n bankPk: new PublicKey(balanceDto.bankPk),\n assetShares: new BigNumber(balanceDto.assetShares),\n liabilityShares: new BigNumber(balanceDto.liabilityShares),\n emissionsOutstanding: new BigNumber(balanceDto.emissionsOutstanding),\n lastUpdate: balanceDto.lastUpdate,\n };\n}\n\nexport function dtoToHealthCache(healthCacheDto: HealthCacheTypeDto): HealthCacheType {\n return {\n assetValue: new BigNumber(healthCacheDto.assetValue),\n liabilityValue: new BigNumber(healthCacheDto.liabilityValue),\n assetValueMaint: new BigNumber(healthCacheDto.assetValueMaint),\n liabilityValueMaint: new BigNumber(healthCacheDto.liabilityValueMaint),\n assetValueEquity: new BigNumber(healthCacheDto.assetValueEquity),\n liabilityValueEquity: new BigNumber(healthCacheDto.liabilityValueEquity),\n timestamp: new BigNumber(healthCacheDto.timestamp),\n flags: healthCacheDto.flags,\n prices: healthCacheDto.prices,\n simulationStatus: healthCacheDto.simulationStatus,\n };\n}\n","import BN from \"bn.js\";\n\nimport {\n AccountFlags,\n BalanceType,\n BalanceTypeDto,\n HealthCacheType,\n HealthCacheTypeDto,\n MarginfiAccountType,\n MarginfiAccountTypeDto,\n} from \"../types\";\n\n/**\n * Convert numeric flag to BN for Solana compatibility\n */\nexport function accountFlagToBN(flag: AccountFlags): BN {\n return new BN(flag);\n}\n\nexport function marginfiAccountToDto(\n marginfiAccount: MarginfiAccountType\n): MarginfiAccountTypeDto {\n return {\n address: marginfiAccount.address.toBase58(),\n group: marginfiAccount.group.toBase58(),\n authority: marginfiAccount.authority.toBase58(),\n balances: marginfiAccount.balances.map(balanceToDto),\n accountFlags: marginfiAccount.accountFlags,\n emissionsDestinationAccount:\n marginfiAccount.emissionsDestinationAccount.toBase58(),\n healthCache: healthCacheToDto(marginfiAccount.healthCache),\n };\n}\n\nexport function balanceToDto(balance: BalanceType): BalanceTypeDto {\n return {\n active: balance.active,\n bankPk: balance.bankPk.toBase58(),\n assetShares: balance.assetShares.toString(),\n liabilityShares: balance.liabilityShares.toString(),\n emissionsOutstanding: balance.emissionsOutstanding.toString(),\n lastUpdate: balance.lastUpdate,\n };\n}\n\nexport function healthCacheToDto(\n healthCache: HealthCacheType\n): HealthCacheTypeDto {\n return {\n assetValue: healthCache.assetValue.toString(),\n liabilityValue: healthCache.liabilityValue.toString(),\n assetValueMaint: healthCache.assetValueMaint.toString(),\n liabilityValueMaint: healthCache.liabilityValueMaint.toString(),\n assetValueEquity: healthCache.assetValueEquity.toString(),\n liabilityValueEquity: healthCache.liabilityValueEquity.toString(),\n timestamp: healthCache.timestamp.toString(),\n flags: healthCache.flags,\n prices: healthCache.prices,\n simulationStatus: healthCache.simulationStatus,\n };\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\n\nimport {\n ActionEmodeImpact,\n ActiveEmodePair,\n EmodeImpact,\n EmodeImpactStatus,\n EmodePair,\n EmodeTag,\n} from \"~/services/bank/types\";\n\n/**\n * Creates an ActiveEmodePair from a list of active EmodePairs.\n * Selects the pair with the lowest assetWeightInit and aggregates all banks and tags.\n */\nexport function createActiveEmodePairFromPairs(\n pairs: EmodePair[]\n): ActiveEmodePair | undefined {\n if (pairs.length === 0) {\n return undefined;\n }\n\n // Find the pair with lowest assetWeightInit\n let bestPair = pairs[0]!;\n for (const p of pairs) {\n if (p.assetWeightInit.lt(bestPair.assetWeightInit)) {\n bestPair = p;\n }\n }\n\n // Aggregate all banks and tags from all pairs\n return {\n collateralBanks: Array.from(\n new Map(\n pairs\n .map((p) => p.collateralBanks)\n .flat()\n .map((bank) => [bank.toBase58(), bank])\n ).values()\n ),\n collateralBankTags: Array.from(\n new Set(pairs.map((p) => p.collateralBankTag).flat())\n ),\n liabilityBanks: Array.from(\n new Map(\n pairs\n .map((p) => p.liabilityBank)\n .flat()\n .map((bank) => [bank.toBase58(), bank])\n ).values()\n ),\n liabilityBankTags: Array.from(\n new Set(pairs.map((p) => p.liabilityBankTag).flat())\n ),\n assetWeightMaint: bestPair.assetWeightMaint,\n assetWeightInit: bestPair.assetWeightInit,\n };\n}\n\nexport function computeEmodeImpacts(\n emodePairs: EmodePair[],\n activeLiabilities: PublicKey[],\n activeCollateral: PublicKey[],\n allBanks: PublicKey[]\n): Record<string, ActionEmodeImpact> {\n const toKey = (k: PublicKey) => k.toBase58();\n\n // Baseline state\n const basePairs = computeActiveEmodePairs(\n emodePairs,\n activeLiabilities,\n activeCollateral\n );\n const baseOn = basePairs.length > 0;\n\n // Liability tag map & existing tags\n const liabTagMap = new Map<string, string>();\n for (const p of emodePairs) {\n liabTagMap.set(p.liabilityBank.toBase58(), p.liabilityBankTag.toString());\n }\n const existingTags = new Set<string>(\n activeLiabilities\n .map((l) => liabTagMap.get(l.toBase58()))\n .filter((t): t is string => !!t)\n );\n\n // Helper for min initial weight (used in diffState only)\n function minWeight(ps: EmodePair[]): BigNumber {\n // TODO: handle empty array\n let m = ps[0]!.assetWeightInit;\n for (const x of ps) if (x.assetWeightInit.lt(m)) m = x.assetWeightInit;\n return m;\n }\n\n // Determine status transitions\n function diffState(\n before: EmodePair[],\n after: EmodePair[]\n ): EmodeImpactStatus {\n const was = before.length > 0,\n isOn = after.length > 0;\n if (!was && !isOn) return EmodeImpactStatus.InactiveEmode;\n if (!was && isOn) return EmodeImpactStatus.ActivateEmode;\n if (was && !isOn) return EmodeImpactStatus.RemoveEmode;\n\n const bMin = minWeight(before),\n aMin = minWeight(after);\n if (aMin.gt(bMin)) return EmodeImpactStatus.IncreaseEmode;\n if (aMin.lt(bMin)) return EmodeImpactStatus.ReduceEmode;\n return EmodeImpactStatus.ExtendEmode;\n }\n\n // Simulation of each action\n function simulate(\n bank: PublicKey,\n action: \"borrow\" | \"repay\" | \"supply\" | \"withdraw\"\n ): EmodeImpact {\n const isSolBank = bank.equals(\n new PublicKey(\"CCKtUs6Cgwo4aaQUmBPmyoApH2gUDErxNZCAntD6LYGh\")\n );\n\n let L = [...activeLiabilities],\n C = [...activeCollateral];\n switch (action) {\n case \"borrow\":\n if (!L.some((x) => x.equals(bank))) L.push(bank);\n break;\n case \"repay\":\n L = L.filter((x) => !x.equals(bank));\n break;\n case \"supply\":\n if (!C.some((x) => x.equals(bank))) C.push(bank);\n break;\n case \"withdraw\":\n C = C.filter((x) => !x.equals(bank));\n break;\n }\n\n const after = computeActiveEmodePairs(emodePairs, L, C);\n let status = diffState(basePairs, after);\n\n // Borrow override\n if (action === \"borrow\") {\n const tag = liabTagMap.get(bank.toBase58());\n\n // Borrowing an unconfigured bank => EMODE off / inactive\n if (!tag) {\n status = baseOn\n ? EmodeImpactStatus.RemoveEmode\n : EmodeImpactStatus.InactiveEmode;\n\n // EMODE was ON; keep the diffState result unless EMODE really turns OFF\n } else if (baseOn) {\n if (after.length === 0) {\n status = EmodeImpactStatus.RemoveEmode;\n } else if (existingTags.has(tag)) {\n status = EmodeImpactStatus.ExtendEmode; // same tag ⇒ extend\n // else keep diffState (Increase/Reduce) which is already correct\n }\n }\n }\n\n // Supply override\n if (action === \"supply\") {\n const isOn = after.length > 0;\n status =\n !baseOn && isOn\n ? EmodeImpactStatus.ActivateEmode\n : baseOn && isOn\n ? EmodeImpactStatus.ExtendEmode\n : EmodeImpactStatus.InactiveEmode;\n }\n\n // Withdraw override\n if (action === \"withdraw\") {\n if (!baseOn) {\n status = EmodeImpactStatus.InactiveEmode;\n } else if (after.length === 0) {\n status = EmodeImpactStatus.RemoveEmode;\n } else {\n const b = minWeight(basePairs),\n a = minWeight(after);\n if (a.gt(b)) status = EmodeImpactStatus.IncreaseEmode;\n else if (a.lt(b)) status = EmodeImpactStatus.ReduceEmode;\n else status = EmodeImpactStatus.ExtendEmode;\n }\n }\n\n // Create active emode pair from resulting pairs\n const activeEmodePair = createActiveEmodePairFromPairs(after);\n\n return {\n status,\n resultingPairs: after,\n activePair: activeEmodePair,\n };\n }\n\n // Run simulations across allBanks\n const result: Record<string, ActionEmodeImpact> = {};\n for (const bank of allBanks) {\n const key = toKey(bank);\n const impact: ActionEmodeImpact = {};\n\n // Only new borrows\n if (!activeCollateral.some((x) => x.equals(bank))) {\n impact.borrowImpact = simulate(bank, \"borrow\");\n }\n\n // Only supply for collateral-configured banks not in play\n const collSet = new Set(\n emodePairs.flatMap((p) => p.collateralBanks.map((c) => c.toBase58()))\n );\n if (\n collSet.has(key) &&\n !activeCollateral.some((x) => x.equals(bank)) &&\n !activeLiabilities.some((x) => x.equals(bank))\n ) {\n impact.supplyImpact = simulate(bank, \"supply\");\n }\n\n if (activeLiabilities.some((x) => x.equals(bank))) {\n impact.repayAllImpact = simulate(bank, \"repay\");\n }\n if (activeCollateral.some((x) => x.equals(bank))) {\n impact.withdrawAllImpact = simulate(bank, \"withdraw\");\n }\n\n result[key] = impact;\n }\n\n return result;\n}\n\nexport function computeActiveEmodePairs(\n emodePairs: EmodePair[],\n activeLiabilities: PublicKey[],\n activeCollateral: PublicKey[]\n): EmodePair[] {\n // 1) Drop any pairs with an “unset” tag (0)\n const configured = emodePairs.filter(\n (p) =>\n p.collateralBankTag !== EmodeTag.UNSET &&\n p.liabilityBankTag !== EmodeTag.UNSET\n );\n\n // 2) Build the set of required liability‐tags from _all_ active liabilities\n // If any liability has no configured entry at all, EMODE is off.\n const liabTagByBank = new Map<string, string>();\n for (const p of configured) {\n liabTagByBank.set(\n p.liabilityBank.toBase58(),\n p.liabilityBankTag.toString()\n );\n }\n const requiredTags = new Set<string>();\n for (const liab of activeLiabilities) {\n const tag = liabTagByBank.get(liab.toBase58());\n if (!tag) {\n // a liability with no entries kills EMODE immediately\n return [];\n }\n requiredTags.add(tag);\n }\n\n // 3) Of those configured pairs, keep only ones touching both an active liability AND collateral\n const possible = configured.filter(\n (p) =>\n activeLiabilities.some((l) => l.equals(p.liabilityBank)) &&\n p.collateralBanks.some((c) => activeCollateral.some((a) => a.equals(c)))\n );\n if (possible.length === 0) return [];\n\n // 4) Group by collateral-tag\n const byCollTag: Record<string, EmodePair[]> = {};\n for (const p of possible) {\n const ct = p.collateralBankTag.toString();\n (byCollTag[ct] ||= []).push(p);\n }\n\n // 5) Find all groups whose liability-tags cover _every_ requiredTag\n const validGroups: EmodePair[][] = [];\n for (const group of Object.values(byCollTag)) {\n const supports = new Set(group.map((p) => p.liabilityBankTag.toString()));\n\n let coversAll = true;\n for (const rt of requiredTags) {\n if (!supports.has(rt)) {\n coversAll = false;\n break;\n }\n }\n if (coversAll) {\n validGroups.push(group);\n }\n }\n\n // 6) Return all valid groups flattened (selection happens elsewhere)\n if (validGroups.length === 0) return [];\n\n // Flatten all valid groups into a single array\n return validGroups.flat();\n}\n","import BigNumber from \"bignumber.js\";\nimport { PublicKey, TransactionInstruction } from \"@solana/web3.js\";\nimport { BorshInstructionCoder } from \"@coral-xyz/anchor\";\n\nimport {\n BankType,\n computeInterestRates,\n computeAssetUsdValue,\n computeLiabilityUsdValue,\n getAssetQuantity,\n getLiabilityQuantity,\n getAssetShares,\n getLiabilityShares,\n getAssetWeight,\n getLiabilityWeight,\n} from \"~/services/bank\";\nimport { getPrice, OraclePrice, PriceBias } from \"~/services/price\";\nimport { MarginfiProgram } from \"~/types\";\nimport { aprToApy, composeRemainingAccounts, nativeToUi, shortenAddress } from \"~/utils\";\n\nimport {\n MarginfiAccountType,\n BalanceType,\n MarginRequirementType,\n HealthCacheType,\n HealthCacheStatus,\n} from \"../types\";\n\n/**\n * Marginfi Account Computes\n * =========================\n */\n\nexport function computeFreeCollateral(\n marginfiAccount: MarginfiAccountType,\n opts?: { clamped?: boolean }\n): BigNumber {\n const _clamped = opts?.clamped ?? true;\n\n const { assets, liabilities } = computeHealthComponents(\n marginfiAccount,\n MarginRequirementType.Initial\n );\n\n const signedFreeCollateral = assets.minus(liabilities);\n\n return _clamped ? BigNumber.max(0, signedFreeCollateral) : signedFreeCollateral;\n}\n\nexport function computeFreeCollateralLegacy(\n activeBalances: BalanceType[],\n banks: Map<string, BankType>,\n oraclePrices: Map<string, OraclePrice>,\n opts?: { clamped?: boolean }\n): BigNumber {\n const _clamped = opts?.clamped ?? true;\n\n const { assets, liabilities } = computeHealthComponentsLegacy(\n activeBalances,\n banks,\n oraclePrices,\n MarginRequirementType.Initial,\n []\n );\n\n const signedFreeCollateral = assets.minus(liabilities);\n\n return _clamped ? BigNumber.max(0, signedFreeCollateral) : signedFreeCollateral;\n}\n\nexport function computeHealthComponents(\n marginfiAccount: MarginfiAccountType,\n marginReqType: MarginRequirementType\n): {\n assets: BigNumber;\n liabilities: BigNumber;\n} {\n // check if health cache failed\n switch (marginReqType) {\n case MarginRequirementType.Equity:\n return {\n assets: marginfiAccount.healthCache.assetValueEquity,\n liabilities: marginfiAccount.healthCache.liabilityValueEquity,\n };\n case MarginRequirementType.Initial:\n return {\n assets: marginfiAccount.healthCache.assetValue,\n liabilities: marginfiAccount.healthCache.liabilityValue,\n };\n case MarginRequirementType.Maintenance:\n return {\n assets: marginfiAccount.healthCache.assetValueMaint,\n liabilities: marginfiAccount.healthCache.liabilityValueMaint,\n };\n }\n}\n\nexport function computeHealthComponentsLegacy(\n activeBalances: BalanceType[],\n banks: Map<string, BankType>,\n oraclePrices: Map<string, OraclePrice>,\n marginReqType: MarginRequirementType,\n excludedBanks: PublicKey[] = [],\n activeEmodeWeights?: Record<\n string,\n {\n assetWeightMaint: BigNumber;\n assetWeightInit: BigNumber;\n }\n >\n): {\n assets: BigNumber;\n liabilities: BigNumber;\n} {\n const filteredBalances = activeBalances.filter(\n (accountBalance) => !excludedBanks.find((b) => b.equals(accountBalance.bankPk))\n );\n\n const updatedOraclePrices = new Map(oraclePrices);\n\n const [assets, liabilities] = filteredBalances\n .map((accountBalance) => {\n const bank = banks.get(accountBalance.bankPk.toBase58());\n if (!bank) {\n console.warn(\n `Bank ${shortenAddress(accountBalance.bankPk)} not found, excluding from health computation`\n );\n return [new BigNumber(0), new BigNumber(0)];\n }\n\n const priceInfo = updatedOraclePrices.get(accountBalance.bankPk.toBase58());\n if (!priceInfo) {\n console.warn(\n `Price info for bank ${shortenAddress(accountBalance.bankPk)} not found, excluding from health computation`\n );\n return [new BigNumber(0), new BigNumber(0)];\n }\n\n const emodeWeight = activeEmodeWeights?.[accountBalance.bankPk.toBase58()];\n\n // if emode weight is lower than bank config, use bank config\n const overrideWeights = emodeWeight\n ? {\n assetWeightInit: emodeWeight.assetWeightInit\n ? BigNumber.max(bank.config.assetWeightInit, emodeWeight.assetWeightInit)\n : bank.config.assetWeightInit,\n assetWeightMaint: emodeWeight.assetWeightMaint\n ? BigNumber.max(bank.config.assetWeightMaint, emodeWeight.assetWeightMaint)\n : bank.config.assetWeightMaint,\n }\n : undefined;\n\n const { assets, liabilities } = getBalanceUsdValueWithPriceBias(\n accountBalance,\n bank,\n priceInfo,\n marginReqType,\n overrideWeights\n );\n return [assets, liabilities];\n })\n .reduce(\n // TODO: figure out type assertion & remove\n ([asset, liability], [d, l]) => {\n return [asset!.plus(d!), liability!.plus(l!)];\n },\n [new BigNumber(0), new BigNumber(0)]\n );\n\n return { assets: assets!, liabilities: liabilities! };\n}\n\nexport function computeHealthComponentsWithoutBiasLegacy(\n activeBalances: BalanceType[],\n banks: Map<string, BankType>,\n oraclePrices: Map<string, OraclePrice>,\n marginReqType: MarginRequirementType,\n activeEmodeWeights?: Record<\n string,\n {\n assetWeightMaint: BigNumber;\n assetWeightInit: BigNumber;\n }\n >\n): {\n assets: BigNumber;\n liabilities: BigNumber;\n} {\n const updatedOraclePrices = new Map(oraclePrices);\n\n const [assets, liabilities] = activeBalances\n .map((accountBalance) => {\n const bank = banks.get(accountBalance.bankPk.toBase58());\n if (!bank) {\n console.warn(\n `Bank ${shortenAddress(accountBalance.bankPk)} not found, excluding from health computation`\n );\n return [new BigNumber(0), new BigNumber(0)];\n }\n\n const priceInfo = updatedOraclePrices.get(accountBalance.bankPk.toBase58());\n if (!priceInfo) {\n console.warn(\n `Price info for bank ${shortenAddress(accountBalance.bankPk)} not found, excluding from health computation`\n );\n return [new BigNumber(0), new BigNumber(0)];\n }\n\n const emodeWeight = activeEmodeWeights?.[accountBalance.bankPk.toBase58()];\n\n // if emode weight is lower than bank config, use bank config\n const overrideWeights = emodeWeight\n ? {\n assetWeightInit: emodeWeight.assetWeightInit\n ? BigNumber.max(bank.config.assetWeightInit, emodeWeight.assetWeightInit)\n : bank.config.assetWeightInit,\n assetWeightMaint: emodeWeight.assetWeightMaint\n ? BigNumber.max(bank.config.assetWeightMaint, emodeWeight.assetWeightMaint)\n : bank.config.assetWeightMaint,\n }\n : undefined;\n\n const { assets, liabilities } = computeBalanceUsdValue(\n accountBalance,\n bank,\n priceInfo,\n marginReqType,\n overrideWeights\n );\n return [assets, liabilities];\n })\n .reduce(\n // TODO: figure out type assertion & remove\n ([asset, liability], [d, l]) => {\n return [asset!.plus(d!), liability!.plus(l!)];\n },\n [new BigNumber(0), new BigNumber(0)]\n );\n\n return { assets: assets!, liabilities: liabilities! };\n}\n\nexport function computeAccountValue(marginfiAccount: MarginfiAccountType): BigNumber {\n const { assets, liabilities } = computeHealthComponents(\n marginfiAccount,\n MarginRequirementType.Equity\n );\n return assets.minus(liabilities);\n}\n\nexport function computeNetApy(\n marginfiAccount: MarginfiAccountType,\n activeBalances: BalanceType[],\n banks: Map<string, BankType>,\n oraclePrices: Map<string, OraclePrice>\n): number {\n const { assets, liabilities } = computeHealthComponents(\n marginfiAccount,\n MarginRequirementType.Equity\n );\n const totalUsdValue = assets.minus(liabilities);\n const apr = activeBalances\n .reduce((weightedApr, balance) => {\n const bank = banks.get(balance.bankPk.toBase58());\n if (!bank) {\n console.warn(\n `Bank ${shortenAddress(balance.bankPk)} not found, excluding from APY computation`\n );\n return weightedApr;\n }\n\n const priceInfo = oraclePrices.get(balance.bankPk.toBase58());\n if (!priceInfo) {\n console.warn(\n `Price info for bank ${shortenAddress(balance.bankPk)} not found, excluding from APY computation`\n );\n return weightedApr;\n }\n\n return weightedApr\n .minus(\n computeInterestRates(bank)\n .borrowingRate.times(\n computeBalanceUsdValue(balance, bank, priceInfo, MarginRequirementType.Equity)\n .liabilities\n )\n .div(totalUsdValue.isEqualTo(0) ? 1 : totalUsdValue)\n )\n .plus(\n computeInterestRates(bank)\n .lendingRate.times(\n computeBalanceUsdValue(balance, bank, priceInfo, MarginRequirementType.Equity).assets\n )\n .div(totalUsdValue.isEqualTo(0) ? 1 : totalUsdValue)\n );\n }, new BigNumber(0))\n .toNumber();\n\n return aprToApy(apr);\n}\n\n/**\n * Marginfi Balance Computes\n * =========================\n */\n\nexport function computeBalanceUsdValue(\n balance: BalanceType,\n bank: BankType,\n oraclePrice: OraclePrice,\n marginRequirementType: MarginRequirementType,\n overrideWeights?: {\n assetWeightMaint: BigNumber;\n assetWeightInit: BigNumber;\n }\n): {\n assets: BigNumber;\n liabilities: BigNumber;\n} {\n const assetsValue = computeAssetUsdValue(\n bank,\n oraclePrice,\n balance.assetShares,\n marginRequirementType,\n PriceBias.None,\n overrideWeights\n );\n const liabilitiesValue = computeLiabilityUsdValue(\n bank,\n oraclePrice,\n balance.liabilityShares,\n marginRequirementType,\n PriceBias.None\n );\n return { assets: assetsValue, liabilities: liabilitiesValue };\n}\n\nexport function getBalanceUsdValueWithPriceBias(\n balance: BalanceType,\n bank: BankType,\n oraclePrice: OraclePrice,\n marginRequirementType: MarginRequirementType,\n overrideWeights?: {\n assetWeightMaint: BigNumber;\n assetWeightInit: BigNumber;\n }\n): {\n assets: BigNumber;\n liabilities: BigNumber;\n} {\n const assetsValue = computeAssetUsdValue(\n bank,\n oraclePrice,\n balance.assetShares,\n marginRequirementType,\n PriceBias.Lowest,\n overrideWeights\n );\n const liabilitiesValue = computeLiabilityUsdValue(\n bank,\n oraclePrice,\n balance.liabilityShares,\n marginRequirementType,\n PriceBias.Highest\n );\n return { assets: assetsValue, liabilities: liabilitiesValue };\n}\n\nexport function computeQuantity(\n balance: BalanceType,\n bank: BankType\n): {\n assets: BigNumber;\n liabilities: BigNumber;\n} {\n const assetsQuantity = getAssetQuantity(bank, balance.assetShares);\n const liabilitiesQuantity = getLiabilityQuantity(bank, balance.liabilityShares);\n return { assets: assetsQuantity, liabilities: liabilitiesQuantity };\n}\n\nexport function computeQuantityUi(\n balance: BalanceType,\n bank: BankType\n): {\n assets: BigNumber;\n liabilities: BigNumber;\n} {\n const assetsQuantity = new BigNumber(\n nativeToUi(getAssetQuantity(bank, balance.assetShares), bank.mintDecimals)\n );\n const liabilitiesQuantity = new BigNumber(\n nativeToUi(getLiabilityQuantity(bank, balance.liabilityShares), bank.mintDecimals)\n );\n return { assets: assetsQuantity, liabilities: liabilitiesQuantity };\n}\n\nexport function computeClaimedEmissions(\n balance: BalanceType,\n bank: BankType,\n currentTimestamp: number\n): BigNumber {\n const lendingActive = bank.emissionsActiveLending;\n const borrowActive = bank.emissionsActiveBorrowing;\n\n const { assets, liabilities } = computeQuantity(balance, bank);\n\n let balanceAmount: BigNumber | null = null;\n\n if (lendingActive) {\n balanceAmount = assets;\n } else if (borrowActive) {\n balanceAmount = liabilities;\n }\n\n if (balanceAmount) {\n const lastUpdate = balance.lastUpdate;\n const period = new BigNumber(currentTimestamp - lastUpdate);\n const emissionsRate = new BigNumber(bank.emissionsRate);\n const emissions = period\n .times(balanceAmount)\n .times(emissionsRate)\n .div(31_536_000 * Math.pow(10, bank.mintDecimals));\n const emissionsReal = BigNumber.min(emissions, new BigNumber(bank.emissionsRemaining));\n\n return emissionsReal;\n }\n\n return new BigNumber(0);\n}\n\nexport function computeTotalOutstandingEmissions(balance: BalanceType, bank: BankType): BigNumber {\n const claimedEmissions = balance.emissionsOutstanding;\n const unclaimedEmissions = computeClaimedEmissions(balance, bank, Date.now() / 1000);\n return claimedEmissions.plus(unclaimedEmissions);\n}\n\nexport function computeHealthCheckAccounts(\n balances: BalanceType[],\n banks: Map<string, BankType>,\n mandatoryBanks: PublicKey[] = [],\n excludedBanks: PublicKey[] = []\n): BankType[] {\n const activeBalances = balances.filter((b) => b.active);\n\n const mandatoryBanksSet = new Set(mandatoryBanks.map((b) => b.toBase58()));\n const excludedBanksSet = new Set(excludedBanks.map((b) => b.toBase58()));\n const activeBanks = new Set(activeBalances.map((b) => b.bankPk.toBase58()));\n const banksToAdd = new Set([...mandatoryBanksSet].filter((x) => !activeBanks.has(x)));\n\n let slotsToKeep = banksToAdd.size;\n const projectedActiveBanks = balances\n .filter((balance) => {\n if (balance.active) {\n return !excludedBanksSet.has(balance.bankPk.toBase58());\n } else if (slotsToKeep > 0) {\n slotsToKeep--;\n return true;\n } else {\n return false;\n }\n })\n .map((balance) => {\n if (balance.active) {\n const bank = banks.get(balance.bankPk.toBase58());\n if (!bank) throw Error(`Bank ${balance.bankPk.toBase58()} not found`);\n return bank;\n }\n const newBankAddress = [...banksToAdd.values()][0]!;\n banksToAdd.delete(newBankAddress);\n const bank = banks.get(newBankAddress);\n if (!bank) throw Error(`Bank ${newBankAddress} not found`);\n return bank;\n });\n\n return projectedActiveBanks;\n}\n\nexport function computeHealthAccountMetas(\n banksToInclude: BankType[],\n enableSorting = true\n): PublicKey[] {\n let wrapperFn = enableSorting\n ? composeRemainingAccounts\n : (banksAndOracles: PublicKey[][]) => banksAndOracles.flat();\n\n const accounts = wrapperFn(\n banksToInclude.map((bank) => {\n let keys = [];\n if (bank.oracleKey.equals(PublicKey.default)) {\n keys = [bank.address];\n } else {\n keys = [bank.address, bank.oracleKey];\n }\n\n // for kamino banks, include kamino reserve\n if (bank.config.assetTag === 3) {\n keys.push(bank.kaminoReserve);\n }\n\n return keys;\n })\n );\n\n return accounts;\n}\n\nexport function createEmptyBalance(bankPk: PublicKey): BalanceType {\n const balance: BalanceType = {\n active: false,\n bankPk,\n assetShares: new BigNumber(0),\n liabilityShares: new BigNumber(0),\n emissionsOutstanding: new BigNumber(0),\n lastUpdate: 0,\n };\n\n return balance;\n}\n\nexport function getActiveBalances(balances: BalanceType[]): BalanceType[] {\n return balances.filter((b) => b.active);\n}\n\nexport function getBalance(bankAddress: PublicKey, balances: BalanceType[]): BalanceType {\n return (\n balances.filter((b) => b.active).find((b) => b.bankPk.equals(bankAddress)) ??\n createEmptyBalance(bankAddress)\n );\n}\n\nexport function computeLiquidationPriceForBank(\n bank: BankType,\n priceInfo: OraclePrice,\n marginfiAccount: MarginfiAccountType\n): number | null {\n const balance = getBalance(bank.address, marginfiAccount.balances);\n\n if (!balance.active) return null;\n\n const { assets: assetBank, liabilities: liabilitiesBank } = computeBalanceUsdValue(\n balance,\n bank,\n priceInfo,\n MarginRequirementType.Maintenance\n );\n\n const { assets: assetsAccount, liabilities: liabilitiesAccount } = computeHealthComponents(\n marginfiAccount,\n MarginRequirementType.Maintenance\n );\n\n const assets = assetsAccount.minus(assetBank);\n const liabilities = liabilitiesAccount.minus(liabilitiesBank);\n\n const isLending = balance.liabilityShares.isZero();\n const { assets: assetQuantityUi, liabilities: liabQuantitiesUi } = computeQuantityUi(\n balance,\n bank\n );\n\n let liquidationPrice: BigNumber;\n if (isLending) {\n if (liabilities.eq(0)) return null;\n\n const assetWeight = getAssetWeight(bank, MarginRequirementType.Maintenance, priceInfo);\n const priceConfidence = getPrice(priceInfo, PriceBias.None, false).minus(\n getPrice(priceInfo, PriceBias.Lowest, false)\n );\n liquidationPrice = liabilities\n .minus(assets)\n .div(assetQuantityUi.times(assetWeight))\n .plus(priceConfidence);\n } else {\n const liabWeight = getLiabilityWeight(bank.config, MarginRequirementType.Maintenance);\n const priceConfidence = getPrice(priceInfo, PriceBias.Highest, false).minus(\n getPrice(priceInfo, PriceBias.None, false)\n );\n liquidationPrice = assets\n .minus(liabilities)\n .div(liabQuantitiesUi.times(liabWeight))\n .minus(priceConfidence);\n }\n if (liquidationPrice.isNaN() || liquidationPrice.lt(0) || !liquidationPrice.isFinite())\n return null;\n return liquidationPrice.toNumber();\n}\n\nexport function computeProjectedActiveBanksNoCpi(\n balances: BalanceType[],\n instructions: TransactionInstruction[],\n program: MarginfiProgram\n): PublicKey[] {\n let projectedBalances = [...balances.map((b) => ({ active: b.active, bankPk: b.bankPk }))];\n\n for (let index = 0; index < instructions.length; index++) {\n const ix = instructions[index];\n\n if (!ix?.programId.equals(program.programId)) continue;\n\n const borshCoder = new BorshInstructionCoder(program.idl);\n const decoded = borshCoder.decode(ix.data, \"base58\");\n if (!decoded) continue;\n\n const ixArgs = decoded.data as any;\n\n switch (decoded.name) {\n case \"lendingAccountBorrow\":\n case \"kaminoDeposit\":\n case \"lendingAccountDeposit\": {\n const targetBank = new PublicKey(ix?.keys[3]!.pubkey);\n const targetBalance = projectedBalances.find((b) => b.bankPk.equals(targetBank));\n if (!targetBalance) {\n const firstInactiveBalanceIndex = projectedBalances.findIndex((b) => !b.active);\n if (firstInactiveBalanceIndex === -1 || !projectedBalances[firstInactiveBalanceIndex]) {\n throw Error(\"No inactive balance found\");\n }\n\n projectedBalances[firstInactiveBalanceIndex].active = true;\n projectedBalances[firstInactiveBalanceIndex].bankPk = targetBank;\n }\n break;\n }\n case \"lendingAccountRepay\":\n case \"kaminoWithdraw\":\n case \"lendingAccountWithdraw\": {\n const targetBank = new PublicKey(ix.keys[3]!.pubkey);\n const targetBalance = projectedBalances.find((b) => b.bankPk.equals(targetBank));\n if (!targetBalance) {\n throw Error(\n `Balance for bank ${targetBank.toBase58()} should be projected active at this point (ix ${index}: ${\n decoded.name\n }))`\n );\n }\n\n if (ixArgs.repayAll || ixArgs.withdrawAll) {\n targetBalance.active = false;\n targetBalance.bankPk = PublicKey.default;\n }\n break;\n }\n default: {\n continue;\n }\n }\n }\n\n return projectedBalances.filter((b) => b.active).map((b) => b.bankPk);\n}\n\n/**\n * Computes projected balances after applying a series of instructions.\n * Simulates how deposit/borrow/repay/withdraw instructions would change the account balances.\n *\n * This simulates both active/inactive state AND share amounts based on instruction arguments.\n *\n * @param balances - Current account balances\n * @param instructions - Instructions to simulate\n * @param program - Marginfi program for instruction decoding\n * @param bankMap - Map of bank addresses to bank data (needed for share value conversion)\n * @returns Projected balances after instructions are applied\n */\nexport function computeProjectedActiveBalancesNoCpi(\n balances: BalanceType[],\n instructions: TransactionInstruction[],\n program: MarginfiProgram,\n bankMap: Map<string, BankType>\n): {\n projectedBalances: BalanceType[];\n impactedAssetsBanks: string[];\n impactedLiabilityBanks: string[];\n} {\n // Deep clone all balances to avoid mutating original\n let projectedBalances: BalanceType[] = balances.map((b) => ({\n active: b.active,\n bankPk: b.bankPk,\n assetShares: new BigNumber(b.assetShares),\n liabilityShares: new BigNumber(b.liabilityShares),\n emissionsOutstanding: new BigNumber(b.emissionsOutstanding),\n lastUpdate: b.lastUpdate,\n }));\n\n const impactedAssetsBanks = new Set<string>();\n const impactedLiabilityBanks = new Set<string>();\n\n for (let index = 0; index < instructions.length; index++) {\n const ix = instructions[index];\n\n // Skip non-marginfi instructions\n if (!ix?.programId.equals(program.programId)) continue;\n\n const borshCoder = new BorshInstructionCoder(program.idl);\n const decoded = borshCoder.decode(ix.data, \"base58\");\n if (!decoded) continue;\n\n const ixArgs = decoded.data as any;\n\n switch (decoded.name) {\n // Instructions that open or add to a position\n case \"lendingAccountDeposit\":\n case \"kaminoDeposit\": {\n // Bank is at index 3 for these instructions (group, account, authority, bank, ...)\n const targetBank = new PublicKey(ix.keys[3]!.pubkey);\n impactedAssetsBanks.add(targetBank.toBase58());\n\n let targetBalance = projectedBalances.find((b) => b.bankPk.equals(targetBank));\n\n if (!targetBalance) {\n // Need to activate a new balance slot\n const firstInactiveBalanceIndex = projectedBalances.findIndex((b) => !b.active);\n\n if (firstInactiveBalanceIndex === -1 || !projectedBalances[firstInactiveBalanceIndex]) {\n throw Error(\"No inactive balance found\");\n }\n\n targetBalance = projectedBalances[firstInactiveBalanceIndex];\n targetBalance.active = true;\n targetBalance.bankPk = targetBank;\n targetBalance.assetShares = new BigNumber(0);\n targetBalance.liabilityShares = new BigNumber(0);\n }\n\n // Convert token amount to shares and add to asset shares\n const depositTokenAmount = new BigNumber(ixArgs.amount?.toString() || \"0\");\n const bank = bankMap.get(targetBank.toBase58());\n if (!bank) {\n throw Error(`Bank ${targetBank.toBase58()} not found in bankMap`);\n }\n const depositShares = getAssetShares(bank, depositTokenAmount);\n targetBalance.assetShares = targetBalance.assetShares.plus(depositShares);\n break;\n }\n\n case \"lendingAccountBorrow\": {\n const targetBank = new PublicKey(ix.keys[3]!.pubkey);\n impactedLiabilityBanks.add(targetBank.toBase58());\n\n let targetBalance = projectedBalances.find((b) => b.bankPk.equals(targetBank));\n\n if (!targetBalance) {\n // Need to activate a new balance slot\n const firstInactiveBalanceIndex = projectedBalances.findIndex((b) => !b.active);\n\n if (firstInactiveBalanceIndex === -1 || !projectedBalances[firstInactiveBalanceIndex]) {\n throw Error(\"No inactive balance found\");\n }\n\n targetBalance = projectedBalances[firstInactiveBalanceIndex];\n targetBalance.active = true;\n targetBalance.bankPk = targetBank;\n targetBalance.assetShares = new BigNumber(0);\n targetBalance.liabilityShares = new BigNumber(0);\n }\n\n // Convert token amount to shares and add to liability shares\n const borrowTokenAmount = new BigNumber(ixArgs.amount?.toString() || \"0\");\n const bank = bankMap.get(targetBank.toBase58());\n if (!bank) {\n throw Error(`Bank ${targetBank.toBase58()} not found in bankMap`);\n }\n const borrowShares = getLiabilityShares(bank, borrowTokenAmount);\n targetBalance.liabilityShares = targetBalance.liabilityShares.plus(borrowShares);\n break;\n }\n\n // Instructions that reduce or close positions\n case \"lendingAccountRepay\": {\n const targetBank = new PublicKey(ix.keys[3]!.pubkey);\n impactedLiabilityBanks.add(targetBank.toBase58());\n\n const targetBalance = projectedBalances.find((b) => b.bankPk.equals(targetBank));\n\n if (!targetBalance) {\n throw Error(\n `Balance for bank ${targetBank.toBase58()} should be projected active at this point (ix ${index}: ${\n decoded.name\n }))`\n );\n }\n\n // Check if this is a full repay\n if (ixArgs.repayAll) {\n targetBalance.liabilityShares = new BigNumber(0);\n\n // If no assets and no liabilities, close the balance\n if (targetBalance.assetShares.eq(0)) {\n targetBalance.active = false;\n targetBalance.bankPk = PublicKey.default;\n }\n } else {\n // Convert token amount to shares and subtract from liability shares\n const repayTokenAmount = new BigNumber(ixArgs.amount?.toString() || \"0\");\n const bank = bankMap.get(targetBank.toBase58());\n if (!bank) {\n throw Error(`Bank ${targetBank.toBase58()} not found in bankMap`);\n }\n const repayShares = getLiabilityShares(bank, repayTokenAmount);\n targetBalance.liabilityShares = BigNumber.max(\n 0,\n targetBalance.liabilityShares.minus(repayShares)\n );\n\n // If fully repaid and no assets, close the balance\n if (targetBalance.liabilityShares.eq(0) && targetBalance.assetShares.eq(0)) {\n targetBalance.active = false;\n targetBalance.bankPk = PublicKey.default;\n }\n }\n break;\n }\n\n case \"lendingAccountWithdraw\":\n case \"kaminoWithdraw\": {\n const targetBank = new PublicKey(ix.keys[3]!.pubkey);\n impactedAssetsBanks.add(targetBank.toBase58());\n\n const targetBalance = projectedBalances.find((b) => b.bankPk.equals(targetBank));\n\n if (!targetBalance) {\n throw Error(\n `Balance for bank ${targetBank.toBase58()} should be projected active at this point (ix ${index}: ${\n decoded.name\n }))`\n );\n }\n\n // Check if this is a full withdraw\n if (ixArgs.withdrawAll) {\n targetBalance.assetShares = new BigNumber(0);\n\n // If no assets and no liabilities, close the balance\n if (targetBalance.liabilityShares.eq(0)) {\n targetBalance.active = false;\n targetBalance.bankPk = PublicKey.default;\n }\n } else {\n // Convert token amount to shares and subtract from asset shares\n const withdrawTokenAmount = new BigNumber(ixArgs.amount?.toString() || \"0\");\n const bank = bankMap.get(targetBank.toBase58());\n if (!bank) {\n throw Error(`Bank ${targetBank.toBase58()} not found in bankMap`);\n }\n const withdrawShares = getAssetShares(bank, withdrawTokenAmount);\n targetBalance.assetShares = BigNumber.max(\n 0,\n targetBalance.assetShares.minus(withdrawShares)\n );\n\n // If fully withdrawn and no liabilities, close the balance\n if (targetBalance.assetShares.eq(0) && targetBalance.liabilityShares.eq(0)) {\n targetBalance.active = false;\n targetBalance.bankPk = PublicKey.default;\n }\n }\n break;\n }\n\n default: {\n // Ignore other instructions\n continue;\n }\n }\n }\n\n return {\n projectedBalances,\n impactedAssetsBanks: Array.from(impactedAssetsBanks),\n impactedLiabilityBanks: Array.from(impactedLiabilityBanks),\n };\n}\n\nexport function computeHealthCacheStatus(\n activeBalances: BalanceType[],\n bankMap: Map<string, BankType>,\n oraclePrices: Map<string, OraclePrice>,\n activeEmodeWeights?: Record<\n string,\n {\n assetWeightInit: BigNumber;\n assetWeightMaint: BigNumber;\n }\n >\n) {\n const { assets: assetValueEquity, liabilities: liabilityValueEquity } =\n computeHealthComponentsWithoutBiasLegacy(\n activeBalances,\n bankMap,\n oraclePrices,\n MarginRequirementType.Equity,\n activeEmodeWeights\n );\n\n const { assets: assetValueMaint, liabilities: liabilityValueMaint } =\n computeHealthComponentsLegacy(\n activeBalances,\n bankMap,\n oraclePrices,\n MarginRequirementType.Maintenance,\n [],\n activeEmodeWeights\n );\n\n const { assets: assetValueInitial, liabilities: liabilityValueInitial } =\n computeHealthComponentsLegacy(\n activeBalances,\n bankMap,\n oraclePrices,\n MarginRequirementType.Initial,\n [],\n activeEmodeWeights\n );\n\n const healthCache: HealthCacheType = {\n assetValue: assetValueInitial,\n liabilityValue: liabilityValueInitial,\n assetValueMaint: assetValueMaint,\n liabilityValueMaint: liabilityValueMaint,\n assetValueEquity: assetValueEquity,\n liabilityValueEquity: liabilityValueEquity,\n timestamp: new BigNumber(0),\n flags: [],\n prices: [],\n simulationStatus: HealthCacheStatus.COMPUTED,\n };\n\n return healthCache;\n}\n\nexport function computeLiabilityHealthComponent(\n balances: BalanceType[],\n bankMap: Map<string, BankType>,\n oraclePrices: Map<string, OraclePrice>,\n liabilityBanks: PublicKey[],\n marginRequirementType: MarginRequirementType\n): BigNumber {\n const liabilitySet = new Set(liabilityBanks.map((b) => b.toBase58()));\n\n // Filter to only include liability balances\n const liabilityBalances = balances.filter(\n (b) => b.active && liabilitySet.has(b.bankPk.toBase58())\n );\n\n const { liabilities } = computeHealthComponentsLegacy(\n liabilityBalances,\n bankMap,\n oraclePrices,\n marginRequirementType,\n []\n );\n\n return liabilities;\n}\n\n/**\n * Calculate asset health component for specific asset positions\n */\nexport function computeAssetHealthComponent(\n balances: BalanceType[],\n bankMap: Map<string, BankType>,\n oraclePrices: Map<string, OraclePrice>,\n assetBanks: PublicKey[],\n marginRequirementType: MarginRequirementType\n): BigNumber {\n const assetSet = new Set(assetBanks.map((b) => b.toBase58()));\n\n // Filter to only include asset balances\n const assetBalances = balances.filter((b) => b.active && assetSet.has(b.bankPk.toBase58()));\n\n const { assets } = computeHealthComponentsLegacy(\n assetBalances,\n bankMap,\n oraclePrices,\n marginRequirementType,\n []\n );\n\n return assets;\n}\n","import { PublicKey } from \"@solana/web3.js\";\n\nexport const KLEND_PROGRAM_ID = new PublicKey(\n \"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD\"\n);\nexport const FARMS_PROGRAM_ID = new PublicKey(\n \"FarmsPZpWu9i7Kky8tPN37rs2TpmMrAZrC7S7vJa91Hr\"\n);\n\nconst MAIN_MARKET: PublicKey = new PublicKey(\n \"7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF\"\n);\nconst MAIN_MARKET_LUT: PublicKey = new PublicKey(\n \"284iwGtA9X9aLy3KsyV8uT2pXLARhYbiSi5SiM2g47M2\"\n);\n\n// Slot timing constants (matches Kamino SDK)\nexport const SLOTS_PER_SECOND = 2;\n\nexport const SLOTS_PER_MINUTE = SLOTS_PER_SECOND * 60;\n\nexport const SLOTS_PER_HOUR = SLOTS_PER_MINUTE * 60;\n\nexport const SLOTS_PER_DAY = SLOTS_PER_HOUR * 24;\n\nexport const SLOTS_PER_YEAR = SLOTS_PER_DAY * 365;\n\n// Default slot duration in milliseconds\nexport const DEFAULT_RECENT_SLOT_DURATION_MS = 450;\n\nexport const ONE_HUNDRED_PCT_IN_BPS = 10_000;\n\nconst klendConstants = {\n MAIN_MARKET,\n MAIN_MARKET_LUT,\n KLEND_PROGRAM_ID,\n FARMS_PROGRAM_ID,\n};\n\nexport default klendConstants;\n","import { Address, Program } from \"@coral-xyz/anchor\";\nimport {\n AccountMeta,\n PublicKey,\n TransactionInstruction,\n} from \"@solana/web3.js\";\nimport { KlendIdlType } from \"./idl\";\nimport { bool, struct } from \"@coral-xyz/borsh\";\nimport { KLEND_PROGRAM_ID } from \"./constants\";\n\n/**\n * Refresh a generic Kamino reserve with a legacy Pyth oracle\n * @param program\n * @param reserve\n * @param market\n * @param oracle\n * @returns\n */\ntype MakeRefreshReserveIxParams = {\n program: Program<KlendIdlType>;\n reserve: PublicKey;\n market: PublicKey;\n pythOracle: PublicKey | null;\n switchboardPriceOracle: PublicKey | null;\n switchboardTwapOracle: PublicKey | null;\n scopePrices: PublicKey | null;\n};\n\nconst DEFAULT_PUBLIC_KEY: PublicKey = new PublicKey(\n \"11111111111111111111111111111111\"\n);\nconst NULL_PUBKEY: PublicKey = new PublicKey(\n \"nu11111111111111111111111111111111111111111\"\n);\n\nfunction isNotNullPubkey(pubkey: PublicKey | null): boolean {\n if (!pubkey) {\n return false;\n }\n return !pubkey.equals(NULL_PUBKEY) && !pubkey.equals(DEFAULT_PUBLIC_KEY);\n}\n\nfunction optionalAccount(pubkey: PublicKey | null): PublicKey | null {\n if (isNotNullPubkey(pubkey)) {\n return pubkey;\n } else {\n return null;\n }\n}\n\nconst makeRefreshReserveIx = ({\n program,\n reserve,\n market,\n pythOracle,\n switchboardPriceOracle,\n switchboardTwapOracle,\n scopePrices,\n}: MakeRefreshReserveIxParams) => {\n const ix = program.methods\n .refreshReserve()\n .accounts({\n reserve: reserve,\n lendingMarket: market,\n pythOracle: optionalAccount(pythOracle),\n switchboardPriceOracle: optionalAccount(switchboardPriceOracle),\n switchboardTwapOracle: optionalAccount(switchboardTwapOracle),\n scopePrices: optionalAccount(scopePrices),\n })\n .instruction();\n\n return ix;\n};\n\n/**\n * Refresh a generic Kamino obligation\n * @param program\n * @param market\n * @param obligation\n * @param remaining - pack the reserves used in this obligation, in the order they appear, starting\n * with lending reserves. For example, a user lending USDC at index 0, SOL at index 1, borrowing\n * BONK at index 0, pass [USDC, SOL, BONK] reserves\n * @returns\n */\nexport const REFRESH_OBLIGATION_DISCRIMINATOR = Buffer.from([\n 33, 132, 147, 228, 151, 192, 72, 89,\n]);\n\nexport interface RefreshObligationAccounts {\n lendingMarket: Address;\n obligation: Address;\n}\n\nexport const makeRefreshObligationIx = (\n lendingMarket: PublicKey,\n obligation: PublicKey,\n reserve: PublicKey\n): TransactionInstruction => {\n const keys: AccountMeta[] = [\n // lendingMarket: read-only, not a signer\n { pubkey: lendingMarket, isSigner: false, isWritable: false },\n\n // obligation: writable, not a signer (typical for state being updated)\n { pubkey: obligation, isSigner: false, isWritable: true },\n\n // any additional metas (e.g., oracles, reserves, payer signer, sysvars, etc.)\n {\n pubkey: reserve,\n isSigner: false,\n isWritable: false,\n },\n ];\n\n return new TransactionInstruction({\n keys,\n programId: KLEND_PROGRAM_ID,\n data: REFRESH_OBLIGATION_DISCRIMINATOR, // no extra encoding—just the 8-byte discriminator\n });\n};\n\nconst REFRESH_BATCH_DISCRIMINATOR = Buffer.from([\n 144, 110, 26, 103, 162, 204, 252, 147,\n]);\n\ninterface RefreshReservesBatchArgs {\n skipPriceUpdates: boolean;\n}\n\nexport const layout = struct<RefreshReservesBatchArgs>([\n bool(\"skipPriceUpdates\"),\n]);\n\ntype ReserveRemainingAccounts = {\n reserve: PublicKey;\n lendingMarket: PublicKey;\n};\n\nexport function makeRefreshReservesBatchIx(\n reserves: ReserveRemainingAccounts[],\n programId: PublicKey = KLEND_PROGRAM_ID\n) {\n const remainingAccounts = reserves.flatMap((reserve) => [\n {\n pubkey: reserve.reserve,\n isSigner: false,\n isWritable: true,\n },\n {\n pubkey: reserve.lendingMarket,\n isSigner: false,\n isWritable: false,\n },\n ]);\n\n const keys: Array<AccountMeta> = [...remainingAccounts];\n const buffer = Buffer.alloc(1000);\n const len = layout.encode(\n {\n skipPriceUpdates: true,\n },\n buffer\n );\n const data = Buffer.concat([REFRESH_BATCH_DISCRIMINATOR, buffer]).slice(\n 0,\n 8 + len\n );\n const ix = new TransactionInstruction({\n programId,\n keys,\n data,\n });\n return ix;\n}\n\nconst klendInstructions = {\n makeRefreshReserveIx,\n makeRefreshObligationIx,\n makeRefreshReservesBatchIx,\n};\n\nexport default klendInstructions;\n","import {\n AddressLookupTableAccount,\n Keypair,\n PublicKey,\n Transaction,\n TransactionInstruction,\n TransactionMessage,\n VersionedTransaction,\n} from \"@solana/web3.js\";\nimport BN from \"bn.js\";\nimport BigNumber from \"bignumber.js\";\n\nimport { addTransactionMetadata, SolanaTransaction, TransactionType } from \"~/services/transaction\";\nimport {\n createAssociatedTokenAccountIdempotentInstruction,\n getAssociatedTokenAddressSync,\n TOKEN_2022_PROGRAM_ID,\n} from \"~/vendor/spl\";\nimport instructions from \"~/instructions\";\nimport { MarginfiProgram } from \"~/types\";\nimport { BankType } from \"~/services/bank\";\nimport { bigNumberToWrappedI80F48, deriveMarginfiAccount } from \"~/utils\";\n\nimport {\n BalanceRaw,\n BalanceType,\n MakeCloseAccountIxParams,\n MakeCloseAccountTxParams,\n MakeSetupIxParams,\n MarginfiAccountRaw,\n MarginfiAccountType,\n} from \"../types\";\nimport {\n computeHealthAccountMetas,\n computeHealthCheckAccounts,\n parseMarginfiAccountRaw,\n} from \"../utils\";\n\n/**\n * Creates an instruction to close a Marginfi account.\n *\n * Generates the instruction needed to close an existing Marginfi account and reclaim rent.\n * The account must have no active balances before it can be closed.\n *\n * @param params - Configuration object\n * @param params.program - The Marginfi program instance\n * @param params.marginfiAccount - The Marginfi account to close\n * @param params.authority - The authority/owner of the account\n * @returns Instruction to close the account\n */\nexport async function makeCloseMarginfiAccountIx({\n program,\n marginfiAccount,\n authority,\n}: MakeCloseAccountIxParams) {\n const closeIx = await instructions.makeCloseAccountIx(program, {\n marginfiAccount: marginfiAccount.address,\n feePayer: authority,\n });\n\n return closeIx;\n}\n\n/**\n * Creates a transaction to close a Marginfi account.\n *\n * Generates a complete transaction to close an existing Marginfi account and reclaim rent.\n * The account must have no active balances before it can be closed.\n *\n * @param params - Configuration object\n * @param params.connection - Solana connection instance\n * @param params.program - The Marginfi program instance\n * @param params.marginfiAccount - The Marginfi account to close\n * @param params.authority - The authority/owner of the account\n * @returns Versioned transaction to close the account\n */\nexport async function makeCloseMarginfiAccountTx({\n connection,\n program,\n marginfiAccount,\n authority,\n}: MakeCloseAccountTxParams) {\n const closeIx = await instructions.makeCloseAccountIx(program, {\n marginfiAccount: marginfiAccount.address,\n feePayer: authority,\n });\n\n const {\n value: { blockhash },\n } = await connection.getLatestBlockhashAndContext(\"confirmed\");\n\n const closeTx = addTransactionMetadata(\n new VersionedTransaction(\n new TransactionMessage({\n instructions: [closeIx],\n payerKey: authority,\n recentBlockhash: blockhash,\n }).compileToV0Message([])\n ),\n {\n signers: [],\n addressLookupTables: [],\n type: TransactionType.CLOSE_ACCOUNT,\n }\n );\n\n return closeTx;\n}\n\n/**\n * Creates a new Marginfi account transaction with a projected account instance.\n *\n * Generates a transaction to create a new Marginfi account and returns a projected account instance\n * that can be used for operations before the account actually exists on-chain.\n *\n * @param props - Configuration object\n * @param props.program - The Marginfi program instance\n * @param props.authority - The authority public key for the new account\n * @param props.group - The Marginfi group public key\n * @param props.addressLookupTables - Address lookup tables for the transaction\n * @returns Object containing the projected account and creation transaction\n */\nexport async function makeCreateAccountTxWithProjection(props: {\n program: MarginfiProgram;\n authority: PublicKey;\n group: PublicKey;\n addressLookupTables: AddressLookupTableAccount[];\n accountIndex: number;\n thirdPartyId?: number;\n}): Promise<{ account: MarginfiAccountType; tx: SolanaTransaction }> {\n const [marginfiAccountAddress] = deriveMarginfiAccount(\n props.program.programId,\n props.group,\n props.authority,\n props.accountIndex,\n props.thirdPartyId\n );\n\n const account = generateDummyAccount(props.group, props.authority, marginfiAccountAddress);\n const tx = await makeCreateMarginfiAccountTx(\n props.program,\n props.authority,\n props.group,\n props.addressLookupTables,\n props.accountIndex,\n props.thirdPartyId\n );\n\n return {\n account,\n tx,\n };\n}\n\n/**\n * Creates a new Marginfi account instruction with a projected account instance.\n *\n * Generates an instruction to create a new Marginfi account and returns a projected account instance\n * that can be used for operations before the account actually exists on-chain.\n *\n * @param props - Configuration object\n * @param props.program - The Marginfi program instance\n * @param props.authority - The authority public key for the new account\n * @param props.group - The Marginfi group public key\n * @returns Object containing the projected account and creation instruction\n */\nexport async function makeCreateAccountIxWithProjection(props: {\n program: MarginfiProgram;\n authority: PublicKey;\n group: PublicKey;\n accountIndex: number;\n thirdPartyId?: number;\n}): Promise<{ account: MarginfiAccountType; ix: TransactionInstruction }> {\n const [marginfiAccountAddress] = deriveMarginfiAccount(\n props.program.programId,\n props.group,\n props.authority,\n props.accountIndex,\n props.thirdPartyId\n );\n\n const account = generateDummyAccount(props.group, props.authority, marginfiAccountAddress);\n const ix = await makeCreateMarginfiAccountIx(\n props.program,\n props.authority,\n props.group,\n props.accountIndex,\n props.thirdPartyId\n );\n\n return {\n account,\n ix,\n };\n}\n\nexport async function makeCreateMarginfiAccountTx(\n program: MarginfiProgram,\n authority: PublicKey,\n groupAddress: PublicKey,\n addressLookupTables: AddressLookupTableAccount[],\n accountIndex: number,\n thirdPartyId?: number\n): Promise<SolanaTransaction> {\n const [marginfiAccountAddress] = deriveMarginfiAccount(\n program.programId,\n groupAddress,\n authority,\n accountIndex,\n thirdPartyId\n );\n\n const initMarginfiAccountIx = await instructions.makeInitMarginfiAccountPdaIx(\n program,\n {\n marginfiGroup: groupAddress,\n marginfiAccount: marginfiAccountAddress,\n authority,\n feePayer: authority,\n },\n {\n accountIndex,\n thirdPartyId,\n }\n );\n\n const ixs = [initMarginfiAccountIx];\n\n const signers: Keypair[] = [];\n\n const tx = new Transaction().add(...ixs);\n tx.feePayer = authority;\n const solanaTx = addTransactionMetadata(tx, {\n signers,\n addressLookupTables,\n type: TransactionType.CREATE_ACCOUNT,\n });\n\n return solanaTx;\n}\n\nexport async function makeCreateMarginfiAccountIx(\n program: MarginfiProgram,\n authority: PublicKey,\n groupAddress: PublicKey,\n accountIndex: number,\n thirdPartyId?: number\n): Promise<TransactionInstruction> {\n const [marginfiAccountAddress] = deriveMarginfiAccount(\n program.programId,\n groupAddress,\n authority,\n accountIndex,\n thirdPartyId\n );\n\n const initMarginfiAccountIx = await instructions.makeInitMarginfiAccountPdaIx(\n program,\n {\n marginfiGroup: groupAddress,\n marginfiAccount: marginfiAccountAddress,\n authority,\n feePayer: authority,\n },\n {\n accountIndex,\n thirdPartyId,\n }\n );\n\n return initMarginfiAccountIx;\n}\n\nexport async function makeSetupIx({ connection, authority, tokens }: MakeSetupIxParams) {\n try {\n // Filter out duplicate mints\n const uniqueTokens = tokens.filter(\n (token, index, self) => index === self.findIndex((t) => t.mint.equals(token.mint))\n );\n\n const userAtas = uniqueTokens.map((token) => {\n return getAssociatedTokenAddressSync(\n new PublicKey(token.mint),\n authority,\n true,\n token.tokenProgram.equals(TOKEN_2022_PROGRAM_ID) ? TOKEN_2022_PROGRAM_ID : undefined\n );\n });\n\n let ixs = [];\n const userAtaAis = await connection.getMultipleAccountsInfo(userAtas);\n\n for (const [i, userAta] of userAtaAis.entries()) {\n const token = tokens[i];\n const userAtaAddress = userAtas[i];\n if (userAta === null && token && userAtaAddress) {\n ixs.push(\n createAssociatedTokenAccountIdempotentInstruction(\n authority,\n userAtaAddress,\n authority,\n new PublicKey(token.mint),\n token.tokenProgram.equals(TOKEN_2022_PROGRAM_ID) ? TOKEN_2022_PROGRAM_ID : undefined\n )\n );\n }\n }\n\n return ixs;\n } catch {\n return [];\n }\n}\n\nexport async function makePulseHealthIx(\n program: MarginfiProgram,\n marginfiAccountPk: PublicKey,\n banks: Map<string, BankType>,\n balances: BalanceType[],\n mandatoryBanks: PublicKey[],\n excludedBanks: PublicKey[]\n) {\n const healthAccounts = computeHealthCheckAccounts(balances, banks, mandatoryBanks, excludedBanks);\n const accountMetas = computeHealthAccountMetas(healthAccounts);\n\n // const sortIx = await instructions.makeLendingAccountSortBalancesIx(program, {\n // marginfiAccount: marginfiAccountPk,\n // });\n\n const ix = await instructions.makePulseHealthIx(\n program,\n {\n marginfiAccount: marginfiAccountPk,\n },\n accountMetas.map((account) => ({\n pubkey: account,\n isSigner: false,\n isWritable: false,\n }))\n );\n\n return { instructions: [ix], keys: [] };\n}\n\nfunction generateDummyAccount(group: PublicKey, authority: PublicKey, accountKey: PublicKey) {\n // create a dummy account with 15 empty balances to be used in other transactions\n const dummyWrappedI80F48 = bigNumberToWrappedI80F48(new BigNumber(0));\n const dummyBalances: BalanceRaw[] = Array(15).fill({\n active: false,\n bankPk: new PublicKey(\"11111111111111111111111111111111\"),\n assetShares: dummyWrappedI80F48,\n liabilityShares: dummyWrappedI80F48,\n emissionsOutstanding: dummyWrappedI80F48,\n lastUpdate: new BN(0),\n });\n const rawAccount: MarginfiAccountRaw = {\n group: group,\n authority: authority,\n lendingAccount: { balances: dummyBalances },\n healthCache: {\n assetValue: {\n value: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n },\n liabilityValue: {\n value: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n },\n timestamp: new BN(0),\n flags: 0,\n prices: [],\n assetValueMaint: bigNumberToWrappedI80F48(new BigNumber(0)),\n liabilityValueMaint: bigNumberToWrappedI80F48(new BigNumber(0)),\n assetValueEquity: bigNumberToWrappedI80F48(new BigNumber(0)),\n liabilityValueEquity: bigNumberToWrappedI80F48(new BigNumber(0)),\n errIndex: 0,\n internalErr: 0,\n internalBankruptcyErr: 0,\n internalLiqErr: 0,\n mrgnErr: 0,\n },\n emissionsDestinationAccount: new PublicKey(\"11111111111111111111111111111111\"),\n accountFlags: new BN([0, 0, 0]),\n };\n\n return parseMarginfiAccountRaw(accountKey, rawAccount);\n}\n","import { Program } from \"@coral-xyz/anchor\";\nimport { PublicKey } from \"@solana/web3.js\";\n\nimport { KlendIdlType } from \"./idl\";\nimport klendInstructions from \"./instructions\";\nimport { ReserveRaw } from \"./types\";\n\ntype MakeRefreshingIxsParams = {\n klendProgram: Program<KlendIdlType>;\n // A \"bank\" in Kamino parlance\n reserve: ReserveRaw;\n reserveKey: PublicKey;\n obligationKey: PublicKey;\n program: Program<KlendIdlType>;\n};\n\nexport async function makeRefreshingIxs({\n klendProgram,\n reserve,\n reserveKey,\n obligationKey,\n program,\n}: MakeRefreshingIxsParams) {\n const tokenInfo = reserve.config.tokenInfo;\n const lendingMarket = reserve.lendingMarket;\n const refreshReserveIx = await klendInstructions.makeRefreshReserveIx({\n program: klendProgram,\n reserve: reserveKey,\n market: lendingMarket,\n pythOracle: tokenInfo.pythConfiguration.price,\n switchboardPriceOracle: tokenInfo.switchboardConfiguration.priceAggregator,\n switchboardTwapOracle: tokenInfo.switchboardConfiguration.twapAggregator,\n scopePrices: tokenInfo.scopeConfiguration.priceFeed,\n });\n\n const refreshObligationIx = klendInstructions.makeRefreshObligationIx(\n lendingMarket,\n obligationKey,\n reserveKey\n );\n\n return [refreshReserveIx, refreshObligationIx];\n}\n","import {\n ObligationCollateralFields,\n ObligationCollateralJSON,\n ObligationJSON,\n ObligationLiquidityFields,\n ObligationLiquidityJSON,\n ObligationOrderFields,\n ObligationOrderJSON,\n ObligationRaw,\n ReserveConfigFields,\n ReserveConfigJSON,\n ReserveJSON,\n ReserveLiquidityFields,\n ReserveLiquidityJSON,\n ReserveRaw,\n TokenInfoFields,\n TokenInfoJSON,\n WithdrawalCapsFields,\n WithdrawalCapsJSON,\n} from \"../../types\";\n\nexport function obligationRawToDto(\n obligationRaw: ObligationRaw\n): ObligationJSON {\n return {\n tag: obligationRaw.tag.toString(),\n lastUpdate: {\n slot: obligationRaw.lastUpdate.slot.toString(),\n stale: obligationRaw.lastUpdate.stale,\n priceStatus: obligationRaw.lastUpdate.priceStatus,\n placeholder: obligationRaw.lastUpdate.placeholder,\n },\n lendingMarket: obligationRaw.lendingMarket.toBase58(),\n owner: obligationRaw.owner.toBase58(),\n deposits: obligationRaw.deposits.map((item) =>\n obligationCollateralToDto(item)\n ),\n lowestReserveDepositLiquidationLtv:\n obligationRaw.lowestReserveDepositLiquidationLtv.toString(),\n depositedValueSf: obligationRaw.depositedValueSf.toString(),\n borrows: obligationRaw.borrows.map((item) =>\n obligationLiquidityToDto(item)\n ),\n borrowFactorAdjustedDebtValueSf:\n obligationRaw.borrowFactorAdjustedDebtValueSf.toString(),\n borrowedAssetsMarketValueSf:\n obligationRaw.borrowedAssetsMarketValueSf.toString(),\n allowedBorrowValueSf: obligationRaw.allowedBorrowValueSf.toString(),\n unhealthyBorrowValueSf: obligationRaw.unhealthyBorrowValueSf.toString(),\n depositsAssetTiers: obligationRaw.depositsAssetTiers,\n borrowsAssetTiers: obligationRaw.borrowsAssetTiers,\n elevationGroup: obligationRaw.elevationGroup,\n numOfObsoleteDepositReserves: obligationRaw.numOfObsoleteDepositReserves,\n hasDebt: obligationRaw.hasDebt,\n referrer: obligationRaw.referrer.toBase58(),\n borrowingDisabled: obligationRaw.borrowingDisabled,\n autodeleverageTargetLtvPct: obligationRaw.autodeleverageTargetLtvPct,\n lowestReserveDepositMaxLtvPct: obligationRaw.lowestReserveDepositMaxLtvPct,\n numOfObsoleteBorrowReserves: obligationRaw.numOfObsoleteBorrowReserves,\n reserved: obligationRaw.reserved,\n highestBorrowFactorPct: obligationRaw.highestBorrowFactorPct.toString(),\n autodeleverageMarginCallStartedTimestamp:\n obligationRaw.autodeleverageMarginCallStartedTimestamp.toString(),\n orders: obligationRaw.orders.map((item) => obligationOrderToDto(item)),\n padding3: obligationRaw.padding3.map((item) => item.toString()),\n };\n}\n\nexport function reserveRawToDto(reserveRaw: ReserveRaw): ReserveJSON {\n return {\n version: reserveRaw.version.toString(),\n lastUpdate: {\n slot: reserveRaw.lastUpdate.slot.toString(),\n stale: reserveRaw.lastUpdate.stale,\n priceStatus: reserveRaw.lastUpdate.priceStatus,\n placeholder: reserveRaw.lastUpdate.placeholder,\n },\n lendingMarket: reserveRaw.lendingMarket.toBase58(),\n farmCollateral: reserveRaw.farmCollateral.toBase58(),\n farmDebt: reserveRaw.farmDebt.toBase58(),\n liquidity: reserveLiquidityFieldsToDto(reserveRaw.liquidity),\n reserveLiquidityPadding: reserveRaw.reserveLiquidityPadding.map((item) =>\n item.toString()\n ),\n collateral: {\n mintPubkey: reserveRaw.collateral.mintPubkey.toBase58(),\n mintTotalSupply: reserveRaw.collateral.mintTotalSupply.toString(),\n supplyVault: reserveRaw.collateral.supplyVault.toBase58(),\n padding1: reserveRaw.collateral.padding1.map((item) => item.toString()),\n padding2: reserveRaw.collateral.padding2.map((item) => item.toString()),\n },\n reserveCollateralPadding: reserveRaw.reserveCollateralPadding.map((item) =>\n item.toString()\n ),\n config: reserveConfigFieldsToDto(reserveRaw.config),\n configPadding: reserveRaw.configPadding.map((item) => item.toString()),\n borrowedAmountOutsideElevationGroup:\n reserveRaw.borrowedAmountOutsideElevationGroup.toString(),\n borrowedAmountsAgainstThisReserveInElevationGroups:\n reserveRaw.borrowedAmountsAgainstThisReserveInElevationGroups.map(\n (item) => item.toString()\n ),\n padding: reserveRaw.padding.map((item) => item.toString()),\n };\n}\n\nfunction reserveLiquidityFieldsToDto(\n reserveLiquidityFields: ReserveLiquidityFields\n): ReserveLiquidityJSON {\n return {\n mintPubkey: reserveLiquidityFields.mintPubkey.toBase58(),\n supplyVault: reserveLiquidityFields.supplyVault.toBase58(),\n feeVault: reserveLiquidityFields.feeVault.toBase58(),\n availableAmount: reserveLiquidityFields.availableAmount.toString(),\n borrowedAmountSf: reserveLiquidityFields.borrowedAmountSf.toString(),\n marketPriceSf: reserveLiquidityFields.marketPriceSf.toString(),\n marketPriceLastUpdatedTs:\n reserveLiquidityFields.marketPriceLastUpdatedTs.toString(),\n mintDecimals: reserveLiquidityFields.mintDecimals.toString(),\n depositLimitCrossedTimestamp:\n reserveLiquidityFields.depositLimitCrossedTimestamp.toString(),\n borrowLimitCrossedTimestamp:\n reserveLiquidityFields.borrowLimitCrossedTimestamp.toString(),\n cumulativeBorrowRateBsf: {\n value: reserveLiquidityFields.cumulativeBorrowRateBsf.value.map((item) =>\n item.toString()\n ),\n padding: reserveLiquidityFields.cumulativeBorrowRateBsf.padding.map(\n (item) => item.toString()\n ),\n },\n accumulatedProtocolFeesSf:\n reserveLiquidityFields.accumulatedProtocolFeesSf.toString(),\n accumulatedReferrerFeesSf:\n reserveLiquidityFields.accumulatedReferrerFeesSf.toString(),\n pendingReferrerFeesSf:\n reserveLiquidityFields.pendingReferrerFeesSf.toString(),\n absoluteReferralRateSf:\n reserveLiquidityFields.absoluteReferralRateSf.toString(),\n tokenProgram: reserveLiquidityFields.tokenProgram.toBase58(),\n padding2: reserveLiquidityFields.padding2.map((item) => item.toString()),\n padding3: reserveLiquidityFields.padding3.map((item) => item.toString()),\n };\n}\n\nfunction reserveConfigFieldsToDto(\n reserveConfigFields: ReserveConfigFields\n): ReserveConfigJSON {\n return {\n status: reserveConfigFields.status,\n assetTier: reserveConfigFields.assetTier,\n hostFixedInterestRateBps: reserveConfigFields.hostFixedInterestRateBps,\n reserved2: reserveConfigFields.reserved2,\n protocolOrderExecutionFeePct:\n reserveConfigFields.protocolOrderExecutionFeePct,\n protocolTakeRatePct: reserveConfigFields.protocolTakeRatePct,\n protocolLiquidationFeePct: reserveConfigFields.protocolLiquidationFeePct,\n loanToValuePct: reserveConfigFields.loanToValuePct,\n liquidationThresholdPct: reserveConfigFields.liquidationThresholdPct,\n minLiquidationBonusBps: reserveConfigFields.minLiquidationBonusBps,\n maxLiquidationBonusBps: reserveConfigFields.maxLiquidationBonusBps,\n badDebtLiquidationBonusBps: reserveConfigFields.badDebtLiquidationBonusBps,\n deleveragingMarginCallPeriodSecs:\n reserveConfigFields.deleveragingMarginCallPeriodSecs.toString(),\n deleveragingThresholdDecreaseBpsPerDay:\n reserveConfigFields.deleveragingThresholdDecreaseBpsPerDay.toString(),\n fees: {\n borrowFeeSf: reserveConfigFields.fees.borrowFeeSf.toString(),\n flashLoanFeeSf: reserveConfigFields.fees.flashLoanFeeSf.toString(),\n padding: reserveConfigFields.fees.padding,\n },\n borrowRateCurve: {\n points: reserveConfigFields.borrowRateCurve.points.map((item) => ({\n utilizationRateBps: item.utilizationRateBps,\n borrowRateBps: item.borrowRateBps,\n })),\n },\n borrowFactorPct: reserveConfigFields.borrowFactorPct.toString(),\n depositLimit: reserveConfigFields.depositLimit.toString(),\n borrowLimit: reserveConfigFields.borrowLimit.toString(),\n tokenInfo: tokenInfoFieldsToDto(reserveConfigFields.tokenInfo),\n depositWithdrawalCap: withdrawalCapsFieldsToDto(\n reserveConfigFields.depositWithdrawalCap\n ),\n debtWithdrawalCap: withdrawalCapsFieldsToDto(\n reserveConfigFields.debtWithdrawalCap\n ),\n elevationGroups: reserveConfigFields.elevationGroups,\n disableUsageAsCollOutsideEmode:\n reserveConfigFields.disableUsageAsCollOutsideEmode,\n utilizationLimitBlockBorrowingAbovePct:\n reserveConfigFields.utilizationLimitBlockBorrowingAbovePct,\n autodeleverageEnabled: reserveConfigFields.autodeleverageEnabled,\n reserved1: reserveConfigFields.reserved1,\n borrowLimitOutsideElevationGroup:\n reserveConfigFields.borrowLimitOutsideElevationGroup.toString(),\n borrowLimitAgainstThisCollateralInElevationGroup:\n reserveConfigFields.borrowLimitAgainstThisCollateralInElevationGroup.map(\n (item) => item.toString()\n ),\n deleveragingBonusIncreaseBpsPerDay:\n reserveConfigFields.deleveragingBonusIncreaseBpsPerDay.toString(),\n };\n}\n\nfunction tokenInfoFieldsToDto(tokenInfoFields: TokenInfoFields): TokenInfoJSON {\n return {\n name: tokenInfoFields.name,\n heuristic: {\n lower: tokenInfoFields.heuristic.lower.toString(),\n upper: tokenInfoFields.heuristic.upper.toString(),\n exp: tokenInfoFields.heuristic.exp.toString(),\n },\n maxTwapDivergenceBps: tokenInfoFields.maxTwapDivergenceBps.toString(),\n maxAgePriceSeconds: tokenInfoFields.maxAgePriceSeconds.toString(),\n maxAgeTwapSeconds: tokenInfoFields.maxAgeTwapSeconds.toString(),\n scopeConfiguration: {\n priceFeed: tokenInfoFields.scopeConfiguration.priceFeed.toBase58(),\n priceChain: tokenInfoFields.scopeConfiguration.priceChain,\n twapChain: tokenInfoFields.scopeConfiguration.twapChain,\n },\n switchboardConfiguration: {\n priceAggregator:\n tokenInfoFields.switchboardConfiguration.priceAggregator.toBase58(),\n twapAggregator:\n tokenInfoFields.switchboardConfiguration.twapAggregator.toBase58(),\n },\n pythConfiguration: {\n price: tokenInfoFields.pythConfiguration.price.toBase58(),\n },\n blockPriceUsage: tokenInfoFields.blockPriceUsage,\n reserved: tokenInfoFields.reserved,\n padding: tokenInfoFields.padding.map((item) => item.toString()),\n };\n}\n\nfunction withdrawalCapsFieldsToDto(\n withdrawalCapsFields: WithdrawalCapsFields\n): WithdrawalCapsJSON {\n return {\n configCapacity: withdrawalCapsFields.configCapacity.toString(),\n currentTotal: withdrawalCapsFields.currentTotal.toString(),\n lastIntervalStartTimestamp:\n withdrawalCapsFields.lastIntervalStartTimestamp.toString(),\n configIntervalLengthSeconds:\n withdrawalCapsFields.configIntervalLengthSeconds.toString(),\n };\n}\n\nfunction obligationCollateralToDto(\n obligationCollateralFields: ObligationCollateralFields\n): ObligationCollateralJSON {\n return {\n depositReserve: obligationCollateralFields.depositReserve.toBase58(),\n depositedAmount: obligationCollateralFields.depositedAmount.toString(),\n marketValueSf: obligationCollateralFields.marketValueSf.toString(),\n borrowedAmountAgainstThisCollateralInElevationGroup:\n obligationCollateralFields.borrowedAmountAgainstThisCollateralInElevationGroup.toString(),\n padding: obligationCollateralFields.padding.map((item) => item.toString()),\n };\n}\n\nfunction obligationLiquidityToDto(\n obligationLiquidityFields: ObligationLiquidityFields\n): ObligationLiquidityJSON {\n return {\n borrowReserve: obligationLiquidityFields.borrowReserve.toBase58(),\n cumulativeBorrowRateBsf: {\n value: obligationLiquidityFields.cumulativeBorrowRateBsf.value.map(\n (item) => item.toString()\n ),\n padding: obligationLiquidityFields.cumulativeBorrowRateBsf.padding.map(\n (item) => item.toString()\n ),\n },\n padding: obligationLiquidityFields.padding.toString(),\n borrowedAmountSf: obligationLiquidityFields.borrowedAmountSf.toString(),\n marketValueSf: obligationLiquidityFields.marketValueSf.toString(),\n borrowFactorAdjustedMarketValueSf:\n obligationLiquidityFields.borrowFactorAdjustedMarketValueSf.toString(),\n borrowedAmountOutsideElevationGroups:\n obligationLiquidityFields.borrowedAmountOutsideElevationGroups.toString(),\n padding2: obligationLiquidityFields.padding2.map((item) => item.toString()),\n };\n}\n\nfunction obligationOrderToDto(\n obligationOrderFields: ObligationOrderFields\n): ObligationOrderJSON {\n return {\n conditionThresholdSf: obligationOrderFields.conditionThresholdSf.toString(),\n opportunityParameterSf:\n obligationOrderFields.opportunityParameterSf.toString(),\n minExecutionBonusBps: obligationOrderFields.minExecutionBonusBps,\n maxExecutionBonusBps: obligationOrderFields.maxExecutionBonusBps,\n conditionType: obligationOrderFields.conditionType,\n opportunityType: obligationOrderFields.opportunityType,\n padding1: obligationOrderFields.padding1,\n padding2: obligationOrderFields.padding2.map((item) => item.toString()),\n };\n}\n","{\n \"address\": \"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD\",\n \"metadata\": {\n \"name\": \"kamino_lending\",\n \"version\": \"1.11.0\",\n \"spec\": \"0.1.0\"\n },\n \"instructions\": [\n {\n \"name\": \"init_lending_market\",\n \"discriminator\": [\n 34,\n 162,\n 116,\n 14,\n 101,\n 137,\n 94,\n 239\n ],\n \"accounts\": [\n {\n \"name\": \"lending_market_owner\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"lending_market\",\n \"writable\": true\n },\n {\n \"name\": \"lending_market_authority\"\n },\n {\n \"name\": \"system_program\"\n },\n {\n \"name\": \"rent\"\n }\n ],\n \"args\": [\n {\n \"name\": \"quote_currency\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n }\n ]\n },\n {\n \"name\": \"update_lending_market\",\n \"discriminator\": [\n 209,\n 157,\n 53,\n 210,\n 97,\n 180,\n 31,\n 45\n ],\n \"accounts\": [\n {\n \"name\": \"lending_market_owner\",\n \"signer\": true\n },\n {\n \"name\": \"lending_market\",\n \"writable\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"mode\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"value\",\n \"type\": {\n \"array\": [\n \"u8\",\n 72\n ]\n }\n }\n ]\n },\n {\n \"name\": \"update_lending_market_owner\",\n \"discriminator\": [\n 118,\n 224,\n 10,\n 62,\n 196,\n 230,\n 184,\n 89\n ],\n \"accounts\": [\n {\n \"name\": \"lending_market_owner_cached\",\n \"signer\": true\n },\n {\n \"name\": \"lending_market\",\n \"writable\": true\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"init_reserve\",\n \"discriminator\": [\n 138,\n 245,\n 71,\n 225,\n 153,\n 4,\n 3,\n 43\n ],\n \"accounts\": [\n {\n \"name\": \"lending_market_owner\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"lending_market\"\n },\n {\n \"name\": \"lending_market_authority\"\n },\n {\n \"name\": \"reserve\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_liquidity_mint\"\n },\n {\n \"name\": \"reserve_liquidity_supply\",\n \"writable\": true\n },\n {\n \"name\": \"fee_receiver\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_collateral_mint\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_collateral_supply\",\n \"writable\": true\n },\n {\n \"name\": \"initial_liquidity_source\",\n \"writable\": true\n },\n {\n \"name\": \"rent\"\n },\n {\n \"name\": \"liquidity_token_program\"\n },\n {\n \"name\": \"collateral_token_program\"\n },\n {\n \"name\": \"system_program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"init_farms_for_reserve\",\n \"discriminator\": [\n 218,\n 6,\n 62,\n 233,\n 1,\n 33,\n 232,\n 82\n ],\n \"accounts\": [\n {\n \"name\": \"lending_market_owner\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"lending_market\"\n },\n {\n \"name\": \"lending_market_authority\"\n },\n {\n \"name\": \"reserve\",\n \"writable\": true\n },\n {\n \"name\": \"farms_program\"\n },\n {\n \"name\": \"farms_global_config\"\n },\n {\n \"name\": \"farm_state\",\n \"writable\": true\n },\n {\n \"name\": \"farms_vault_authority\"\n },\n {\n \"name\": \"rent\"\n },\n {\n \"name\": \"system_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"mode\",\n \"type\": \"u8\"\n }\n ]\n },\n {\n \"name\": \"update_reserve_config\",\n \"discriminator\": [\n 61,\n 148,\n 100,\n 70,\n 143,\n 107,\n 17,\n 13\n ],\n \"accounts\": [\n {\n \"name\": \"signer\",\n \"signer\": true\n },\n {\n \"name\": \"global_config\"\n },\n {\n \"name\": \"lending_market\"\n },\n {\n \"name\": \"reserve\",\n \"writable\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"mode\",\n \"type\": {\n \"defined\": {\n \"name\": \"UpdateConfigMode\"\n }\n }\n },\n {\n \"name\": \"value\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"skip_config_integrity_validation\",\n \"type\": \"bool\"\n }\n ]\n },\n {\n \"name\": \"redeem_fees\",\n \"discriminator\": [\n 215,\n 39,\n 180,\n 41,\n 173,\n 46,\n 248,\n 220\n ],\n \"accounts\": [\n {\n \"name\": \"reserve\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_liquidity_mint\"\n },\n {\n \"name\": \"reserve_liquidity_fee_receiver\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_supply_liquidity\",\n \"writable\": true\n },\n {\n \"name\": \"lending_market\"\n },\n {\n \"name\": \"lending_market_authority\"\n },\n {\n \"name\": \"token_program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"withdraw_protocol_fee\",\n \"discriminator\": [\n 158,\n 201,\n 158,\n 189,\n 33,\n 93,\n 162,\n 103\n ],\n \"accounts\": [\n {\n \"name\": \"global_config\"\n },\n {\n \"name\": \"lending_market\"\n },\n {\n \"name\": \"reserve\"\n },\n {\n \"name\": \"reserve_liquidity_mint\"\n },\n {\n \"name\": \"lending_market_authority\"\n },\n {\n \"name\": \"fee_vault\",\n \"writable\": true\n },\n {\n \"name\": \"fee_collector_ata\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"socialize_loss\",\n \"discriminator\": [\n 245,\n 75,\n 91,\n 0,\n 236,\n 97,\n 19,\n 3\n ],\n \"accounts\": [\n {\n \"name\": \"risk_council\",\n \"signer\": true\n },\n {\n \"name\": \"obligation\",\n \"writable\": true\n },\n {\n \"name\": \"lending_market\"\n },\n {\n \"name\": \"reserve\",\n \"writable\": true\n },\n {\n \"name\": \"instruction_sysvar_account\"\n }\n ],\n \"args\": [\n {\n \"name\": \"liquidity_amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"socialize_loss_v2\",\n \"discriminator\": [\n 238,\n 95,\n 98,\n 220,\n 187,\n 40,\n 204,\n 154\n ],\n \"accounts\": [\n {\n \"name\": \"socialize_loss_accounts\",\n \"accounts\": [\n {\n \"name\": \"risk_council\",\n \"signer\": true\n },\n {\n \"name\": \"obligation\",\n \"writable\": true\n },\n {\n \"name\": \"lending_market\"\n },\n {\n \"name\": \"reserve\",\n \"writable\": true\n },\n {\n \"name\": \"instruction_sysvar_account\"\n }\n ]\n },\n {\n \"name\": \"farms_accounts\",\n \"accounts\": [\n {\n \"name\": \"obligation_farm_user_state\",\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"reserve_farm_state\",\n \"writable\": true,\n \"optional\": true\n }\n ]\n },\n {\n \"name\": \"lending_market_authority\"\n },\n {\n \"name\": \"farms_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"liquidity_amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"mark_obligation_for_deleveraging\",\n \"discriminator\": [\n 164,\n 35,\n 182,\n 19,\n 0,\n 116,\n 243,\n 127\n ],\n \"accounts\": [\n {\n \"name\": \"risk_council\",\n \"signer\": true\n },\n {\n \"name\": \"obligation\",\n \"writable\": true\n },\n {\n \"name\": \"lending_market\"\n }\n ],\n \"args\": [\n {\n \"name\": \"autodeleverage_target_ltv_pct\",\n \"type\": \"u8\"\n }\n ]\n },\n {\n \"name\": \"refresh_reserve\",\n \"discriminator\": [\n 2,\n 218,\n 138,\n 235,\n 79,\n 201,\n 25,\n 102\n ],\n \"accounts\": [\n {\n \"name\": \"reserve\",\n \"writable\": true\n },\n {\n \"name\": \"lending_market\"\n },\n {\n \"name\": \"pyth_oracle\",\n \"optional\": true\n },\n {\n \"name\": \"switchboard_price_oracle\",\n \"optional\": true\n },\n {\n \"name\": \"switchboard_twap_oracle\",\n \"optional\": true\n },\n {\n \"name\": \"scope_prices\",\n \"optional\": true\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"refresh_reserves_batch\",\n \"discriminator\": [\n 144,\n 110,\n 26,\n 103,\n 162,\n 204,\n 252,\n 147\n ],\n \"accounts\": [],\n \"args\": [\n {\n \"name\": \"skip_price_updates\",\n \"type\": \"bool\"\n }\n ]\n },\n {\n \"name\": \"deposit_reserve_liquidity\",\n \"discriminator\": [\n 169,\n 201,\n 30,\n 126,\n 6,\n 205,\n 102,\n 68\n ],\n \"accounts\": [\n {\n \"name\": \"owner\",\n \"signer\": true\n },\n {\n \"name\": \"reserve\",\n \"writable\": true\n },\n {\n \"name\": \"lending_market\"\n },\n {\n \"name\": \"lending_market_authority\"\n },\n {\n \"name\": \"reserve_liquidity_mint\"\n },\n {\n \"name\": \"reserve_liquidity_supply\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_collateral_mint\",\n \"writable\": true\n },\n {\n \"name\": \"user_source_liquidity\",\n \"writable\": true\n },\n {\n \"name\": \"user_destination_collateral\",\n \"writable\": true\n },\n {\n \"name\": \"collateral_token_program\"\n },\n {\n \"name\": \"liquidity_token_program\"\n },\n {\n \"name\": \"instruction_sysvar_account\"\n }\n ],\n \"args\": [\n {\n \"name\": \"liquidity_amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"redeem_reserve_collateral\",\n \"discriminator\": [\n 234,\n 117,\n 181,\n 125,\n 185,\n 142,\n 220,\n 29\n ],\n \"accounts\": [\n {\n \"name\": \"owner\",\n \"signer\": true\n },\n {\n \"name\": \"lending_market\"\n },\n {\n \"name\": \"reserve\",\n \"writable\": true\n },\n {\n \"name\": \"lending_market_authority\"\n },\n {\n \"name\": \"reserve_liquidity_mint\"\n },\n {\n \"name\": \"reserve_collateral_mint\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_liquidity_supply\",\n \"writable\": true\n },\n {\n \"name\": \"user_source_collateral\",\n \"writable\": true\n },\n {\n \"name\": \"user_destination_liquidity\",\n \"writable\": true\n },\n {\n \"name\": \"collateral_token_program\"\n },\n {\n \"name\": \"liquidity_token_program\"\n },\n {\n \"name\": \"instruction_sysvar_account\"\n }\n ],\n \"args\": [\n {\n \"name\": \"collateral_amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"init_obligation\",\n \"discriminator\": [\n 251,\n 10,\n 231,\n 76,\n 27,\n 11,\n 159,\n 96\n ],\n \"accounts\": [\n {\n \"name\": \"obligation_owner\",\n \"signer\": true\n },\n {\n \"name\": \"fee_payer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"obligation\",\n \"writable\": true\n },\n {\n \"name\": \"lending_market\"\n },\n {\n \"name\": \"seed1_account\"\n },\n {\n \"name\": \"seed2_account\"\n },\n {\n \"name\": \"owner_user_metadata\"\n },\n {\n \"name\": \"rent\"\n },\n {\n \"name\": \"system_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"args\",\n \"type\": {\n \"defined\": {\n \"name\": \"InitObligationArgs\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"init_obligation_farms_for_reserve\",\n \"discriminator\": [\n 136,\n 63,\n 15,\n 186,\n 211,\n 152,\n 168,\n 164\n ],\n \"accounts\": [\n {\n \"name\": \"payer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"owner\"\n },\n {\n \"name\": \"obligation\",\n \"writable\": true\n },\n {\n \"name\": \"lending_market_authority\"\n },\n {\n \"name\": \"reserve\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_farm_state\",\n \"writable\": true\n },\n {\n \"name\": \"obligation_farm\",\n \"writable\": true\n },\n {\n \"name\": \"lending_market\"\n },\n {\n \"name\": \"farms_program\"\n },\n {\n \"name\": \"rent\"\n },\n {\n \"name\": \"system_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"mode\",\n \"type\": \"u8\"\n }\n ]\n },\n {\n \"name\": \"refresh_obligation_farms_for_reserve\",\n \"discriminator\": [\n 140,\n 144,\n 253,\n 21,\n 10,\n 74,\n 248,\n 3\n ],\n \"accounts\": [\n {\n \"name\": \"crank\",\n \"signer\": true\n },\n {\n \"name\": \"base_accounts\",\n \"accounts\": [\n {\n \"name\": \"obligation\"\n },\n {\n \"name\": \"lending_market_authority\"\n },\n {\n \"name\": \"reserve\"\n },\n {\n \"name\": \"reserve_farm_state\",\n \"writable\": true\n },\n {\n \"name\": \"obligation_farm_user_state\",\n \"writable\": true\n },\n {\n \"name\": \"lending_market\"\n }\n ]\n },\n {\n \"name\": \"farms_program\"\n },\n {\n \"name\": \"rent\"\n },\n {\n \"name\": \"system_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"mode\",\n \"type\": \"u8\"\n }\n ]\n },\n {\n \"name\": \"refresh_obligation\",\n \"discriminator\": [\n 33,\n 132,\n 147,\n 228,\n 151,\n 192,\n 72,\n 89\n ],\n \"accounts\": [\n {\n \"name\": \"lending_market\"\n },\n {\n \"name\": \"obligation\",\n \"writable\": true\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"deposit_obligation_collateral\",\n \"discriminator\": [\n 108,\n 209,\n 4,\n 72,\n 21,\n 22,\n 118,\n 133\n ],\n \"accounts\": [\n {\n \"name\": \"owner\",\n \"signer\": true\n },\n {\n \"name\": \"obligation\",\n \"writable\": true\n },\n {\n \"name\": \"lending_market\"\n },\n {\n \"name\": \"deposit_reserve\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_destination_collateral\",\n \"writable\": true\n },\n {\n \"name\": \"user_source_collateral\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"instruction_sysvar_account\"\n }\n ],\n \"args\": [\n {\n \"name\": \"collateral_amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"deposit_obligation_collateral_v2\",\n \"discriminator\": [\n 137,\n 145,\n 151,\n 94,\n 167,\n 113,\n 4,\n 145\n ],\n \"accounts\": [\n {\n \"name\": \"deposit_accounts\",\n \"accounts\": [\n {\n \"name\": \"owner\",\n \"signer\": true\n },\n {\n \"name\": \"obligation\",\n \"writable\": true\n },\n {\n \"name\": \"lending_market\"\n },\n {\n \"name\": \"deposit_reserve\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_destination_collateral\",\n \"writable\": true\n },\n {\n \"name\": \"user_source_collateral\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"instruction_sysvar_account\"\n }\n ]\n },\n {\n \"name\": \"lending_market_authority\"\n },\n {\n \"name\": \"farms_accounts\",\n \"accounts\": [\n {\n \"name\": \"obligation_farm_user_state\",\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"reserve_farm_state\",\n \"writable\": true,\n \"optional\": true\n }\n ]\n },\n {\n \"name\": \"farms_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"collateral_amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"withdraw_obligation_collateral\",\n \"discriminator\": [\n 37,\n 116,\n 205,\n 103,\n 243,\n 192,\n 92,\n 198\n ],\n \"accounts\": [\n {\n \"name\": \"owner\",\n \"signer\": true\n },\n {\n \"name\": \"obligation\",\n \"writable\": true\n },\n {\n \"name\": \"lending_market\"\n },\n {\n \"name\": \"lending_market_authority\"\n },\n {\n \"name\": \"withdraw_reserve\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_source_collateral\",\n \"writable\": true\n },\n {\n \"name\": \"user_destination_collateral\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"instruction_sysvar_account\"\n }\n ],\n \"args\": [\n {\n \"name\": \"collateral_amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"withdraw_obligation_collateral_v2\",\n \"discriminator\": [\n 202,\n 249,\n 117,\n 114,\n 231,\n 192,\n 47,\n 138\n ],\n \"accounts\": [\n {\n \"name\": \"withdraw_accounts\",\n \"accounts\": [\n {\n \"name\": \"owner\",\n \"signer\": true\n },\n {\n \"name\": \"obligation\",\n \"writable\": true\n },\n {\n \"name\": \"lending_market\"\n },\n {\n \"name\": \"lending_market_authority\"\n },\n {\n \"name\": \"withdraw_reserve\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_source_collateral\",\n \"writable\": true\n },\n {\n \"name\": \"user_destination_collateral\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"instruction_sysvar_account\"\n }\n ]\n },\n {\n \"name\": \"farms_accounts\",\n \"accounts\": [\n {\n \"name\": \"obligation_farm_user_state\",\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"reserve_farm_state\",\n \"writable\": true,\n \"optional\": true\n }\n ]\n },\n {\n \"name\": \"farms_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"collateral_amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"borrow_obligation_liquidity\",\n \"discriminator\": [\n 121,\n 127,\n 18,\n 204,\n 73,\n 245,\n 225,\n 65\n ],\n \"accounts\": [\n {\n \"name\": \"owner\",\n \"signer\": true\n },\n {\n \"name\": \"obligation\",\n \"writable\": true\n },\n {\n \"name\": \"lending_market\"\n },\n {\n \"name\": \"lending_market_authority\"\n },\n {\n \"name\": \"borrow_reserve\",\n \"writable\": true\n },\n {\n \"name\": \"borrow_reserve_liquidity_mint\"\n },\n {\n \"name\": \"reserve_source_liquidity\",\n \"writable\": true\n },\n {\n \"name\": \"borrow_reserve_liquidity_fee_receiver\",\n \"writable\": true\n },\n {\n \"name\": \"user_destination_liquidity\",\n \"writable\": true\n },\n {\n \"name\": \"referrer_token_state\",\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"instruction_sysvar_account\"\n }\n ],\n \"args\": [\n {\n \"name\": \"liquidity_amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"borrow_obligation_liquidity_v2\",\n \"discriminator\": [\n 161,\n 128,\n 143,\n 245,\n 171,\n 199,\n 194,\n 6\n ],\n \"accounts\": [\n {\n \"name\": \"borrow_accounts\",\n \"accounts\": [\n {\n \"name\": \"owner\",\n \"signer\": true\n },\n {\n \"name\": \"obligation\",\n \"writable\": true\n },\n {\n \"name\": \"lending_market\"\n },\n {\n \"name\": \"lending_market_authority\"\n },\n {\n \"name\": \"borrow_reserve\",\n \"writable\": true\n },\n {\n \"name\": \"borrow_reserve_liquidity_mint\"\n },\n {\n \"name\": \"reserve_source_liquidity\",\n \"writable\": true\n },\n {\n \"name\": \"borrow_reserve_liquidity_fee_receiver\",\n \"writable\": true\n },\n {\n \"name\": \"user_destination_liquidity\",\n \"writable\": true\n },\n {\n \"name\": \"referrer_token_state\",\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"instruction_sysvar_account\"\n }\n ]\n },\n {\n \"name\": \"farms_accounts\",\n \"accounts\": [\n {\n \"name\": \"obligation_farm_user_state\",\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"reserve_farm_state\",\n \"writable\": true,\n \"optional\": true\n }\n ]\n },\n {\n \"name\": \"farms_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"liquidity_amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"repay_obligation_liquidity\",\n \"discriminator\": [\n 145,\n 178,\n 13,\n 225,\n 76,\n 240,\n 147,\n 72\n ],\n \"accounts\": [\n {\n \"name\": \"owner\",\n \"signer\": true\n },\n {\n \"name\": \"obligation\",\n \"writable\": true\n },\n {\n \"name\": \"lending_market\"\n },\n {\n \"name\": \"repay_reserve\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_liquidity_mint\"\n },\n {\n \"name\": \"reserve_destination_liquidity\",\n \"writable\": true\n },\n {\n \"name\": \"user_source_liquidity\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"instruction_sysvar_account\"\n }\n ],\n \"args\": [\n {\n \"name\": \"liquidity_amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"repay_obligation_liquidity_v2\",\n \"discriminator\": [\n 116,\n 174,\n 213,\n 76,\n 180,\n 53,\n 210,\n 144\n ],\n \"accounts\": [\n {\n \"name\": \"repay_accounts\",\n \"accounts\": [\n {\n \"name\": \"owner\",\n \"signer\": true\n },\n {\n \"name\": \"obligation\",\n \"writable\": true\n },\n {\n \"name\": \"lending_market\"\n },\n {\n \"name\": \"repay_reserve\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_liquidity_mint\"\n },\n {\n \"name\": \"reserve_destination_liquidity\",\n \"writable\": true\n },\n {\n \"name\": \"user_source_liquidity\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"instruction_sysvar_account\"\n }\n ]\n },\n {\n \"name\": \"farms_accounts\",\n \"accounts\": [\n {\n \"name\": \"obligation_farm_user_state\",\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"reserve_farm_state\",\n \"writable\": true,\n \"optional\": true\n }\n ]\n },\n {\n \"name\": \"lending_market_authority\"\n },\n {\n \"name\": \"farms_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"liquidity_amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"repay_and_withdraw_and_redeem\",\n \"discriminator\": [\n 2,\n 54,\n 152,\n 3,\n 148,\n 96,\n 109,\n 218\n ],\n \"accounts\": [\n {\n \"name\": \"repay_accounts\",\n \"accounts\": [\n {\n \"name\": \"owner\",\n \"signer\": true\n },\n {\n \"name\": \"obligation\",\n \"writable\": true\n },\n {\n \"name\": \"lending_market\"\n },\n {\n \"name\": \"repay_reserve\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_liquidity_mint\"\n },\n {\n \"name\": \"reserve_destination_liquidity\",\n \"writable\": true\n },\n {\n \"name\": \"user_source_liquidity\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"instruction_sysvar_account\"\n }\n ]\n },\n {\n \"name\": \"withdraw_accounts\",\n \"accounts\": [\n {\n \"name\": \"owner\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"obligation\",\n \"writable\": true\n },\n {\n \"name\": \"lending_market\"\n },\n {\n \"name\": \"lending_market_authority\"\n },\n {\n \"name\": \"withdraw_reserve\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_liquidity_mint\"\n },\n {\n \"name\": \"reserve_source_collateral\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_collateral_mint\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_liquidity_supply\",\n \"writable\": true\n },\n {\n \"name\": \"user_destination_liquidity\",\n \"writable\": true\n },\n {\n \"name\": \"placeholder_user_destination_collateral\",\n \"optional\": true\n },\n {\n \"name\": \"collateral_token_program\"\n },\n {\n \"name\": \"liquidity_token_program\"\n },\n {\n \"name\": \"instruction_sysvar_account\"\n }\n ]\n },\n {\n \"name\": \"collateral_farms_accounts\",\n \"accounts\": [\n {\n \"name\": \"obligation_farm_user_state\",\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"reserve_farm_state\",\n \"writable\": true,\n \"optional\": true\n }\n ]\n },\n {\n \"name\": \"debt_farms_accounts\",\n \"accounts\": [\n {\n \"name\": \"obligation_farm_user_state\",\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"reserve_farm_state\",\n \"writable\": true,\n \"optional\": true\n }\n ]\n },\n {\n \"name\": \"farms_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"repay_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"withdraw_collateral_amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"deposit_and_withdraw\",\n \"discriminator\": [\n 141,\n 153,\n 39,\n 15,\n 64,\n 61,\n 88,\n 84\n ],\n \"accounts\": [\n {\n \"name\": \"deposit_accounts\",\n \"accounts\": [\n {\n \"name\": \"owner\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"obligation\",\n \"writable\": true\n },\n {\n \"name\": \"lending_market\"\n },\n {\n \"name\": \"lending_market_authority\"\n },\n {\n \"name\": \"reserve\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_liquidity_mint\"\n },\n {\n \"name\": \"reserve_liquidity_supply\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_collateral_mint\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_destination_deposit_collateral\",\n \"writable\": true\n },\n {\n \"name\": \"user_source_liquidity\",\n \"writable\": true\n },\n {\n \"name\": \"placeholder_user_destination_collateral\",\n \"optional\": true\n },\n {\n \"name\": \"collateral_token_program\"\n },\n {\n \"name\": \"liquidity_token_program\"\n },\n {\n \"name\": \"instruction_sysvar_account\"\n }\n ]\n },\n {\n \"name\": \"withdraw_accounts\",\n \"accounts\": [\n {\n \"name\": \"owner\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"obligation\",\n \"writable\": true\n },\n {\n \"name\": \"lending_market\"\n },\n {\n \"name\": \"lending_market_authority\"\n },\n {\n \"name\": \"withdraw_reserve\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_liquidity_mint\"\n },\n {\n \"name\": \"reserve_source_collateral\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_collateral_mint\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_liquidity_supply\",\n \"writable\": true\n },\n {\n \"name\": \"user_destination_liquidity\",\n \"writable\": true\n },\n {\n \"name\": \"placeholder_user_destination_collateral\",\n \"optional\": true\n },\n {\n \"name\": \"collateral_token_program\"\n },\n {\n \"name\": \"liquidity_token_program\"\n },\n {\n \"name\": \"instruction_sysvar_account\"\n }\n ]\n },\n {\n \"name\": \"deposit_farms_accounts\",\n \"accounts\": [\n {\n \"name\": \"obligation_farm_user_state\",\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"reserve_farm_state\",\n \"writable\": true,\n \"optional\": true\n }\n ]\n },\n {\n \"name\": \"withdraw_farms_accounts\",\n \"accounts\": [\n {\n \"name\": \"obligation_farm_user_state\",\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"reserve_farm_state\",\n \"writable\": true,\n \"optional\": true\n }\n ]\n },\n {\n \"name\": \"farms_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"liquidity_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"withdraw_collateral_amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"deposit_reserve_liquidity_and_obligation_collateral\",\n \"discriminator\": [\n 129,\n 199,\n 4,\n 2,\n 222,\n 39,\n 26,\n 46\n ],\n \"accounts\": [\n {\n \"name\": \"owner\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"obligation\",\n \"writable\": true\n },\n {\n \"name\": \"lending_market\"\n },\n {\n \"name\": \"lending_market_authority\"\n },\n {\n \"name\": \"reserve\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_liquidity_mint\"\n },\n {\n \"name\": \"reserve_liquidity_supply\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_collateral_mint\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_destination_deposit_collateral\",\n \"writable\": true\n },\n {\n \"name\": \"user_source_liquidity\",\n \"writable\": true\n },\n {\n \"name\": \"placeholder_user_destination_collateral\",\n \"optional\": true\n },\n {\n \"name\": \"collateral_token_program\"\n },\n {\n \"name\": \"liquidity_token_program\"\n },\n {\n \"name\": \"instruction_sysvar_account\"\n }\n ],\n \"args\": [\n {\n \"name\": \"liquidity_amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"deposit_reserve_liquidity_and_obligation_collateral_v2\",\n \"discriminator\": [\n 216,\n 224,\n 191,\n 27,\n 204,\n 151,\n 102,\n 175\n ],\n \"accounts\": [\n {\n \"name\": \"deposit_accounts\",\n \"accounts\": [\n {\n \"name\": \"owner\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"obligation\",\n \"writable\": true\n },\n {\n \"name\": \"lending_market\"\n },\n {\n \"name\": \"lending_market_authority\"\n },\n {\n \"name\": \"reserve\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_liquidity_mint\"\n },\n {\n \"name\": \"reserve_liquidity_supply\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_collateral_mint\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_destination_deposit_collateral\",\n \"writable\": true\n },\n {\n \"name\": \"user_source_liquidity\",\n \"writable\": true\n },\n {\n \"name\": \"placeholder_user_destination_collateral\",\n \"optional\": true\n },\n {\n \"name\": \"collateral_token_program\"\n },\n {\n \"name\": \"liquidity_token_program\"\n },\n {\n \"name\": \"instruction_sysvar_account\"\n }\n ]\n },\n {\n \"name\": \"farms_accounts\",\n \"accounts\": [\n {\n \"name\": \"obligation_farm_user_state\",\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"reserve_farm_state\",\n \"writable\": true,\n \"optional\": true\n }\n ]\n },\n {\n \"name\": \"farms_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"liquidity_amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"withdraw_obligation_collateral_and_redeem_reserve_collateral\",\n \"discriminator\": [\n 75,\n 93,\n 93,\n 220,\n 34,\n 150,\n 218,\n 196\n ],\n \"accounts\": [\n {\n \"name\": \"owner\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"obligation\",\n \"writable\": true\n },\n {\n \"name\": \"lending_market\"\n },\n {\n \"name\": \"lending_market_authority\"\n },\n {\n \"name\": \"withdraw_reserve\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_liquidity_mint\"\n },\n {\n \"name\": \"reserve_source_collateral\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_collateral_mint\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_liquidity_supply\",\n \"writable\": true\n },\n {\n \"name\": \"user_destination_liquidity\",\n \"writable\": true\n },\n {\n \"name\": \"placeholder_user_destination_collateral\",\n \"optional\": true\n },\n {\n \"name\": \"collateral_token_program\"\n },\n {\n \"name\": \"liquidity_token_program\"\n },\n {\n \"name\": \"instruction_sysvar_account\"\n }\n ],\n \"args\": [\n {\n \"name\": \"collateral_amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"withdraw_obligation_collateral_and_redeem_reserve_collateral_v2\",\n \"discriminator\": [\n 235,\n 52,\n 119,\n 152,\n 149,\n 197,\n 20,\n 7\n ],\n \"accounts\": [\n {\n \"name\": \"withdraw_accounts\",\n \"accounts\": [\n {\n \"name\": \"owner\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"obligation\",\n \"writable\": true\n },\n {\n \"name\": \"lending_market\"\n },\n {\n \"name\": \"lending_market_authority\"\n },\n {\n \"name\": \"withdraw_reserve\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_liquidity_mint\"\n },\n {\n \"name\": \"reserve_source_collateral\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_collateral_mint\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_liquidity_supply\",\n \"writable\": true\n },\n {\n \"name\": \"user_destination_liquidity\",\n \"writable\": true\n },\n {\n \"name\": \"placeholder_user_destination_collateral\",\n \"optional\": true\n },\n {\n \"name\": \"collateral_token_program\"\n },\n {\n \"name\": \"liquidity_token_program\"\n },\n {\n \"name\": \"instruction_sysvar_account\"\n }\n ]\n },\n {\n \"name\": \"farms_accounts\",\n \"accounts\": [\n {\n \"name\": \"obligation_farm_user_state\",\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"reserve_farm_state\",\n \"writable\": true,\n \"optional\": true\n }\n ]\n },\n {\n \"name\": \"farms_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"collateral_amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"liquidate_obligation_and_redeem_reserve_collateral\",\n \"discriminator\": [\n 177,\n 71,\n 154,\n 188,\n 226,\n 133,\n 74,\n 55\n ],\n \"accounts\": [\n {\n \"name\": \"liquidator\",\n \"signer\": true\n },\n {\n \"name\": \"obligation\",\n \"writable\": true\n },\n {\n \"name\": \"lending_market\"\n },\n {\n \"name\": \"lending_market_authority\"\n },\n {\n \"name\": \"repay_reserve\",\n \"writable\": true\n },\n {\n \"name\": \"repay_reserve_liquidity_mint\"\n },\n {\n \"name\": \"repay_reserve_liquidity_supply\",\n \"writable\": true\n },\n {\n \"name\": \"withdraw_reserve\",\n \"writable\": true\n },\n {\n \"name\": \"withdraw_reserve_liquidity_mint\"\n },\n {\n \"name\": \"withdraw_reserve_collateral_mint\",\n \"writable\": true\n },\n {\n \"name\": \"withdraw_reserve_collateral_supply\",\n \"writable\": true\n },\n {\n \"name\": \"withdraw_reserve_liquidity_supply\",\n \"writable\": true\n },\n {\n \"name\": \"withdraw_reserve_liquidity_fee_receiver\",\n \"writable\": true\n },\n {\n \"name\": \"user_source_liquidity\",\n \"writable\": true\n },\n {\n \"name\": \"user_destination_collateral\",\n \"writable\": true\n },\n {\n \"name\": \"user_destination_liquidity\",\n \"writable\": true\n },\n {\n \"name\": \"collateral_token_program\"\n },\n {\n \"name\": \"repay_liquidity_token_program\"\n },\n {\n \"name\": \"withdraw_liquidity_token_program\"\n },\n {\n \"name\": \"instruction_sysvar_account\"\n }\n ],\n \"args\": [\n {\n \"name\": \"liquidity_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"min_acceptable_received_liquidity_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"max_allowed_ltv_override_percent\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"liquidate_obligation_and_redeem_reserve_collateral_v2\",\n \"discriminator\": [\n 162,\n 161,\n 35,\n 143,\n 30,\n 187,\n 185,\n 103\n ],\n \"accounts\": [\n {\n \"name\": \"liquidation_accounts\",\n \"accounts\": [\n {\n \"name\": \"liquidator\",\n \"signer\": true\n },\n {\n \"name\": \"obligation\",\n \"writable\": true\n },\n {\n \"name\": \"lending_market\"\n },\n {\n \"name\": \"lending_market_authority\",\n \"writable\": true\n },\n {\n \"name\": \"repay_reserve\",\n \"writable\": true\n },\n {\n \"name\": \"repay_reserve_liquidity_mint\"\n },\n {\n \"name\": \"repay_reserve_liquidity_supply\",\n \"writable\": true\n },\n {\n \"name\": \"withdraw_reserve\",\n \"writable\": true\n },\n {\n \"name\": \"withdraw_reserve_liquidity_mint\"\n },\n {\n \"name\": \"withdraw_reserve_collateral_mint\",\n \"writable\": true\n },\n {\n \"name\": \"withdraw_reserve_collateral_supply\",\n \"writable\": true\n },\n {\n \"name\": \"withdraw_reserve_liquidity_supply\",\n \"writable\": true\n },\n {\n \"name\": \"withdraw_reserve_liquidity_fee_receiver\",\n \"writable\": true\n },\n {\n \"name\": \"user_source_liquidity\",\n \"writable\": true\n },\n {\n \"name\": \"user_destination_collateral\",\n \"writable\": true\n },\n {\n \"name\": \"user_destination_liquidity\",\n \"writable\": true\n },\n {\n \"name\": \"collateral_token_program\"\n },\n {\n \"name\": \"repay_liquidity_token_program\"\n },\n {\n \"name\": \"withdraw_liquidity_token_program\"\n },\n {\n \"name\": \"instruction_sysvar_account\"\n }\n ]\n },\n {\n \"name\": \"collateral_farms_accounts\",\n \"accounts\": [\n {\n \"name\": \"obligation_farm_user_state\",\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"reserve_farm_state\",\n \"writable\": true,\n \"optional\": true\n }\n ]\n },\n {\n \"name\": \"debt_farms_accounts\",\n \"accounts\": [\n {\n \"name\": \"obligation_farm_user_state\",\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"reserve_farm_state\",\n \"writable\": true,\n \"optional\": true\n }\n ]\n },\n {\n \"name\": \"farms_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"liquidity_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"min_acceptable_received_liquidity_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"max_allowed_ltv_override_percent\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"flash_repay_reserve_liquidity\",\n \"discriminator\": [\n 185,\n 117,\n 0,\n 203,\n 96,\n 245,\n 180,\n 186\n ],\n \"accounts\": [\n {\n \"name\": \"user_transfer_authority\",\n \"signer\": true\n },\n {\n \"name\": \"lending_market_authority\"\n },\n {\n \"name\": \"lending_market\"\n },\n {\n \"name\": \"reserve\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_liquidity_mint\"\n },\n {\n \"name\": \"reserve_destination_liquidity\",\n \"writable\": true\n },\n {\n \"name\": \"user_source_liquidity\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_liquidity_fee_receiver\",\n \"writable\": true\n },\n {\n \"name\": \"referrer_token_state\",\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"referrer_account\",\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"sysvar_info\"\n },\n {\n \"name\": \"token_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"liquidity_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"borrow_instruction_index\",\n \"type\": \"u8\"\n }\n ]\n },\n {\n \"name\": \"flash_borrow_reserve_liquidity\",\n \"discriminator\": [\n 135,\n 231,\n 52,\n 167,\n 7,\n 52,\n 212,\n 193\n ],\n \"accounts\": [\n {\n \"name\": \"user_transfer_authority\",\n \"signer\": true\n },\n {\n \"name\": \"lending_market_authority\"\n },\n {\n \"name\": \"lending_market\"\n },\n {\n \"name\": \"reserve\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_liquidity_mint\"\n },\n {\n \"name\": \"reserve_source_liquidity\",\n \"writable\": true\n },\n {\n \"name\": \"user_destination_liquidity\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_liquidity_fee_receiver\",\n \"writable\": true\n },\n {\n \"name\": \"referrer_token_state\",\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"referrer_account\",\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"sysvar_info\"\n },\n {\n \"name\": \"token_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"liquidity_amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"request_elevation_group\",\n \"discriminator\": [\n 36,\n 119,\n 251,\n 129,\n 34,\n 240,\n 7,\n 147\n ],\n \"accounts\": [\n {\n \"name\": \"owner\",\n \"signer\": true\n },\n {\n \"name\": \"obligation\",\n \"writable\": true\n },\n {\n \"name\": \"lending_market\"\n }\n ],\n \"args\": [\n {\n \"name\": \"elevation_group\",\n \"type\": \"u8\"\n }\n ]\n },\n {\n \"name\": \"init_referrer_token_state\",\n \"discriminator\": [\n 116,\n 45,\n 66,\n 148,\n 58,\n 13,\n 218,\n 115\n ],\n \"accounts\": [\n {\n \"name\": \"payer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"lending_market\"\n },\n {\n \"name\": \"reserve\"\n },\n {\n \"name\": \"referrer\"\n },\n {\n \"name\": \"referrer_token_state\",\n \"writable\": true\n },\n {\n \"name\": \"rent\"\n },\n {\n \"name\": \"system_program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"init_user_metadata\",\n \"discriminator\": [\n 117,\n 169,\n 176,\n 69,\n 197,\n 23,\n 15,\n 162\n ],\n \"accounts\": [\n {\n \"name\": \"owner\",\n \"signer\": true\n },\n {\n \"name\": \"fee_payer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"user_metadata\",\n \"writable\": true\n },\n {\n \"name\": \"referrer_user_metadata\",\n \"optional\": true\n },\n {\n \"name\": \"rent\"\n },\n {\n \"name\": \"system_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"user_lookup_table\",\n \"type\": \"pubkey\"\n }\n ]\n },\n {\n \"name\": \"withdraw_referrer_fees\",\n \"discriminator\": [\n 171,\n 118,\n 121,\n 201,\n 233,\n 140,\n 23,\n 228\n ],\n \"accounts\": [\n {\n \"name\": \"referrer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"referrer_token_state\",\n \"writable\": true\n },\n {\n \"name\": \"reserve\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_liquidity_mint\"\n },\n {\n \"name\": \"reserve_supply_liquidity\",\n \"writable\": true\n },\n {\n \"name\": \"referrer_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"lending_market\"\n },\n {\n \"name\": \"lending_market_authority\"\n },\n {\n \"name\": \"token_program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"init_referrer_state_and_short_url\",\n \"discriminator\": [\n 165,\n 19,\n 25,\n 127,\n 100,\n 55,\n 31,\n 90\n ],\n \"accounts\": [\n {\n \"name\": \"referrer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"referrer_state\",\n \"writable\": true\n },\n {\n \"name\": \"referrer_short_url\",\n \"writable\": true\n },\n {\n \"name\": \"referrer_user_metadata\"\n },\n {\n \"name\": \"rent\"\n },\n {\n \"name\": \"system_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"short_url\",\n \"type\": \"string\"\n }\n ]\n },\n {\n \"name\": \"delete_referrer_state_and_short_url\",\n \"discriminator\": [\n 153,\n 185,\n 99,\n 28,\n 228,\n 179,\n 187,\n 150\n ],\n \"accounts\": [\n {\n \"name\": \"referrer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"referrer_state\",\n \"writable\": true\n },\n {\n \"name\": \"short_url\",\n \"writable\": true\n },\n {\n \"name\": \"rent\"\n },\n {\n \"name\": \"system_program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"set_obligation_order\",\n \"discriminator\": [\n 81,\n 1,\n 99,\n 156,\n 211,\n 83,\n 78,\n 46\n ],\n \"accounts\": [\n {\n \"name\": \"owner\",\n \"signer\": true\n },\n {\n \"name\": \"obligation\",\n \"writable\": true\n },\n {\n \"name\": \"lending_market\"\n }\n ],\n \"args\": [\n {\n \"name\": \"index\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"order\",\n \"type\": {\n \"defined\": {\n \"name\": \"ObligationOrder\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"init_global_config\",\n \"discriminator\": [\n 140,\n 136,\n 214,\n 48,\n 87,\n 0,\n 120,\n 255\n ],\n \"accounts\": [\n {\n \"name\": \"payer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"global_config\",\n \"writable\": true\n },\n {\n \"name\": \"program_data\"\n },\n {\n \"name\": \"system_program\"\n },\n {\n \"name\": \"rent\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"update_global_config\",\n \"discriminator\": [\n 164,\n 84,\n 130,\n 189,\n 111,\n 58,\n 250,\n 200\n ],\n \"accounts\": [\n {\n \"name\": \"global_admin\",\n \"signer\": true\n },\n {\n \"name\": \"global_config\",\n \"writable\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"mode\",\n \"type\": {\n \"defined\": {\n \"name\": \"UpdateGlobalConfigMode\"\n }\n }\n },\n {\n \"name\": \"value\",\n \"type\": \"bytes\"\n }\n ]\n },\n {\n \"name\": \"update_global_config_admin\",\n \"discriminator\": [\n 184,\n 87,\n 23,\n 193,\n 156,\n 238,\n 175,\n 119\n ],\n \"accounts\": [\n {\n \"name\": \"pending_admin\",\n \"signer\": true\n },\n {\n \"name\": \"global_config\",\n \"writable\": true\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"idl_missing_types\",\n \"discriminator\": [\n 130,\n 80,\n 38,\n 153,\n 80,\n 212,\n 182,\n 253\n ],\n \"accounts\": [\n {\n \"name\": \"signer\",\n \"signer\": true\n },\n {\n \"name\": \"global_config\"\n },\n {\n \"name\": \"lending_market\"\n },\n {\n \"name\": \"reserve\",\n \"writable\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"reserve_farm_kind\",\n \"type\": {\n \"defined\": {\n \"name\": \"ReserveFarmKind\"\n }\n }\n },\n {\n \"name\": \"asset_tier\",\n \"type\": {\n \"defined\": {\n \"name\": \"AssetTier\"\n }\n }\n },\n {\n \"name\": \"fee_calculation\",\n \"type\": {\n \"defined\": {\n \"name\": \"FeeCalculation\"\n }\n }\n },\n {\n \"name\": \"reserve_status\",\n \"type\": {\n \"defined\": {\n \"name\": \"ReserveStatus\"\n }\n }\n },\n {\n \"name\": \"update_config_mode\",\n \"type\": {\n \"defined\": {\n \"name\": \"UpdateConfigMode\"\n }\n }\n },\n {\n \"name\": \"update_lending_market_config_value\",\n \"type\": {\n \"defined\": {\n \"name\": \"UpdateLendingMarketConfigValue\"\n }\n }\n },\n {\n \"name\": \"update_lending_market_config_mode\",\n \"type\": {\n \"defined\": {\n \"name\": \"UpdateLendingMarketMode\"\n }\n }\n }\n ]\n }\n ],\n \"accounts\": [\n {\n \"name\": \"UserState\",\n \"discriminator\": [\n 72,\n 177,\n 85,\n 249,\n 76,\n 167,\n 186,\n 126\n ]\n },\n {\n \"name\": \"GlobalConfig\",\n \"discriminator\": [\n 149,\n 8,\n 156,\n 202,\n 160,\n 252,\n 176,\n 217\n ]\n },\n {\n \"name\": \"LendingMarket\",\n \"discriminator\": [\n 246,\n 114,\n 50,\n 98,\n 72,\n 157,\n 28,\n 120\n ]\n },\n {\n \"name\": \"Obligation\",\n \"discriminator\": [\n 168,\n 206,\n 141,\n 106,\n 88,\n 76,\n 172,\n 167\n ]\n },\n {\n \"name\": \"ReferrerState\",\n \"discriminator\": [\n 194,\n 81,\n 217,\n 103,\n 12,\n 19,\n 12,\n 66\n ]\n },\n {\n \"name\": \"ReferrerTokenState\",\n \"discriminator\": [\n 39,\n 15,\n 208,\n 77,\n 32,\n 195,\n 105,\n 56\n ]\n },\n {\n \"name\": \"ShortUrl\",\n \"discriminator\": [\n 28,\n 89,\n 174,\n 25,\n 226,\n 124,\n 126,\n 212\n ]\n },\n {\n \"name\": \"UserMetadata\",\n \"discriminator\": [\n 157,\n 214,\n 220,\n 235,\n 98,\n 135,\n 171,\n 28\n ]\n },\n {\n \"name\": \"Reserve\",\n \"discriminator\": [\n 43,\n 242,\n 204,\n 202,\n 26,\n 247,\n 59,\n 127\n ]\n }\n ],\n \"errors\": [\n {\n \"code\": 6000,\n \"name\": \"InvalidMarketAuthority\",\n \"msg\": \"Market authority is invalid\"\n },\n {\n \"code\": 6001,\n \"name\": \"InvalidMarketOwner\",\n \"msg\": \"Market owner is invalid\"\n },\n {\n \"code\": 6002,\n \"name\": \"InvalidAccountOwner\",\n \"msg\": \"Input account owner is not the program address\"\n },\n {\n \"code\": 6003,\n \"name\": \"InvalidAmount\",\n \"msg\": \"Input amount is invalid\"\n },\n {\n \"code\": 6004,\n \"name\": \"InvalidConfig\",\n \"msg\": \"Input config value is invalid\"\n },\n {\n \"code\": 6005,\n \"name\": \"InvalidSigner\",\n \"msg\": \"Input account must be a signer\"\n },\n {\n \"code\": 6006,\n \"name\": \"InvalidAccountInput\",\n \"msg\": \"Invalid account input\"\n },\n {\n \"code\": 6007,\n \"name\": \"MathOverflow\",\n \"msg\": \"Math operation overflow\"\n },\n {\n \"code\": 6008,\n \"name\": \"InsufficientLiquidity\",\n \"msg\": \"Insufficient liquidity available\"\n },\n {\n \"code\": 6009,\n \"name\": \"ReserveStale\",\n \"msg\": \"Reserve state needs to be refreshed\"\n },\n {\n \"code\": 6010,\n \"name\": \"WithdrawTooSmall\",\n \"msg\": \"Withdraw amount too small\"\n },\n {\n \"code\": 6011,\n \"name\": \"WithdrawTooLarge\",\n \"msg\": \"Withdraw amount too large\"\n },\n {\n \"code\": 6012,\n \"name\": \"BorrowTooSmall\",\n \"msg\": \"Borrow amount too small to receive liquidity after fees\"\n },\n {\n \"code\": 6013,\n \"name\": \"BorrowTooLarge\",\n \"msg\": \"Borrow amount too large for deposited collateral\"\n },\n {\n \"code\": 6014,\n \"name\": \"RepayTooSmall\",\n \"msg\": \"Repay amount too small to transfer liquidity\"\n },\n {\n \"code\": 6015,\n \"name\": \"LiquidationTooSmall\",\n \"msg\": \"Liquidation amount too small to receive collateral\"\n },\n {\n \"code\": 6016,\n \"name\": \"ObligationHealthy\",\n \"msg\": \"Cannot liquidate healthy obligations\"\n },\n {\n \"code\": 6017,\n \"name\": \"ObligationStale\",\n \"msg\": \"Obligation state needs to be refreshed\"\n },\n {\n \"code\": 6018,\n \"name\": \"ObligationReserveLimit\",\n \"msg\": \"Obligation reserve limit exceeded\"\n },\n {\n \"code\": 6019,\n \"name\": \"InvalidObligationOwner\",\n \"msg\": \"Obligation owner is invalid\"\n },\n {\n \"code\": 6020,\n \"name\": \"ObligationDepositsEmpty\",\n \"msg\": \"Obligation deposits are empty\"\n },\n {\n \"code\": 6021,\n \"name\": \"ObligationBorrowsEmpty\",\n \"msg\": \"Obligation borrows are empty\"\n },\n {\n \"code\": 6022,\n \"name\": \"ObligationDepositsZero\",\n \"msg\": \"Obligation deposits have zero value\"\n },\n {\n \"code\": 6023,\n \"name\": \"ObligationBorrowsZero\",\n \"msg\": \"Obligation borrows have zero value\"\n },\n {\n \"code\": 6024,\n \"name\": \"InvalidObligationCollateral\",\n \"msg\": \"Invalid obligation collateral\"\n },\n {\n \"code\": 6025,\n \"name\": \"InvalidObligationLiquidity\",\n \"msg\": \"Invalid obligation liquidity\"\n },\n {\n \"code\": 6026,\n \"name\": \"ObligationCollateralEmpty\",\n \"msg\": \"Obligation collateral is empty\"\n },\n {\n \"code\": 6027,\n \"name\": \"ObligationLiquidityEmpty\",\n \"msg\": \"Obligation liquidity is empty\"\n },\n {\n \"code\": 6028,\n \"name\": \"NegativeInterestRate\",\n \"msg\": \"Interest rate is negative\"\n },\n {\n \"code\": 6029,\n \"name\": \"InvalidOracleConfig\",\n \"msg\": \"Input oracle config is invalid\"\n },\n {\n \"code\": 6030,\n \"name\": \"InsufficientProtocolFeesToRedeem\",\n \"msg\": \"Insufficient protocol fees to claim or no liquidity available\"\n },\n {\n \"code\": 6031,\n \"name\": \"FlashBorrowCpi\",\n \"msg\": \"No cpi flash borrows allowed\"\n },\n {\n \"code\": 6032,\n \"name\": \"NoFlashRepayFound\",\n \"msg\": \"No corresponding repay found for flash borrow\"\n },\n {\n \"code\": 6033,\n \"name\": \"InvalidFlashRepay\",\n \"msg\": \"Invalid repay found\"\n },\n {\n \"code\": 6034,\n \"name\": \"FlashRepayCpi\",\n \"msg\": \"No cpi flash repays allowed\"\n },\n {\n \"code\": 6035,\n \"name\": \"MultipleFlashBorrows\",\n \"msg\": \"Multiple flash borrows not allowed in the same transaction\"\n },\n {\n \"code\": 6036,\n \"name\": \"FlashLoansDisabled\",\n \"msg\": \"Flash loans are disabled for this reserve\"\n },\n {\n \"code\": 6037,\n \"name\": \"SwitchboardV2Error\",\n \"msg\": \"Switchboard error\"\n },\n {\n \"code\": 6038,\n \"name\": \"CouldNotDeserializeScope\",\n \"msg\": \"Cannot deserialize the scope price account\"\n },\n {\n \"code\": 6039,\n \"name\": \"PriceTooOld\",\n \"msg\": \"Price too old\"\n },\n {\n \"code\": 6040,\n \"name\": \"PriceTooDivergentFromTwap\",\n \"msg\": \"Price too divergent from twap\"\n },\n {\n \"code\": 6041,\n \"name\": \"InvalidTwapPrice\",\n \"msg\": \"Invalid twap price\"\n },\n {\n \"code\": 6042,\n \"name\": \"GlobalEmergencyMode\",\n \"msg\": \"Emergency mode is enabled\"\n },\n {\n \"code\": 6043,\n \"name\": \"InvalidFlag\",\n \"msg\": \"Invalid lending market config\"\n },\n {\n \"code\": 6044,\n \"name\": \"PriceNotValid\",\n \"msg\": \"Price is not valid\"\n },\n {\n \"code\": 6045,\n \"name\": \"PriceIsBiggerThanHeuristic\",\n \"msg\": \"Price is bigger than allowed by heuristic\"\n },\n {\n \"code\": 6046,\n \"name\": \"PriceIsLowerThanHeuristic\",\n \"msg\": \"Price lower than allowed by heuristic\"\n },\n {\n \"code\": 6047,\n \"name\": \"PriceIsZero\",\n \"msg\": \"Price is zero\"\n },\n {\n \"code\": 6048,\n \"name\": \"PriceConfidenceTooWide\",\n \"msg\": \"Price confidence too wide\"\n },\n {\n \"code\": 6049,\n \"name\": \"IntegerOverflow\",\n \"msg\": \"Conversion between integers failed\"\n },\n {\n \"code\": 6050,\n \"name\": \"NoFarmForReserve\",\n \"msg\": \"This reserve does not have a farm\"\n },\n {\n \"code\": 6051,\n \"name\": \"IncorrectInstructionInPosition\",\n \"msg\": \"Wrong instruction at expected position\"\n },\n {\n \"code\": 6052,\n \"name\": \"NoPriceFound\",\n \"msg\": \"No price found\"\n },\n {\n \"code\": 6053,\n \"name\": \"InvalidTwapConfig\",\n \"msg\": \"Invalid Twap configuration: Twap is enabled but one of the enabled price doesn't have a twap\"\n },\n {\n \"code\": 6054,\n \"name\": \"InvalidPythPriceAccount\",\n \"msg\": \"Pyth price account does not match configuration\"\n },\n {\n \"code\": 6055,\n \"name\": \"InvalidSwitchboardAccount\",\n \"msg\": \"Switchboard account(s) do not match configuration\"\n },\n {\n \"code\": 6056,\n \"name\": \"InvalidScopePriceAccount\",\n \"msg\": \"Scope price account does not match configuration\"\n },\n {\n \"code\": 6057,\n \"name\": \"ObligationCollateralLtvZero\",\n \"msg\": \"The obligation has one collateral with an LTV set to 0. Withdraw it before withdrawing other collaterals\"\n },\n {\n \"code\": 6058,\n \"name\": \"InvalidObligationSeedsValue\",\n \"msg\": \"Seeds must be default pubkeys for tag 0, and mint addresses for tag 1 or 2\"\n },\n {\n \"code\": 6059,\n \"name\": \"DeprecatedInvalidObligationId\",\n \"msg\": \"[DEPRECATED] Obligation id must be 0\"\n },\n {\n \"code\": 6060,\n \"name\": \"InvalidBorrowRateCurvePoint\",\n \"msg\": \"Invalid borrow rate curve point\"\n },\n {\n \"code\": 6061,\n \"name\": \"InvalidUtilizationRate\",\n \"msg\": \"Invalid utilization rate\"\n },\n {\n \"code\": 6062,\n \"name\": \"CannotSocializeObligationWithCollateral\",\n \"msg\": \"Obligation hasn't been fully liquidated and debt cannot be socialized.\"\n },\n {\n \"code\": 6063,\n \"name\": \"ObligationEmpty\",\n \"msg\": \"Obligation has no borrows or deposits.\"\n },\n {\n \"code\": 6064,\n \"name\": \"WithdrawalCapReached\",\n \"msg\": \"Withdrawal cap is reached\"\n },\n {\n \"code\": 6065,\n \"name\": \"LastTimestampGreaterThanCurrent\",\n \"msg\": \"The last interval start timestamp is greater than the current timestamp\"\n },\n {\n \"code\": 6066,\n \"name\": \"LiquidationRewardTooSmall\",\n \"msg\": \"The reward amount is less than the minimum acceptable received liquidity\"\n },\n {\n \"code\": 6067,\n \"name\": \"IsolatedAssetTierViolation\",\n \"msg\": \"Isolated Asset Tier Violation\"\n },\n {\n \"code\": 6068,\n \"name\": \"InconsistentElevationGroup\",\n \"msg\": \"The obligation's elevation group and the reserve's are not the same\"\n },\n {\n \"code\": 6069,\n \"name\": \"InvalidElevationGroup\",\n \"msg\": \"The elevation group chosen for the reserve does not exist in the lending market\"\n },\n {\n \"code\": 6070,\n \"name\": \"InvalidElevationGroupConfig\",\n \"msg\": \"The elevation group updated has wrong parameters set\"\n },\n {\n \"code\": 6071,\n \"name\": \"UnhealthyElevationGroupLtv\",\n \"msg\": \"The current obligation must have most or all its debt repaid before changing the elevation group\"\n },\n {\n \"code\": 6072,\n \"name\": \"ElevationGroupNewLoansDisabled\",\n \"msg\": \"Elevation group does not accept any new loans or any new borrows/withdrawals\"\n },\n {\n \"code\": 6073,\n \"name\": \"ReserveDeprecated\",\n \"msg\": \"Reserve was deprecated, no longer usable\"\n },\n {\n \"code\": 6074,\n \"name\": \"ReferrerAccountNotInitialized\",\n \"msg\": \"Referrer account not initialized\"\n },\n {\n \"code\": 6075,\n \"name\": \"ReferrerAccountMintMissmatch\",\n \"msg\": \"Referrer account mint does not match the operation reserve mint\"\n },\n {\n \"code\": 6076,\n \"name\": \"ReferrerAccountWrongAddress\",\n \"msg\": \"Referrer account address is not a valid program address\"\n },\n {\n \"code\": 6077,\n \"name\": \"ReferrerAccountReferrerMissmatch\",\n \"msg\": \"Referrer account referrer does not match the owner referrer\"\n },\n {\n \"code\": 6078,\n \"name\": \"ReferrerAccountMissing\",\n \"msg\": \"Referrer account missing for obligation with referrer\"\n },\n {\n \"code\": 6079,\n \"name\": \"InsufficientReferralFeesToRedeem\",\n \"msg\": \"Insufficient referral fees to claim or no liquidity available\"\n },\n {\n \"code\": 6080,\n \"name\": \"CpiDisabled\",\n \"msg\": \"CPI disabled for this instruction\"\n },\n {\n \"code\": 6081,\n \"name\": \"ShortUrlNotAsciiAlphanumeric\",\n \"msg\": \"Referrer short_url is not ascii alphanumeric\"\n },\n {\n \"code\": 6082,\n \"name\": \"ReserveObsolete\",\n \"msg\": \"Reserve is marked as obsolete\"\n },\n {\n \"code\": 6083,\n \"name\": \"ElevationGroupAlreadyActivated\",\n \"msg\": \"Obligation already part of the same elevation group\"\n },\n {\n \"code\": 6084,\n \"name\": \"ObligationInObsoleteReserve\",\n \"msg\": \"Obligation has a deposit or borrow in an obsolete reserve\"\n },\n {\n \"code\": 6085,\n \"name\": \"ReferrerStateOwnerMismatch\",\n \"msg\": \"Referrer state owner does not match the given signer\"\n },\n {\n \"code\": 6086,\n \"name\": \"UserMetadataOwnerAlreadySet\",\n \"msg\": \"User metadata owner is already set\"\n },\n {\n \"code\": 6087,\n \"name\": \"CollateralNonLiquidatable\",\n \"msg\": \"This collateral cannot be liquidated (LTV set to 0)\"\n },\n {\n \"code\": 6088,\n \"name\": \"BorrowingDisabled\",\n \"msg\": \"Borrowing is disabled\"\n },\n {\n \"code\": 6089,\n \"name\": \"BorrowLimitExceeded\",\n \"msg\": \"Cannot borrow above borrow limit\"\n },\n {\n \"code\": 6090,\n \"name\": \"DepositLimitExceeded\",\n \"msg\": \"Cannot deposit above deposit limit\"\n },\n {\n \"code\": 6091,\n \"name\": \"BorrowingDisabledOutsideElevationGroup\",\n \"msg\": \"Reserve does not accept any new borrows outside elevation group\"\n },\n {\n \"code\": 6092,\n \"name\": \"NetValueRemainingTooSmall\",\n \"msg\": \"Net value remaining too small\"\n },\n {\n \"code\": 6093,\n \"name\": \"WorseLtvBlocked\",\n \"msg\": \"Cannot get the obligation in a worse position\"\n },\n {\n \"code\": 6094,\n \"name\": \"LiabilitiesBiggerThanAssets\",\n \"msg\": \"Cannot have more liabilities than assets in a position\"\n },\n {\n \"code\": 6095,\n \"name\": \"ReserveTokenBalanceMismatch\",\n \"msg\": \"Reserve state and token account cannot drift\"\n },\n {\n \"code\": 6096,\n \"name\": \"ReserveVaultBalanceMismatch\",\n \"msg\": \"Reserve token account has been unexpectedly modified\"\n },\n {\n \"code\": 6097,\n \"name\": \"ReserveAccountingMismatch\",\n \"msg\": \"Reserve internal state accounting has been unexpectedly modified\"\n },\n {\n \"code\": 6098,\n \"name\": \"BorrowingAboveUtilizationRateDisabled\",\n \"msg\": \"Borrowing above set utilization rate is disabled\"\n },\n {\n \"code\": 6099,\n \"name\": \"LiquidationBorrowFactorPriority\",\n \"msg\": \"Liquidation must prioritize the debt with the highest borrow factor\"\n },\n {\n \"code\": 6100,\n \"name\": \"LiquidationLowestLiquidationLtvPriority\",\n \"msg\": \"Liquidation must prioritize the collateral with the lowest liquidation LTV\"\n },\n {\n \"code\": 6101,\n \"name\": \"ElevationGroupBorrowLimitExceeded\",\n \"msg\": \"Elevation group borrow limit exceeded\"\n },\n {\n \"code\": 6102,\n \"name\": \"ElevationGroupWithoutDebtReserve\",\n \"msg\": \"The elevation group does not have a debt reserve defined\"\n },\n {\n \"code\": 6103,\n \"name\": \"ElevationGroupMaxCollateralReserveZero\",\n \"msg\": \"The elevation group does not allow any collateral reserves\"\n },\n {\n \"code\": 6104,\n \"name\": \"ElevationGroupHasAnotherDebtReserve\",\n \"msg\": \"In elevation group attempt to borrow from a reserve that is not the debt reserve\"\n },\n {\n \"code\": 6105,\n \"name\": \"ElevationGroupDebtReserveAsCollateral\",\n \"msg\": \"The elevation group's debt reserve cannot be used as a collateral reserve\"\n },\n {\n \"code\": 6106,\n \"name\": \"ObligationCollateralExceedsElevationGroupLimit\",\n \"msg\": \"Obligation have more collateral than the maximum allowed by the elevation group\"\n },\n {\n \"code\": 6107,\n \"name\": \"ObligationElevationGroupMultipleDebtReserve\",\n \"msg\": \"Obligation is an elevation group but have more than one debt reserve\"\n },\n {\n \"code\": 6108,\n \"name\": \"UnsupportedTokenExtension\",\n \"msg\": \"Mint has a token (2022) extension that is not supported\"\n },\n {\n \"code\": 6109,\n \"name\": \"InvalidTokenAccount\",\n \"msg\": \"Can't have an spl token mint with a t22 account\"\n },\n {\n \"code\": 6110,\n \"name\": \"DepositDisabledOutsideElevationGroup\",\n \"msg\": \"Can't deposit into this reserve outside elevation group\"\n },\n {\n \"code\": 6111,\n \"name\": \"CannotCalculateReferralAmountDueToSlotsMismatch\",\n \"msg\": \"Cannot calculate referral amount due to slots mismatch\"\n },\n {\n \"code\": 6112,\n \"name\": \"ObligationOwnersMustMatch\",\n \"msg\": \"Obligation owners must match\"\n },\n {\n \"code\": 6113,\n \"name\": \"ObligationsMustMatch\",\n \"msg\": \"Obligations must match\"\n },\n {\n \"code\": 6114,\n \"name\": \"LendingMarketsMustMatch\",\n \"msg\": \"Lending markets must match\"\n },\n {\n \"code\": 6115,\n \"name\": \"ObligationCurrentlyMarkedForDeleveraging\",\n \"msg\": \"Obligation is already marked for deleveraging\"\n },\n {\n \"code\": 6116,\n \"name\": \"MaximumWithdrawValueZero\",\n \"msg\": \"Maximum withdrawable value of this collateral is zero, LTV needs improved\"\n },\n {\n \"code\": 6117,\n \"name\": \"ZeroMaxLtvAssetsInDeposits\",\n \"msg\": \"No max LTV 0 assets allowed in deposits for repay and withdraw\"\n },\n {\n \"code\": 6118,\n \"name\": \"LowestLtvAssetsPriority\",\n \"msg\": \"Withdrawing must prioritize the collateral with the lowest reserve max-LTV\"\n },\n {\n \"code\": 6119,\n \"name\": \"WorseLtvThanUnhealthyLtv\",\n \"msg\": \"Cannot get the obligation liquidatable\"\n },\n {\n \"code\": 6120,\n \"name\": \"FarmAccountsMissing\",\n \"msg\": \"Farm accounts to refresh are missing\"\n },\n {\n \"code\": 6121,\n \"name\": \"RepayTooSmallForFullLiquidation\",\n \"msg\": \"Repay amount is too small to satisfy the mandatory full liquidation\"\n },\n {\n \"code\": 6122,\n \"name\": \"InsufficientRepayAmount\",\n \"msg\": \"Liquidator provided repay amount lower than required by liquidation rules\"\n },\n {\n \"code\": 6123,\n \"name\": \"OrderIndexOutOfBounds\",\n \"msg\": \"Obligation order of the given index cannot exist\"\n },\n {\n \"code\": 6124,\n \"name\": \"InvalidOrderConfiguration\",\n \"msg\": \"Given order configuration has wrong parameters\"\n },\n {\n \"code\": 6125,\n \"name\": \"OrderConfigurationNotSupportedByObligation\",\n \"msg\": \"Given order configuration cannot be used with the current state of the obligation\"\n },\n {\n \"code\": 6126,\n \"name\": \"OperationNotPermittedWithCurrentObligationOrders\",\n \"msg\": \"Single debt, single collateral obligation orders have to be cancelled before changing the deposit/borrow count\"\n },\n {\n \"code\": 6127,\n \"name\": \"OperationNotPermittedMarketImmutable\",\n \"msg\": \"Cannot update lending market because it is set as immutable\"\n },\n {\n \"code\": 6128,\n \"name\": \"OrderCreationDisabled\",\n \"msg\": \"Creation of new orders is disabled\"\n },\n {\n \"code\": 6129,\n \"name\": \"NoUpgradeAuthority\",\n \"msg\": \"Cannot initialize global config because there is no upgrade authority to the program\"\n }\n ],\n \"types\": [\n {\n \"name\": \"UpdateConfigMode\",\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"UpdateLoanToValuePct\"\n },\n {\n \"name\": \"UpdateMaxLiquidationBonusBps\"\n },\n {\n \"name\": \"UpdateLiquidationThresholdPct\"\n },\n {\n \"name\": \"UpdateProtocolLiquidationFee\"\n },\n {\n \"name\": \"UpdateProtocolTakeRate\"\n },\n {\n \"name\": \"UpdateFeesBorrowFee\"\n },\n {\n \"name\": \"UpdateFeesFlashLoanFee\"\n },\n {\n \"name\": \"DeprecatedUpdateFeesReferralFeeBps\"\n },\n {\n \"name\": \"UpdateDepositLimit\"\n },\n {\n \"name\": \"UpdateBorrowLimit\"\n },\n {\n \"name\": \"UpdateTokenInfoLowerHeuristic\"\n },\n {\n \"name\": \"UpdateTokenInfoUpperHeuristic\"\n },\n {\n \"name\": \"UpdateTokenInfoExpHeuristic\"\n },\n {\n \"name\": \"UpdateTokenInfoTwapDivergence\"\n },\n {\n \"name\": \"UpdateTokenInfoScopeTwap\"\n },\n {\n \"name\": \"UpdateTokenInfoScopeChain\"\n },\n {\n \"name\": \"UpdateTokenInfoName\"\n },\n {\n \"name\": \"UpdateTokenInfoPriceMaxAge\"\n },\n {\n \"name\": \"UpdateTokenInfoTwapMaxAge\"\n },\n {\n \"name\": \"UpdateScopePriceFeed\"\n },\n {\n \"name\": \"UpdatePythPrice\"\n },\n {\n \"name\": \"UpdateSwitchboardFeed\"\n },\n {\n \"name\": \"UpdateSwitchboardTwapFeed\"\n },\n {\n \"name\": \"UpdateBorrowRateCurve\"\n },\n {\n \"name\": \"UpdateEntireReserveConfig\"\n },\n {\n \"name\": \"UpdateDebtWithdrawalCap\"\n },\n {\n \"name\": \"UpdateDepositWithdrawalCap\"\n },\n {\n \"name\": \"DeprecatedUpdateDebtWithdrawalCapCurrentTotal\"\n },\n {\n \"name\": \"DeprecatedUpdateDepositWithdrawalCapCurrentTotal\"\n },\n {\n \"name\": \"UpdateBadDebtLiquidationBonusBps\"\n },\n {\n \"name\": \"UpdateMinLiquidationBonusBps\"\n },\n {\n \"name\": \"UpdateDeleveragingMarginCallPeriod\"\n },\n {\n \"name\": \"UpdateBorrowFactor\"\n },\n {\n \"name\": \"UpdateAssetTier\"\n },\n {\n \"name\": \"UpdateElevationGroup\"\n },\n {\n \"name\": \"UpdateDeleveragingThresholdDecreaseBpsPerDay\"\n },\n {\n \"name\": \"DeprecatedUpdateMultiplierSideBoost\"\n },\n {\n \"name\": \"DeprecatedUpdateMultiplierTagBoost\"\n },\n {\n \"name\": \"UpdateReserveStatus\"\n },\n {\n \"name\": \"UpdateFarmCollateral\"\n },\n {\n \"name\": \"UpdateFarmDebt\"\n },\n {\n \"name\": \"UpdateDisableUsageAsCollateralOutsideEmode\"\n },\n {\n \"name\": \"UpdateBlockBorrowingAboveUtilizationPct\"\n },\n {\n \"name\": \"UpdateBlockPriceUsage\"\n },\n {\n \"name\": \"UpdateBorrowLimitOutsideElevationGroup\"\n },\n {\n \"name\": \"UpdateBorrowLimitsInElevationGroupAgainstThisReserve\"\n },\n {\n \"name\": \"UpdateHostFixedInterestRateBps\"\n },\n {\n \"name\": \"UpdateAutodeleverageEnabled\"\n },\n {\n \"name\": \"UpdateDeleveragingBonusIncreaseBpsPerDay\"\n },\n {\n \"name\": \"UpdateProtocolOrderExecutionFee\"\n }\n ]\n }\n },\n {\n \"name\": \"UpdateLendingMarketConfigValue\",\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Bool\",\n \"fields\": [\n \"bool\"\n ]\n },\n {\n \"name\": \"U8\",\n \"fields\": [\n \"u8\"\n ]\n },\n {\n \"name\": \"U8Array\",\n \"fields\": [\n {\n \"array\": [\n \"u8\",\n 8\n ]\n }\n ]\n },\n {\n \"name\": \"U16\",\n \"fields\": [\n \"u16\"\n ]\n },\n {\n \"name\": \"U64\",\n \"fields\": [\n \"u64\"\n ]\n },\n {\n \"name\": \"U128\",\n \"fields\": [\n \"u128\"\n ]\n },\n {\n \"name\": \"Pubkey\",\n \"fields\": [\n \"pubkey\"\n ]\n },\n {\n \"name\": \"ElevationGroup\",\n \"fields\": [\n {\n \"defined\": {\n \"name\": \"ElevationGroup\"\n }\n }\n ]\n },\n {\n \"name\": \"Name\",\n \"fields\": [\n {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n ]\n }\n ]\n }\n },\n {\n \"name\": \"UpdateLendingMarketMode\",\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"UpdateOwner\"\n },\n {\n \"name\": \"UpdateEmergencyMode\"\n },\n {\n \"name\": \"UpdateLiquidationCloseFactor\"\n },\n {\n \"name\": \"UpdateLiquidationMaxValue\"\n },\n {\n \"name\": \"DeprecatedUpdateGlobalUnhealthyBorrow\"\n },\n {\n \"name\": \"UpdateGlobalAllowedBorrow\"\n },\n {\n \"name\": \"UpdateRiskCouncil\"\n },\n {\n \"name\": \"UpdateMinFullLiquidationThreshold\"\n },\n {\n \"name\": \"UpdateInsolvencyRiskLtv\"\n },\n {\n \"name\": \"UpdateElevationGroup\"\n },\n {\n \"name\": \"UpdateReferralFeeBps\"\n },\n {\n \"name\": \"DeprecatedUpdateMultiplierPoints\"\n },\n {\n \"name\": \"UpdatePriceRefreshTriggerToMaxAgePct\"\n },\n {\n \"name\": \"UpdateAutodeleverageEnabled\"\n },\n {\n \"name\": \"UpdateBorrowingDisabled\"\n },\n {\n \"name\": \"UpdateMinNetValueObligationPostAction\"\n },\n {\n \"name\": \"UpdateMinValueLtvSkipPriorityLiqCheck\"\n },\n {\n \"name\": \"UpdateMinValueBfSkipPriorityLiqCheck\"\n },\n {\n \"name\": \"UpdatePaddingFields\"\n },\n {\n \"name\": \"UpdateName\"\n },\n {\n \"name\": \"UpdateIndividualAutodeleverageMarginCallPeriodSecs\"\n },\n {\n \"name\": \"UpdateInitialDepositAmount\"\n },\n {\n \"name\": \"UpdateObligationOrderExecutionEnabled\"\n },\n {\n \"name\": \"UpdateImmutableFlag\"\n },\n {\n \"name\": \"UpdateObligationOrderCreationEnabled\"\n }\n ]\n }\n },\n {\n \"name\": \"UpdateGlobalConfigMode\",\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"PendingAdmin\"\n },\n {\n \"name\": \"FeeCollector\"\n }\n ]\n }\n },\n {\n \"name\": \"LastUpdate\",\n \"docs\": [\n \"Last update state\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"slot\",\n \"docs\": [\n \"Last slot when updated\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"stale\",\n \"docs\": [\n \"True when marked stale, false when slot updated\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"price_status\",\n \"docs\": [\n \"Status of the prices used to calculate the last update\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"placeholder\",\n \"type\": {\n \"array\": [\n \"u8\",\n 6\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"ElevationGroup\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"max_liquidation_bonus_bps\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"id\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"ltv_pct\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"liquidation_threshold_pct\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"allow_new_loans\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"max_reserves_as_collateral\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"padding0\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"debt_reserve\",\n \"docs\": [\n \"Mandatory debt reserve for this elevation group\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"padding1\",\n \"type\": {\n \"array\": [\n \"u64\",\n 4\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"InitObligationArgs\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"tag\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"id\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"ObligationCollateral\",\n \"docs\": [\n \"Obligation collateral state\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"deposit_reserve\",\n \"docs\": [\n \"Reserve collateral is deposited to\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"deposited_amount\",\n \"docs\": [\n \"Amount of collateral deposited\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"market_value_sf\",\n \"docs\": [\n \"Collateral market value in quote currency (scaled fraction)\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"borrowed_amount_against_this_collateral_in_elevation_group\",\n \"docs\": [\n \"Debt amount (lamport) taken against this collateral.\",\n \"(only meaningful if this obligation is part of an elevation group, otherwise 0)\",\n \"This is only indicative of the debt computed on the last refresh obligation.\",\n \"If the obligation have multiple collateral this value is the same for all of them.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"padding\",\n \"type\": {\n \"array\": [\n \"u64\",\n 9\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"ObligationLiquidity\",\n \"docs\": [\n \"Obligation liquidity state\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"borrow_reserve\",\n \"docs\": [\n \"Reserve liquidity is borrowed from\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"cumulative_borrow_rate_bsf\",\n \"docs\": [\n \"Borrow rate used for calculating interest (big scaled fraction)\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"BigFractionBytes\"\n }\n }\n },\n {\n \"name\": \"padding\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"borrowed_amount_sf\",\n \"docs\": [\n \"Amount of liquidity borrowed plus interest (scaled fraction)\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"market_value_sf\",\n \"docs\": [\n \"Liquidity market value in quote currency (scaled fraction)\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"borrow_factor_adjusted_market_value_sf\",\n \"docs\": [\n \"Risk adjusted liquidity market value in quote currency - DEBUG ONLY - use market_value instead\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"borrowed_amount_outside_elevation_groups\",\n \"docs\": [\n \"Amount of liquidity borrowed outside of an elevation group\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"padding2\",\n \"type\": {\n \"array\": [\n \"u64\",\n 7\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"ObligationOrder\",\n \"docs\": [\n \"A single obligation order.\",\n \"See [Obligation::orders].\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"condition_threshold_sf\",\n \"docs\": [\n \"A threshold value used by the condition (scaled [Fraction]).\",\n \"The exact meaning depends on the specific [Self::condition_type].\",\n \"\",\n \"Examples:\",\n \"- when `condition_type == 2 (UserLtvBelow)`:\",\n \"then a value of `0.455` here means that the order is active only when the obligation's\",\n \"user LTV is less than `0.455` (i.e. < 45.5%).\",\n \"- when `condition_type == 3 (DebtCollPriceRatioAbove)`:\",\n \"assuming the obligation uses BTC collateral for SOL debt, then a value of `491.3` here\",\n \"means that the order is active only when the BTC-SOL price is greater than `491.3` (i.e.\",\n \"> 491.3 SOL per BTC).\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"opportunity_parameter_sf\",\n \"docs\": [\n \"A configuration parameter used by the opportunity (scaled [Fraction]).\",\n \"The exact meaning depends on the specific [Self::opportunity_type].\",\n \"\",\n \"Examples:\",\n \"- when `opportunity_type == 0 (DeleverageSingleDebtAmount)`:\",\n \"Assuming the obligation uses BTC collateral for SOL debt, then a value of `1_234_000_000`\",\n \"here means that a liquidator may repay up to 1234000000 lamports (i.e. 1.234 SOL) on this\",\n \"obligation.\",\n \"Note: the special value of [Fraction::MAX] is *not* allowed in this case.\",\n \"- when `opportunity_type == 1 (DeleverageAllDebtAmount)`:\",\n \"The only allowed value in this case is [Fraction::MAX] (to emphasize that *all* debt\",\n \"should be repaid).\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"min_execution_bonus_bps\",\n \"docs\": [\n \"A *minimum* additional fraction of collateral transferred to the liquidator, in bps.\",\n \"\",\n \"The minimum bonus is applied exactly when the [Self::condition_threshold_sf] is met, and\",\n \"grows linearly towards the [Self::max_execution_bonus_bps].\",\n \"\",\n \"Example: a value of `50` here means 50bps == 0.5% bonus for an \\\"LTV > 65%\\\" order, when\",\n \"executed precisely at the moment LTV exceeds 65%.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"max_execution_bonus_bps\",\n \"docs\": [\n \"A *maximum* additional fraction of collateral transferred to the liquidator, in bps.\",\n \"\",\n \"The maximum bonus is applied at the relevant \\\"extreme\\\" state of the obligation, i.e.:\",\n \"- for a stop-loss condition, it is a point at which the obligation becomes liquidatable;\",\n \"- for a take-profit condition, it is a point at which obligation has 0% LTV.\",\n \"\",\n \"In non-extreme states, the actual bonus value is interpolated linearly, starting from\",\n \"[Self::min_execution_bonus_bps] (at the point specified by the order's condition).\",\n \"\",\n \"Example: a value of `300` here means 300bps == 3.0% bonus for a \\\"debt/coll price > 140\\\"\",\n \"order, when executed at a higher price = 200, at which the obligation's LTV happens to\",\n \"be equal to its liquidation LTV.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"condition_type\",\n \"docs\": [\n \"Serialized [ConditionType].\",\n \"The entire order is void when this is zeroed (i.e. representing [ConditionType::Never]).\",\n \"\",\n \"Example: a value of `2` here denotes `UserLtvBelow` condition type. Of course, to\",\n \"interpret this condition, we also need to take the [Self::condition_threshold_sf] into\",\n \"account.\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"opportunity_type\",\n \"docs\": [\n \"Serialized [OpportunityType].\",\n \"\",\n \"Example: a value of `0` here denotes `DeleverageSingleDebtAmount` opportunity. Of course, to\",\n \"interpret this opportunity, we also need to take the [Self::opportunity_parameter_sf] into\",\n \"account.\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"padding1\",\n \"docs\": [\n \"Internal padding.\",\n \"The fields above take up 2+2+1+1 bytes = 48 bits, which means we need 80 bits = 10 bytes to\",\n \"align with `u128`s.\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 10\n ]\n }\n },\n {\n \"name\": \"padding2\",\n \"docs\": [\n \"End padding.\",\n \"The total size of a single instance is 8*u128 = 128 bytes.\"\n ],\n \"type\": {\n \"array\": [\n \"u128\",\n 5\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"AssetTier\",\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Regular\"\n },\n {\n \"name\": \"IsolatedCollateral\"\n },\n {\n \"name\": \"IsolatedDebt\"\n }\n ]\n }\n },\n {\n \"name\": \"BigFractionBytes\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"value\",\n \"type\": {\n \"array\": [\n \"u64\",\n 4\n ]\n }\n },\n {\n \"name\": \"padding\",\n \"type\": {\n \"array\": [\n \"u64\",\n 2\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"FeeCalculation\",\n \"docs\": [\n \"Calculate fees exlusive or inclusive of an amount\"\n ],\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Exclusive\"\n },\n {\n \"name\": \"Inclusive\"\n }\n ]\n }\n },\n {\n \"name\": \"ReserveCollateral\",\n \"docs\": [\n \"Reserve collateral\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"mint_pubkey\",\n \"docs\": [\n \"Reserve collateral mint address\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"mint_total_supply\",\n \"docs\": [\n \"Reserve collateral mint supply, used for exchange rate\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"supply_vault\",\n \"docs\": [\n \"Reserve collateral supply address\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"padding1\",\n \"type\": {\n \"array\": [\n \"u128\",\n 32\n ]\n }\n },\n {\n \"name\": \"padding2\",\n \"type\": {\n \"array\": [\n \"u128\",\n 32\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"ReserveConfig\",\n \"docs\": [\n \"Reserve configuration values\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"status\",\n \"docs\": [\n \"Status of the reserve Active/Obsolete/Hidden\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"asset_tier\",\n \"docs\": [\n \"Asset tier -> 0 - regular (collateral & debt), 1 - isolated collateral, 2 - isolated debt\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"host_fixed_interest_rate_bps\",\n \"docs\": [\n \"Flat rate that goes to the host\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"reserved2\",\n \"docs\": [\n \"[DEPRECATED] Space that used to hold 2 fields:\",\n \"- Boost for side (debt or collateral)\",\n \"- Reward points multiplier per obligation type\",\n \"Can be re-used after making sure all underlying production account data is zeroed.\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 9\n ]\n }\n },\n {\n \"name\": \"protocol_order_execution_fee_pct\",\n \"docs\": [\n \"Cut of the order execution bonus that the protocol receives, as a percentage\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"protocol_take_rate_pct\",\n \"docs\": [\n \"Protocol take rate is the amount borrowed interest protocol receives, as a percentage\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"protocol_liquidation_fee_pct\",\n \"docs\": [\n \"Cut of the liquidation bonus that the protocol receives, as a percentage\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"loan_to_value_pct\",\n \"docs\": [\n \"Target ratio of the value of borrows to deposits, as a percentage\",\n \"0 if use as collateral is disabled\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"liquidation_threshold_pct\",\n \"docs\": [\n \"Loan to value ratio at which an obligation can be liquidated, as percentage\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"min_liquidation_bonus_bps\",\n \"docs\": [\n \"Minimum bonus a liquidator receives when repaying part of an unhealthy obligation, as bps\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"max_liquidation_bonus_bps\",\n \"docs\": [\n \"Maximum bonus a liquidator receives when repaying part of an unhealthy obligation, as bps\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"bad_debt_liquidation_bonus_bps\",\n \"docs\": [\n \"Bad debt liquidation bonus for an undercollateralized obligation, as bps\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"deleveraging_margin_call_period_secs\",\n \"docs\": [\n \"Time in seconds that must pass before redemptions are enabled after the deposit limit is\",\n \"crossed.\",\n \"Only relevant when `autodeleverage_enabled == 1`, and must not be 0 in such case.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"deleveraging_threshold_decrease_bps_per_day\",\n \"docs\": [\n \"The rate at which the deleveraging threshold decreases, in bps per day.\",\n \"Only relevant when `autodeleverage_enabled == 1`, and must not be 0 in such case.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"fees\",\n \"docs\": [\n \"Program owner fees assessed, separate from gains due to interest accrual\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"ReserveFees\"\n }\n }\n },\n {\n \"name\": \"borrow_rate_curve\",\n \"docs\": [\n \"Borrow rate curve based on utilization\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"BorrowRateCurve\"\n }\n }\n },\n {\n \"name\": \"borrow_factor_pct\",\n \"docs\": [\n \"Borrow factor in percentage - used for risk adjustment\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"deposit_limit\",\n \"docs\": [\n \"Maximum deposit limit of liquidity in native units, u64::MAX for inf\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"borrow_limit\",\n \"docs\": [\n \"Maximum amount borrowed, u64::MAX for inf, 0 to disable borrows (protected deposits)\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_info\",\n \"docs\": [\n \"Token id from TokenInfos struct\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"TokenInfo\"\n }\n }\n },\n {\n \"name\": \"deposit_withdrawal_cap\",\n \"docs\": [\n \"Deposit withdrawal caps - deposit & redeem\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"WithdrawalCaps\"\n }\n }\n },\n {\n \"name\": \"debt_withdrawal_cap\",\n \"docs\": [\n \"Debt withdrawal caps - borrow & repay\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"WithdrawalCaps\"\n }\n }\n },\n {\n \"name\": \"elevation_groups\",\n \"type\": {\n \"array\": [\n \"u8\",\n 20\n ]\n }\n },\n {\n \"name\": \"disable_usage_as_coll_outside_emode\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"utilization_limit_block_borrowing_above_pct\",\n \"docs\": [\n \"Utilization (in percentage) above which borrowing is blocked. 0 to disable.\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"autodeleverage_enabled\",\n \"docs\": [\n \"Whether this reserve should be subject to auto-deleveraging after deposit or borrow limit is\",\n \"crossed.\",\n \"Besides this flag, the lending market's flag also needs to be enabled (logical `AND`).\",\n \"**NOTE:** the manual \\\"target LTV\\\" deleveraging (enabled by the risk council for individual\",\n \"obligations) is NOT affected by this flag.\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"reserved1\",\n \"type\": {\n \"array\": [\n \"u8\",\n 1\n ]\n }\n },\n {\n \"name\": \"borrow_limit_outside_elevation_group\",\n \"docs\": [\n \"Maximum amount liquidity of this reserve borrowed outside all elevation groups\",\n \"- u64::MAX for inf\",\n \"- 0 to disable borrows outside elevation groups\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"borrow_limit_against_this_collateral_in_elevation_group\",\n \"docs\": [\n \"Defines the maximum amount (in lamports of elevation group debt asset)\",\n \"that can be borrowed when this reserve is used as collateral.\",\n \"- u64::MAX for inf\",\n \"- 0 to disable borrows in this elevation group (expected value for the debt asset)\"\n ],\n \"type\": {\n \"array\": [\n \"u64\",\n 32\n ]\n }\n },\n {\n \"name\": \"deleveraging_bonus_increase_bps_per_day\",\n \"docs\": [\n \"The rate at which the deleveraging-related liquidation bonus increases, in bps per day.\",\n \"Only relevant when `autodeleverage_enabled == 1`, and must not be 0 in such case.\"\n ],\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"ReserveFarmKind\",\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Collateral\"\n },\n {\n \"name\": \"Debt\"\n }\n ]\n }\n },\n {\n \"name\": \"ReserveFees\",\n \"docs\": [\n \"Additional fee information on a reserve\",\n \"\",\n \"These exist separately from interest accrual fees, and are specifically for the program owner\",\n \"and referral fee. The fees are paid out as a percentage of liquidity token amounts during\",\n \"repayments and liquidations.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"borrow_fee_sf\",\n \"docs\": [\n \"Fee assessed on `BorrowObligationLiquidity`, as scaled fraction (60 bits fractional part)\",\n \"Must be between `0` and `2^60`, such that `2^60 = 1`. A few examples for\",\n \"clarity:\",\n \"1% = (1 << 60) / 100 = 11529215046068470\",\n \"0.01% (1 basis point) = 115292150460685\",\n \"0.00001% (Aave borrow fee) = 115292150461\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"flash_loan_fee_sf\",\n \"docs\": [\n \"Fee for flash loan, expressed as scaled fraction.\",\n \"0.3% (Aave flash loan fee) = 0.003 * 2^60 = 3458764513820541\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"padding\",\n \"docs\": [\n \"Used for allignment\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 8\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"ReserveLiquidity\",\n \"docs\": [\n \"Reserve liquidity\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"mint_pubkey\",\n \"docs\": [\n \"Reserve liquidity mint address\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"supply_vault\",\n \"docs\": [\n \"Reserve liquidity supply address\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"fee_vault\",\n \"docs\": [\n \"Reserve liquidity fee collection address\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"available_amount\",\n \"docs\": [\n \"Reserve liquidity available\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"borrowed_amount_sf\",\n \"docs\": [\n \"Reserve liquidity borrowed (scaled fraction)\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"market_price_sf\",\n \"docs\": [\n \"Reserve liquidity market price in quote currency (scaled fraction)\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"market_price_last_updated_ts\",\n \"docs\": [\n \"Unix timestamp of the market price (from the oracle)\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"mint_decimals\",\n \"docs\": [\n \"Reserve liquidity mint decimals\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"deposit_limit_crossed_timestamp\",\n \"docs\": [\n \"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.\",\n \"If the threshold is not crossed, then the timestamp is set to 0\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"borrow_limit_crossed_timestamp\",\n \"docs\": [\n \"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.\",\n \"If the threshold is not crossed, then the timestamp is set to 0\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"cumulative_borrow_rate_bsf\",\n \"docs\": [\n \"Reserve liquidity cumulative borrow rate (scaled fraction)\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"BigFractionBytes\"\n }\n }\n },\n {\n \"name\": \"accumulated_protocol_fees_sf\",\n \"docs\": [\n \"Reserve cumulative protocol fees (scaled fraction)\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"accumulated_referrer_fees_sf\",\n \"docs\": [\n \"Reserve cumulative referrer fees (scaled fraction)\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"pending_referrer_fees_sf\",\n \"docs\": [\n \"Reserve pending referrer fees, to be claimed in refresh_obligation by referrer or protocol (scaled fraction)\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"absolute_referral_rate_sf\",\n \"docs\": [\n \"Reserve referrer fee absolute rate calculated at each refresh_reserve operation (scaled fraction)\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"Token program of the liquidity mint\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"padding2\",\n \"type\": {\n \"array\": [\n \"u64\",\n 51\n ]\n }\n },\n {\n \"name\": \"padding3\",\n \"type\": {\n \"array\": [\n \"u128\",\n 32\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"ReserveStatus\",\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Active\"\n },\n {\n \"name\": \"Obsolete\"\n },\n {\n \"name\": \"Hidden\"\n }\n ]\n }\n },\n {\n \"name\": \"WithdrawalCaps\",\n \"docs\": [\n \"Reserve Withdrawal Caps State\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"config_capacity\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"current_total\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"last_interval_start_timestamp\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"config_interval_length_seconds\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"PriceHeuristic\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"lower\",\n \"docs\": [\n \"Lower value of acceptable price\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"upper\",\n \"docs\": [\n \"Upper value of acceptable price\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"exp\",\n \"docs\": [\n \"Number of decimals of the previously defined values\"\n ],\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"PythConfiguration\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"price\",\n \"docs\": [\n \"Pubkey of the base price feed (disabled if `null` or `default`)\"\n ],\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"ScopeConfiguration\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"price_feed\",\n \"docs\": [\n \"Pubkey of the scope price feed (disabled if `null` or `default`)\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"price_chain\",\n \"docs\": [\n \"This is the scope_id price chain that results in a price for the token\"\n ],\n \"type\": {\n \"array\": [\n \"u16\",\n 4\n ]\n }\n },\n {\n \"name\": \"twap_chain\",\n \"docs\": [\n \"This is the scope_id price chain for the twap\"\n ],\n \"type\": {\n \"array\": [\n \"u16\",\n 4\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"SwitchboardConfiguration\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"price_aggregator\",\n \"docs\": [\n \"Pubkey of the base price feed (disabled if `null` or `default`)\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"twap_aggregator\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"TokenInfo\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"name\",\n \"docs\": [\n \"UTF-8 encoded name of the token (null-terminated)\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"heuristic\",\n \"docs\": [\n \"Heuristics limits of acceptable price\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"PriceHeuristic\"\n }\n }\n },\n {\n \"name\": \"max_twap_divergence_bps\",\n \"docs\": [\n \"Max divergence between twap and price in bps\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"max_age_price_seconds\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"max_age_twap_seconds\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"scope_configuration\",\n \"docs\": [\n \"Scope price configuration\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"ScopeConfiguration\"\n }\n }\n },\n {\n \"name\": \"switchboard_configuration\",\n \"docs\": [\n \"Switchboard configuration\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"SwitchboardConfiguration\"\n }\n }\n },\n {\n \"name\": \"pyth_configuration\",\n \"docs\": [\n \"Pyth configuration\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"PythConfiguration\"\n }\n }\n },\n {\n \"name\": \"block_price_usage\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"reserved\",\n \"type\": {\n \"array\": [\n \"u8\",\n 7\n ]\n }\n },\n {\n \"name\": \"padding\",\n \"type\": {\n \"array\": [\n \"u64\",\n 19\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"BorrowRateCurve\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"points\",\n \"type\": {\n \"array\": [\n {\n \"defined\": {\n \"name\": \"CurvePoint\"\n }\n },\n 11\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"CurvePoint\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"utilization_rate_bps\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"borrow_rate_bps\",\n \"type\": \"u32\"\n }\n ]\n }\n },\n {\n \"name\": \"UserState\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"user_id\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"farm_state\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"is_farm_delegated\",\n \"docs\": [\n \"Indicate if this user state is part of a delegated farm\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"padding0\",\n \"type\": {\n \"array\": [\n \"u8\",\n 7\n ]\n }\n },\n {\n \"name\": \"rewards_tally_scaled\",\n \"docs\": [\n \"Rewards tally used for computation of gained rewards\",\n \"(scaled from `Decimal` representation).\"\n ],\n \"type\": {\n \"array\": [\n \"u128\",\n 10\n ]\n }\n },\n {\n \"name\": \"rewards_issued_unclaimed\",\n \"docs\": [\n \"Number of reward tokens ready for claim\"\n ],\n \"type\": {\n \"array\": [\n \"u64\",\n 10\n ]\n }\n },\n {\n \"name\": \"last_claim_ts\",\n \"type\": {\n \"array\": [\n \"u64\",\n 10\n ]\n }\n },\n {\n \"name\": \"active_stake_scaled\",\n \"docs\": [\n \"User stake deposited and usable, generating rewards and fees.\",\n \"(scaled from `Decimal` representation).\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"pending_deposit_stake_scaled\",\n \"docs\": [\n \"User stake deposited but not usable and not generating rewards yet.\",\n \"(scaled from `Decimal` representation).\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"pending_deposit_stake_ts\",\n \"docs\": [\n \"After this timestamp, pending user stake can be moved to user stake\",\n \"Initialized to now() + delayed user stake period\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"pending_withdrawal_unstake_scaled\",\n \"docs\": [\n \"User deposits unstaked, pending for withdrawal, not usable and not generating rewards.\",\n \"(scaled from `Decimal` representation).\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"pending_withdrawal_unstake_ts\",\n \"docs\": [\n \"After this timestamp, user can withdraw their deposit.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"bump\",\n \"docs\": [\n \"User bump used for account address validation\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"delegatee\",\n \"docs\": [\n \"Delegatee used for initialisation - useful to check against\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"last_stake_ts\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"padding1\",\n \"type\": {\n \"array\": [\n \"u64\",\n 50\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"GlobalConfig\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"global_admin\",\n \"docs\": [\n \"Global admin of the program\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"pending_admin\",\n \"docs\": [\n \"Pending admin must sign a specific transaction to become the global admin\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"fee_collector\",\n \"docs\": [\n \"Fee collector is the only allowed owner of token accounts receiving protocol fees\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"padding\",\n \"docs\": [\n \"Padding to make the struct size 1024 bytes\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 928\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"LendingMarket\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"version\",\n \"docs\": [\n \"Version of lending market\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"bump_seed\",\n \"docs\": [\n \"Bump seed for derived authority address\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"lending_market_owner\",\n \"docs\": [\n \"Owner authority which can add new reserves\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"lending_market_owner_cached\",\n \"docs\": [\n \"Temporary cache of the lending market owner, used in update_lending_market_owner\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"quote_currency\",\n \"docs\": [\n \"Currency market prices are quoted in\",\n \"e.g. \\\"USD\\\" null padded (`*b\\\"USD\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\"`) or a SPL token mint pubkey\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"referral_fee_bps\",\n \"docs\": [\n \"Referral fee for the lending market, as bps out of the total protocol fee\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"emergency_mode\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"autodeleverage_enabled\",\n \"docs\": [\n \"Whether the obligations on this market should be subject to auto-deleveraging after deposit\",\n \"or borrow limit is crossed.\",\n \"Besides this flag, the particular reserve's flag also needs to be enabled (logical `AND`).\",\n \"**NOTE:** this also affects the individual \\\"target LTV\\\" deleveraging.\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"borrow_disabled\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"price_refresh_trigger_to_max_age_pct\",\n \"docs\": [\n \"Refresh price from oracle only if it's older than this percentage of the price max age.\",\n \"e.g. if the max age is set to 100s and this is set to 80%, the price will be refreshed if it's older than 80s.\",\n \"Price is always refreshed if this set to 0.\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"liquidation_max_debt_close_factor_pct\",\n \"docs\": [\n \"Percentage of the total borrowed value in an obligation available for liquidation\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"insolvency_risk_unhealthy_ltv_pct\",\n \"docs\": [\n \"Minimum acceptable unhealthy LTV before max_debt_close_factor_pct becomes 100%\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"min_full_liquidation_value_threshold\",\n \"docs\": [\n \"Minimum liquidation value threshold triggering full liquidation for an obligation\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"max_liquidatable_debt_market_value_at_once\",\n \"docs\": [\n \"Max allowed liquidation value in one ix call\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"reserved0\",\n \"docs\": [\n \"[DEPRECATED] Global maximum unhealthy borrow value allowed for any obligation\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 8\n ]\n }\n },\n {\n \"name\": \"global_allowed_borrow_value\",\n \"docs\": [\n \"Global maximum allowed borrow value allowed for any obligation\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"risk_council\",\n \"docs\": [\n \"The address of the risk council, in charge of making parameter and risk decisions on behalf of the protocol\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reserved1\",\n \"docs\": [\n \"[DEPRECATED] Reward points multiplier per obligation type\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 8\n ]\n }\n },\n {\n \"name\": \"elevation_groups\",\n \"docs\": [\n \"Elevation groups are used to group together reserves that have the same risk parameters and can bump the ltv and liquidation threshold\"\n ],\n \"type\": {\n \"array\": [\n {\n \"defined\": {\n \"name\": \"ElevationGroup\"\n }\n },\n 32\n ]\n }\n },\n {\n \"name\": \"elevation_group_padding\",\n \"type\": {\n \"array\": [\n \"u64\",\n 90\n ]\n }\n },\n {\n \"name\": \"min_net_value_in_obligation_sf\",\n \"docs\": [\n \"Min net value accepted to be found in a position after any lending action in an obligation (scaled by quote currency decimals)\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"min_value_skip_liquidation_ltv_checks\",\n \"docs\": [\n \"Minimum value to enforce smallest ltv priority checks on the collateral reserves on liquidation\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"name\",\n \"docs\": [\n \"Market name, zero-padded.\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"min_value_skip_liquidation_bf_checks\",\n \"docs\": [\n \"Minimum value to enforce highest borrow factor priority checks on the debt reserves on liquidation\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"individual_autodeleverage_margin_call_period_secs\",\n \"docs\": [\n \"Time (in seconds) that must pass before liquidation is allowed on an obligation that has\",\n \"been individually marked for auto-deleveraging (by the risk council).\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"min_initial_deposit_amount\",\n \"docs\": [\n \"Minimum amount of deposit at creation of a reserve to prevent artificial inflation\",\n \"Note: this amount cannot be recovered, the ctoken associated are never minted\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"obligation_order_execution_enabled\",\n \"docs\": [\n \"Whether the obligation orders should be evaluated during liquidations.\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"immutable\",\n \"docs\": [\n \"Whether the lending market is set as immutable.\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"obligation_order_creation_enabled\",\n \"docs\": [\n \"Whether new obligation orders can be created.\",\n \"Note: updating or cancelling existing orders is *not* affected by this flag.\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"padding2\",\n \"type\": {\n \"array\": [\n \"u8\",\n 5\n ]\n }\n },\n {\n \"name\": \"padding1\",\n \"type\": {\n \"array\": [\n \"u64\",\n 169\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"Obligation\",\n \"docs\": [\n \"Lending market obligation state\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"tag\",\n \"docs\": [\n \"Version of the struct\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"last_update\",\n \"docs\": [\n \"Last update to collateral, liquidity, or their market values\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"LastUpdate\"\n }\n }\n },\n {\n \"name\": \"lending_market\",\n \"docs\": [\n \"Lending market address\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"docs\": [\n \"Owner authority which can borrow liquidity\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"deposits\",\n \"docs\": [\n \"Deposited collateral for the obligation, unique by deposit reserve address\"\n ],\n \"type\": {\n \"array\": [\n {\n \"defined\": {\n \"name\": \"ObligationCollateral\"\n }\n },\n 8\n ]\n }\n },\n {\n \"name\": \"lowest_reserve_deposit_liquidation_ltv\",\n \"docs\": [\n \"Worst LTV for the collaterals backing the loan, represented as a percentage\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"deposited_value_sf\",\n \"docs\": [\n \"Market value of deposits (scaled fraction)\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"borrows\",\n \"docs\": [\n \"Borrowed liquidity for the obligation, unique by borrow reserve address\"\n ],\n \"type\": {\n \"array\": [\n {\n \"defined\": {\n \"name\": \"ObligationLiquidity\"\n }\n },\n 5\n ]\n }\n },\n {\n \"name\": \"borrow_factor_adjusted_debt_value_sf\",\n \"docs\": [\n \"Risk adjusted market value of borrows/debt (sum of price * borrowed_amount * borrow_factor) (scaled fraction)\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"borrowed_assets_market_value_sf\",\n \"docs\": [\n \"Market value of borrows - used for max_liquidatable_borrowed_amount (scaled fraction)\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"allowed_borrow_value_sf\",\n \"docs\": [\n \"The maximum borrow value at the weighted average loan to value ratio (scaled fraction)\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"unhealthy_borrow_value_sf\",\n \"docs\": [\n \"The dangerous borrow value at the weighted average liquidation threshold (scaled fraction)\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"deposits_asset_tiers\",\n \"docs\": [\n \"The asset tier of the deposits\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 8\n ]\n }\n },\n {\n \"name\": \"borrows_asset_tiers\",\n \"docs\": [\n \"The asset tier of the borrows\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 5\n ]\n }\n },\n {\n \"name\": \"elevation_group\",\n \"docs\": [\n \"The elevation group id the obligation opted into.\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"num_of_obsolete_deposit_reserves\",\n \"docs\": [\n \"The number of obsolete reserves the obligation has a deposit in\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"has_debt\",\n \"docs\": [\n \"Marked = 1 if borrows array is not empty, 0 = borrows empty\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"referrer\",\n \"docs\": [\n \"Wallet address of the referrer\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"borrowing_disabled\",\n \"docs\": [\n \"Marked = 1 if borrowing disabled, 0 = borrowing enabled\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"autodeleverage_target_ltv_pct\",\n \"docs\": [\n \"A target LTV set by the risk council when marking this obligation for deleveraging.\",\n \"Only effective when `deleveraging_margin_call_started_slot != 0`.\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"lowest_reserve_deposit_max_ltv_pct\",\n \"docs\": [\n \"The lowest max LTV found amongst the collateral deposits\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"num_of_obsolete_borrow_reserves\",\n \"docs\": [\n \"The number of obsolete reserves the obligation has a borrow in\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"reserved\",\n \"type\": {\n \"array\": [\n \"u8\",\n 4\n ]\n }\n },\n {\n \"name\": \"highest_borrow_factor_pct\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"autodeleverage_margin_call_started_timestamp\",\n \"docs\": [\n \"A timestamp at which the risk council most-recently marked this obligation for deleveraging.\",\n \"Zero if not currently subject to deleveraging.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"orders\",\n \"docs\": [\n \"Owner-defined, liquidator-executed orders applicable to this obligation.\",\n \"Typical use-cases would be a stop-loss and a take-profit (possibly co-existing).\"\n ],\n \"type\": {\n \"array\": [\n {\n \"defined\": {\n \"name\": \"ObligationOrder\"\n }\n },\n 2\n ]\n }\n },\n {\n \"name\": \"padding3\",\n \"type\": {\n \"array\": [\n \"u64\",\n 93\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"ReferrerState\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"short_url\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"ReferrerTokenState\",\n \"docs\": [\n \"Referrer account -> each owner can have multiple accounts for specific reserves\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"referrer\",\n \"docs\": [\n \"Pubkey of the referrer/owner\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"mint\",\n \"docs\": [\n \"Token mint for the account\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount_unclaimed_sf\",\n \"docs\": [\n \"Amount that has been accumulated and not claimed yet -> available to claim (scaled fraction)\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"amount_cumulative_sf\",\n \"docs\": [\n \"Amount that has been accumulated in total -> both already claimed and unclaimed (scaled fraction)\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"bump\",\n \"docs\": [\n \"Referrer token state bump, used for address validation\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"padding\",\n \"type\": {\n \"array\": [\n \"u64\",\n 31\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"ShortUrl\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"referrer\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"short_url\",\n \"type\": \"string\"\n }\n ]\n }\n },\n {\n \"name\": \"UserMetadata\",\n \"docs\": [\n \"Referrer account -> each owner can have multiple accounts for specific reserves\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"referrer\",\n \"docs\": [\n \"Pubkey of the referrer/owner - pubkey::default if no referrer\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"bump\",\n \"docs\": [\n \"Bump used for validation of account address\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"user_lookup_table\",\n \"docs\": [\n \"User lookup table - used to store all user accounts - atas for each reserve mint, each obligation PDA, UserMetadata itself and all referrer_token_states if there is a referrer\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"docs\": [\n \"User metadata account owner\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"padding1\",\n \"type\": {\n \"array\": [\n \"u64\",\n 51\n ]\n }\n },\n {\n \"name\": \"padding2\",\n \"type\": {\n \"array\": [\n \"u64\",\n 64\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"Reserve\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"version\",\n \"docs\": [\n \"Version of the reserve\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"last_update\",\n \"docs\": [\n \"Last slot when supply and rates updated\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"LastUpdate\"\n }\n }\n },\n {\n \"name\": \"lending_market\",\n \"docs\": [\n \"Lending market address\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"farm_collateral\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"farm_debt\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"liquidity\",\n \"docs\": [\n \"Reserve liquidity\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"ReserveLiquidity\"\n }\n }\n },\n {\n \"name\": \"reserve_liquidity_padding\",\n \"type\": {\n \"array\": [\n \"u64\",\n 150\n ]\n }\n },\n {\n \"name\": \"collateral\",\n \"docs\": [\n \"Reserve collateral\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"ReserveCollateral\"\n }\n }\n },\n {\n \"name\": \"reserve_collateral_padding\",\n \"type\": {\n \"array\": [\n \"u64\",\n 150\n ]\n }\n },\n {\n \"name\": \"config\",\n \"docs\": [\n \"Reserve configuration values\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"ReserveConfig\"\n }\n }\n },\n {\n \"name\": \"config_padding\",\n \"type\": {\n \"array\": [\n \"u64\",\n 116\n ]\n }\n },\n {\n \"name\": \"borrowed_amount_outside_elevation_group\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"borrowed_amounts_against_this_reserve_in_elevation_groups\",\n \"docs\": [\n \"Amount of token borrowed in lamport of debt asset in the given\",\n \"elevation group when this reserve is part of the collaterals.\"\n ],\n \"type\": {\n \"array\": [\n \"u64\",\n 32\n ]\n }\n },\n {\n \"name\": \"padding\",\n \"type\": {\n \"array\": [\n \"u64\",\n 207\n ]\n }\n }\n ]\n }\n }\n ]\n}","import { KaminoLending } from \"./klend\";\nimport { Farms } from \"./kfarms\";\nimport KLEND_IDL_JSON from \"./klend.json\";\nimport KFARMS_IDL_JSON from \"./kfarms.json\";\n\nexport const KLEND_IDL = KLEND_IDL_JSON as KaminoLending;\nexport const KFARMS_IDL = KFARMS_IDL_JSON as Farms;\nexport type KlendIdlType = KaminoLending;\nexport type KfarmsIdlType = Farms;\n","import BN from \"bn.js\";\nimport {\n ObligationCollateralFields,\n ObligationCollateralJSON,\n ObligationJSON,\n ObligationLiquidityFields,\n ObligationLiquidityJSON,\n ObligationOrderFields,\n ObligationOrderJSON,\n ObligationRaw,\n ReserveConfigFields,\n ReserveConfigJSON,\n ReserveJSON,\n ReserveLiquidityFields,\n ReserveLiquidityJSON,\n ReserveRaw,\n TokenInfoFields,\n TokenInfoJSON,\n WithdrawalCapsFields,\n WithdrawalCapsJSON,\n} from \"../../types\";\nimport { PublicKey } from \"@solana/web3.js\";\nimport { BorshCoder, Idl } from \"@coral-xyz/anchor\";\nimport { KLEND_IDL } from \"../../idl\";\nimport * as borsh from \"@coral-xyz/borsh\";\n\nexport const KLEND_ACCOUNT_CODER = new BorshCoder(KLEND_IDL);\n\nconst reserveDiscriminator = Buffer.from([43, 242, 204, 202, 26, 247, 59, 127]);\n\nconst obligationDiscriminator = Buffer.from([\n 168, 206, 141, 106, 88, 76, 172, 167,\n]);\n\nconst obligationLayout = borsh.struct<ObligationRaw>([\n borsh.u64(\"tag\"),\n borsh.struct(\n [\n borsh.u64(\"slot\"),\n borsh.u8(\"stale\"),\n borsh.u8(\"priceStatus\"),\n borsh.array(borsh.u8(), 6, \"placeholder\"),\n ],\n \"lastUpdate\"\n ),\n borsh.publicKey(\"lendingMarket\"),\n borsh.publicKey(\"owner\"),\n borsh.array(\n borsh.struct([\n borsh.publicKey(\"depositReserve\"),\n borsh.u64(\"depositedAmount\"),\n borsh.u128(\"marketValueSf\"),\n borsh.u64(\"borrowedAmountAgainstThisCollateralInElevationGroup\"),\n borsh.array(borsh.u64(), 9, \"padding\"),\n ]),\n 8,\n \"deposits\"\n ),\n borsh.u64(\"lowestReserveDepositLiquidationLtv\"),\n borsh.u128(\"depositedValueSf\"),\n borsh.array(\n borsh.struct([\n borsh.publicKey(\"borrowReserve\"),\n borsh.struct(\n [\n borsh.array(borsh.u64(), 4, \"value\"),\n borsh.array(borsh.u64(), 2, \"padding\"),\n ],\n \"cumulativeBorrowRateBsf\"\n ),\n borsh.u64(\"padding\"),\n borsh.u128(\"borrowedAmountSf\"),\n borsh.u128(\"marketValueSf\"),\n borsh.u128(\"borrowFactorAdjustedMarketValueSf\"),\n borsh.u64(\"borrowedAmountOutsideElevationGroups\"),\n borsh.array(borsh.u64(), 7, \"padding2\"),\n ]),\n 5,\n \"borrows\"\n ),\n borsh.u128(\"borrowFactorAdjustedDebtValueSf\"),\n borsh.u128(\"borrowedAssetsMarketValueSf\"),\n borsh.u128(\"allowedBorrowValueSf\"),\n borsh.u128(\"unhealthyBorrowValueSf\"),\n borsh.array(borsh.u8(), 8, \"depositsAssetTiers\"),\n borsh.array(borsh.u8(), 5, \"borrowsAssetTiers\"),\n borsh.u8(\"elevationGroup\"),\n borsh.u8(\"numOfObsoleteDepositReserves\"),\n borsh.u8(\"hasDebt\"),\n borsh.publicKey(\"referrer\"),\n borsh.u8(\"borrowingDisabled\"),\n borsh.u8(\"autodeleverageTargetLtvPct\"),\n borsh.u8(\"lowestReserveDepositMaxLtvPct\"),\n borsh.u8(\"numOfObsoleteBorrowReserves\"),\n borsh.array(borsh.u8(), 4, \"reserved\"),\n borsh.u64(\"highestBorrowFactorPct\"),\n borsh.u64(\"autodeleverageMarginCallStartedTimestamp\"),\n borsh.array(\n borsh.struct([\n borsh.u128(\"conditionThresholdSf\"),\n borsh.u128(\"opportunityParameterSf\"),\n borsh.u16(\"minExecutionBonusBps\"),\n borsh.u16(\"maxExecutionBonusBps\"),\n borsh.u8(\"conditionType\"),\n borsh.u8(\"opportunityType\"),\n borsh.array(borsh.u8(), 10, \"padding1\"),\n borsh.array(borsh.u128(), 5, \"padding2\"),\n ]),\n 2,\n \"orders\"\n ),\n borsh.array(borsh.u64(), 93, \"padding3\"),\n]);\n\nconst reserveLayout = borsh.struct<ReserveRaw>([\n borsh.u64(\"version\"),\n borsh.struct(\n [\n borsh.u64(\"slot\"),\n borsh.u8(\"stale\"),\n borsh.u8(\"priceStatus\"),\n borsh.array(borsh.u8(), 6, \"placeholder\"),\n ],\n \"lastUpdate\"\n ),\n borsh.publicKey(\"lendingMarket\"),\n borsh.publicKey(\"farmCollateral\"),\n borsh.publicKey(\"farmDebt\"),\n borsh.struct(\n [\n borsh.publicKey(\"mintPubkey\"),\n borsh.publicKey(\"supplyVault\"),\n borsh.publicKey(\"feeVault\"),\n borsh.u64(\"availableAmount\"),\n borsh.u128(\"borrowedAmountSf\"),\n borsh.u128(\"marketPriceSf\"),\n borsh.u64(\"marketPriceLastUpdatedTs\"),\n borsh.u64(\"mintDecimals\"),\n borsh.u64(\"depositLimitCrossedTimestamp\"),\n borsh.u64(\"borrowLimitCrossedTimestamp\"),\n borsh.struct(\n [\n borsh.array(borsh.u64(), 4, \"value\"),\n borsh.array(borsh.u64(), 2, \"padding\"),\n ],\n \"cumulativeBorrowRateBsf\"\n ),\n borsh.u128(\"accumulatedProtocolFeesSf\"),\n borsh.u128(\"accumulatedReferrerFeesSf\"),\n borsh.u128(\"pendingReferrerFeesSf\"),\n borsh.u128(\"absoluteReferralRateSf\"),\n borsh.publicKey(\"tokenProgram\"),\n borsh.array(borsh.u64(), 51, \"padding2\"),\n borsh.array(borsh.u128(), 32, \"padding3\"),\n ],\n \"liquidity\"\n ),\n borsh.array(borsh.u64(), 150, \"reserveLiquidityPadding\"),\n borsh.struct(\n [\n borsh.publicKey(\"mintPubkey\"),\n borsh.u64(\"mintTotalSupply\"),\n borsh.publicKey(\"supplyVault\"),\n borsh.array(borsh.u128(), 32, \"padding1\"),\n borsh.array(borsh.u128(), 32, \"padding2\"),\n ],\n \"collateral\"\n ),\n borsh.array(borsh.u64(), 150, \"reserveCollateralPadding\"),\n borsh.struct(\n [\n borsh.u8(\"status\"),\n borsh.u8(\"assetTier\"),\n borsh.u16(\"hostFixedInterestRateBps\"),\n borsh.array(borsh.u8(), 9, \"reserved2\"),\n borsh.u8(\"protocolOrderExecutionFeePct\"),\n borsh.u8(\"protocolTakeRatePct\"),\n borsh.u8(\"protocolLiquidationFeePct\"),\n borsh.u8(\"loanToValuePct\"),\n borsh.u8(\"liquidationThresholdPct\"),\n borsh.u16(\"minLiquidationBonusBps\"),\n borsh.u16(\"maxLiquidationBonusBps\"),\n borsh.u16(\"badDebtLiquidationBonusBps\"),\n borsh.u64(\"deleveragingMarginCallPeriodSecs\"),\n borsh.u64(\"deleveragingThresholdDecreaseBpsPerDay\"),\n borsh.struct(\n [\n borsh.u64(\"borrowFeeSf\"),\n borsh.u64(\"flashLoanFeeSf\"),\n borsh.array(borsh.u8(), 8, \"padding\"),\n ],\n \"fees\"\n ),\n borsh.struct(\n [\n borsh.array(\n borsh.struct([\n borsh.u32(\"utilizationRateBps\"),\n borsh.u32(\"borrowRateBps\"),\n ]),\n 11,\n \"points\"\n ),\n ],\n \"borrowRateCurve\"\n ),\n borsh.u64(\"borrowFactorPct\"),\n borsh.u64(\"depositLimit\"),\n borsh.u64(\"borrowLimit\"),\n borsh.struct(\n [\n borsh.array(borsh.u8(), 32, \"name\"),\n borsh.struct(\n [borsh.u64(\"lower\"), borsh.u64(\"upper\"), borsh.u64(\"exp\")],\n \"heuristic\"\n ),\n borsh.u64(\"maxTwapDivergenceBps\"),\n borsh.u64(\"maxAgePriceSeconds\"),\n borsh.u64(\"maxAgeTwapSeconds\"),\n borsh.struct(\n [\n borsh.publicKey(\"priceFeed\"),\n borsh.array(borsh.u16(), 4, \"priceChain\"),\n borsh.array(borsh.u16(), 4, \"twapChain\"),\n ],\n \"scopeConfiguration\"\n ),\n borsh.struct(\n [\n borsh.publicKey(\"priceAggregator\"),\n borsh.publicKey(\"twapAggregator\"),\n ],\n \"switchboardConfiguration\"\n ),\n borsh.struct([borsh.publicKey(\"price\")], \"pythConfiguration\"),\n borsh.u8(\"blockPriceUsage\"),\n borsh.array(borsh.u8(), 7, \"reserved\"),\n borsh.array(borsh.u64(), 19, \"padding\"),\n ],\n \"tokenInfo\"\n ),\n borsh.struct(\n [\n borsh.i64(\"configCapacity\"),\n borsh.i64(\"currentTotal\"),\n borsh.u64(\"lastIntervalStartTimestamp\"),\n borsh.u64(\"configIntervalLengthSeconds\"),\n ],\n \"depositWithdrawalCap\"\n ),\n borsh.struct(\n [\n borsh.i64(\"configCapacity\"),\n borsh.i64(\"currentTotal\"),\n borsh.u64(\"lastIntervalStartTimestamp\"),\n borsh.u64(\"configIntervalLengthSeconds\"),\n ],\n \"debtWithdrawalCap\"\n ),\n borsh.array(borsh.u8(), 20, \"elevationGroups\"),\n borsh.u8(\"disableUsageAsCollOutsideEmode\"),\n borsh.u8(\"utilizationLimitBlockBorrowingAbovePct\"),\n borsh.u8(\"autodeleverageEnabled\"),\n borsh.array(borsh.u8(), 1, \"reserved1\"),\n borsh.u64(\"borrowLimitOutsideElevationGroup\"),\n borsh.array(\n borsh.u64(),\n 32,\n \"borrowLimitAgainstThisCollateralInElevationGroup\"\n ),\n borsh.u64(\"deleveragingBonusIncreaseBpsPerDay\"),\n ],\n \"config\"\n ),\n borsh.array(borsh.u64(), 116, \"configPadding\"),\n borsh.u64(\"borrowedAmountOutsideElevationGroup\"),\n borsh.array(\n borsh.u64(),\n 32,\n \"borrowedAmountsAgainstThisReserveInElevationGroups\"\n ),\n borsh.array(borsh.u64(), 207, \"padding\"),\n]);\n\nexport function decodeKlendReserveData(data: Buffer): ReserveRaw {\n if (!data.slice(0, 8).equals(reserveDiscriminator)) {\n throw new Error(\"invalid account discriminator\");\n }\n\n const dec = reserveLayout.decode(data.slice(8));\n return dec;\n}\n\nexport function decodeKlendObligationData(data: Buffer): ObligationRaw {\n if (!data.slice(0, 8).equals(obligationDiscriminator)) {\n throw new Error(\"invalid account discriminator\");\n }\n\n const dec = obligationLayout.decode(data.slice(8));\n return dec;\n}\n\nexport function dtoToObligationRaw(\n obligationDto: ObligationJSON\n): ObligationRaw {\n return {\n tag: new BN(obligationDto.tag),\n lastUpdate: {\n slot: new BN(obligationDto.lastUpdate.slot),\n stale: obligationDto.lastUpdate.stale,\n priceStatus: obligationDto.lastUpdate.priceStatus,\n placeholder: obligationDto.lastUpdate.placeholder,\n },\n lendingMarket: new PublicKey(obligationDto.lendingMarket),\n owner: new PublicKey(obligationDto.owner),\n deposits: obligationDto.deposits.map((item) =>\n dtoToObligationCollateralFields(item)\n ),\n lowestReserveDepositLiquidationLtv: new BN(\n obligationDto.lowestReserveDepositLiquidationLtv\n ),\n depositedValueSf: new BN(obligationDto.depositedValueSf),\n borrows: obligationDto.borrows.map((item) =>\n dtoToObligationLiquidityFields(item)\n ),\n borrowFactorAdjustedDebtValueSf: new BN(\n obligationDto.borrowFactorAdjustedDebtValueSf\n ),\n borrowedAssetsMarketValueSf: new BN(\n obligationDto.borrowedAssetsMarketValueSf\n ),\n allowedBorrowValueSf: new BN(obligationDto.allowedBorrowValueSf),\n unhealthyBorrowValueSf: new BN(obligationDto.unhealthyBorrowValueSf),\n depositsAssetTiers: obligationDto.depositsAssetTiers,\n borrowsAssetTiers: obligationDto.borrowsAssetTiers,\n elevationGroup: obligationDto.elevationGroup,\n numOfObsoleteDepositReserves: obligationDto.numOfObsoleteDepositReserves,\n hasDebt: obligationDto.hasDebt,\n referrer: new PublicKey(obligationDto.referrer),\n borrowingDisabled: obligationDto.borrowingDisabled,\n autodeleverageTargetLtvPct: obligationDto.autodeleverageTargetLtvPct,\n lowestReserveDepositMaxLtvPct: obligationDto.lowestReserveDepositMaxLtvPct,\n numOfObsoleteBorrowReserves: obligationDto.numOfObsoleteBorrowReserves,\n reserved: obligationDto.reserved,\n highestBorrowFactorPct: new BN(obligationDto.highestBorrowFactorPct),\n autodeleverageMarginCallStartedTimestamp: new BN(\n obligationDto.autodeleverageMarginCallStartedTimestamp\n ),\n orders: obligationDto.orders.map((item) =>\n dtoToObligationOrderFields(item)\n ),\n padding3: obligationDto.padding3.map((item) => new BN(item)),\n };\n}\n\nexport function dtoToReserveRaw(reserveDto: ReserveJSON): ReserveRaw {\n return {\n version: new BN(reserveDto.version),\n lastUpdate: {\n slot: new BN(reserveDto.lastUpdate.slot),\n stale: reserveDto.lastUpdate.stale,\n priceStatus: reserveDto.lastUpdate.priceStatus,\n placeholder: reserveDto.lastUpdate.placeholder,\n },\n lendingMarket: new PublicKey(reserveDto.lendingMarket),\n farmCollateral: new PublicKey(reserveDto.farmCollateral),\n farmDebt: new PublicKey(reserveDto.farmDebt),\n liquidity: dtoToReserveLiquidityFields(reserveDto.liquidity),\n reserveLiquidityPadding: reserveDto.reserveLiquidityPadding.map(\n (item) => new BN(item)\n ),\n collateral: {\n mintPubkey: new PublicKey(reserveDto.collateral.mintPubkey),\n mintTotalSupply: new BN(reserveDto.collateral.mintTotalSupply),\n supplyVault: new PublicKey(reserveDto.collateral.supplyVault),\n padding1: reserveDto.collateral.padding1.map((item) => new BN(item)),\n padding2: reserveDto.collateral.padding2.map((item) => new BN(item)),\n },\n reserveCollateralPadding: reserveDto.reserveCollateralPadding.map(\n (item) => new BN(item)\n ),\n config: dtoToReserveConfigFields(reserveDto.config),\n configPadding: reserveDto.configPadding.map((item) => new BN(item)),\n borrowedAmountOutsideElevationGroup: new BN(\n reserveDto.borrowedAmountOutsideElevationGroup\n ),\n borrowedAmountsAgainstThisReserveInElevationGroups:\n reserveDto.borrowedAmountsAgainstThisReserveInElevationGroups.map(\n (item) => new BN(item)\n ),\n padding: reserveDto.padding.map((item) => new BN(item)),\n };\n}\n\nfunction dtoToReserveLiquidityFields(\n reserveDto: ReserveLiquidityJSON\n): ReserveLiquidityFields {\n return {\n mintPubkey: new PublicKey(reserveDto.mintPubkey),\n supplyVault: new PublicKey(reserveDto.supplyVault),\n feeVault: new PublicKey(reserveDto.feeVault),\n availableAmount: new BN(reserveDto.availableAmount),\n borrowedAmountSf: new BN(reserveDto.borrowedAmountSf),\n marketPriceSf: new BN(reserveDto.marketPriceSf),\n marketPriceLastUpdatedTs: new BN(reserveDto.marketPriceLastUpdatedTs),\n mintDecimals: new BN(reserveDto.mintDecimals),\n depositLimitCrossedTimestamp: new BN(\n reserveDto.depositLimitCrossedTimestamp\n ),\n borrowLimitCrossedTimestamp: new BN(reserveDto.borrowLimitCrossedTimestamp),\n cumulativeBorrowRateBsf: {\n value: reserveDto.cumulativeBorrowRateBsf.value.map(\n (item) => new BN(item)\n ),\n padding: reserveDto.cumulativeBorrowRateBsf.padding.map(\n (item) => new BN(item)\n ),\n },\n accumulatedProtocolFeesSf: new BN(reserveDto.accumulatedProtocolFeesSf),\n accumulatedReferrerFeesSf: new BN(reserveDto.accumulatedReferrerFeesSf),\n pendingReferrerFeesSf: new BN(reserveDto.pendingReferrerFeesSf),\n absoluteReferralRateSf: new BN(reserveDto.absoluteReferralRateSf),\n tokenProgram: new PublicKey(reserveDto.tokenProgram),\n padding2: reserveDto.padding2.map((item) => new BN(item)),\n padding3: reserveDto.padding3.map((item) => new BN(item)),\n };\n}\n\nfunction dtoToReserveConfigFields(\n reserveDto: ReserveConfigJSON\n): ReserveConfigFields {\n return {\n status: reserveDto.status,\n assetTier: reserveDto.assetTier,\n hostFixedInterestRateBps: reserveDto.hostFixedInterestRateBps,\n reserved2: reserveDto.reserved2,\n protocolOrderExecutionFeePct: reserveDto.protocolOrderExecutionFeePct,\n protocolTakeRatePct: reserveDto.protocolTakeRatePct,\n protocolLiquidationFeePct: reserveDto.protocolLiquidationFeePct,\n loanToValuePct: reserveDto.loanToValuePct,\n liquidationThresholdPct: reserveDto.liquidationThresholdPct,\n minLiquidationBonusBps: reserveDto.minLiquidationBonusBps,\n maxLiquidationBonusBps: reserveDto.maxLiquidationBonusBps,\n badDebtLiquidationBonusBps: reserveDto.badDebtLiquidationBonusBps,\n deleveragingMarginCallPeriodSecs: new BN(\n reserveDto.deleveragingMarginCallPeriodSecs\n ),\n deleveragingThresholdDecreaseBpsPerDay: new BN(\n reserveDto.deleveragingThresholdDecreaseBpsPerDay\n ),\n fees: {\n borrowFeeSf: new BN(reserveDto.fees.borrowFeeSf),\n flashLoanFeeSf: new BN(reserveDto.fees.flashLoanFeeSf),\n padding: reserveDto.fees.padding,\n },\n borrowRateCurve: {\n points: reserveDto.borrowRateCurve.points.map((item) => ({\n utilizationRateBps: item.utilizationRateBps,\n borrowRateBps: item.borrowRateBps,\n })),\n },\n borrowFactorPct: new BN(reserveDto.borrowFactorPct),\n depositLimit: new BN(reserveDto.depositLimit),\n borrowLimit: new BN(reserveDto.borrowLimit),\n tokenInfo: dtoToTokenInfoFields(reserveDto.tokenInfo),\n depositWithdrawalCap: dtoToWithdrawalCapsFields(\n reserveDto.depositWithdrawalCap\n ),\n debtWithdrawalCap: dtoToWithdrawalCapsFields(reserveDto.debtWithdrawalCap),\n elevationGroups: reserveDto.elevationGroups,\n disableUsageAsCollOutsideEmode: reserveDto.disableUsageAsCollOutsideEmode,\n utilizationLimitBlockBorrowingAbovePct:\n reserveDto.utilizationLimitBlockBorrowingAbovePct,\n autodeleverageEnabled: reserveDto.autodeleverageEnabled,\n reserved1: reserveDto.reserved1,\n borrowLimitOutsideElevationGroup: new BN(\n reserveDto.borrowLimitOutsideElevationGroup\n ),\n borrowLimitAgainstThisCollateralInElevationGroup:\n reserveDto.borrowLimitAgainstThisCollateralInElevationGroup.map(\n (item) => new BN(item)\n ),\n deleveragingBonusIncreaseBpsPerDay: new BN(\n reserveDto.deleveragingBonusIncreaseBpsPerDay\n ),\n };\n}\n\nfunction dtoToTokenInfoFields(tokenInfoDto: TokenInfoJSON): TokenInfoFields {\n return {\n name: tokenInfoDto.name,\n heuristic: {\n lower: new BN(tokenInfoDto.heuristic.lower),\n upper: new BN(tokenInfoDto.heuristic.upper),\n exp: new BN(tokenInfoDto.heuristic.exp),\n },\n maxTwapDivergenceBps: new BN(tokenInfoDto.maxTwapDivergenceBps),\n maxAgePriceSeconds: new BN(tokenInfoDto.maxAgePriceSeconds),\n maxAgeTwapSeconds: new BN(tokenInfoDto.maxAgeTwapSeconds),\n scopeConfiguration: {\n priceFeed: new PublicKey(tokenInfoDto.scopeConfiguration.priceFeed),\n priceChain: tokenInfoDto.scopeConfiguration.priceChain,\n twapChain: tokenInfoDto.scopeConfiguration.twapChain,\n },\n switchboardConfiguration: {\n priceAggregator: new PublicKey(\n tokenInfoDto.switchboardConfiguration.priceAggregator\n ),\n twapAggregator: new PublicKey(\n tokenInfoDto.switchboardConfiguration.twapAggregator\n ),\n },\n pythConfiguration: {\n price: new PublicKey(tokenInfoDto.pythConfiguration.price),\n },\n blockPriceUsage: tokenInfoDto.blockPriceUsage,\n reserved: tokenInfoDto.reserved,\n padding: tokenInfoDto.padding.map((item) => new BN(item)),\n };\n}\n\nfunction dtoToWithdrawalCapsFields(\n withdrawalCapsDto: WithdrawalCapsJSON\n): WithdrawalCapsFields {\n return {\n configCapacity: new BN(withdrawalCapsDto.configCapacity),\n currentTotal: new BN(withdrawalCapsDto.currentTotal),\n lastIntervalStartTimestamp: new BN(\n withdrawalCapsDto.lastIntervalStartTimestamp\n ),\n configIntervalLengthSeconds: new BN(\n withdrawalCapsDto.configIntervalLengthSeconds\n ),\n };\n}\n\nfunction dtoToObligationCollateralFields(\n obligationCollateralDto: ObligationCollateralJSON\n): ObligationCollateralFields {\n return {\n depositReserve: new PublicKey(obligationCollateralDto.depositReserve),\n depositedAmount: new BN(obligationCollateralDto.depositedAmount),\n marketValueSf: new BN(obligationCollateralDto.marketValueSf),\n borrowedAmountAgainstThisCollateralInElevationGroup: new BN(\n obligationCollateralDto.borrowedAmountAgainstThisCollateralInElevationGroup\n ),\n padding: obligationCollateralDto.padding.map((item) => new BN(item)),\n };\n}\n\nfunction dtoToObligationLiquidityFields(\n obligationLiquidityDto: ObligationLiquidityJSON\n): ObligationLiquidityFields {\n return {\n borrowReserve: new PublicKey(obligationLiquidityDto.borrowReserve),\n cumulativeBorrowRateBsf: {\n value: obligationLiquidityDto.cumulativeBorrowRateBsf.value.map(\n (item) => new BN(item)\n ),\n padding: obligationLiquidityDto.cumulativeBorrowRateBsf.padding.map(\n (item) => new BN(item)\n ),\n },\n padding: new BN(obligationLiquidityDto.padding),\n borrowedAmountSf: new BN(obligationLiquidityDto.borrowedAmountSf),\n marketValueSf: new BN(obligationLiquidityDto.marketValueSf),\n borrowFactorAdjustedMarketValueSf: new BN(\n obligationLiquidityDto.borrowFactorAdjustedMarketValueSf\n ),\n borrowedAmountOutsideElevationGroups: new BN(\n obligationLiquidityDto.borrowedAmountOutsideElevationGroups\n ),\n padding2: obligationLiquidityDto.padding2.map((item) => new BN(item)),\n };\n}\n\nfunction dtoToObligationOrderFields(\n obligationOrderDto: ObligationOrderJSON\n): ObligationOrderFields {\n return {\n conditionThresholdSf: new BN(obligationOrderDto.conditionThresholdSf),\n opportunityParameterSf: new BN(obligationOrderDto.opportunityParameterSf),\n minExecutionBonusBps: obligationOrderDto.minExecutionBonusBps,\n maxExecutionBonusBps: obligationOrderDto.maxExecutionBonusBps,\n conditionType: obligationOrderDto.conditionType,\n opportunityType: obligationOrderDto.opportunityType,\n padding1: obligationOrderDto.padding1,\n padding2: obligationOrderDto.padding2.map((item) => new BN(item)),\n };\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport { KLEND_PROGRAM_ID } from \"../../constants\";\n\nexport const SEED_LENDING_MARKET_AUTH = \"lma\";\nexport const SEED_RESERVE_LIQ_SUPPLY = \"reserve_liq_supply\";\nexport const SEED_FEE_RECEIVER = \"fee_receiver\";\nexport const SEED_RESERVE_COLL_MINT = \"reserve_coll_mint\";\nexport const SEED_RESERVE_COLL_SUPPLY = \"reserve_coll_supply\";\nexport const SEED_BASE_REFERRER_TOKEN_STATE = \"referrer_acc\";\nexport const SEED_BASE_USER_METADATA = \"user_meta\";\nexport const SEED_BASE_REFERRER_STATE = \"ref_state\";\nexport const SEED_BASE_SHORT_URL = \"short_url\";\nexport const SEED_USER_STATE = \"user\";\n\nexport function getAllDerivedKaminoAccounts(\n lendingMarket: PublicKey,\n reserveLiquidityMint: PublicKey\n) {\n return {\n lendingMarketAuthority: deriveLendingMarketAuthority(lendingMarket)[0],\n reserveLiquiditySupply: deriveReserveLiquiditySupply(\n lendingMarket,\n reserveLiquidityMint\n )[0],\n reserveCollateralMint: deriveReserveCollateralMint(\n lendingMarket,\n reserveLiquidityMint\n )[0],\n reserveDestinationDepositCollateral: deriveReserveCollateralSupply(\n lendingMarket,\n reserveLiquidityMint\n )[0],\n };\n}\n\nexport function deriveLendingMarketAuthority(\n lendingMarket: PublicKey\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(SEED_LENDING_MARKET_AUTH), lendingMarket.toBuffer()],\n KLEND_PROGRAM_ID\n );\n}\n\nexport function deriveReserveLiquiditySupply(\n lendingMarket: PublicKey,\n reserveLiquidityMint: PublicKey\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [\n Buffer.from(SEED_RESERVE_LIQ_SUPPLY),\n lendingMarket.toBuffer(),\n reserveLiquidityMint.toBuffer(),\n ],\n KLEND_PROGRAM_ID\n );\n}\n\nexport function deriveFeeReceiver(\n lendingMarket: PublicKey,\n reserveLiquidityMint: PublicKey\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [\n Buffer.from(SEED_FEE_RECEIVER),\n lendingMarket.toBuffer(),\n reserveLiquidityMint.toBuffer(),\n ],\n KLEND_PROGRAM_ID\n );\n}\n\nexport function deriveReserveCollateralMint(\n lendingMarket: PublicKey,\n reserveLiquidityMint: PublicKey\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [\n Buffer.from(SEED_RESERVE_COLL_MINT),\n lendingMarket.toBuffer(),\n reserveLiquidityMint.toBuffer(),\n ],\n KLEND_PROGRAM_ID\n );\n}\n\nexport function deriveReserveCollateralSupply(\n lendingMarket: PublicKey,\n reserveLiquidityMint: PublicKey\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [\n Buffer.from(SEED_RESERVE_COLL_SUPPLY),\n lendingMarket.toBuffer(),\n reserveLiquidityMint.toBuffer(),\n ],\n KLEND_PROGRAM_ID\n );\n}\n\nexport function deriveReferrerTokenState(\n referrer: PublicKey\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(SEED_BASE_REFERRER_TOKEN_STATE), referrer.toBuffer()],\n KLEND_PROGRAM_ID\n );\n}\n\nexport function deriveUserMetadata(user: PublicKey): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(SEED_BASE_USER_METADATA), user.toBuffer()],\n KLEND_PROGRAM_ID\n );\n}\n\nexport function deriveReferrerState(user: PublicKey): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(SEED_BASE_REFERRER_STATE), user.toBuffer()],\n KLEND_PROGRAM_ID\n );\n}\n\nexport function deriveShortUrl(identifier: Buffer): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(SEED_BASE_SHORT_URL), identifier],\n KLEND_PROGRAM_ID\n );\n}\n\n/**\n * Typically the obligation for each bank will have tag and id = 0\n * @param ownerPublicKey\n * @param marketPublicKey\n * @param programId - Default KLEND_PROGRAM_ID\n * @param seed1AccountKey - Default PublicKey.default\n * @param seed2AccountKey - Default PublicKey.default\n * @param tag - Default 0\n * @param id - Default 0\n * @returns\n */\nexport const deriveBaseObligation = (\n ownerPublicKey: PublicKey,\n marketPublicKey: PublicKey,\n programId: PublicKey = KLEND_PROGRAM_ID,\n seed1AccountKey: PublicKey = PublicKey.default,\n seed2AccountKey: PublicKey = PublicKey.default,\n tag: number = 0,\n id: number = 0\n) => {\n return deriveObligation(\n programId,\n tag,\n id,\n ownerPublicKey,\n marketPublicKey,\n seed1AccountKey,\n seed2AccountKey\n );\n};\n\nexport const deriveObligation = (\n programId: PublicKey,\n tag: number,\n id: number,\n ownerPublicKey: PublicKey,\n marketPublicKey: PublicKey,\n seed1AccountKey: PublicKey,\n seed2AccountKey: PublicKey\n) => {\n return PublicKey.findProgramAddressSync(\n [\n Buffer.from([tag]),\n Buffer.from([id]),\n ownerPublicKey.toBuffer(),\n marketPublicKey.toBuffer(),\n seed1AccountKey.toBuffer(),\n seed2AccountKey.toBuffer(),\n ],\n programId\n );\n};\n\n/**\n * Somewhat contrary to the name, this is the rewards state of the farms program for an obligation\n * (like one owned by a bank), and has nothing to do with \"users\" in a margin context.\n * @param programId\n * @param farmState\n * @param obligation\n * @returns\n */\nexport function deriveUserState(\n programId: PublicKey,\n farmState: PublicKey,\n obligation: PublicKey\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(SEED_USER_STATE), farmState.toBuffer(), obligation.toBuffer()],\n programId\n );\n}\n","import {\n Connection,\n LAMPORTS_PER_SOL,\n PublicKey,\n STAKE_CONFIG_ID,\n SYSVAR_CLOCK_PUBKEY,\n SystemProgram,\n StakeProgram,\n Transaction,\n TransactionInstruction,\n} from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\nimport { BN } from \"bn.js\";\n\nimport { SYSVAR_RENT_PUBKEY } from \"@solana/web3.js\";\nimport {\n MPL_METADATA_PROGRAM_ID,\n SINGLE_POOL_PROGRAM_ID,\n STAKE_PROGRAM_ID,\n SYSTEM_PROGRAM_ID,\n SYSVAR_CLOCK_ID,\n SYSVAR_RENT_ID,\n SYSVAR_STAKE_HISTORY_ID,\n} from \"~/constants\";\n\nimport { TOKEN_PROGRAM_ID } from \"../spl\";\n\ninterface AccountMeta {\n pubkey: PublicKey;\n isSigner: boolean;\n isWritable: boolean;\n}\n\n// Instruction type enum\nenum SinglePoolInstructionType {\n InitializePool = 0,\n ReplenishPool,\n DepositStake,\n WithdrawStake,\n CreateTokenMetadata,\n UpdateTokenMetadata,\n InitializeOnRamp,\n}\n\nconst SinglePoolInstruction = {\n initializePool: (voteAccount: PublicKey): TransactionInstruction => {\n const pool = findPoolAddress(voteAccount);\n const stake = findPoolStakeAddress(pool);\n const mint = findPoolMintAddress(pool);\n const stakeAuthority = findPoolStakeAuthorityAddress(pool);\n const mintAuthority = findPoolMintAuthorityAddress(pool);\n\n return createTransactionInstruction(\n SINGLE_POOL_PROGRAM_ID,\n [\n { pubkey: voteAccount, isSigner: false, isWritable: false },\n { pubkey: pool, isSigner: false, isWritable: true },\n { pubkey: stake, isSigner: false, isWritable: true },\n { pubkey: mint, isSigner: false, isWritable: true },\n { pubkey: stakeAuthority, isSigner: false, isWritable: false },\n { pubkey: mintAuthority, isSigner: false, isWritable: false },\n { pubkey: SYSVAR_RENT_ID, isSigner: false, isWritable: false },\n { pubkey: SYSVAR_CLOCK_ID, isSigner: false, isWritable: false },\n { pubkey: SYSVAR_STAKE_HISTORY_ID, isSigner: false, isWritable: false },\n { pubkey: STAKE_CONFIG_ID, isSigner: false, isWritable: false },\n { pubkey: SYSTEM_PROGRAM_ID, isSigner: false, isWritable: false },\n { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },\n { pubkey: STAKE_PROGRAM_ID, isSigner: false, isWritable: false },\n ],\n Buffer.from([SinglePoolInstructionType.InitializePool])\n );\n },\n\n initializeOnRamp: (pool: PublicKey): TransactionInstruction => {\n const onRamp = findPoolOnRampAddress(pool);\n const stakeAuthority = findPoolStakeAuthorityAddress(pool);\n\n return createTransactionInstruction(\n SINGLE_POOL_PROGRAM_ID,\n [\n { pubkey: pool, isSigner: false, isWritable: false },\n { pubkey: onRamp, isSigner: false, isWritable: true },\n { pubkey: stakeAuthority, isSigner: false, isWritable: false },\n { pubkey: SYSVAR_RENT_ID, isSigner: false, isWritable: false },\n { pubkey: SYSTEM_PROGRAM_ID, isSigner: false, isWritable: false },\n { pubkey: STAKE_PROGRAM_ID, isSigner: false, isWritable: false },\n ],\n Buffer.from([SinglePoolInstructionType.InitializeOnRamp])\n );\n },\n\n depositStake: async (\n pool: PublicKey,\n userStakeAccount: PublicKey,\n userTokenAccount: PublicKey,\n userLamportAccount: PublicKey\n ): Promise<TransactionInstruction> => {\n const stake = findPoolStakeAddress(pool);\n const mint = findPoolMintAddress(pool);\n const stakeAuthority = findPoolStakeAuthorityAddress(pool);\n const mintAuthority = findPoolMintAuthorityAddress(pool);\n\n return createTransactionInstruction(\n SINGLE_POOL_PROGRAM_ID,\n [\n { pubkey: pool, isSigner: false, isWritable: false },\n { pubkey: stake, isSigner: false, isWritable: true },\n { pubkey: mint, isSigner: false, isWritable: true },\n { pubkey: stakeAuthority, isSigner: false, isWritable: false },\n { pubkey: mintAuthority, isSigner: false, isWritable: false },\n { pubkey: userStakeAccount, isSigner: false, isWritable: true },\n { pubkey: userTokenAccount, isSigner: false, isWritable: true },\n { pubkey: userLamportAccount, isSigner: false, isWritable: true },\n { pubkey: SYSVAR_CLOCK_ID, isSigner: false, isWritable: false },\n { pubkey: SYSVAR_STAKE_HISTORY_ID, isSigner: false, isWritable: false },\n { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },\n { pubkey: STAKE_PROGRAM_ID, isSigner: false, isWritable: false },\n ],\n Buffer.from([SinglePoolInstructionType.DepositStake])\n );\n },\n\n withdrawStake: async (\n pool: PublicKey,\n userStakeAccount: PublicKey,\n userStakeAuthority: PublicKey,\n userTokenAccount: PublicKey,\n tokenAmount: BigNumber\n ): Promise<TransactionInstruction> => {\n const stake = findPoolStakeAddress(pool);\n const mint = findPoolMintAddress(pool);\n const stakeAuthority = findPoolStakeAuthorityAddress(pool);\n const mintAuthority = findPoolMintAuthorityAddress(pool);\n\n // Try using BigInt for more precise conversion\n const rawAmount = BigInt(tokenAmount.multipliedBy(1e9).toString());\n\n const data = Buffer.concat([\n Buffer.from([SinglePoolInstructionType.WithdrawStake]),\n userStakeAuthority.toBuffer(),\n Buffer.from(new BN(rawAmount.toString()).toArray(\"le\", 8)),\n ]);\n\n return createTransactionInstruction(\n SINGLE_POOL_PROGRAM_ID,\n [\n { pubkey: pool, isSigner: false, isWritable: false },\n { pubkey: stake, isSigner: false, isWritable: true },\n { pubkey: mint, isSigner: false, isWritable: true },\n { pubkey: stakeAuthority, isSigner: false, isWritable: false },\n { pubkey: mintAuthority, isSigner: false, isWritable: false },\n { pubkey: userStakeAccount, isSigner: false, isWritable: true },\n { pubkey: userTokenAccount, isSigner: false, isWritable: true },\n { pubkey: SYSVAR_CLOCK_ID, isSigner: false, isWritable: false },\n { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },\n { pubkey: STAKE_PROGRAM_ID, isSigner: false, isWritable: false },\n ],\n data\n );\n },\n\n createTokenMetadata: async (\n pool: PublicKey,\n payer: PublicKey\n ): Promise<TransactionInstruction> => {\n const mint = findPoolMintAddress(pool);\n const [mintAuthority, mplAuthority, mplMetadata] = await Promise.all([\n findPoolMintAuthorityAddress(pool),\n findPoolMplAuthorityAddress(pool),\n findMplMetadataAddress(mint),\n ]);\n\n return createTransactionInstruction(\n SINGLE_POOL_PROGRAM_ID,\n [\n { pubkey: pool, isSigner: false, isWritable: false },\n { pubkey: mint, isSigner: false, isWritable: false },\n { pubkey: mintAuthority, isSigner: false, isWritable: false },\n { pubkey: mplAuthority, isSigner: false, isWritable: false },\n { pubkey: payer, isSigner: true, isWritable: true },\n { pubkey: mplMetadata, isSigner: false, isWritable: true },\n { pubkey: MPL_METADATA_PROGRAM_ID, isSigner: false, isWritable: false },\n { pubkey: SYSTEM_PROGRAM_ID, isSigner: false, isWritable: false },\n ],\n Buffer.from([SinglePoolInstructionType.CreateTokenMetadata])\n );\n },\n\n updateTokenMetadata: async (\n voteAccount: PublicKey,\n authorizedWithdrawer: PublicKey,\n tokenName: string,\n tokenSymbol: string,\n tokenUri: string = \"\"\n ): Promise<TransactionInstruction> => {\n if (tokenName.length > 32) {\n throw new Error(\"maximum token name length is 32 characters\");\n }\n if (tokenSymbol.length > 10) {\n throw new Error(\"maximum token symbol length is 10 characters\");\n }\n if (tokenUri.length > 200) {\n throw new Error(\"maximum token uri length is 200 characters\");\n }\n\n const pool = findPoolAddress(voteAccount);\n const [mint, mplAuthority] = await Promise.all([\n findPoolMintAddress(pool),\n findPoolMplAuthorityAddress(pool),\n ]);\n const mplMetadata = await findMplMetadataAddress(mint);\n\n const data = Buffer.concat([\n Buffer.from([SinglePoolInstructionType.UpdateTokenMetadata]),\n Buffer.from(new Uint32Array([tokenName.length]).buffer),\n Buffer.from(tokenName),\n Buffer.from(new Uint32Array([tokenSymbol.length]).buffer),\n Buffer.from(tokenSymbol),\n Buffer.from(new Uint32Array([tokenUri.length]).buffer),\n Buffer.from(tokenUri),\n ]);\n\n return createTransactionInstruction(\n SINGLE_POOL_PROGRAM_ID,\n [\n { pubkey: voteAccount, isSigner: false, isWritable: false },\n { pubkey: pool, isSigner: false, isWritable: false },\n { pubkey: mplAuthority, isSigner: false, isWritable: false },\n { pubkey: authorizedWithdrawer, isSigner: true, isWritable: false },\n { pubkey: mplMetadata, isSigner: false, isWritable: true },\n { pubkey: MPL_METADATA_PROGRAM_ID, isSigner: false, isWritable: false },\n ],\n data\n );\n },\n};\n\nconst createTransactionInstruction = (\n programId: PublicKey,\n keys: AccountMeta[],\n data: Buffer\n): TransactionInstruction => {\n return {\n programId,\n keys,\n data,\n };\n};\n\nconst findPda = (\n baseAddress: PublicKey,\n prefix: string,\n programId: PublicKey = SINGLE_POOL_PROGRAM_ID\n): PublicKey => {\n const [pda] = PublicKey.findProgramAddressSync(\n [Buffer.from(prefix), baseAddress.toBuffer()],\n programId\n );\n return pda;\n};\n\nconst findPoolMintAddressByVoteAccount = (voteAccountAddress: PublicKey): PublicKey =>\n findPda(findPoolAddress(voteAccountAddress), \"mint\");\nconst findPoolAddress = (voteAccountAddress: PublicKey): PublicKey =>\n findPda(voteAccountAddress, \"pool\");\nconst findPoolMintAddress = (poolAddress: PublicKey): PublicKey => findPda(poolAddress, \"mint\");\nconst findPoolStakeAddress = (poolAddress: PublicKey): PublicKey => findPda(poolAddress, \"stake\");\nconst findPoolStakeAuthorityAddress = (poolAddress: PublicKey): PublicKey =>\n findPda(poolAddress, \"stake_authority\");\nconst findPoolMintAuthorityAddress = (poolAddress: PublicKey): PublicKey =>\n findPda(poolAddress, \"mint_authority\");\nconst findPoolMplAuthorityAddress = (poolAddress: PublicKey): PublicKey =>\n findPda(poolAddress, \"mpl_authority\");\nconst findPoolOnRampAddress = (poolAddress: PublicKey): PublicKey => findPda(poolAddress, \"onramp\");\n\nconst findMplMetadataAddress = async (poolMintAddress: PublicKey): Promise<PublicKey> => {\n const [pda] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"metadata\"), MPL_METADATA_PROGRAM_ID.toBuffer(), poolMintAddress.toBuffer()],\n MPL_METADATA_PROGRAM_ID\n );\n return pda;\n};\n\nconst SINGLE_POOL_ACCOUNT_SIZE = BigInt(33);\nconst STAKE_ACCOUNT_SIZE = BigInt(200);\nconst MINT_SIZE = BigInt(82);\n\nasync function initializeStakedPoolTx(\n connection: Connection,\n payer: PublicKey,\n voteAccountAddress: PublicKey\n) {\n const instructions = await initializeStakedPoolIxs(connection, payer, voteAccountAddress);\n const tx = new Transaction().add(...instructions);\n return tx;\n}\n\nasync function initializeStakedPoolIxs(\n connection: Connection,\n payer: PublicKey,\n voteAccountAddress: PublicKey\n) {\n const poolAddress = findPoolAddress(voteAccountAddress);\n\n const stakeAddress = findPoolStakeAddress(poolAddress);\n const mintAddress = findPoolMintAddress(poolAddress);\n const onRampAddress = findPoolOnRampAddress(poolAddress);\n\n // get min rent\n const [poolRent, stakeRent, mintRent, minimumDelegationObj] = await Promise.all([\n connection.getMinimumBalanceForRentExemption(Number(SINGLE_POOL_ACCOUNT_SIZE), \"confirmed\"),\n connection.getMinimumBalanceForRentExemption(Number(STAKE_ACCOUNT_SIZE), \"confirmed\"),\n connection.getMinimumBalanceForRentExemption(Number(MINT_SIZE), \"confirmed\"),\n connection.getStakeMinimumDelegation(),\n ]);\n\n const minimumDelegation = minimumDelegationObj.value;\n\n const instructions: TransactionInstruction[] = [];\n\n // instructions\n instructions.push(\n SystemProgram.transfer({ fromPubkey: payer, toPubkey: poolAddress, lamports: poolRent })\n );\n instructions.push(\n SystemProgram.transfer({\n fromPubkey: payer,\n toPubkey: stakeAddress,\n lamports: stakeRent + minimumDelegation + LAMPORTS_PER_SOL * 1,\n })\n );\n instructions.push(\n SystemProgram.transfer({ fromPubkey: payer, toPubkey: onRampAddress, lamports: stakeRent })\n );\n instructions.push(\n SystemProgram.transfer({ fromPubkey: payer, toPubkey: mintAddress, lamports: mintRent })\n );\n\n instructions.push(SinglePoolInstruction.initializePool(voteAccountAddress));\n instructions.push(SinglePoolInstruction.initializeOnRamp(poolAddress));\n instructions.push(await SinglePoolInstruction.createTokenMetadata(poolAddress, payer));\n\n return instructions;\n}\n\nconst createAccountIx = (\n from: PublicKey,\n newAccount: PublicKey,\n lamports: number,\n space: number,\n programAddress: PublicKey\n) => {\n const data = Buffer.concat([\n Buffer.from([0]), // Assuming the first byte is an instruction type or similar\n Buffer.from(new BN(lamports).toArray(\"le\", 8)),\n Buffer.from(new BN(space).toArray(\"le\", 8)),\n programAddress.toBuffer(),\n ]);\n\n const accounts = [\n { pubkey: from, isSigner: true, isWritable: true },\n { pubkey: newAccount, isSigner: true, isWritable: true },\n ];\n\n return createTransactionInstruction(SYSTEM_PROGRAM_ID, accounts, data);\n};\n\nconst createPoolOnrampIx = (voteAccount: PublicKey): TransactionInstruction => {\n const poolAccount = findPoolAddress(voteAccount);\n const onRampAccount = findPoolOnRampAddress(poolAccount);\n const poolStakeAuthority = findPoolStakeAuthorityAddress(poolAccount);\n\n const keys = [\n { pubkey: poolAccount, isSigner: false, isWritable: false },\n { pubkey: onRampAccount, isSigner: false, isWritable: true },\n { pubkey: poolStakeAuthority, isSigner: false, isWritable: false },\n { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false },\n { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },\n { pubkey: StakeProgram.programId, isSigner: false, isWritable: false },\n ];\n\n // TODO don't hard code the instruction index? (or why not, it's not gna change is it?)\n const data = Buffer.from(Uint8Array.of(6));\n\n return new TransactionInstruction({\n keys,\n programId: SINGLE_POOL_PROGRAM_ID,\n data,\n });\n};\n\nconst replenishPoolIx = (voteAccount: PublicKey): TransactionInstruction => {\n const poolAccount = findPoolAddress(voteAccount);\n const stakePool = findPoolStakeAddress(poolAccount);\n const onRampPool = findPoolOnRampAddress(poolAccount);\n const authority = findPoolStakeAuthorityAddress(poolAccount);\n\n const keys = [\n { pubkey: voteAccount, isSigner: false, isWritable: false },\n { pubkey: poolAccount, isSigner: false, isWritable: false },\n { pubkey: stakePool, isSigner: false, isWritable: true },\n { pubkey: onRampPool, isSigner: false, isWritable: true },\n { pubkey: authority, isSigner: false, isWritable: false },\n { pubkey: SYSVAR_CLOCK_PUBKEY, isSigner: false, isWritable: false },\n { pubkey: SYSVAR_STAKE_HISTORY_ID, isSigner: false, isWritable: false },\n { pubkey: STAKE_CONFIG_ID, isSigner: false, isWritable: false },\n { pubkey: StakeProgram.programId, isSigner: false, isWritable: false },\n ];\n\n // TODO don't hard code the instruction index? (or why not, it's not gna change is it?)\n const data = Buffer.from(Uint8Array.of(1));\n\n return createTransactionInstruction(SINGLE_POOL_PROGRAM_ID, keys, data);\n};\n\nexport {\n SinglePoolInstruction,\n initializeStakedPoolIxs,\n initializeStakedPoolTx,\n findPoolAddress,\n findPoolMintAddress,\n findPoolStakeAddress,\n findPoolStakeAuthorityAddress,\n findPoolMintAuthorityAddress,\n findPoolMplAuthorityAddress,\n findMplMetadataAddress,\n findPoolOnRampAddress,\n findPoolMintAddressByVoteAccount,\n createAccountIx,\n createPoolOnrampIx,\n replenishPoolIx,\n};\n","import { FarmStateJSON, FarmStateRaw } from \"../../types\";\n\nexport function farmRawToDto(farmRaw: FarmStateRaw): FarmStateJSON {\n return {\n farmAdmin: farmRaw.farmAdmin.toBase58(),\n globalConfig: farmRaw.globalConfig.toBase58(),\n token: {\n mint: farmRaw.token.mint.toBase58(),\n decimals: farmRaw.token.decimals.toString(),\n tokenProgram: farmRaw.token.tokenProgram.toBase58(),\n padding: farmRaw.token.padding.map((p) => p.toString()),\n },\n rewardInfos: farmRaw.rewardInfos.map((item) => ({\n token: {\n mint: item.token.mint.toBase58(),\n decimals: item.token.decimals.toString(),\n tokenProgram: item.token.tokenProgram.toBase58(),\n padding: item.token.padding.map((p) => p.toString()),\n },\n rewardsVault: item.rewardsVault.toBase58(),\n rewardsAvailable: item.rewardsAvailable.toString(),\n rewardScheduleCurve: {\n points: item.rewardScheduleCurve.points.map((p) => ({\n tsStart: p.tsStart.toString(),\n rewardPerTimeUnit: p.rewardPerTimeUnit.toString(),\n })),\n },\n minClaimDurationSeconds: item.minClaimDurationSeconds.toString(),\n lastIssuanceTs: item.lastIssuanceTs.toString(),\n rewardsIssuedUnclaimed: item.rewardsIssuedUnclaimed.toString(),\n rewardsIssuedCumulative: item.rewardsIssuedCumulative.toString(),\n rewardPerShareScaled: item.rewardPerShareScaled.toString(),\n placeholder0: item.placeholder0.toString(),\n rewardType: item.rewardType,\n rewardsPerSecondDecimals: item.rewardsPerSecondDecimals,\n padding0: item.padding0,\n padding1: item.padding1.map((p) => p.toString()),\n })),\n numRewardTokens: farmRaw.numRewardTokens.toString(),\n numUsers: farmRaw.numUsers.toString(),\n totalStakedAmount: farmRaw.totalStakedAmount.toString(),\n farmVault: farmRaw.farmVault.toBase58(),\n farmVaultsAuthority: farmRaw.farmVaultsAuthority.toBase58(),\n farmVaultsAuthorityBump: farmRaw.farmVaultsAuthorityBump.toString(),\n delegateAuthority: farmRaw.delegateAuthority.toBase58(),\n timeUnit: farmRaw.timeUnit,\n isFarmFrozen: farmRaw.isFarmFrozen,\n isFarmDelegated: farmRaw.isFarmDelegated,\n padding0: farmRaw.padding0,\n withdrawAuthority: farmRaw.withdrawAuthority.toBase58(),\n depositWarmupPeriod: farmRaw.depositWarmupPeriod,\n withdrawalCooldownPeriod: farmRaw.withdrawalCooldownPeriod,\n totalActiveStakeScaled: farmRaw.totalActiveStakeScaled.toString(),\n totalPendingStakeScaled: farmRaw.totalPendingStakeScaled.toString(),\n totalPendingAmount: farmRaw.totalPendingAmount.toString(),\n slashedAmountCurrent: farmRaw.slashedAmountCurrent.toString(),\n slashedAmountCumulative: farmRaw.slashedAmountCumulative.toString(),\n slashedAmountSpillAddress: farmRaw.slashedAmountSpillAddress.toBase58(),\n lockingMode: farmRaw.lockingMode.toString(),\n lockingStartTimestamp: farmRaw.lockingStartTimestamp.toString(),\n lockingDuration: farmRaw.lockingDuration.toString(),\n lockingEarlyWithdrawalPenaltyBps:\n farmRaw.lockingEarlyWithdrawalPenaltyBps.toString(),\n depositCapAmount: farmRaw.depositCapAmount.toString(),\n scopePrices: farmRaw.scopePrices.toBase58(),\n scopeOraclePriceId: farmRaw.scopeOraclePriceId.toString(),\n scopeOracleMaxAge: farmRaw.scopeOracleMaxAge.toString(),\n pendingFarmAdmin: farmRaw.pendingFarmAdmin.toBase58(),\n strategyId: farmRaw.strategyId.toBase58(),\n delegatedRpsAdmin: farmRaw.delegatedRpsAdmin.toBase58(),\n vaultId: farmRaw.vaultId.toBase58(),\n secondDelegatedAuthority: farmRaw.secondDelegatedAuthority.toBase58(),\n padding: farmRaw.padding.map((item) => item.toString()),\n };\n}\n","import { struct, publicKey, u64, array, u8, u128, u32 } from \"@coral-xyz/borsh\";\n\nimport { FarmStateRaw } from \"../../types/farm/raw-farm.types\";\nimport { FarmStateJSON } from \"../../types/farm/dto-farm.types\";\nimport { PublicKey } from \"@solana/web3.js\";\nimport BN from \"bn.js\";\n\nconst farmDiscriminator = Buffer.from([198, 102, 216, 74, 63, 66, 163, 190]);\n\nconst farmLayout = struct<FarmStateRaw>([\n publicKey(\"farmAdmin\"),\n publicKey(\"globalConfig\"),\n struct(\n [\n publicKey(\"mint\"),\n u64(\"decimals\"),\n publicKey(\"tokenProgram\"),\n array(u64(), 6, \"padding\"),\n ],\n \"token\"\n ),\n array(\n struct([\n struct(\n [\n publicKey(\"mint\"),\n u64(\"decimals\"),\n publicKey(\"tokenProgram\"),\n array(u64(), 6, \"padding\"),\n ],\n \"token\"\n ),\n publicKey(\"rewardsVault\"),\n u64(\"rewardsAvailable\"),\n struct(\n [\n array(\n struct([u64(\"tsStart\"), u64(\"rewardPerTimeUnit\")]),\n 20,\n \"points\"\n ),\n ],\n \"rewardScheduleCurve\"\n ),\n u64(\"minClaimDurationSeconds\"),\n u64(\"lastIssuanceTs\"),\n u64(\"rewardsIssuedUnclaimed\"),\n u64(\"rewardsIssuedCumulative\"),\n u128(\"rewardPerShareScaled\"),\n u64(\"placeholder0\"),\n u8(\"rewardType\"),\n u8(\"rewardsPerSecondDecimals\"),\n array(u8(), 6, \"padding0\"),\n array(u64(), 20, \"padding1\"),\n ]),\n 10,\n \"rewardInfos\"\n ),\n u64(\"numRewardTokens\"),\n u64(\"numUsers\"),\n u64(\"totalStakedAmount\"),\n publicKey(\"farmVault\"),\n publicKey(\"farmVaultsAuthority\"),\n u64(\"farmVaultsAuthorityBump\"),\n publicKey(\"delegateAuthority\"),\n u8(\"timeUnit\"),\n u8(\"isFarmFrozen\"),\n u8(\"isFarmDelegated\"),\n array(u8(), 5, \"padding0\"),\n publicKey(\"withdrawAuthority\"),\n u32(\"depositWarmupPeriod\"),\n u32(\"withdrawalCooldownPeriod\"),\n u128(\"totalActiveStakeScaled\"),\n u128(\"totalPendingStakeScaled\"),\n u64(\"totalPendingAmount\"),\n u64(\"slashedAmountCurrent\"),\n u64(\"slashedAmountCumulative\"),\n publicKey(\"slashedAmountSpillAddress\"),\n u64(\"lockingMode\"),\n u64(\"lockingStartTimestamp\"),\n u64(\"lockingDuration\"),\n u64(\"lockingEarlyWithdrawalPenaltyBps\"),\n u64(\"depositCapAmount\"),\n publicKey(\"scopePrices\"),\n u64(\"scopeOraclePriceId\"),\n u64(\"scopeOracleMaxAge\"),\n publicKey(\"pendingFarmAdmin\"),\n publicKey(\"strategyId\"),\n publicKey(\"delegatedRpsAdmin\"),\n publicKey(\"vaultId\"),\n publicKey(\"secondDelegatedAuthority\"),\n array(u64(), 74, \"padding\"),\n]);\n\nexport function decodeFarmDataRaw(data: Buffer): FarmStateRaw {\n if (!data.slice(0, 8).equals(farmDiscriminator)) {\n throw new Error(\"invalid account discriminator\");\n }\n\n const dec = farmLayout.decode(data.slice(8));\n return dec;\n}\n\nexport function dtoToFarmRaw(dto: FarmStateJSON): FarmStateRaw {\n return {\n farmAdmin: new PublicKey(dto.farmAdmin),\n globalConfig: new PublicKey(dto.globalConfig),\n token: {\n mint: new PublicKey(dto.token.mint),\n decimals: new BN(dto.token.decimals),\n tokenProgram: new PublicKey(dto.token.tokenProgram),\n padding: dto.token.padding.map((item) => new BN(item)),\n },\n rewardInfos: dto.rewardInfos.map((item) => ({\n token: {\n mint: new PublicKey(item.token.mint),\n decimals: new BN(item.token.decimals),\n tokenProgram: new PublicKey(item.token.tokenProgram),\n padding: item.token.padding.map((p) => new BN(p)),\n },\n rewardsVault: new PublicKey(item.rewardsVault),\n rewardsAvailable: new BN(item.rewardsAvailable),\n rewardScheduleCurve: {\n points: item.rewardScheduleCurve.points.map((p) => ({\n tsStart: new BN(p.tsStart),\n rewardPerTimeUnit: new BN(p.rewardPerTimeUnit),\n })),\n },\n minClaimDurationSeconds: new BN(item.minClaimDurationSeconds),\n lastIssuanceTs: new BN(item.lastIssuanceTs),\n rewardsIssuedUnclaimed: new BN(item.rewardsIssuedUnclaimed),\n rewardsIssuedCumulative: new BN(item.rewardsIssuedCumulative),\n rewardPerShareScaled: new BN(item.rewardPerShareScaled),\n placeholder0: new BN(item.placeholder0),\n rewardType: item.rewardType,\n rewardsPerSecondDecimals: item.rewardsPerSecondDecimals,\n padding0: item.padding0,\n padding1: item.padding1.map((p) => new BN(p)),\n })),\n numRewardTokens: new BN(dto.numRewardTokens),\n numUsers: new BN(dto.numUsers),\n totalStakedAmount: new BN(dto.totalStakedAmount),\n farmVault: new PublicKey(dto.farmVault),\n farmVaultsAuthority: new PublicKey(dto.farmVaultsAuthority),\n farmVaultsAuthorityBump: new BN(dto.farmVaultsAuthorityBump),\n delegateAuthority: new PublicKey(dto.delegateAuthority),\n timeUnit: dto.timeUnit,\n isFarmFrozen: dto.isFarmFrozen,\n isFarmDelegated: dto.isFarmDelegated,\n padding0: dto.padding0,\n withdrawAuthority: new PublicKey(dto.withdrawAuthority),\n depositWarmupPeriod: dto.depositWarmupPeriod,\n withdrawalCooldownPeriod: dto.withdrawalCooldownPeriod,\n totalActiveStakeScaled: new BN(dto.totalActiveStakeScaled),\n totalPendingStakeScaled: new BN(dto.totalPendingStakeScaled),\n totalPendingAmount: new BN(dto.totalPendingAmount),\n slashedAmountCurrent: new BN(dto.slashedAmountCurrent),\n slashedAmountCumulative: new BN(dto.slashedAmountCumulative),\n slashedAmountSpillAddress: new PublicKey(dto.slashedAmountSpillAddress),\n lockingMode: new BN(dto.lockingMode),\n lockingStartTimestamp: new BN(dto.lockingStartTimestamp),\n lockingDuration: new BN(dto.lockingDuration),\n lockingEarlyWithdrawalPenaltyBps: new BN(\n dto.lockingEarlyWithdrawalPenaltyBps\n ),\n depositCapAmount: new BN(dto.depositCapAmount),\n scopePrices: new PublicKey(dto.scopePrices),\n scopeOraclePriceId: new BN(dto.scopeOraclePriceId),\n scopeOracleMaxAge: new BN(dto.scopeOracleMaxAge),\n pendingFarmAdmin: new PublicKey(dto.pendingFarmAdmin),\n strategyId: new PublicKey(dto.strategyId),\n delegatedRpsAdmin: new PublicKey(dto.delegatedRpsAdmin),\n vaultId: new PublicKey(dto.vaultId),\n secondDelegatedAuthority: new PublicKey(dto.secondDelegatedAuthority),\n padding: dto.padding.map((item) => new BN(item)),\n };\n}\n","import {\n AccountMeta,\n PublicKey,\n SystemProgram,\n SYSVAR_INSTRUCTIONS_PUBKEY,\n TransactionInstruction,\n} from \"@solana/web3.js\";\nimport BN from \"bn.js\";\n\nimport { TOKEN_PROGRAM_ID } from \"~/vendor/spl\";\n\nimport { deriveBankLiquidityVault, deriveBankLiquidityVaultAuthority } from \"./utils\";\n\n// Hardcoded addresses from Marginfi IDL\nconst KAMINO_PROGRAM_ID = new PublicKey(\"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD\");\nconst FARMS_PROGRAM_ID = new PublicKey(\"FarmsPZpWu9i7Kky8tPN37rs2TpmMrAZrC7S7vJa91Hr\");\n\n// ============================================================================\n// Encoding Utilities\n// ============================================================================\n\nfunction encodeU64(value: BN): Buffer {\n const buf = Buffer.alloc(8);\n value.toArrayLike(Buffer, \"le\", 8).copy(buf);\n return buf;\n}\n\nfunction encodeU8(value: number): Buffer {\n const buf = Buffer.alloc(1);\n buf.writeUInt8(value, 0);\n return buf;\n}\n\nfunction encodeBool(value: boolean): Buffer {\n const buf = Buffer.alloc(1);\n buf.writeUInt8(value ? 1 : 0, 0);\n return buf;\n}\n\nfunction encodeOptionBool(value: boolean | null | undefined): Buffer {\n if (value === null || value === undefined) {\n return Buffer.from([0]);\n }\n return Buffer.concat([Buffer.from([1]), encodeBool(value)]);\n}\n\nfunction encodePublicKey(pubkey: PublicKey): Buffer {\n return Buffer.from(pubkey.toBytes());\n}\n\n// ============================================================================\n// Discriminators\n// ============================================================================\n\nconst DISCRIMINATORS = {\n MARGINFI_ACCOUNT_INITIALIZE: Buffer.from([43, 78, 61, 255, 148, 52, 249, 154]),\n KAMINO_DEPOSIT: Buffer.from([237, 8, 188, 187, 115, 99, 49, 85]),\n LENDING_ACCOUNT_DEPOSIT: Buffer.from([171, 94, 235, 103, 82, 64, 212, 140]),\n LENDING_ACCOUNT_REPAY: Buffer.from([79, 209, 172, 177, 222, 51, 173, 151]),\n KAMINO_WITHDRAW: Buffer.from([199, 101, 41, 45, 213, 98, 224, 200]),\n LENDING_ACCOUNT_WITHDRAW: Buffer.from([36, 72, 74, 19, 210, 210, 192, 192]),\n LENDING_ACCOUNT_BORROW: Buffer.from([4, 126, 116, 53, 48, 5, 212, 31]),\n LENDING_ACCOUNT_LIQUIDATE: Buffer.from([214, 169, 151, 213, 251, 167, 86, 219]),\n LENDING_ACCOUNT_WITHDRAW_EMISSIONS: Buffer.from([234, 22, 84, 214, 118, 176, 140, 170]),\n LENDING_POOL_ADD_BANK: Buffer.from([215, 68, 72, 78, 208, 218, 103, 182]),\n LENDING_POOL_CONFIGURE_BANK: Buffer.from([121, 173, 156, 40, 93, 148, 56, 237]),\n LENDING_ACCOUNT_START_FLASHLOAN: Buffer.from([14, 131, 33, 220, 81, 186, 180, 107]),\n LENDING_ACCOUNT_END_FLASHLOAN: Buffer.from([105, 124, 201, 106, 153, 2, 8, 156]),\n TRANSFER_TO_NEW_ACCOUNT: Buffer.from([28, 79, 129, 231, 169, 69, 69, 65]),\n MARGINFI_GROUP_INITIALIZE: Buffer.from([255, 67, 67, 26, 94, 31, 34, 20]),\n MARGINFI_ACCOUNT_CLOSE: Buffer.from([186, 221, 93, 34, 50, 97, 194, 241]),\n LENDING_POOL_ADD_BANK_PERMISSIONLESS: Buffer.from([127, 187, 121, 34, 187, 167, 238, 102]),\n LENDING_POOL_CONFIGURE_BANK_ORACLE: Buffer.from([209, 82, 255, 171, 124, 21, 71, 81]),\n LENDING_ACCOUNT_PULSE_HEALTH: Buffer.from([186, 52, 117, 97, 34, 74, 39, 253]),\n LENDING_ACCOUNT_SORT_BALANCES: Buffer.from([187, 194, 110, 84, 82, 170, 204, 9]),\n};\n\n// ============================================================================\n// Sync Instruction Builders\n// ============================================================================\n\nfunction makeInitMarginfiAccountIx(\n programId: PublicKey,\n accounts: {\n marginfiGroup: PublicKey;\n marginfiAccount: PublicKey;\n authority: PublicKey;\n feePayer: PublicKey;\n systemProgram?: PublicKey;\n }\n): TransactionInstruction {\n const keys: AccountMeta[] = [\n { pubkey: accounts.marginfiGroup, isSigner: false, isWritable: false },\n { pubkey: accounts.marginfiAccount, isSigner: true, isWritable: true },\n { pubkey: accounts.authority, isSigner: true, isWritable: false },\n { pubkey: accounts.feePayer, isSigner: true, isWritable: true },\n {\n pubkey: accounts.systemProgram || SystemProgram.programId,\n isSigner: false,\n isWritable: false,\n },\n ];\n\n return new TransactionInstruction({\n keys,\n programId,\n data: DISCRIMINATORS.MARGINFI_ACCOUNT_INITIALIZE,\n });\n}\n\nfunction makeDepositIx(\n programId: PublicKey,\n accounts: {\n group: PublicKey; // relations: [\"marginfiAccount\", \"bank\"] - caller must provide\n marginfiAccount: PublicKey;\n authority: PublicKey; // signer: true, relations: [\"marginfiAccount\"] - caller must provide\n signerTokenAccount: PublicKey;\n bank: PublicKey;\n liquidityVault?: PublicKey; // relations: [\"bank\"] - caller must provide\n tokenProgram: PublicKey;\n },\n args: {\n amount: BN;\n depositUpToLimit?: boolean;\n },\n remainingAccounts: AccountMeta[] = []\n): TransactionInstruction {\n const [liquidityVault] = deriveBankLiquidityVault(programId, accounts.bank);\n const keys: AccountMeta[] = [\n { pubkey: accounts.group, isSigner: false, isWritable: false },\n { pubkey: accounts.marginfiAccount, isSigner: false, isWritable: true },\n { pubkey: accounts.authority, isSigner: true, isWritable: false },\n { pubkey: accounts.bank, isSigner: false, isWritable: true },\n { pubkey: accounts.signerTokenAccount, isSigner: false, isWritable: true },\n {\n pubkey: accounts.liquidityVault ?? liquidityVault,\n isSigner: false,\n isWritable: true,\n },\n { pubkey: accounts.tokenProgram, isSigner: false, isWritable: false },\n ];\n\n keys.push(...remainingAccounts);\n\n const data = Buffer.concat([\n DISCRIMINATORS.LENDING_ACCOUNT_DEPOSIT,\n encodeU64(args.amount),\n encodeOptionBool(args.depositUpToLimit ?? null),\n ]);\n\n return new TransactionInstruction({\n keys,\n programId,\n data,\n });\n}\n\nfunction makeRepayIx(\n programId: PublicKey,\n accounts: {\n group: PublicKey; // relations - caller must provide\n marginfiAccount: PublicKey;\n authority: PublicKey; // signer, relations - caller must provide\n signerTokenAccount: PublicKey;\n bank: PublicKey;\n tokenProgram: PublicKey;\n },\n args: {\n amount: BN;\n repayAll?: boolean;\n },\n remainingAccounts: AccountMeta[] = []\n): TransactionInstruction {\n const [liquidityVault] = deriveBankLiquidityVault(programId, accounts.bank);\n\n const keys: AccountMeta[] = [\n { pubkey: accounts.group, isSigner: false, isWritable: false },\n { pubkey: accounts.marginfiAccount, isSigner: false, isWritable: true },\n { pubkey: accounts.authority, isSigner: true, isWritable: false },\n { pubkey: accounts.bank, isSigner: false, isWritable: true },\n { pubkey: accounts.signerTokenAccount, isSigner: false, isWritable: true },\n { pubkey: liquidityVault, isSigner: false, isWritable: true },\n { pubkey: accounts.tokenProgram, isSigner: false, isWritable: false },\n ];\n\n keys.push(...remainingAccounts);\n\n const data = Buffer.concat([\n DISCRIMINATORS.LENDING_ACCOUNT_REPAY,\n encodeU64(args.amount),\n encodeOptionBool(args.repayAll ?? null),\n ]);\n\n return new TransactionInstruction({\n keys,\n programId,\n data,\n });\n}\n\nfunction makeWithdrawIx(\n programId: PublicKey,\n accounts: {\n group: PublicKey; // relations - caller must provide\n marginfiAccount: PublicKey;\n authority: PublicKey; // signer, relations - caller must provide\n bank: PublicKey;\n destinationTokenAccount: PublicKey;\n tokenProgram: PublicKey;\n },\n args: {\n amount: BN;\n withdrawAll?: boolean;\n },\n remainingAccounts: AccountMeta[] = []\n): TransactionInstruction {\n // Derive PDAs\n const [bankLiquidityVaultAuthority] = deriveBankLiquidityVaultAuthority(programId, accounts.bank);\n const [liquidityVault] = deriveBankLiquidityVault(programId, accounts.bank);\n\n const keys: AccountMeta[] = [\n { pubkey: accounts.group, isSigner: false, isWritable: true },\n { pubkey: accounts.marginfiAccount, isSigner: false, isWritable: true },\n { pubkey: accounts.authority, isSigner: true, isWritable: false },\n { pubkey: accounts.bank, isSigner: false, isWritable: true },\n {\n pubkey: accounts.destinationTokenAccount,\n isSigner: false,\n isWritable: true,\n },\n { pubkey: bankLiquidityVaultAuthority, isSigner: false, isWritable: false },\n { pubkey: liquidityVault, isSigner: false, isWritable: true },\n { pubkey: accounts.tokenProgram, isSigner: false, isWritable: false },\n ];\n\n keys.push(...remainingAccounts);\n\n const data = Buffer.concat([\n DISCRIMINATORS.LENDING_ACCOUNT_WITHDRAW,\n encodeU64(args.amount),\n encodeOptionBool(args.withdrawAll ?? null),\n ]);\n\n return new TransactionInstruction({\n keys,\n programId,\n data,\n });\n}\n\nfunction makeBorrowIx(\n programId: PublicKey,\n accounts: {\n group: PublicKey; // relations - caller must provide\n marginfiAccount: PublicKey;\n authority: PublicKey; // signer, relations - caller must provide\n bank: PublicKey;\n destinationTokenAccount: PublicKey;\n tokenProgram: PublicKey;\n },\n args: {\n amount: BN;\n },\n remainingAccounts: AccountMeta[] = []\n): TransactionInstruction {\n // Derive PDAs\n const [bankLiquidityVaultAuthority] = deriveBankLiquidityVaultAuthority(programId, accounts.bank);\n const [liquidityVault] = deriveBankLiquidityVault(programId, accounts.bank);\n\n const keys: AccountMeta[] = [\n { pubkey: accounts.group, isSigner: false, isWritable: false },\n { pubkey: accounts.marginfiAccount, isSigner: false, isWritable: true },\n { pubkey: accounts.authority, isSigner: true, isWritable: false },\n { pubkey: accounts.bank, isSigner: false, isWritable: true },\n {\n pubkey: accounts.destinationTokenAccount,\n isSigner: false,\n isWritable: true,\n },\n { pubkey: bankLiquidityVaultAuthority, isSigner: false, isWritable: false },\n { pubkey: liquidityVault, isSigner: false, isWritable: true },\n { pubkey: accounts.tokenProgram, isSigner: false, isWritable: false },\n ];\n\n keys.push(...remainingAccounts);\n\n const data = Buffer.concat([DISCRIMINATORS.LENDING_ACCOUNT_BORROW, encodeU64(args.amount)]);\n\n return new TransactionInstruction({\n keys,\n programId,\n data,\n });\n}\n\nfunction makeBeginFlashLoanIx(\n programId: PublicKey,\n accounts: {\n marginfiAccount: PublicKey;\n authority: PublicKey; // signer, relations: [\"marginfiAccount\"] - caller must provide\n },\n args: {\n endIndex: BN;\n }\n): TransactionInstruction {\n const keys: AccountMeta[] = [\n { pubkey: accounts.marginfiAccount, isSigner: false, isWritable: true },\n { pubkey: accounts.authority, isSigner: true, isWritable: false },\n {\n pubkey: SYSVAR_INSTRUCTIONS_PUBKEY, // hardcoded address from IDL\n isSigner: false,\n isWritable: false,\n },\n ];\n\n const data = Buffer.concat([\n DISCRIMINATORS.LENDING_ACCOUNT_START_FLASHLOAN,\n encodeU64(args.endIndex),\n ]);\n\n return new TransactionInstruction({\n keys,\n programId,\n data,\n });\n}\n\nfunction makeEndFlashLoanIx(\n programId: PublicKey,\n accounts: {\n marginfiAccount: PublicKey;\n authority: PublicKey; // signer, relations: [\"marginfiAccount\"] - caller must provide\n },\n remainingAccounts: AccountMeta[] = []\n): TransactionInstruction {\n const keys: AccountMeta[] = [\n { pubkey: accounts.marginfiAccount, isSigner: false, isWritable: true },\n { pubkey: accounts.authority, isSigner: true, isWritable: false },\n ];\n\n keys.push(...remainingAccounts);\n\n return new TransactionInstruction({\n keys,\n programId,\n data: DISCRIMINATORS.LENDING_ACCOUNT_END_FLASHLOAN,\n });\n}\n\nfunction makeKaminoDepositIx(\n programId: PublicKey,\n accounts: {\n group: PublicKey; // relations - caller must provide\n marginfiAccount: PublicKey;\n authority: PublicKey; // signer - caller must provide\n bank: PublicKey;\n signerTokenAccount: PublicKey;\n kaminoObligation: PublicKey; // relations: [\"bank\"] - caller must provide\n lendingMarket: PublicKey;\n lendingMarketAuthority: PublicKey;\n kaminoReserve: PublicKey; // relations: [\"bank\"] - caller must provide\n mint: PublicKey; // relations: [\"bank\"] - caller must provide\n reserveLiquidityMint: PublicKey;\n reserveLiquiditySupply: PublicKey;\n reserveCollateralMint: PublicKey;\n reserveDestinationDepositCollateral: PublicKey;\n obligationFarmUserState: PublicKey | null; // optional in IDL\n reserveFarmState: PublicKey | null; // optional in IDL\n liquidityTokenProgram: PublicKey;\n },\n args: {\n amount: BN;\n },\n remainingAccounts: AccountMeta[] = []\n): TransactionInstruction {\n const liquidityVaultAuthority = deriveBankLiquidityVaultAuthority(programId, accounts.bank)[0];\n const liquidityVault = deriveBankLiquidityVault(programId, accounts.bank)[0];\n\n const keys: AccountMeta[] = [\n { pubkey: accounts.group, isSigner: false, isWritable: false },\n { pubkey: accounts.marginfiAccount, isSigner: false, isWritable: true },\n { pubkey: accounts.authority, isSigner: true, isWritable: false },\n { pubkey: accounts.bank, isSigner: false, isWritable: true },\n { pubkey: accounts.signerTokenAccount, isSigner: false, isWritable: true },\n {\n pubkey: liquidityVaultAuthority,\n isSigner: false,\n isWritable: true,\n },\n { pubkey: liquidityVault, isSigner: false, isWritable: true },\n { pubkey: accounts.kaminoObligation, isSigner: false, isWritable: true },\n { pubkey: accounts.lendingMarket, isSigner: false, isWritable: false },\n {\n pubkey: accounts.lendingMarketAuthority,\n isSigner: false,\n isWritable: false,\n },\n { pubkey: accounts.kaminoReserve, isSigner: false, isWritable: true },\n { pubkey: accounts.mint, isSigner: false, isWritable: false },\n {\n pubkey: accounts.reserveLiquidityMint,\n isSigner: false,\n isWritable: true,\n },\n {\n pubkey: accounts.reserveLiquiditySupply,\n isSigner: false,\n isWritable: true,\n },\n {\n pubkey: accounts.reserveCollateralMint,\n isSigner: false,\n isWritable: true,\n },\n {\n pubkey: accounts.reserveDestinationDepositCollateral,\n isSigner: false,\n isWritable: true,\n },\n ];\n\n if (accounts.obligationFarmUserState) {\n keys.push({\n pubkey: accounts.obligationFarmUserState,\n isSigner: false,\n isWritable: true,\n });\n }\n if (accounts.reserveFarmState) {\n keys.push({\n pubkey: accounts.reserveFarmState,\n isSigner: false,\n isWritable: true,\n });\n }\n\n keys.push(\n { pubkey: KAMINO_PROGRAM_ID, isSigner: false, isWritable: false },\n { pubkey: FARMS_PROGRAM_ID, isSigner: false, isWritable: false },\n { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },\n {\n pubkey: accounts.liquidityTokenProgram,\n isSigner: false,\n isWritable: false,\n },\n { pubkey: SYSVAR_INSTRUCTIONS_PUBKEY, isSigner: false, isWritable: false }\n );\n\n keys.push(...remainingAccounts);\n\n const data = Buffer.concat([DISCRIMINATORS.KAMINO_DEPOSIT, encodeU64(args.amount)]);\n\n return new TransactionInstruction({ keys, programId, data });\n}\n\nfunction makeKaminoWithdrawIx(\n programId: PublicKey,\n accounts: {\n group: PublicKey; // relations - caller must provide\n marginfiAccount: PublicKey;\n authority: PublicKey; // signer - caller must provide\n bank: PublicKey;\n destinationTokenAccount: PublicKey;\n kaminoObligation: PublicKey; // relations: [\"bank\"] - caller must provide\n lendingMarket: PublicKey;\n lendingMarketAuthority: PublicKey;\n kaminoReserve: PublicKey; // relations: [\"bank\"] - caller must provide\n reserveLiquidityMint: PublicKey;\n reserveLiquiditySupply: PublicKey;\n reserveCollateralMint: PublicKey;\n reserveSourceCollateral: PublicKey;\n obligationFarmUserState: PublicKey | null; // optional in IDL\n reserveFarmState: PublicKey | null; // optional in IDL\n liquidityTokenProgram: PublicKey;\n },\n args: {\n amount: BN;\n isFinalWithdrawal: boolean;\n },\n remainingAccounts: AccountMeta[] = []\n): TransactionInstruction {\n const liquidityVaultAuthority = deriveBankLiquidityVaultAuthority(programId, accounts.bank)[0];\n const liquidityVault = deriveBankLiquidityVault(programId, accounts.bank)[0];\n\n const keys: AccountMeta[] = [\n { pubkey: accounts.group, isSigner: false, isWritable: true },\n { pubkey: accounts.marginfiAccount, isSigner: false, isWritable: true },\n { pubkey: accounts.authority, isSigner: true, isWritable: false },\n { pubkey: accounts.bank, isSigner: false, isWritable: true },\n {\n pubkey: accounts.destinationTokenAccount,\n isSigner: false,\n isWritable: true,\n },\n { pubkey: liquidityVaultAuthority, isSigner: false, isWritable: true },\n { pubkey: liquidityVault, isSigner: false, isWritable: true },\n { pubkey: accounts.kaminoObligation, isSigner: false, isWritable: true },\n { pubkey: accounts.lendingMarket, isSigner: false, isWritable: false },\n {\n pubkey: accounts.lendingMarketAuthority,\n isSigner: false,\n isWritable: false,\n },\n { pubkey: accounts.kaminoReserve, isSigner: false, isWritable: true },\n {\n pubkey: accounts.reserveLiquidityMint,\n isSigner: false,\n isWritable: true,\n },\n {\n pubkey: accounts.reserveLiquiditySupply,\n isSigner: false,\n isWritable: true,\n },\n {\n pubkey: accounts.reserveCollateralMint,\n isSigner: false,\n isWritable: true,\n },\n {\n pubkey: accounts.reserveSourceCollateral,\n isSigner: false,\n isWritable: true,\n },\n ];\n\n if (accounts.obligationFarmUserState) {\n keys.push({\n pubkey: accounts.obligationFarmUserState,\n isSigner: false,\n isWritable: true,\n });\n }\n if (accounts.reserveFarmState) {\n keys.push({\n pubkey: accounts.reserveFarmState,\n isSigner: false,\n isWritable: true,\n });\n }\n\n keys.push(\n { pubkey: KAMINO_PROGRAM_ID, isSigner: false, isWritable: false },\n { pubkey: FARMS_PROGRAM_ID, isSigner: false, isWritable: false },\n { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },\n {\n pubkey: accounts.liquidityTokenProgram,\n isSigner: false,\n isWritable: false,\n },\n { pubkey: SYSVAR_INSTRUCTIONS_PUBKEY, isSigner: false, isWritable: false }\n );\n\n keys.push(...remainingAccounts);\n\n const data = Buffer.concat([\n DISCRIMINATORS.KAMINO_WITHDRAW,\n encodeU64(args.amount),\n encodeOptionBool(args.isFinalWithdrawal),\n ]);\n\n return new TransactionInstruction({ keys, programId, data });\n}\n\nfunction makeLendingAccountLiquidateIx(\n programId: PublicKey,\n accounts: {\n group: PublicKey; // relations - caller must provide\n assetBank: PublicKey;\n liabBank: PublicKey;\n liquidatorMarginfiAccount: PublicKey;\n authority: PublicKey; // signer, relations: [\"liquidatorMarginfiAccount\"] - caller must provide\n liquidateeMarginfiAccount: PublicKey;\n bankLiquidityVaultAuthority: PublicKey; // PDA - caller must derive\n bankLiquidityVault: PublicKey; // PDA - caller must derive\n bankInsuranceVault: PublicKey; // PDA - caller must derive\n tokenProgram: PublicKey;\n },\n args: {\n assetAmount: BN;\n liquidateeAccounts: number;\n liquidatorAccounts: number;\n },\n remainingAccounts: AccountMeta[] = []\n): TransactionInstruction {\n const keys: AccountMeta[] = [\n { pubkey: accounts.group, isSigner: false, isWritable: false },\n { pubkey: accounts.assetBank, isSigner: false, isWritable: true },\n { pubkey: accounts.liabBank, isSigner: false, isWritable: true },\n {\n pubkey: accounts.liquidatorMarginfiAccount,\n isSigner: false,\n isWritable: true,\n },\n { pubkey: accounts.authority, isSigner: true, isWritable: false },\n {\n pubkey: accounts.liquidateeMarginfiAccount,\n isSigner: false,\n isWritable: true,\n },\n {\n pubkey: accounts.bankLiquidityVaultAuthority,\n isSigner: false,\n isWritable: false,\n },\n { pubkey: accounts.bankLiquidityVault, isSigner: false, isWritable: true },\n { pubkey: accounts.bankInsuranceVault, isSigner: false, isWritable: true },\n { pubkey: accounts.tokenProgram, isSigner: false, isWritable: false },\n ];\n\n keys.push(...remainingAccounts);\n\n const data = Buffer.concat([\n DISCRIMINATORS.LENDING_ACCOUNT_LIQUIDATE,\n encodeU64(args.assetAmount),\n Buffer.from([args.liquidateeAccounts]),\n Buffer.from([args.liquidatorAccounts]),\n ]);\n\n return new TransactionInstruction({ keys, programId, data });\n}\n\nfunction makelendingAccountWithdrawEmissionIx(\n programId: PublicKey,\n accounts: {\n group: PublicKey; // relations - caller must provide\n marginfiAccount: PublicKey;\n authority: PublicKey; // signer, relations: [\"marginfiAccount\"] - caller must provide\n destinationAccount: PublicKey;\n bank: PublicKey;\n emissionsMint: PublicKey; // relations: [\"bank\"] - caller must provide\n emissionsAuth: PublicKey; // PDA - caller must derive\n emissionsTokenAccount: PublicKey; // relations: [\"bank\"] - caller must provide\n emissionsVault: PublicKey; // PDA - caller must derive\n tokenProgram: PublicKey;\n }\n): TransactionInstruction {\n const keys: AccountMeta[] = [\n { pubkey: accounts.group, isSigner: false, isWritable: false },\n { pubkey: accounts.marginfiAccount, isSigner: false, isWritable: true },\n { pubkey: accounts.authority, isSigner: true, isWritable: false },\n { pubkey: accounts.destinationAccount, isSigner: false, isWritable: true },\n { pubkey: accounts.bank, isSigner: false, isWritable: true },\n { pubkey: accounts.emissionsMint, isSigner: false, isWritable: false },\n { pubkey: accounts.emissionsAuth, isSigner: false, isWritable: false },\n {\n pubkey: accounts.emissionsTokenAccount,\n isSigner: false,\n isWritable: false,\n },\n { pubkey: accounts.emissionsVault, isSigner: false, isWritable: true },\n { pubkey: accounts.tokenProgram, isSigner: false, isWritable: false },\n ];\n\n return new TransactionInstruction({\n keys,\n programId,\n data: DISCRIMINATORS.LENDING_ACCOUNT_WITHDRAW_EMISSIONS,\n });\n}\n\nfunction makeCloseAccountIx(\n programId: PublicKey,\n accounts: {\n marginfiAccount: PublicKey;\n authority: PublicKey; // signer, relations: [\"marginfiAccount\"] - caller must provide\n feePayer: PublicKey;\n }\n): TransactionInstruction {\n const keys: AccountMeta[] = [\n { pubkey: accounts.marginfiAccount, isSigner: false, isWritable: true },\n { pubkey: accounts.authority, isSigner: true, isWritable: false },\n { pubkey: accounts.feePayer, isSigner: true, isWritable: true },\n ];\n\n return new TransactionInstruction({\n keys,\n programId,\n data: DISCRIMINATORS.MARGINFI_ACCOUNT_CLOSE,\n });\n}\n\n// Deprecated\n// function makeLendingAccountSortBalancesIx(\n// programId: PublicKey,\n// accounts: {\n// marginfiAccount: PublicKey;\n// }\n// ): TransactionInstruction {\n// const keys: AccountMeta[] = [\n// { pubkey: accounts.marginfiAccount, isSigner: false, isWritable: true },\n// ];\n\n// return new TransactionInstruction({\n// keys,\n// programId,\n// data: DISCRIMINATORS.LENDING_ACCOUNT_SORT_BALANCES,\n// });\n// }\n\nfunction makePulseHealthIx(\n programId: PublicKey,\n accounts: {\n marginfiAccount: PublicKey;\n },\n remainingAccounts: AccountMeta[] = []\n): TransactionInstruction {\n const keys: AccountMeta[] = [\n { pubkey: accounts.marginfiAccount, isSigner: false, isWritable: true },\n ];\n\n keys.push(...remainingAccounts);\n\n return new TransactionInstruction({\n keys,\n programId,\n data: DISCRIMINATORS.LENDING_ACCOUNT_PULSE_HEALTH,\n });\n}\n\nfunction makeAccountTransferToNewAccountIx(\n programId: PublicKey,\n accounts: {\n group: PublicKey; // relations: [\"oldMarginfiAccount\"] - caller must provide\n oldMarginfiAccount: PublicKey;\n newMarginfiAccount: PublicKey;\n authority: PublicKey; // signer, relations: [\"oldMarginfiAccount\"] - caller must provide\n feePayer: PublicKey;\n newAuthority: PublicKey;\n globalFeeWallet: PublicKey; // caller must provide\n }\n): TransactionInstruction {\n const keys: AccountMeta[] = [\n { pubkey: accounts.group, isSigner: false, isWritable: false },\n { pubkey: accounts.oldMarginfiAccount, isSigner: false, isWritable: true },\n { pubkey: accounts.newMarginfiAccount, isSigner: true, isWritable: true },\n { pubkey: accounts.authority, isSigner: true, isWritable: false },\n { pubkey: accounts.feePayer, isSigner: true, isWritable: true },\n { pubkey: accounts.newAuthority, isSigner: false, isWritable: false },\n { pubkey: accounts.globalFeeWallet, isSigner: false, isWritable: true },\n { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },\n ];\n\n return new TransactionInstruction({\n keys,\n programId,\n data: DISCRIMINATORS.TRANSFER_TO_NEW_ACCOUNT,\n });\n}\n\nfunction makeGroupInitIx(\n programId: PublicKey,\n accounts: {\n marginfiGroup: PublicKey;\n admin: PublicKey;\n feeState: PublicKey; // PDA with seeds: [\"feestate\"] - caller must derive\n },\n args?: {\n isArenaGroup?: boolean;\n }\n): TransactionInstruction {\n const keys: AccountMeta[] = [\n { pubkey: accounts.marginfiGroup, isSigner: true, isWritable: true },\n { pubkey: accounts.admin, isSigner: true, isWritable: true },\n { pubkey: accounts.feeState, isSigner: false, isWritable: false },\n { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },\n ];\n\n const data = Buffer.concat([\n DISCRIMINATORS.MARGINFI_GROUP_INITIALIZE,\n encodeBool(args?.isArenaGroup ?? false),\n ]);\n\n return new TransactionInstruction({\n keys,\n programId,\n data,\n });\n}\n\nfunction makePoolConfigureBankIx(\n programId: PublicKey,\n accounts: {\n group: PublicKey; // relations: [\"bank\"] - caller must provide\n admin: PublicKey; // signer, relations: [\"group\"] - caller must provide\n bank: PublicKey;\n },\n args: {\n bankConfigOpt: any; // Complex type - caller must handle serialization\n }\n): TransactionInstruction {\n const keys: AccountMeta[] = [\n { pubkey: accounts.group, isSigner: false, isWritable: false },\n { pubkey: accounts.admin, isSigner: true, isWritable: false },\n { pubkey: accounts.bank, isSigner: false, isWritable: true },\n ];\n\n // Note: Complex bankConfigOpt encoding not implemented\n // Caller should construct full data buffer themselves\n return new TransactionInstruction({\n keys,\n programId,\n data: DISCRIMINATORS.LENDING_POOL_CONFIGURE_BANK,\n });\n}\n\nfunction makeLendingPoolConfigureBankOracleIx(\n programId: PublicKey,\n accounts: {\n group: PublicKey; // relations: [\"bank\"] - caller must provide\n admin: PublicKey; // signer, relations: [\"group\"] - caller must provide\n bank: PublicKey;\n },\n args: {\n setup: number;\n feedId: PublicKey;\n },\n remainingAccounts: AccountMeta[] = []\n): TransactionInstruction {\n const keys: AccountMeta[] = [\n { pubkey: accounts.group, isSigner: false, isWritable: false },\n { pubkey: accounts.admin, isSigner: true, isWritable: false },\n { pubkey: accounts.bank, isSigner: false, isWritable: true },\n ];\n\n keys.push(...remainingAccounts);\n\n const data = Buffer.concat([\n DISCRIMINATORS.LENDING_POOL_CONFIGURE_BANK_ORACLE,\n encodeU8(args.setup),\n encodePublicKey(args.feedId),\n ]);\n\n return new TransactionInstruction({\n keys,\n programId,\n data,\n });\n}\n\nfunction makePoolAddBankIx(\n programId: PublicKey,\n accounts: {\n marginfiGroup: PublicKey;\n admin: PublicKey; // signer, relations: [\"marginfiGroup\"] - caller must provide\n feePayer: PublicKey;\n feeState: PublicKey; // PDA - caller must derive\n globalFeeWallet: PublicKey; // relations: [\"feeState\"] - caller must provide\n bankMint: PublicKey;\n bank: PublicKey;\n liquidityVaultAuthority: PublicKey; // PDA - caller must derive\n liquidityVault: PublicKey; // PDA - caller must derive\n insuranceVaultAuthority: PublicKey; // PDA - caller must derive\n insuranceVault: PublicKey; // PDA - caller must derive\n feeVaultAuthority: PublicKey; // PDA - caller must derive\n feeVault: PublicKey; // PDA - caller must derive\n tokenProgram: PublicKey;\n },\n args: {\n bankConfig: any; // Complex BankConfigCompactRaw type\n }\n): TransactionInstruction {\n const keys: AccountMeta[] = [\n { pubkey: accounts.marginfiGroup, isSigner: false, isWritable: true },\n { pubkey: accounts.admin, isSigner: true, isWritable: false },\n { pubkey: accounts.feePayer, isSigner: true, isWritable: true },\n { pubkey: accounts.feeState, isSigner: false, isWritable: false },\n { pubkey: accounts.globalFeeWallet, isSigner: false, isWritable: true },\n { pubkey: accounts.bankMint, isSigner: false, isWritable: false },\n { pubkey: accounts.bank, isSigner: true, isWritable: true },\n {\n pubkey: accounts.liquidityVaultAuthority,\n isSigner: false,\n isWritable: false,\n },\n { pubkey: accounts.liquidityVault, isSigner: false, isWritable: true },\n {\n pubkey: accounts.insuranceVaultAuthority,\n isSigner: false,\n isWritable: false,\n },\n { pubkey: accounts.insuranceVault, isSigner: false, isWritable: true },\n { pubkey: accounts.feeVaultAuthority, isSigner: false, isWritable: false },\n { pubkey: accounts.feeVault, isSigner: false, isWritable: true },\n { pubkey: accounts.tokenProgram, isSigner: false, isWritable: false },\n { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },\n ];\n\n // Note: Complex bankConfig encoding not implemented\n // Caller should construct full data buffer themselves\n return new TransactionInstruction({\n keys,\n programId,\n data: DISCRIMINATORS.LENDING_POOL_ADD_BANK,\n });\n}\n\nfunction makePoolAddPermissionlessStakedBankIx(\n programId: PublicKey,\n accounts: {\n marginfiGroup: PublicKey; // relations: [\"stakedSettings\"] - caller must provide\n stakedSettings: PublicKey;\n feePayer: PublicKey;\n bankMint: PublicKey;\n solPool: PublicKey;\n stakePool: PublicKey;\n bank: PublicKey; // PDA - caller must derive using seeds: [marginfiGroup, bankMint, bankSeed]\n liquidityVaultAuthority: PublicKey; // PDA - caller must derive\n liquidityVault: PublicKey; // PDA - caller must derive\n insuranceVaultAuthority: PublicKey; // PDA - caller must derive\n insuranceVault: PublicKey; // PDA - caller must derive\n feeVaultAuthority: PublicKey; // PDA - caller must derive\n feeVault: PublicKey; // PDA - caller must derive\n tokenProgram?: PublicKey;\n },\n remainingAccounts: AccountMeta[] = [],\n args: {\n seed?: BN;\n }\n): TransactionInstruction {\n const keys: AccountMeta[] = [\n { pubkey: accounts.marginfiGroup, isSigner: false, isWritable: true },\n { pubkey: accounts.stakedSettings, isSigner: false, isWritable: false },\n { pubkey: accounts.feePayer, isSigner: true, isWritable: true },\n { pubkey: accounts.bankMint, isSigner: false, isWritable: false },\n { pubkey: accounts.solPool, isSigner: false, isWritable: false },\n { pubkey: accounts.stakePool, isSigner: false, isWritable: false },\n { pubkey: accounts.bank, isSigner: false, isWritable: true },\n {\n pubkey: accounts.liquidityVaultAuthority,\n isSigner: false,\n isWritable: false,\n },\n { pubkey: accounts.liquidityVault, isSigner: false, isWritable: true },\n {\n pubkey: accounts.insuranceVaultAuthority,\n isSigner: false,\n isWritable: false,\n },\n { pubkey: accounts.insuranceVault, isSigner: false, isWritable: true },\n { pubkey: accounts.feeVaultAuthority, isSigner: false, isWritable: false },\n { pubkey: accounts.feeVault, isSigner: false, isWritable: true },\n {\n pubkey: accounts.tokenProgram || TOKEN_PROGRAM_ID,\n isSigner: false,\n isWritable: false,\n },\n { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },\n ];\n\n keys.push(...remainingAccounts);\n\n const data = Buffer.concat([\n DISCRIMINATORS.LENDING_POOL_ADD_BANK_PERMISSIONLESS,\n encodeU64(args.seed || new BN(0)),\n ]);\n\n return new TransactionInstruction({\n keys,\n programId,\n data,\n });\n}\n\nconst syncInstructions = {\n makeInitMarginfiAccountIx,\n makeDepositIx,\n makeKaminoDepositIx,\n makeRepayIx,\n makeWithdrawIx,\n makeKaminoWithdrawIx,\n makeBorrowIx,\n makeLendingAccountLiquidateIx,\n makelendingAccountWithdrawEmissionIx,\n makePoolAddBankIx,\n makePoolConfigureBankIx,\n makeBeginFlashLoanIx,\n makeEndFlashLoanIx,\n makeAccountTransferToNewAccountIx,\n makeGroupInitIx,\n makeCloseAccountIx,\n makePoolAddPermissionlessStakedBankIx,\n makeLendingPoolConfigureBankOracleIx,\n makePulseHealthIx,\n};\n\nexport default syncInstructions;\n","import {\n PublicKey,\n TransactionInstruction,\n AddressLookupTableAccount,\n VersionedTransaction,\n TransactionMessage,\n} from \"@solana/web3.js\";\nimport { BigNumber } from \"bignumber.js\";\n\nimport { deriveUserState, FARMS_PROGRAM_ID, getAllDerivedKaminoAccounts } from \"~/vendor/klend\";\nimport {\n createAssociatedTokenAccountIdempotentInstruction,\n getAssociatedTokenAddressSync,\n NATIVE_MINT,\n TOKEN_2022_PROGRAM_ID,\n} from \"~/vendor/spl\";\nimport instructions from \"~/instructions\";\nimport syncInstructions from \"~/sync-instructions\";\nimport {\n addTransactionMetadata,\n ExtendedV0Transaction,\n InstructionsWrapper,\n makeUnwrapSolIx,\n TransactionType,\n} from \"~/services/transaction\";\nimport { makeRefreshKaminoBanksIxs, makeSmartCrankSwbFeedIx } from \"~/services/price\";\n\nimport {\n MakeKaminoWithdrawIxParams,\n MakeWithdrawIxParams,\n MakeWithdrawTxParams,\n TransactionBuilderResult,\n MakeKaminoWithdrawTxParams,\n} from \"../types\";\nimport { computeHealthCheckAccounts, computeHealthAccountMetas } from \"../utils\";\n\nimport { uiToNative } from \"~/utils\";\n\nexport async function makeKaminoWithdrawIx({\n program,\n bank,\n bankMap,\n tokenProgram,\n amount,\n marginfiAccount,\n reserve,\n authority,\n withdrawAll = false,\n isSync = false,\n opts = {},\n}: MakeKaminoWithdrawIxParams): Promise<InstructionsWrapper> {\n const wrapAndUnwrapSol = opts.wrapAndUnwrapSol ?? true;\n const createAtas = opts.createAtas ?? true;\n const withdrawIxs: TransactionInstruction[] = [];\n const remainingAccounts: PublicKey[] = [];\n\n const userTokenAtaPk = getAssociatedTokenAddressSync(bank.mint, authority, true, tokenProgram); // We allow off curve addresses here to support Fuse.\n\n if (createAtas) {\n const createAtaIdempotentIx = createAssociatedTokenAccountIdempotentInstruction(\n authority,\n userTokenAtaPk,\n authority,\n bank.mint,\n tokenProgram\n );\n withdrawIxs.push(createAtaIdempotentIx);\n }\n\n const healthAccounts = withdrawAll\n ? computeHealthCheckAccounts(marginfiAccount.balances, bankMap, [], [bank.address])\n : computeHealthCheckAccounts(marginfiAccount.balances, bankMap, [bank.address], []);\n\n const lendingMarket = reserve.lendingMarket;\n\n const {\n lendingMarketAuthority,\n reserveLiquiditySupply,\n reserveCollateralMint,\n reserveDestinationDepositCollateral,\n } = getAllDerivedKaminoAccounts(reserve.lendingMarket, bank.mint);\n\n if (!bank.kaminoObligation) {\n throw new Error(\"Bank has no kamino obligation\");\n }\n\n const reserveFarm = !reserve.farmCollateral.equals(\n new PublicKey(\"11111111111111111111111111111111\")\n )\n ? reserve.farmCollateral\n : null;\n\n const [userFarmState] = reserveFarm\n ? deriveUserState(FARMS_PROGRAM_ID, reserveFarm, bank.kaminoObligation)\n : [null];\n\n if (opts.observationBanksOverride) {\n remainingAccounts.push(...opts.observationBanksOverride);\n } else {\n const accountMetas = computeHealthAccountMetas(healthAccounts);\n remainingAccounts.push(...accountMetas);\n }\n\n const withdrawIx = isSync\n ? syncInstructions.makeKaminoWithdrawIx(\n program.programId,\n {\n group: opts.overrideInferAccounts?.group ?? marginfiAccount.group,\n marginfiAccount: marginfiAccount.address,\n authority: opts.overrideInferAccounts?.authority ?? marginfiAccount.authority,\n bank: bank.address,\n destinationTokenAccount: userTokenAtaPk,\n\n kaminoObligation: bank.kaminoObligation,\n lendingMarket,\n lendingMarketAuthority,\n kaminoReserve: bank.kaminoReserve,\n reserveLiquidityMint: bank.mint,\n reserveLiquiditySupply,\n reserveCollateralMint,\n\n reserveSourceCollateral: reserveDestinationDepositCollateral,\n liquidityTokenProgram: tokenProgram,\n\n obligationFarmUserState: userFarmState,\n reserveFarmState: reserveFarm,\n },\n {\n amount: uiToNative(amount, bank.mintDecimals),\n isFinalWithdrawal: withdrawAll,\n },\n remainingAccounts.map((account) => ({\n pubkey: account,\n isSigner: false,\n isWritable: false,\n }))\n )\n : await instructions.makeKaminoWithdrawIx(\n program,\n {\n marginfiAccount: marginfiAccount.address,\n bank: bank.address,\n destinationTokenAccount: userTokenAtaPk,\n lendingMarket,\n reserveLiquidityMint: bank.mint,\n\n lendingMarketAuthority,\n reserveLiquiditySupply,\n reserveCollateralMint,\n\n reserveSourceCollateral: reserveDestinationDepositCollateral,\n liquidityTokenProgram: tokenProgram,\n\n obligationFarmUserState: userFarmState,\n reserveFarmState: reserveFarm,\n\n authority: opts.overrideInferAccounts?.authority ?? marginfiAccount.authority,\n group: opts.overrideInferAccounts?.group ?? marginfiAccount.group,\n },\n {\n amount: uiToNative(amount, bank.mintDecimals),\n isFinalWithdrawal: withdrawAll,\n },\n remainingAccounts.map((account) => ({\n pubkey: account,\n isSigner: false,\n isWritable: false,\n }))\n );\n\n withdrawIxs.push(withdrawIx);\n\n if (wrapAndUnwrapSol && bank.mint.equals(NATIVE_MINT)) {\n withdrawIxs.push(makeUnwrapSolIx(authority));\n }\n\n return {\n instructions: withdrawIxs,\n keys: [],\n };\n}\n\nexport async function makeWithdrawIx({\n program,\n bank,\n bankMap,\n tokenProgram,\n amount,\n marginfiAccount,\n authority,\n withdrawAll = false,\n isSync = false,\n opts = {},\n}: MakeWithdrawIxParams): Promise<InstructionsWrapper> {\n const wrapAndUnwrapSol = opts.wrapAndUnwrapSol ?? true;\n const createAtas = opts.createAtas ?? true;\n\n const withdrawIxs = [];\n\n const userAta = getAssociatedTokenAddressSync(bank.mint, authority, true, tokenProgram); // We allow off curve addresses here to support Fuse.\n\n if (createAtas) {\n const createAtaIdempotentIx = createAssociatedTokenAccountIdempotentInstruction(\n authority,\n userAta,\n authority,\n bank.mint,\n tokenProgram\n );\n withdrawIxs.push(createAtaIdempotentIx);\n }\n\n const healthAccounts = withdrawAll\n ? computeHealthCheckAccounts(marginfiAccount.balances, bankMap, [], [bank.address])\n : computeHealthCheckAccounts(marginfiAccount.balances, bankMap, [bank.address], []);\n\n // Add withdraw-related instructions\n const remainingAccounts: PublicKey[] = [];\n if (tokenProgram.equals(TOKEN_2022_PROGRAM_ID)) {\n remainingAccounts.push(bank.mint);\n }\n if (opts.observationBanksOverride) {\n remainingAccounts.push(...opts.observationBanksOverride);\n } else {\n const accountMetas = computeHealthAccountMetas(healthAccounts);\n remainingAccounts.push(...accountMetas);\n }\n\n const withdrawIx = isSync\n ? syncInstructions.makeWithdrawIx(\n program.programId,\n {\n group: opts.overrideInferAccounts?.group ?? marginfiAccount.group,\n marginfiAccount: marginfiAccount.address,\n authority: opts.overrideInferAccounts?.authority ?? marginfiAccount.authority,\n bank: bank.address,\n destinationTokenAccount: userAta,\n tokenProgram: tokenProgram,\n },\n { amount: uiToNative(amount, bank.mintDecimals), withdrawAll },\n remainingAccounts.map((account) => ({\n pubkey: account,\n isSigner: false,\n isWritable: false,\n }))\n )\n : await instructions.makeWithdrawIx(\n program,\n {\n marginfiAccount: marginfiAccount.address,\n bank: bank.address,\n destinationTokenAccount: userAta,\n tokenProgram: tokenProgram,\n authority: opts.overrideInferAccounts?.authority ?? marginfiAccount.authority,\n group: opts.overrideInferAccounts?.group ?? marginfiAccount.group,\n },\n { amount: uiToNative(amount, bank.mintDecimals), withdrawAll },\n remainingAccounts.map((account) => ({\n pubkey: account,\n isSigner: false,\n isWritable: false,\n }))\n );\n\n withdrawIxs.push(withdrawIx);\n\n if (wrapAndUnwrapSol && bank.mint.equals(NATIVE_MINT)) {\n withdrawIxs.push(makeUnwrapSolIx(authority));\n }\n\n return {\n instructions: withdrawIxs,\n keys: [],\n };\n}\n\nexport async function makeWithdrawTx(\n params: MakeWithdrawTxParams\n): Promise<TransactionBuilderResult> {\n const { luts, connection, ...withdrawIxParams } = params;\n\n const hasLiabilities = params.marginfiAccount.balances.some((balance) => {\n return balance.liabilityShares.gt(0);\n });\n\n let updateFeedIxs: TransactionInstruction[] = [];\n let feedLuts: AddressLookupTableAccount[] = [];\n\n const withdrawIxs = await makeWithdrawIx(withdrawIxParams);\n\n if (hasLiabilities) {\n const { instructions: _updateFeedIxs, luts: _feedLuts } = await makeSmartCrankSwbFeedIx({\n marginfiAccount: params.marginfiAccount,\n bankMap: params.bankMap,\n oraclePrices: params.oraclePrices,\n instructions: withdrawIxs.instructions,\n program: params.program,\n connection: params.connection,\n crossbarUrl: params.crossbarUrl,\n });\n updateFeedIxs = _updateFeedIxs;\n feedLuts = _feedLuts;\n }\n\n const refreshIxs = makeRefreshKaminoBanksIxs(\n params.marginfiAccount,\n params.bankMap,\n [withdrawIxParams.bank.address],\n params.bankMetadataMap\n );\n\n const {\n value: { blockhash },\n } = await connection.getLatestBlockhashAndContext(\"confirmed\");\n\n let feedCrankTxs: ExtendedV0Transaction[] = [];\n\n if (updateFeedIxs.length > 0) {\n feedCrankTxs.push(\n addTransactionMetadata(\n new VersionedTransaction(\n new TransactionMessage({\n instructions: [...updateFeedIxs],\n payerKey: params.authority,\n recentBlockhash: blockhash,\n }).compileToV0Message(feedLuts)\n ),\n {\n addressLookupTables: feedLuts,\n type: TransactionType.CRANK,\n }\n )\n );\n }\n\n const withdrawTx = addTransactionMetadata(\n new VersionedTransaction(\n new TransactionMessage({\n instructions: [...refreshIxs.instructions, ...withdrawIxs.instructions],\n payerKey: params.authority,\n recentBlockhash: blockhash,\n }).compileToV0Message(luts)\n ),\n {\n signers: [...refreshIxs.keys, ...withdrawIxs.keys],\n addressLookupTables: luts,\n type: TransactionType.WITHDRAW,\n }\n );\n\n const transactions = [...feedCrankTxs, withdrawTx];\n\n return { transactions, actionTxIndex: transactions.length - 1 };\n}\n\nexport async function makeKaminoWithdrawTx(\n params: MakeKaminoWithdrawTxParams\n): Promise<TransactionBuilderResult> {\n const { luts, connection, amount, ...withdrawIxParams } = params;\n\n if (!withdrawIxParams.bank.kaminoReserve) {\n throw new Error(\"Bank has no kamino reserve\");\n }\n\n if (!withdrawIxParams.bank.kaminoObligation) {\n throw new Error(\"Bank has no kamino obligation\");\n }\n\n const adjustedAmount = new BigNumber(amount)\n .div(withdrawIxParams.bank.assetShareValue)\n .toNumber();\n\n const refreshIxs = makeRefreshKaminoBanksIxs(\n params.marginfiAccount,\n params.bankMap,\n [withdrawIxParams.bank.address],\n params.bankMetadataMap\n );\n\n const withdrawIxs = await makeKaminoWithdrawIx({\n amount: adjustedAmount,\n ...withdrawIxParams,\n });\n\n const { instructions: updateFeedIxs, luts: feedLuts } = await makeSmartCrankSwbFeedIx({\n marginfiAccount: params.marginfiAccount,\n bankMap: params.bankMap,\n oraclePrices: params.oraclePrices,\n instructions: withdrawIxs.instructions,\n program: params.program,\n connection: params.connection,\n crossbarUrl: params.crossbarUrl,\n });\n\n const {\n value: { blockhash },\n } = await connection.getLatestBlockhashAndContext(\"confirmed\");\n\n let feedCrankTxs: ExtendedV0Transaction[] = [];\n\n if (updateFeedIxs.length > 0) {\n feedCrankTxs.push(\n addTransactionMetadata(\n new VersionedTransaction(\n new TransactionMessage({\n instructions: [...updateFeedIxs],\n payerKey: params.authority,\n recentBlockhash: blockhash,\n }).compileToV0Message(feedLuts)\n ),\n {\n addressLookupTables: feedLuts,\n type: TransactionType.CRANK,\n }\n )\n );\n }\n\n const withdrawTx = addTransactionMetadata(\n new VersionedTransaction(\n new TransactionMessage({\n instructions: [...refreshIxs.instructions, ...withdrawIxs.instructions],\n payerKey: params.authority,\n recentBlockhash: blockhash,\n }).compileToV0Message(luts)\n ),\n {\n signers: [...refreshIxs.keys, ...withdrawIxs.keys],\n addressLookupTables: luts,\n type: TransactionType.WITHDRAW,\n }\n );\n\n const transactions = [...feedCrankTxs, withdrawTx];\n\n return { transactions, actionTxIndex: transactions.length - 1 };\n}\n","import {\n PublicKey,\n TransactionInstruction,\n TransactionMessage,\n VersionedTransaction,\n} from \"@solana/web3.js\";\n\nimport instructions from \"~/instructions\";\nimport {\n addTransactionMetadata,\n ExtendedV0Transaction,\n InstructionsWrapper,\n makeUnwrapSolIx,\n TransactionType,\n} from \"~/services/transaction\";\nimport { makeRefreshKaminoBanksIxs, makeSmartCrankSwbFeedIx } from \"~/services/price\";\nimport syncInstructions from \"~/sync-instructions\";\nimport {\n createAssociatedTokenAccountIdempotentInstruction,\n getAssociatedTokenAddressSync,\n NATIVE_MINT,\n TOKEN_2022_PROGRAM_ID,\n} from \"~/vendor/spl\";\nimport { uiToNative } from \"~/utils\";\n\nimport { computeHealthAccountMetas, computeHealthCheckAccounts } from \"../utils\";\nimport { MakeBorrowIxParams, MakeBorrowTxParams, TransactionBuilderResult } from \"../types\";\n\nexport async function makeBorrowIx({\n program,\n bank,\n bankMap,\n tokenProgram,\n amount,\n marginfiAccount,\n authority,\n isSync,\n opts = {},\n}: MakeBorrowIxParams): Promise<InstructionsWrapper> {\n const wrapAndUnwrapSol = opts.wrapAndUnwrapSol ?? true;\n const createAtas = opts.createAtas ?? true;\n\n const borrowIxs: TransactionInstruction[] = [];\n\n const userAta = getAssociatedTokenAddressSync(bank.mint, authority, true, tokenProgram); // We allow off curve addresses here to support Fuse.\n\n if (createAtas) {\n const createAtaIdempotentIx = createAssociatedTokenAccountIdempotentInstruction(\n authority,\n userAta,\n authority,\n bank.mint,\n tokenProgram\n );\n borrowIxs.push(createAtaIdempotentIx);\n }\n\n const healthAccounts = computeHealthCheckAccounts(\n marginfiAccount.balances,\n bankMap,\n [bank.address],\n []\n );\n\n const remainingAccounts: PublicKey[] = [];\n\n if (tokenProgram.equals(TOKEN_2022_PROGRAM_ID)) {\n remainingAccounts.push(bank.mint);\n }\n if (opts?.observationBanksOverride) {\n remainingAccounts.push(...opts.observationBanksOverride);\n } else {\n const accountMetas = computeHealthAccountMetas(healthAccounts);\n remainingAccounts.push(...accountMetas);\n }\n\n const borrowIx = isSync\n ? syncInstructions.makeBorrowIx(\n program.programId,\n {\n marginfiAccount: marginfiAccount.address,\n bank: bank.address,\n destinationTokenAccount: userAta,\n tokenProgram: tokenProgram,\n authority: opts?.overrideInferAccounts?.authority ?? marginfiAccount.authority,\n group: opts?.overrideInferAccounts?.group ?? marginfiAccount.group,\n },\n { amount: uiToNative(amount, bank.mintDecimals) },\n remainingAccounts.map((account) => ({\n pubkey: account,\n isSigner: false,\n isWritable: false,\n }))\n )\n : await instructions.makeBorrowIx(\n program,\n {\n marginfiAccount: marginfiAccount.address,\n bank: bank.address,\n destinationTokenAccount: userAta,\n tokenProgram: tokenProgram,\n authority: opts?.overrideInferAccounts?.authority,\n group: opts?.overrideInferAccounts?.group,\n },\n { amount: uiToNative(amount, bank.mintDecimals) },\n remainingAccounts.map((account) => ({\n pubkey: account,\n isSigner: false,\n isWritable: false,\n }))\n );\n borrowIxs.push(borrowIx);\n\n if (bank.mint.equals(NATIVE_MINT) && wrapAndUnwrapSol) {\n borrowIxs.push(makeUnwrapSolIx(authority));\n }\n\n return {\n instructions: borrowIxs,\n keys: [],\n };\n}\n\nexport async function makeBorrowTx(params: MakeBorrowTxParams): Promise<TransactionBuilderResult> {\n const { luts, connection, ...borrowIxParams } = params;\n\n const refreshIxs = makeRefreshKaminoBanksIxs(\n params.marginfiAccount,\n params.bankMap,\n [borrowIxParams.bank.address],\n params.bankMetadataMap\n );\n\n const borrowIxs = await makeBorrowIx(borrowIxParams);\n\n const { instructions: updateFeedIxs, luts: feedLuts } = await makeSmartCrankSwbFeedIx({\n marginfiAccount: params.marginfiAccount,\n bankMap: params.bankMap,\n oraclePrices: params.oraclePrices,\n instructions: borrowIxs.instructions,\n program: params.program,\n connection: params.connection,\n crossbarUrl: params.crossbarUrl,\n });\n\n const {\n value: { blockhash },\n } = await connection.getLatestBlockhashAndContext(\"confirmed\");\n\n let feedCrankTxs: ExtendedV0Transaction[] = [];\n\n if (updateFeedIxs.length > 0) {\n feedCrankTxs.push(\n addTransactionMetadata(\n new VersionedTransaction(\n new TransactionMessage({\n instructions: updateFeedIxs,\n payerKey: params.authority,\n recentBlockhash: blockhash,\n }).compileToV0Message(feedLuts)\n ),\n {\n addressLookupTables: feedLuts,\n type: TransactionType.CRANK,\n }\n )\n );\n }\n\n const borrowTx = addTransactionMetadata(\n new VersionedTransaction(\n new TransactionMessage({\n instructions: [...refreshIxs.instructions, ...borrowIxs.instructions],\n payerKey: params.authority,\n recentBlockhash: blockhash,\n }).compileToV0Message(luts)\n ),\n {\n signers: [...refreshIxs.keys, ...borrowIxs.keys],\n addressLookupTables: luts,\n type: TransactionType.BORROW,\n }\n );\n\n const transactions = [...feedCrankTxs, borrowTx];\n return { transactions, actionTxIndex: transactions.length - 1 };\n}\n","import {\n PublicKey,\n Transaction,\n TransactionInstruction,\n TransactionMessage,\n VersionedTransaction,\n} from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\nimport { AnchorProvider, Program } from \"@coral-xyz/anchor\";\n\nimport { getAssociatedTokenAddressSync, NATIVE_MINT, TOKEN_2022_PROGRAM_ID } from \"~/vendor/spl\";\nimport {\n deriveUserState,\n FARMS_PROGRAM_ID,\n getAllDerivedKaminoAccounts,\n KLEND_IDL,\n KlendIdlType,\n makeRefreshingIxs,\n} from \"~/vendor/klend\";\nimport { uiToNative } from \"~/utils\";\nimport {\n addTransactionMetadata,\n ExtendedTransaction,\n ExtendedV0Transaction,\n InstructionsWrapper,\n makeWrapSolIxs,\n TransactionType,\n} from \"~/services/transaction\";\nimport syncInstructions from \"~/sync-instructions\";\nimport instructions from \"~/instructions\";\n\nimport {\n MakeDepositIxParams,\n MakeDepositTxParams,\n MakeKaminoDepositIxParams,\n MakeKaminoDepositTxParams,\n} from \"../types\";\n\n/**\n * Creates a Kamino deposit instruction for depositing assets into a Kamino reserve.\n *\n * This function handles:\n * - Wrapping SOL to wSOL if needed (for native SOL deposits)\n * - Deriving all necessary Kamino protocol accounts\n * - Creating the deposit instruction with proper farm state integration\n *\n * @param params - The parameters for creating the deposit instruction\n * @param params.program - The Marginfi program instance\n * @param params.bank - The bank to deposit into\n * @param params.tokenProgram - The token program ID (TOKEN_PROGRAM or TOKEN_2022_PROGRAM)\n * @param params.amount - The amount to deposit in UI units\n * @param params.accountAddress - The Marginfi account address\n * @param params.authority - The authority/signer public key\n * @param params.group - The Marginfi group address\n * @param params.reserve - The Kamino reserve configuration\n * @param params.opts - Optional configuration\n * @param params.opts.wrapAndUnwrapSol - Whether to wrap SOL to wSOL (default: true)\n * @param params.opts.wSolBalanceUi - Existing wSOL balance to combine with native SOL (default: 0)\n * @param params.opts.overrideInferAccounts - Optional account overrides for testing/special cases\n *\n * @returns Promise resolving to InstructionsWrapper containing the deposit instructions\n */\nexport async function makeKaminoDepositIx({\n program,\n bank,\n tokenProgram,\n amount,\n accountAddress,\n authority,\n group,\n reserve,\n isSync,\n opts = {\n // If false, the deposit will not wrap SOL; should not be false in most usecases\n wrapAndUnwrapSol: true,\n // wSOL balance can be provided if the user wants to combine native and wrapped SOL\n wSolBalanceUi: 0,\n },\n}: MakeKaminoDepositIxParams): Promise<InstructionsWrapper> {\n const wrapAndUnwrapSol = opts.wrapAndUnwrapSol ?? true;\n const wSolBalanceUi = opts.wSolBalanceUi ?? 0;\n const depositIxs: TransactionInstruction[] = [];\n\n const userTokenAtaPk = getAssociatedTokenAddressSync(bank.mint, authority, true, tokenProgram); // We allow off curve addresses here to support Fuse.\n\n const {\n lendingMarketAuthority,\n reserveLiquiditySupply,\n reserveCollateralMint,\n reserveDestinationDepositCollateral,\n } = getAllDerivedKaminoAccounts(reserve.lendingMarket, bank.mint);\n\n if (bank.mint.equals(NATIVE_MINT) && wrapAndUnwrapSol) {\n depositIxs.push(...makeWrapSolIxs(authority, new BigNumber(amount).minus(wSolBalanceUi)));\n }\n\n const reserveFarm = !reserve.farmCollateral.equals(\n new PublicKey(\"11111111111111111111111111111111\")\n )\n ? reserve.farmCollateral\n : null;\n\n const [userFarmState] = reserveFarm\n ? deriveUserState(FARMS_PROGRAM_ID, reserveFarm, bank.kaminoObligation)\n : [null];\n\n const depositIx = isSync\n ? syncInstructions.makeKaminoDepositIx(\n program.programId,\n {\n marginfiAccount: accountAddress,\n bank: bank.address,\n signerTokenAccount: userTokenAtaPk,\n lendingMarket: reserve.lendingMarket,\n reserveLiquidityMint: bank.mint,\n\n kaminoObligation: bank.kaminoObligation,\n kaminoReserve: bank.kaminoReserve,\n mint: bank.mint,\n\n lendingMarketAuthority,\n reserveLiquiditySupply,\n reserveCollateralMint,\n reserveDestinationDepositCollateral,\n liquidityTokenProgram: tokenProgram,\n\n obligationFarmUserState: userFarmState,\n reserveFarmState: reserveFarm,\n\n authority: opts.overrideInferAccounts?.authority ?? authority,\n group: opts.overrideInferAccounts?.group ?? group,\n },\n { amount: uiToNative(amount, bank.mintDecimals) }\n )\n : await instructions.makeKaminoDepositIx(\n program,\n {\n marginfiAccount: accountAddress,\n bank: bank.address,\n signerTokenAccount: userTokenAtaPk,\n lendingMarket: reserve.lendingMarket,\n reserveLiquidityMint: bank.mint,\n\n lendingMarketAuthority,\n reserveLiquiditySupply,\n reserveCollateralMint,\n reserveDestinationDepositCollateral,\n liquidityTokenProgram: tokenProgram,\n\n obligationFarmUserState: userFarmState,\n reserveFarmState: reserveFarm,\n\n authority: opts.overrideInferAccounts?.authority ?? authority,\n group: opts.overrideInferAccounts?.group ?? group,\n liquidityVault: opts.overrideInferAccounts?.liquidityVault,\n },\n { amount: uiToNative(amount, bank.mintDecimals) }\n );\n\n depositIxs.push(depositIx);\n\n return {\n instructions: depositIxs,\n keys: [],\n };\n}\n\n/**\n * Creates a complete Kamino deposit transaction ready to be signed and sent.\n *\n * This function builds a full versioned transaction that includes:\n * - Kamino reserve refresh instructions (to update oracle prices and interest rates)\n * - SOL wrapping instructions if depositing native SOL\n * - The actual deposit instruction\n *\n * The transaction is constructed with proper metadata, address lookup tables,\n * and is ready to be signed by the authority and submitted to the network.\n *\n * @param params - The parameters for creating the deposit transaction\n * @param params.luts - Address lookup tables for transaction compression\n * @param params.connection - Solana connection for fetching blockhash and reserve data\n * @param params.amount - The amount to deposit in UI units\n * @param params.blockhash - Optional recent blockhash (fetched if not provided)\n * @param params.program - The Marginfi program instance\n * @param params.bank - The bank to deposit into (must have kaminoReserve and kaminoObligation)\n * @param params.tokenProgram - The token program ID\n * @param params.accountAddress - The Marginfi account address\n * @param params.authority - The authority/signer public key\n * @param params.group - The Marginfi group address\n * @param params.reserve - The Kamino reserve configuration\n * @param params.opts - Optional configuration (wrapping, overrides, etc.)\n *\n * @returns Promise resolving to a versioned transaction with metadata\n * @throws Error if the bank doesn't have a Kamino reserve or obligation configured\n */\nexport async function makeKaminoDepositTx(\n params: MakeKaminoDepositTxParams\n): Promise<ExtendedV0Transaction> {\n const { luts, connection, amount, ...depositIxParams } = params;\n\n if (!depositIxParams.bank.kaminoReserve) {\n throw new Error(\"Bank has no kamino reserve\");\n }\n\n if (!depositIxParams.bank.kaminoObligation) {\n throw new Error(\"Bank has no kamino obligation\");\n }\n\n // TODO: create dummy provider util in common\n const provider = new AnchorProvider(\n connection,\n {\n publicKey: params.authority,\n signTransaction: async (tx) => tx,\n signAllTransactions: async (txs) => txs,\n },\n {\n commitment: \"confirmed\",\n }\n );\n\n const klendProgram = new Program<KlendIdlType>(KLEND_IDL, provider);\n\n const refreshIxs = await makeRefreshingIxs({\n klendProgram,\n reserve: depositIxParams.reserve,\n reserveKey: depositIxParams.bank.kaminoReserve,\n obligationKey: depositIxParams.bank.kaminoObligation,\n program: klendProgram,\n });\n\n const depositIxs = await makeKaminoDepositIx({\n amount,\n ...depositIxParams,\n });\n\n const blockhash =\n params.blockhash ??\n (await connection.getLatestBlockhashAndContext(\"confirmed\")).value.blockhash;\n\n const depositTx = addTransactionMetadata(\n new VersionedTransaction(\n new TransactionMessage({\n instructions: [...refreshIxs, ...depositIxs.instructions],\n payerKey: params.authority,\n recentBlockhash: blockhash,\n }).compileToV0Message(luts)\n ),\n {\n signers: depositIxs.keys,\n addressLookupTables: luts,\n type: TransactionType.DEPOSIT,\n }\n );\n\n const solanaTx = addTransactionMetadata(depositTx, {\n type: TransactionType.DEPOSIT,\n signers: depositIxs.keys,\n addressLookupTables: luts,\n });\n return solanaTx;\n}\n\n/**\n * Creates a deposit instruction for depositing assets into a Marginfi bank.\n *\n * This function handles:\n * - Wrapping SOL to wSOL if depositing native SOL\n * - Token-2022 program support with proper remaining accounts\n * - Creating the deposit instruction to the bank's liquidity vault\n *\n * @param params - The parameters for creating the deposit instruction\n * @param params.program - The Marginfi program instance\n * @param params.bank - The bank to deposit into\n * @param params.tokenProgram - The token program ID (TOKEN_PROGRAM or TOKEN_2022_PROGRAM)\n * @param params.amount - The amount to deposit in UI units\n * @param params.accountAddress - The Marginfi account address\n * @param params.authority - The authority/signer public key\n * @param params.group - The Marginfi group address\n * @param params.opts - Optional configuration\n * @param params.opts.wrapAndUnwrapSol - Whether to wrap SOL to wSOL (default: true)\n * @param params.opts.wSolBalanceUi - Existing wSOL balance to combine with native SOL (default: 0)\n * @param params.opts.overrideInferAccounts - Optional account overrides for testing/special cases\n *\n * @returns Promise resolving to InstructionsWrapper containing the deposit instructions\n */\nexport async function makeDepositIx({\n program,\n bank,\n tokenProgram,\n amount,\n accountAddress,\n authority,\n group,\n isSync,\n opts = {\n // If false, the deposit will not wrap SOL; should not be false in most usecases\n wrapAndUnwrapSol: true,\n // wSOL balance can be provided if the user wants to combine native and wrapped SOL\n wSolBalanceUi: 0,\n },\n}: MakeDepositIxParams): Promise<InstructionsWrapper> {\n const wrapAndUnwrapSol = opts.wrapAndUnwrapSol ?? true;\n const wSolBalanceUi = opts.wSolBalanceUi ?? 0;\n\n const userTokenAtaPk = getAssociatedTokenAddressSync(bank.mint, authority, true, tokenProgram); // We allow off curve addresses here to support Fuse.\n\n const remainingAccounts = tokenProgram.equals(TOKEN_2022_PROGRAM_ID)\n ? [{ pubkey: bank.mint, isSigner: false, isWritable: false }]\n : [];\n\n const depositIxs = [];\n\n if (bank.mint.equals(NATIVE_MINT) && wrapAndUnwrapSol) {\n depositIxs.push(...makeWrapSolIxs(authority, new BigNumber(amount).minus(wSolBalanceUi)));\n }\n\n const depositIx = isSync\n ? syncInstructions.makeDepositIx(\n program.programId,\n {\n marginfiAccount: accountAddress,\n signerTokenAccount: userTokenAtaPk,\n bank: bank.address,\n tokenProgram: tokenProgram,\n authority: opts.overrideInferAccounts?.authority ?? authority,\n group: opts.overrideInferAccounts?.group ?? group,\n liquidityVault: opts.overrideInferAccounts?.liquidityVault,\n },\n { amount: uiToNative(amount, bank.mintDecimals) },\n remainingAccounts\n )\n : await instructions.makeDepositIx(\n program,\n {\n marginfiAccount: accountAddress,\n signerTokenAccount: userTokenAtaPk,\n bank: bank.address,\n tokenProgram: tokenProgram,\n authority: opts.overrideInferAccounts?.authority ?? authority,\n group: opts.overrideInferAccounts?.group ?? group,\n liquidityVault: opts.overrideInferAccounts?.liquidityVault,\n },\n { amount: uiToNative(amount, bank.mintDecimals) },\n remainingAccounts\n );\n depositIxs.push(depositIx);\n\n return {\n instructions: depositIxs,\n keys: [],\n };\n}\n\n/**\n * Creates a complete deposit transaction ready to be signed and sent.\n *\n * This function builds a full transaction that includes:\n * - SOL wrapping instructions if depositing native SOL\n * - The actual deposit instruction to the Marginfi bank\n * - Proper support for Token-2022 tokens\n *\n * The transaction is constructed as a legacy Transaction with proper metadata\n * and is ready to be signed by the authority and submitted to the network.\n *\n * @param params - The parameters for creating the deposit transaction\n * @param params.luts - Address lookup tables for transaction compression\n * @param params.program - The Marginfi program instance\n * @param params.bank - The bank to deposit into\n * @param params.tokenProgram - The token program ID (TOKEN_PROGRAM or TOKEN_2022_PROGRAM)\n * @param params.amount - The amount to deposit in UI units\n * @param params.accountAddress - The Marginfi account address\n * @param params.authority - The authority/signer public key\n * @param params.group - The Marginfi group address\n * @param params.opts - Optional configuration (wrapping, overrides, etc.)\n *\n * @returns Promise resolving to an ExtendedTransaction with metadata\n */\nexport async function makeDepositTx(params: MakeDepositTxParams): Promise<ExtendedTransaction> {\n const { luts, ...depositIxParams } = params;\n\n const ixs = await makeDepositIx(depositIxParams);\n const tx = new Transaction().add(...ixs.instructions);\n tx.feePayer = params.authority;\n\n const solanaTx = addTransactionMetadata(tx, {\n type: TransactionType.DEPOSIT,\n signers: ixs.keys,\n addressLookupTables: luts,\n });\n return solanaTx;\n}\n","import { PublicKey, TransactionMessage, VersionedTransaction } from \"@solana/web3.js\";\nimport BN from \"bn.js\";\n\nimport { BankType } from \"~/services/bank\";\nimport {\n addTransactionMetadata,\n InstructionsWrapper,\n TransactionType,\n} from \"~/services/transaction\";\nimport { MarginfiProgram } from \"~/types\";\nimport instructions from \"~/instructions\";\nimport syncInstructions from \"~/sync-instructions\";\n\nimport { computeHealthAccountMetas, computeProjectedActiveBanksNoCpi } from \"../utils\";\nimport { MakeFlashLoanTxParams } from \"../types\";\n\nexport async function makeBeginFlashLoanIx(\n program: MarginfiProgram,\n marginfiAccountPk: PublicKey,\n endIndex: number,\n authority?: PublicKey,\n isSync?: boolean\n): Promise<InstructionsWrapper> {\n const ix =\n isSync && authority\n ? syncInstructions.makeBeginFlashLoanIx(\n program.programId,\n {\n marginfiAccount: marginfiAccountPk,\n authority,\n },\n { endIndex: new BN(endIndex) }\n )\n : await instructions.makeBeginFlashLoanIx(\n program,\n {\n marginfiAccount: marginfiAccountPk,\n authority,\n },\n { endIndex: new BN(endIndex) }\n );\n return { instructions: [ix], keys: [] };\n}\n\nexport async function makeEndFlashLoanIx(\n program: MarginfiProgram,\n marginfiAccountPk: PublicKey,\n projectedActiveBanks: BankType[],\n authority?: PublicKey,\n isSync?: boolean\n): Promise<InstructionsWrapper> {\n const remainingAccounts = computeHealthAccountMetas(projectedActiveBanks);\n const ix =\n isSync && authority\n ? syncInstructions.makeEndFlashLoanIx(\n program.programId,\n {\n marginfiAccount: marginfiAccountPk,\n authority,\n },\n remainingAccounts.map((account) => ({\n pubkey: account,\n isSigner: false,\n isWritable: false,\n }))\n )\n : await instructions.makeEndFlashLoanIx(\n program,\n {\n marginfiAccount: marginfiAccountPk,\n authority,\n },\n remainingAccounts.map((account) => ({\n pubkey: account,\n isSigner: false,\n isWritable: false,\n }))\n );\n return { instructions: [ix], keys: [] };\n}\n\nexport async function makeFlashLoanTx({\n program,\n marginfiAccount,\n ixs,\n bankMap,\n blockhash,\n addressLookupTableAccounts,\n signers,\n isSync,\n}: MakeFlashLoanTxParams) {\n const endIndex = ixs.length + 1;\n\n const projectedActiveBanksKeys: PublicKey[] = computeProjectedActiveBanksNoCpi(\n marginfiAccount.balances,\n ixs,\n program\n );\n\n const projectedActiveBanks = projectedActiveBanksKeys.map((account) => {\n const b = bankMap.get(account.toBase58());\n if (!b) throw Error(`Bank ${account.toBase58()} not found, in makeFlashLoanTx function`);\n return b;\n });\n\n const beginFlashLoanIx = await makeBeginFlashLoanIx(\n program,\n marginfiAccount.address,\n endIndex,\n marginfiAccount.authority,\n isSync\n );\n const endFlashLoanIx = await makeEndFlashLoanIx(\n program,\n marginfiAccount.address,\n projectedActiveBanks,\n marginfiAccount.authority,\n isSync\n );\n\n const message = new TransactionMessage({\n payerKey: marginfiAccount.authority,\n recentBlockhash: blockhash,\n instructions: [...beginFlashLoanIx.instructions, ...ixs, ...endFlashLoanIx.instructions],\n }).compileToV0Message(addressLookupTableAccounts);\n\n const tx = addTransactionMetadata(new VersionedTransaction(message), {\n addressLookupTables: addressLookupTableAccounts,\n type: TransactionType.FLASHLOAN,\n signers: signers,\n });\n\n if (signers) {\n tx.sign(signers);\n }\n\n return tx;\n}\n","import { BigNumber } from \"bignumber.js\";\nimport { QuoteResponse } from \"@jup-ag/api\";\nimport {\n AddressLookupTableAccount,\n ComputeBudgetProgram,\n PublicKey,\n TransactionInstruction,\n TransactionMessage,\n VersionedTransaction,\n} from \"@solana/web3.js\";\n\nimport {\n addTransactionMetadata,\n ExtendedV0Transaction,\n getAccountKeys,\n getTxSize,\n InstructionsWrapper,\n makeWrapSolIxs,\n splitInstructionsToFitTransactions,\n TransactionType,\n} from \"~/services/transaction\";\nimport { makeRefreshKaminoBanksIxs, makeSmartCrankSwbFeedIx } from \"~/services/price\";\nimport { AssetTag } from \"~/services/bank\";\nimport { TransactionBuildingError } from \"~/errors\";\nimport { MAX_TX_SIZE } from \"~/constants\";\nimport { ASSOCIATED_TOKEN_PROGRAM_ID, TOKEN_2022_PROGRAM_ID } from \"~/vendor/spl\";\n\nimport { getJupiterSwapIxsForFlashloan } from \"../utils\";\nimport { MakeLoopTxParams } from \"../types\";\n\nimport { makeDepositIx, makeKaminoDepositIx } from \"./deposit\";\nimport { makeBorrowIx } from \"./borrow\";\nimport { makeSetupIx } from \"./account-lifecycle\";\nimport { makeFlashLoanTx } from \"./flash-loan\";\nimport { getAssociatedTokenAddressSync, NATIVE_MINT } from \"~/vendor/spl\";\nimport { nativeToUi, uiToNative } from \"~/utils\";\n\nexport async function makeLoopTx(params: MakeLoopTxParams): Promise<{\n transactions: ExtendedV0Transaction[];\n actionTxIndex: number;\n quoteResponse: QuoteResponse | undefined;\n}> {\n const {\n program,\n marginfiAccount,\n bankMap,\n depositOpts,\n borrowOpts,\n bankMetadataMap,\n addressLookupTableAccounts,\n connection,\n oraclePrices,\n crossbarUrl,\n additionalIxs = [],\n } = params;\n\n const blockhash = (await connection.getLatestBlockhash(\"confirmed\")).blockhash;\n\n const setupIxs = await makeSetupIx({\n connection,\n authority: marginfiAccount.authority,\n tokens: [\n {\n mint: borrowOpts.borrowBank.mint,\n tokenProgram: borrowOpts.tokenProgram,\n },\n {\n mint: depositOpts.depositBank.mint,\n tokenProgram: depositOpts.tokenProgram,\n },\n ],\n });\n\n const kaminoRefreshIxs = makeRefreshKaminoBanksIxs(\n marginfiAccount,\n bankMap,\n [borrowOpts.borrowBank.address, depositOpts.depositBank.address],\n bankMetadataMap\n );\n\n const { flashloanTx, setupInstructions, swapQuote, amountToDeposit, depositIxs, borrowIxs } =\n await buildLoopFlashloanTx({\n ...params,\n blockhash,\n });\n\n const jupiterSetupInstructions = setupInstructions.filter((ix) => {\n // filter out compute budget instructions\n if (ix.programId.equals(ComputeBudgetProgram.programId)) {\n return false;\n }\n\n if (ix.programId.equals(ASSOCIATED_TOKEN_PROGRAM_ID)) {\n // key 3 is always mint in create ata\n const mintKey = ix.keys[3]?.pubkey;\n\n if (\n mintKey?.equals(depositOpts.depositBank.mint) ||\n mintKey?.equals(borrowOpts.borrowBank.mint)\n ) {\n return false;\n }\n }\n\n return true;\n });\n\n setupIxs.push(...jupiterSetupInstructions);\n\n const { instructions: updateFeedIxs, luts: feedLuts } = await makeSmartCrankSwbFeedIx({\n marginfiAccount,\n bankMap,\n oraclePrices,\n instructions: [...borrowIxs.instructions, ...depositIxs.instructions],\n program,\n connection,\n crossbarUrl,\n });\n\n let additionalTxs: ExtendedV0Transaction[] = [];\n\n // wrap sol if needed\n if (depositOpts.depositBank.mint.equals(NATIVE_MINT) && depositOpts.inputDepositAmount) {\n setupIxs.push(\n ...makeWrapSolIxs(marginfiAccount.authority, new BigNumber(depositOpts.inputDepositAmount))\n );\n }\n\n // if atas are needed, add them\n if (setupIxs.length > 0 || additionalIxs.length > 0 || kaminoRefreshIxs.instructions.length > 0) {\n const ixs = [...additionalIxs, ...setupIxs, ...kaminoRefreshIxs.instructions];\n const txs = splitInstructionsToFitTransactions([], ixs, {\n blockhash,\n payerKey: marginfiAccount.authority,\n luts: addressLookupTableAccounts ?? [],\n });\n\n additionalTxs.push(\n ...txs.map((tx) =>\n addTransactionMetadata(tx, {\n type: TransactionType.CREATE_ATA,\n addressLookupTables: addressLookupTableAccounts,\n })\n )\n );\n }\n\n // if crank is needed, add it\n if (updateFeedIxs.length > 0) {\n const message = new TransactionMessage({\n payerKey: marginfiAccount.authority,\n recentBlockhash: blockhash,\n instructions: updateFeedIxs,\n }).compileToV0Message(feedLuts);\n\n additionalTxs.push(\n addTransactionMetadata(new VersionedTransaction(message), {\n addressLookupTables: feedLuts,\n type: TransactionType.CRANK,\n })\n );\n }\n\n const transactions = [...additionalTxs, flashloanTx];\n return {\n transactions,\n actionTxIndex: transactions.length - 1,\n quoteResponse: swapQuote,\n };\n}\n\nasync function buildLoopFlashloanTx({\n program,\n marginfiAccount,\n bankMap,\n borrowOpts,\n depositOpts,\n bankMetadataMap,\n addressLookupTableAccounts,\n connection,\n swapOpts,\n overrideInferAccounts,\n blockhash,\n}: MakeLoopTxParams & { blockhash: string }) {\n const swapResult: {\n amountToDeposit: number;\n swapInstructions: TransactionInstruction[];\n setupInstructions: TransactionInstruction[];\n swapLookupTables: AddressLookupTableAccount[];\n quoteResponse?: QuoteResponse;\n }[] = [];\n\n const cuRequestIxs = [\n ComputeBudgetProgram.setComputeUnitLimit({ units: 1_200_000 }),\n ComputeBudgetProgram.setComputeUnitPrice({ microLamports: 1 }),\n ];\n\n if (depositOpts.depositBank.mint.equals(borrowOpts.borrowBank.mint)) {\n // No swap needed, you just borrow and deposit the same mint\n swapResult.push({\n amountToDeposit:\n borrowOpts.borrowAmount +\n (depositOpts.loopMode === \"DEPOSIT\" ? depositOpts.inputDepositAmount : 0),\n swapInstructions: [],\n setupInstructions: [],\n swapLookupTables: [],\n });\n } else {\n const destinationTokenAccount = getAssociatedTokenAddressSync(\n new PublicKey(depositOpts.depositBank.mint),\n marginfiAccount.authority,\n true,\n depositOpts.tokenProgram.equals(TOKEN_2022_PROGRAM_ID) ? TOKEN_2022_PROGRAM_ID : undefined\n );\n // Get Jupiter swap instruction using calculated available TX size\n const swapResponse = await getJupiterSwapIxsForFlashloan({\n quoteParams: {\n inputMint: borrowOpts.borrowBank.mint.toBase58(),\n outputMint: depositOpts.depositBank.mint.toBase58(),\n amount: uiToNative(borrowOpts.borrowAmount, borrowOpts.borrowBank.mintDecimals).toNumber(),\n dynamicSlippage: swapOpts.jupiterOptions\n ? swapOpts.jupiterOptions.slippageMode === \"DYNAMIC\"\n : true,\n slippageBps: swapOpts.jupiterOptions?.slippageBps ?? undefined,\n swapMode: \"ExactIn\",\n platformFeeBps: swapOpts.jupiterOptions?.platformFeeBps ?? undefined,\n onlyDirectRoutes: swapOpts.jupiterOptions?.directRoutesOnly ?? false,\n },\n authority: marginfiAccount.authority,\n connection,\n destinationTokenAccount,\n });\n\n swapResponse.forEach((response) => {\n const outAmountThreshold = nativeToUi(\n response.quoteResponse.otherAmountThreshold,\n depositOpts.depositBank.mintDecimals\n );\n\n const amountToDeposit =\n outAmountThreshold +\n (depositOpts.loopMode === \"DEPOSIT\" ? depositOpts.inputDepositAmount : 0);\n\n swapResult.push({\n amountToDeposit,\n swapInstructions: [response.swapInstruction],\n setupInstructions: response.setupInstructions,\n swapLookupTables: response.addressLookupTableAddresses,\n quoteResponse: response.quoteResponse,\n });\n });\n }\n\n const borrowIxs = await makeBorrowIx({\n program,\n bank: borrowOpts.borrowBank,\n bankMap,\n tokenProgram: borrowOpts.tokenProgram,\n amount: borrowOpts.borrowAmount,\n marginfiAccount,\n authority: marginfiAccount.authority,\n isSync: true,\n opts: {\n createAtas: false,\n wrapAndUnwrapSol: false,\n overrideInferAccounts,\n },\n });\n\n for (const [index, item] of swapResult.entries()) {\n const {\n amountToDeposit,\n swapInstructions,\n setupInstructions,\n swapLookupTables,\n quoteResponse,\n } = item;\n\n let depositIxs: InstructionsWrapper;\n\n if (depositOpts.depositBank.config.assetTag === AssetTag.KAMINO) {\n const reserve =\n bankMetadataMap[depositOpts.depositBank.address.toBase58()]?.kaminoStates?.reserveState;\n\n if (!reserve) {\n throw TransactionBuildingError.kaminoReserveNotFound(\n depositOpts.depositBank.address.toBase58(),\n depositOpts.depositBank.mint.toBase58(),\n depositOpts.depositBank.tokenSymbol\n );\n }\n\n depositIxs = await makeKaminoDepositIx({\n program,\n bank: depositOpts.depositBank,\n tokenProgram: depositOpts.tokenProgram,\n amount: amountToDeposit,\n accountAddress: marginfiAccount.address,\n authority: marginfiAccount.authority,\n group: marginfiAccount.group,\n reserve,\n opts: {\n wrapAndUnwrapSol: false,\n overrideInferAccounts,\n },\n });\n } else {\n depositIxs = await makeDepositIx({\n program,\n bank: depositOpts.depositBank,\n tokenProgram: depositOpts.tokenProgram,\n amount: amountToDeposit,\n accountAddress: marginfiAccount.address,\n authority: marginfiAccount.authority,\n group: marginfiAccount.group,\n opts: {\n wrapAndUnwrapSol: false,\n overrideInferAccounts,\n },\n });\n }\n\n const luts = [...(addressLookupTableAccounts ?? []), ...swapLookupTables];\n\n const flashloanParams = {\n program,\n marginfiAccount,\n bankMap,\n addressLookupTableAccounts: luts,\n blockhash,\n };\n\n // if cuRequestIxs are not present, priority fee ix is needed\n // wallets add a priority fee ix by default breaking the flashloan tx so we need to add a placeholder priority fee ix\n // docs: https://docs.phantom.app/developer-powertools/solana-priority-fees\n // Solflare requires you to also include the set compute unit price to avoid transaction rejection on flashloans.\n\n const flashloanTx = await makeFlashLoanTx({\n ...flashloanParams,\n ixs: [\n ...cuRequestIxs,\n ...borrowIxs.instructions,\n ...swapInstructions,\n ...depositIxs.instructions,\n ],\n });\n\n const txSize = getTxSize(flashloanTx);\n const keySize = getAccountKeys(flashloanTx, luts);\n const isLast = index === swapResult.length - 1;\n\n if (txSize > MAX_TX_SIZE || keySize > 64) {\n if (isLast) {\n throw TransactionBuildingError.jupiterSwapSizeExceededLoop(txSize, keySize);\n } else {\n continue;\n }\n } else {\n return {\n flashloanTx,\n setupInstructions,\n swapQuote: quoteResponse,\n borrowIxs,\n depositIxs,\n amountToDeposit,\n };\n }\n }\n\n throw new Error(\"Failed to build repay with collateral flashloan tx\");\n}\n","import {\n AddressLookupTableAccount,\n ComputeBudgetProgram,\n PublicKey,\n Transaction,\n TransactionInstruction,\n TransactionMessage,\n VersionedTransaction,\n} from \"@solana/web3.js\";\nimport { BigNumber } from \"bignumber.js\";\nimport { QuoteResponse } from \"@jup-ag/api\";\n\nimport {\n ASSOCIATED_TOKEN_PROGRAM_ID,\n getAssociatedTokenAddressSync,\n NATIVE_MINT,\n TOKEN_2022_PROGRAM_ID,\n} from \"~/vendor/spl\";\nimport { nativeToUi, uiToNative } from \"~/utils\";\nimport instructions from \"~/instructions\";\nimport { AssetTag } from \"~/services/bank\";\nimport {\n addTransactionMetadata,\n ExtendedTransaction,\n ExtendedV0Transaction,\n InstructionsWrapper,\n makeWrapSolIxs,\n splitInstructionsToFitTransactions,\n TransactionType,\n getAccountKeys,\n getTxSize,\n} from \"~/services/transaction\";\nimport { makeRefreshKaminoBanksIxs, makeSmartCrankSwbFeedIx } from \"~/services/price\";\nimport { MAX_TX_SIZE } from \"~/constants\";\nimport { TransactionBuildingError } from \"~/errors\";\nimport syncInstructions from \"~/sync-instructions\";\n\nimport { MakeRepayIxParams, MakeRepayTxParams, MakeRepayWithCollatTxParams } from \"../types\";\nimport { isWholePosition, getJupiterSwapIxsForFlashloan } from \"../utils\";\n\nimport { makeKaminoWithdrawIx, makeWithdrawIx } from \"./withdraw\";\nimport { makeFlashLoanTx } from \"./flash-loan\";\nimport { makeSetupIx } from \"./account-lifecycle\";\n\n/**\n * Creates a repay instruction for repaying borrowed assets to a Marginfi bank.\n *\n * This function handles:\n * - Wrapping SOL to wSOL if repaying native SOL\n * - Token-2022 program support with proper remaining accounts\n * - Full or partial repayment of liabilities\n * - Creating the repay instruction to return assets to the bank's liquidity vault\n *\n * @param params - The parameters for creating the repay instruction\n * @param params.program - The Marginfi program instance\n * @param params.bank - The bank to repay to\n * @param params.tokenProgram - The token program ID (TOKEN_PROGRAM or TOKEN_2022_PROGRAM)\n * @param params.amount - The amount to repay in UI units\n * @param params.authority - The authority/signer public key\n * @param params.accountAddress - The Marginfi account address\n * @param params.repayAll - Whether to repay the entire liability (default: false)\n * @param params.opts - Optional configuration\n * @param params.opts.wrapAndUnwrapSol - Whether to wrap SOL to wSOL (default: true)\n * @param params.opts.wSolBalanceUi - Existing wSOL balance to combine with native SOL (default: 0)\n * @param params.opts.overrideInferAccounts - Optional account overrides for testing/special cases\n *\n * @returns Promise resolving to InstructionsWrapper containing the repay instructions\n */\nexport async function makeRepayIx({\n program,\n bank,\n tokenProgram,\n amount,\n authority,\n accountAddress,\n repayAll = false,\n isSync = false,\n opts = {},\n}: MakeRepayIxParams) {\n const wrapAndUnwrapSol = opts.wrapAndUnwrapSol ?? true;\n const wSolBalanceUi = opts.wSolBalanceUi ?? 0;\n\n const repayIxs = [];\n\n // Add repay-related instructions\n const userAta = getAssociatedTokenAddressSync(bank.mint, authority, true, tokenProgram); // We allow off curve addresses here to support Fuse.\n\n const remainingAccounts = tokenProgram.equals(TOKEN_2022_PROGRAM_ID)\n ? [{ pubkey: bank.mint, isSigner: false, isWritable: false }]\n : [];\n\n if (bank.mint.equals(NATIVE_MINT) && wrapAndUnwrapSol) {\n repayIxs.push(...makeWrapSolIxs(authority, new BigNumber(amount).minus(wSolBalanceUi)));\n }\n\n const repayIx =\n !isSync || !opts.overrideInferAccounts?.group\n ? await instructions.makeRepayIx(\n program,\n {\n marginfiAccount: accountAddress,\n signerTokenAccount: userAta,\n bank: bank.address,\n tokenProgram: tokenProgram,\n authority: opts.overrideInferAccounts?.authority ?? authority,\n group: opts.overrideInferAccounts?.group,\n liquidityVault: opts.overrideInferAccounts?.liquidityVault,\n },\n { amount: uiToNative(amount, bank.mintDecimals), repayAll },\n remainingAccounts\n )\n : syncInstructions.makeRepayIx(\n program.programId,\n {\n marginfiAccount: accountAddress,\n signerTokenAccount: userAta,\n bank: bank.address,\n tokenProgram: tokenProgram,\n authority: opts.overrideInferAccounts?.authority ?? authority,\n group: opts.overrideInferAccounts?.group,\n },\n { amount: uiToNative(amount, bank.mintDecimals), repayAll },\n remainingAccounts\n );\n repayIxs.push(repayIx);\n\n return {\n instructions: repayIxs,\n keys: [],\n };\n}\n\n/**\n * Creates a complete repay transaction ready to be signed and sent.\n *\n * This function builds a full transaction that includes:\n * - SOL wrapping instructions if repaying native SOL\n * - The actual repay instruction to return assets to the Marginfi bank\n * - Proper support for Token-2022 tokens\n * - Support for full or partial repayment\n *\n * The transaction is constructed as a legacy Transaction with proper metadata\n * and is ready to be signed by the authority and submitted to the network.\n *\n * @param params - The parameters for creating the repay transaction\n * @param params.luts - Address lookup tables for transaction compression\n * @param params.program - The Marginfi program instance\n * @param params.bank - The bank to repay to\n * @param params.tokenProgram - The token program ID (TOKEN_PROGRAM or TOKEN_2022_PROGRAM)\n * @param params.amount - The amount to repay in UI units\n * @param params.authority - The authority/signer public key\n * @param params.accountAddress - The Marginfi account address\n * @param params.repayAll - Whether to repay the entire liability (default: false)\n * @param params.opts - Optional configuration (wrapping, overrides, etc.)\n *\n * @returns Promise resolving to an ExtendedTransaction with metadata\n */\nexport async function makeRepayTx(params: MakeRepayTxParams): Promise<ExtendedTransaction> {\n const { luts, ...depositIxParams } = params;\n\n const ixs = await makeRepayIx(depositIxParams);\n const tx = new Transaction().add(...ixs.instructions);\n tx.feePayer = params.authority;\n\n const solanaTx = addTransactionMetadata(tx, {\n type: TransactionType.REPAY,\n signers: ixs.keys,\n addressLookupTables: luts,\n });\n return solanaTx;\n}\n\nexport async function makeRepayWithCollatTx(params: MakeRepayWithCollatTxParams) {\n const {\n program,\n marginfiAccount,\n bankMap,\n withdrawOpts,\n repayOpts,\n bankMetadataMap,\n addressLookupTableAccounts,\n connection,\n oraclePrices,\n crossbarUrl,\n } = params;\n\n const blockhash = (await connection.getLatestBlockhash(\"confirmed\")).blockhash;\n\n // Create atas if needed\n const setupIxs = await makeSetupIx({\n connection,\n authority: marginfiAccount.authority,\n tokens: [\n {\n mint: repayOpts.repayBank.mint,\n tokenProgram: repayOpts.tokenProgram,\n },\n {\n mint: withdrawOpts.withdrawBank.mint,\n tokenProgram: withdrawOpts.tokenProgram,\n },\n ],\n });\n\n // Will only refresh kamino banks if any banks in the portfolio are kamino\n const kaminoRefreshIxs = makeRefreshKaminoBanksIxs(\n marginfiAccount,\n bankMap,\n [withdrawOpts.withdrawBank.address, repayOpts.repayBank.address],\n bankMetadataMap\n );\n\n const { flashloanTx, setupInstructions, swapQuote, amountToRepay, withdrawIxs, repayIxs } =\n await buildRepayWithCollatFlashloanTx({\n ...params,\n blockhash,\n });\n\n const jupiterSetupInstructions = setupInstructions.filter((ix) => {\n // filter out compute budget instructions\n if (ix.programId.equals(ComputeBudgetProgram.programId)) {\n return false;\n }\n\n if (ix.programId.equals(ASSOCIATED_TOKEN_PROGRAM_ID)) {\n // key 3 is always mint in create ata\n const mintKey = ix.keys[3]?.pubkey;\n\n if (\n mintKey?.equals(withdrawOpts.withdrawBank.mint) ||\n mintKey?.equals(repayOpts.repayBank.mint)\n ) {\n return false;\n }\n }\n\n return true;\n });\n\n setupIxs.push(...jupiterSetupInstructions);\n\n const { instructions: updateFeedIxs, luts: feedLuts } = await makeSmartCrankSwbFeedIx({\n marginfiAccount,\n bankMap,\n oraclePrices,\n instructions: [...withdrawIxs.instructions, ...repayIxs.instructions],\n program,\n connection,\n crossbarUrl,\n });\n\n let additionalTxs: ExtendedV0Transaction[] = [];\n\n // if atas are needed, add them\n if (setupIxs.length > 0 || kaminoRefreshIxs.instructions.length > 0) {\n const ixs = [...setupIxs, ...kaminoRefreshIxs.instructions];\n const txs = splitInstructionsToFitTransactions([], ixs, {\n blockhash,\n payerKey: marginfiAccount.authority,\n luts: addressLookupTableAccounts ?? [],\n });\n\n additionalTxs.push(\n ...txs.map((tx) =>\n addTransactionMetadata(tx, {\n type: TransactionType.CREATE_ATA,\n addressLookupTables: addressLookupTableAccounts,\n })\n )\n );\n }\n\n // if crank is needed, add it\n if (updateFeedIxs.length > 0) {\n const message = new TransactionMessage({\n payerKey: marginfiAccount.authority,\n recentBlockhash: blockhash,\n instructions: updateFeedIxs,\n }).compileToV0Message(feedLuts);\n\n additionalTxs.push(\n addTransactionMetadata(new VersionedTransaction(message), {\n addressLookupTables: feedLuts,\n type: TransactionType.CRANK,\n })\n );\n }\n\n const transactions = [...additionalTxs, flashloanTx];\n return { transactions, swapQuote, amountToRepay };\n}\n\nasync function buildRepayWithCollatFlashloanTx({\n program,\n marginfiAccount,\n bankMap,\n withdrawOpts,\n repayOpts,\n bankMetadataMap,\n addressLookupTableAccounts,\n connection,\n swapOpts,\n overrideInferAccounts,\n blockhash,\n}: MakeRepayWithCollatTxParams & { blockhash: string }) {\n const swapResult: {\n amountToRepay: number;\n swapInstructions: TransactionInstruction[];\n setupInstructions: TransactionInstruction[];\n swapLookupTables: AddressLookupTableAccount[];\n quoteResponse?: QuoteResponse;\n }[] = [];\n\n const cuRequestIxs = [\n ComputeBudgetProgram.setComputeUnitLimit({ units: 1_200_000 }),\n ComputeBudgetProgram.setComputeUnitPrice({ microLamports: 1 }),\n ];\n\n if (repayOpts.repayBank.mint.equals(withdrawOpts.withdrawBank.mint)) {\n // No swap needed, you just withdraw and repay the same mint\n swapResult.push({\n amountToRepay: withdrawOpts.withdrawAmount,\n swapInstructions: [],\n setupInstructions: [],\n swapLookupTables: [],\n });\n } else {\n const destinationTokenAccount = getAssociatedTokenAddressSync(\n new PublicKey(repayOpts.repayBank.mint),\n marginfiAccount.authority,\n true,\n repayOpts.tokenProgram.equals(TOKEN_2022_PROGRAM_ID) ? TOKEN_2022_PROGRAM_ID : undefined\n );\n\n // Get Jupiter swap instruction using calculated available TX size\n const swapResponse = await getJupiterSwapIxsForFlashloan({\n quoteParams: {\n inputMint: withdrawOpts.withdrawBank.mint.toBase58(),\n outputMint: repayOpts.repayBank.mint.toBase58(),\n amount: uiToNative(\n withdrawOpts.withdrawAmount,\n withdrawOpts.withdrawBank.mintDecimals\n ).toNumber(),\n dynamicSlippage: swapOpts.jupiterOptions\n ? swapOpts.jupiterOptions.slippageMode === \"DYNAMIC\"\n : true,\n slippageBps: swapOpts.jupiterOptions?.slippageBps ?? undefined,\n swapMode: \"ExactIn\",\n platformFeeBps: swapOpts.jupiterOptions?.platformFeeBps ?? undefined,\n onlyDirectRoutes: swapOpts.jupiterOptions?.directRoutesOnly ?? false,\n },\n authority: marginfiAccount.authority,\n connection,\n destinationTokenAccount,\n });\n\n swapResponse.forEach((response) => {\n const { swapInstruction, addressLookupTableAddresses, quoteResponse } = response;\n const outAmount = nativeToUi(quoteResponse.outAmount, repayOpts.repayBank.mintDecimals);\n const outAmountThreshold = nativeToUi(\n quoteResponse.otherAmountThreshold,\n repayOpts.repayBank.mintDecimals\n );\n\n const amountToRepay =\n outAmount > repayOpts.totalPositionAmount\n ? repayOpts.totalPositionAmount\n : outAmountThreshold;\n\n swapResult.push({\n amountToRepay,\n swapInstructions: [swapInstruction],\n setupInstructions: [],\n swapLookupTables: addressLookupTableAddresses,\n quoteResponse,\n });\n });\n }\n\n let withdrawIxs: InstructionsWrapper;\n\n // Logic to determine if the withdraw bank is kamino\n if (withdrawOpts.withdrawBank.config.assetTag === AssetTag.KAMINO) {\n const reserve =\n bankMetadataMap[withdrawOpts.withdrawBank.address.toBase58()]?.kaminoStates?.reserveState;\n\n if (!reserve) {\n throw TransactionBuildingError.kaminoReserveNotFound(\n withdrawOpts.withdrawBank.address.toBase58(),\n withdrawOpts.withdrawBank.mint.toBase58(),\n withdrawOpts.withdrawBank.tokenSymbol\n );\n }\n\n // Sometimes the ctoken conversion can be off by a few basis points, this accounts for that\n const adjustedAmount = new BigNumber(withdrawOpts.withdrawAmount)\n .div(withdrawOpts.withdrawBank.assetShareValue)\n .times(1.0001)\n .toNumber();\n\n withdrawIxs = await makeKaminoWithdrawIx({\n program,\n bank: withdrawOpts.withdrawBank,\n bankMap,\n tokenProgram: withdrawOpts.tokenProgram,\n amount: adjustedAmount,\n marginfiAccount,\n authority: marginfiAccount.authority,\n reserve,\n bankMetadataMap,\n withdrawAll: isWholePosition(\n {\n amount: withdrawOpts.totalPositionAmount,\n isLending: true,\n },\n withdrawOpts.withdrawAmount,\n withdrawOpts.withdrawBank.mintDecimals\n ),\n isSync: true,\n opts: {\n createAtas: false,\n wrapAndUnwrapSol: false,\n overrideInferAccounts,\n },\n });\n } else {\n withdrawIxs = await makeWithdrawIx({\n program,\n bank: withdrawOpts.withdrawBank,\n bankMap,\n tokenProgram: withdrawOpts.tokenProgram,\n amount: withdrawOpts.withdrawAmount,\n marginfiAccount,\n authority: marginfiAccount.authority,\n withdrawAll: isWholePosition(\n {\n amount: withdrawOpts.totalPositionAmount,\n isLending: true,\n },\n withdrawOpts.withdrawAmount,\n withdrawOpts.withdrawBank.mintDecimals\n ),\n bankMetadataMap,\n isSync: true,\n opts: {\n createAtas: false,\n wrapAndUnwrapSol: false,\n overrideInferAccounts,\n },\n });\n }\n\n for (const [index, item] of swapResult.entries()) {\n const { amountToRepay, swapInstructions, setupInstructions, swapLookupTables, quoteResponse } =\n item;\n\n const repayIxs = await makeRepayIx({\n program,\n bank: repayOpts.repayBank,\n tokenProgram: repayOpts.tokenProgram,\n amount: amountToRepay,\n accountAddress: marginfiAccount.address,\n authority: marginfiAccount.authority,\n repayAll: isWholePosition(\n {\n amount: repayOpts.totalPositionAmount,\n isLending: true,\n },\n amountToRepay,\n repayOpts.repayBank.mintDecimals\n ),\n isSync: true,\n opts: {\n wrapAndUnwrapSol: false,\n overrideInferAccounts,\n },\n });\n\n const luts = [...(addressLookupTableAccounts ?? []), ...swapLookupTables];\n\n const flashloanParams = {\n program,\n marginfiAccount,\n bankMap,\n addressLookupTableAccounts: luts,\n blockhash,\n };\n // if cuRequestIxs are not present, priority fee ix is needed\n // wallets add a priority fee ix by default breaking the flashloan tx so we need to add a placeholder priority fee ix\n // docs: https://docs.phantom.app/developer-powertools/solana-priority-fees\n // Solflare requires you to also include the set compute unit price to avoid transaction rejection on flashloans.\n const flashloanTx = await makeFlashLoanTx({\n ...flashloanParams,\n ixs: [\n ...cuRequestIxs,\n ...withdrawIxs.instructions,\n ...swapInstructions,\n ...repayIxs.instructions,\n ],\n isSync: true,\n });\n\n const txSize = getTxSize(flashloanTx);\n const keySize = getAccountKeys(flashloanTx, luts);\n const isLast = index === swapResult.length - 1;\n\n if (txSize > MAX_TX_SIZE || keySize > 64) {\n if (isLast) {\n throw TransactionBuildingError.jupiterSwapSizeExceededRepay(txSize, keySize);\n } else {\n continue;\n }\n } else {\n return {\n flashloanTx,\n setupInstructions,\n swapQuote: quoteResponse,\n withdrawIxs,\n repayIxs,\n amountToRepay,\n };\n }\n }\n\n throw new Error(\"Failed to build repay with collateral flashloan tx\");\n}\n","import { PublicKey } from \"@solana/web3.js\";\n\nimport { BankType } from \"~/services/bank\";\nimport { InstructionsWrapper } from \"~/services/transaction\";\nimport {\n createAssociatedTokenAccountIdempotentInstruction,\n getAssociatedTokenAddressSync,\n} from \"~/vendor/spl\";\nimport { MarginfiProgram, MintData } from \"~/types\";\nimport instructions from \"~/instructions\";\n\nimport { MarginfiAccountType } from \"../types\";\n\n/**\n * @deprecated Rewards are now distributed offchain. If you wish to get access to emission data, please reach out.\n */\nexport async function makeWithdrawEmissionsIx(\n program: MarginfiProgram,\n marginfiAccount: MarginfiAccountType,\n banks: Map<string, BankType>,\n mintDatas: Map<string, MintData>,\n bankAddress: PublicKey\n): Promise<InstructionsWrapper> {\n const bank = banks.get(bankAddress.toBase58());\n if (!bank) throw Error(`Bank ${bankAddress.toBase58()} not found`);\n const mintData = mintDatas.get(bankAddress.toBase58());\n if (!mintData) throw Error(`Mint data for bank ${bankAddress.toBase58()} not found`);\n if (!mintData.emissionTokenProgram) {\n throw Error(`Emission token program not found for bank ${bankAddress.toBase58()}`);\n }\n\n let ixs = [];\n\n const userAta = getAssociatedTokenAddressSync(\n bank.emissionsMint,\n marginfiAccount.authority,\n true,\n mintData.emissionTokenProgram\n ); // We allow off curve addresses here to support Fuse.\n const createAtaIdempotentIx = createAssociatedTokenAccountIdempotentInstruction(\n marginfiAccount.authority,\n userAta,\n marginfiAccount.authority,\n bank.emissionsMint,\n mintData.emissionTokenProgram\n );\n ixs.push(createAtaIdempotentIx);\n\n const withdrawEmissionsIx = await instructions.makelendingAccountWithdrawEmissionIx(program, {\n marginfiAccount: marginfiAccount.address,\n destinationAccount: userAta,\n bank: bank.address,\n tokenProgram: mintData.emissionTokenProgram,\n });\n ixs.push(withdrawEmissionsIx);\n\n return { instructions: ixs, keys: [] };\n}\n","import {\n AddressLookupTableAccount,\n ComputeBudgetProgram,\n Connection,\n PublicKey,\n SystemProgram,\n TransactionInstruction,\n TransactionMessage,\n VersionedTransaction,\n} from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\n\nimport { BankIntegrationMetadataMap, MarginfiProgram } from \"~/types\";\nimport { AssetTag, BankType, OracleSetup } from \"~/services/bank\";\nimport { makeCrankSwbFeedIx, makeUpdateSwbFeedIx, OraclePrice } from \"~/services/price\";\nimport klendInstructions from \"~/vendor/klend/instructions\";\nimport {\n addTransactionMetadata,\n simulateBundle,\n SolanaTransaction,\n TransactionType,\n} from \"~/services/transaction\";\nimport { ZERO_ORACLE_KEY } from \"~/constants\";\nimport { bigNumberToWrappedI80F48, wrappedI80F48toBigNumber } from \"~/utils\";\n\nimport {\n BalanceType,\n HealthCacheSimulationError,\n HealthCacheStatus,\n MarginfiAccountRaw,\n MarginfiAccountType,\n MarginRequirementType,\n} from \"../types\";\nimport {\n decodeAccountRaw,\n parseMarginfiAccountRaw,\n computeHealthComponentsLegacy,\n computeHealthComponentsWithoutBiasLegacy,\n} from \"../utils\";\nimport { makePulseHealthIx } from \"../actions\";\n\nexport async function simulateAccountHealthCacheWithFallback(props: {\n program: MarginfiProgram;\n bankMap: Map<string, BankType>;\n oraclePrices: Map<string, OraclePrice>;\n marginfiAccount: MarginfiAccountType;\n balances: BalanceType[];\n bankMetadataMap: BankIntegrationMetadataMap;\n}): Promise<{\n marginfiAccount: MarginfiAccountType;\n error?: HealthCacheSimulationError;\n}> {\n let marginfiAccount = props.marginfiAccount;\n\n const activeBalances = props.balances.filter((b) => b.active);\n\n const { assets: assetValueEquity, liabilities: liabilityValueEquity } =\n computeHealthComponentsWithoutBiasLegacy(\n activeBalances,\n props.bankMap,\n props.oraclePrices,\n MarginRequirementType.Equity\n );\n\n try {\n const simulatedAccount = await simulateAccountHealthCache({\n program: props.program,\n bankMap: props.bankMap,\n marginfiAccountPk: props.marginfiAccount.address,\n balances: props.balances,\n bankMetadataMap: props.bankMetadataMap,\n });\n\n simulatedAccount.healthCache.assetValueEquity = bigNumberToWrappedI80F48(assetValueEquity);\n simulatedAccount.healthCache.liabilityValueEquity =\n bigNumberToWrappedI80F48(liabilityValueEquity);\n\n marginfiAccount = parseMarginfiAccountRaw(props.marginfiAccount.address, simulatedAccount);\n } catch (e) {\n console.log(\"e\", e);\n const { assets: assetValueMaint, liabilities: liabilityValueMaint } =\n computeHealthComponentsLegacy(\n activeBalances,\n props.bankMap,\n props.oraclePrices,\n MarginRequirementType.Maintenance,\n []\n );\n\n const { assets: assetValueInitial, liabilities: liabilityValueInitial } =\n computeHealthComponentsLegacy(\n activeBalances,\n props.bankMap,\n props.oraclePrices,\n MarginRequirementType.Initial,\n []\n );\n\n marginfiAccount.healthCache = {\n assetValue: assetValueInitial,\n liabilityValue: liabilityValueInitial,\n assetValueMaint: assetValueMaint,\n liabilityValueMaint: liabilityValueMaint,\n assetValueEquity: assetValueEquity,\n liabilityValueEquity: liabilityValueEquity,\n timestamp: new BigNumber(0),\n flags: [],\n prices: [],\n simulationStatus: HealthCacheStatus.COMPUTED,\n };\n\n // Return the error if it's a HealthCacheSimulationError\n if (e instanceof HealthCacheSimulationError) {\n return { marginfiAccount, error: e };\n }\n }\n\n return { marginfiAccount };\n}\n\nexport async function simulateAccountHealthCache(props: {\n program: MarginfiProgram;\n bankMap: Map<string, BankType>;\n marginfiAccountPk: PublicKey;\n balances: BalanceType[];\n bankMetadataMap?: BankIntegrationMetadataMap;\n}): Promise<MarginfiAccountRaw> {\n const { program, bankMap, marginfiAccountPk, balances, bankMetadataMap } = props;\n\n const activeBalances = balances.filter((b) => b.active);\n\n // this will always return swb oracles regardless of staleness\n // stale functionality should be re-added once we increase amount of swb oracles\n const activeBanks = activeBalances\n .map((balance) => bankMap.get(balance.bankPk.toBase58()))\n .filter((bank): bank is NonNullable<typeof bank> => !!bank);\n\n const kaminoBanks = activeBanks.filter((bank) => bank.config.assetTag === AssetTag.KAMINO);\n\n const staleSwbOracles = activeBanks\n .filter(\n (bank) =>\n bank.config.oracleSetup === OracleSetup.SwitchboardPull ||\n bank.config.oracleSetup === OracleSetup.SwitchboardV2 ||\n bank.config.oracleSetup === OracleSetup.KaminoSwitchboardPull\n )\n .filter((bank) => !bank.oracleKey.equals(new PublicKey(ZERO_ORACLE_KEY)));\n\n const computeIx = ComputeBudgetProgram.setComputeUnitLimit({\n units: 1_400_000,\n });\n const blockhash = (await program.provider.connection.getLatestBlockhash(\"confirmed\")).blockhash;\n\n const fundAccountIx = SystemProgram.transfer({\n fromPubkey: new PublicKey(\"DD3AeAssFvjqTvRTrRAtpfjkBF8FpVKnFuwnMLN9haXD\"), // marginfi SOL VAULT\n toPubkey: program.provider.publicKey,\n lamports: 100_000_000, // 0.1 SOL\n });\n\n const refreshReserveData = kaminoBanks\n .map((bank) => {\n const bankMetadata = bankMetadataMap?.[bank.address.toBase58()];\n if (!bankMetadata?.kaminoStates) {\n console.error(`Bank metadata for kamino bank ${bank.address.toBase58()} not found`);\n return;\n }\n\n const kaminoReserve = bank.kaminoReserve;\n const lendingMarket = bankMetadata.kaminoStates.reserveState.lendingMarket;\n\n return {\n reserve: kaminoReserve,\n lendingMarket,\n };\n })\n .filter((bank): bank is NonNullable<typeof bank> => !!bank);\n\n const refreshReservesIxs = [];\n if (refreshReserveData.length > 0) {\n const refreshIx = klendInstructions.makeRefreshReservesBatchIx(refreshReserveData);\n refreshReservesIxs.push(refreshIx);\n }\n\n const crankSwbIxs =\n staleSwbOracles.length > 0\n ? await makeUpdateSwbFeedIx({\n swbPullOracles: staleSwbOracles.map((oracle) => ({\n key: oracle.oracleKey,\n })),\n feePayer: program.provider.publicKey,\n connection: program.provider.connection,\n })\n : { instructions: [], luts: [] };\n\n const healthPulseIxs = await makePulseHealthIx(\n program,\n marginfiAccountPk,\n bankMap,\n balances,\n activeBalances.map((b) => b.bankPk),\n []\n );\n\n const txs = [];\n\n const additionalTx = new VersionedTransaction(\n new TransactionMessage({\n payerKey: program.provider.publicKey,\n recentBlockhash: blockhash,\n instructions: [computeIx, fundAccountIx, ...refreshReservesIxs],\n }).compileToV0Message([...crankSwbIxs.luts])\n );\n\n txs.push(additionalTx);\n\n const swbTx = new VersionedTransaction(\n new TransactionMessage({\n payerKey: program.provider.publicKey,\n recentBlockhash: blockhash,\n instructions: [...crankSwbIxs.instructions],\n }).compileToV0Message([...crankSwbIxs.luts])\n );\n\n txs.push(swbTx);\n\n const healthTx = new VersionedTransaction(\n new TransactionMessage({\n payerKey: program.provider.publicKey,\n recentBlockhash: blockhash,\n instructions: [computeIx, ...healthPulseIxs.instructions],\n }).compileToV0Message([])\n );\n\n txs.push(healthTx);\n\n if (txs.length > 5) {\n console.error(\"Too many transactions\", txs.length);\n throw new Error(\"Too many transactions\");\n }\n\n const simulationResult = await simulateBundle(program.provider.connection.rpcEndpoint, txs, [\n marginfiAccountPk,\n ]);\n\n const postExecutionAccount = simulationResult.find(\n (result) => result.postExecutionAccounts.length > 0\n );\n\n if (!postExecutionAccount) {\n throw new Error(\"Account not found\");\n }\n\n const marginfiAccountPost = decodeAccountRaw(\n Buffer.from(postExecutionAccount.postExecutionAccounts[0].data[0], \"base64\"),\n program.idl\n );\n\n if (marginfiAccountPost.healthCache.mrgnErr || marginfiAccountPost.healthCache.internalErr) {\n console.log(\n \"cranked swb oracles\",\n staleSwbOracles.map((oracle) => oracle.oracleKey)\n );\n console.log(\n \"MarginfiAccountPost healthCache internalErr\",\n marginfiAccountPost.healthCache.internalErr\n );\n console.log(\"MarginfiAccountPost healthCache mrgnErr\", marginfiAccountPost.healthCache.mrgnErr);\n\n if (marginfiAccountPost.healthCache.mrgnErr === 6009) {\n const assetValue = !wrappedI80F48toBigNumber(\n marginfiAccountPost.healthCache.assetValue\n ).isZero();\n const liabilityValue = !wrappedI80F48toBigNumber(\n marginfiAccountPost.healthCache.liabilityValue\n ).isZero();\n const assetValueEquity = !wrappedI80F48toBigNumber(\n marginfiAccountPost.healthCache.assetValueEquity\n ).isZero();\n const liabilityValueEquity = !wrappedI80F48toBigNumber(\n marginfiAccountPost.healthCache.liabilityValueEquity\n ).isZero();\n const assetValueMaint = !wrappedI80F48toBigNumber(\n marginfiAccountPost.healthCache.assetValueMaint\n ).isZero();\n const liabilityValueMaint = !wrappedI80F48toBigNumber(\n marginfiAccountPost.healthCache.liabilityValueMaint\n ).isZero();\n\n if (\n assetValue &&\n liabilityValue &&\n assetValueEquity &&\n liabilityValueEquity &&\n assetValueMaint &&\n liabilityValueMaint\n ) {\n return marginfiAccountPost;\n }\n }\n console.error(\"Account health cache simulation failed\", {\n mrgnErr: marginfiAccountPost.healthCache.mrgnErr,\n internalErr: marginfiAccountPost.healthCache.internalErr,\n });\n throw new HealthCacheSimulationError(\n \"Account health cache simulation failed\",\n marginfiAccountPost.healthCache.mrgnErr,\n marginfiAccountPost.healthCache.internalErr\n );\n }\n\n return marginfiAccountPost;\n}\n\nexport async function getHealthSimulationTransactions({\n connection,\n projectedActiveBanks,\n bankMap,\n bankMetadataMap,\n marginfiAccount,\n program,\n authority,\n luts,\n includeCrankTx,\n blockhash,\n}: {\n connection: Connection;\n projectedActiveBanks: PublicKey[];\n bankMap: Map<string, BankType>;\n bankMetadataMap: BankIntegrationMetadataMap;\n marginfiAccount: MarginfiAccountType;\n program: MarginfiProgram;\n authority: PublicKey;\n luts: AddressLookupTableAccount[];\n includeCrankTx: boolean;\n blockhash: string;\n}) {\n const additionalTxs: SolanaTransaction[] = [];\n\n const computeIx = ComputeBudgetProgram.setComputeUnitLimit({\n units: 1_400_000,\n });\n\n let updateFeedIx: {\n instructions: TransactionInstruction[];\n luts: AddressLookupTableAccount[];\n } | null = null;\n\n if (includeCrankTx) {\n updateFeedIx = await makeCrankSwbFeedIx(\n marginfiAccount,\n bankMap,\n projectedActiveBanks,\n program.provider\n );\n }\n\n const activeBanks: PublicKey[] = marginfiAccount.balances\n .filter((b) => b.active)\n .map((b) => b.bankPk);\n\n // Convert to string sets for easier comparison\n const activeBankStrings = new Set(activeBanks.map((pk) => pk.toString()));\n const projectedActiveBankStrings = new Set(projectedActiveBanks.map((pk) => pk.toString()));\n\n // if active bank is not in projectedActiveBanks, it should be excluded\n const excludedBanks: PublicKey[] = activeBanks.filter(\n (pk) => !projectedActiveBankStrings.has(pk.toString())\n );\n\n // if projectedActiveBanks is not in activeBanks, it should be added\n const mandatoryBanks: PublicKey[] = projectedActiveBanks.filter(\n (pk) => !activeBankStrings.has(pk.toString())\n );\n\n // todo only refresh reserves if not present\n const refreshReserveData = projectedActiveBanks\n .map((bankPk) => {\n const bankMetadata = bankMetadataMap?.[bankPk.toBase58()];\n const bank = bankMap.get(bankPk.toBase58());\n\n if (!bankMetadata?.kaminoStates || !bank || bank.config.assetTag !== AssetTag.KAMINO) {\n return;\n }\n\n const kaminoReserve = bank.kaminoReserve;\n const lendingMarket = bankMetadata.kaminoStates.reserveState.lendingMarket;\n\n return {\n reserve: kaminoReserve,\n lendingMarket,\n };\n })\n .filter((bank): bank is NonNullable<typeof bank> => !!bank);\n\n const refreshReservesIx: TransactionInstruction[] = [];\n if (refreshReserveData.length > 0) {\n const refreshIx = klendInstructions.makeRefreshReservesBatchIx(refreshReserveData);\n refreshReservesIx.push(refreshIx);\n }\n\n const healthPulseIx = await makePulseHealthIx(\n program,\n marginfiAccount.address,\n bankMap,\n marginfiAccount.balances,\n mandatoryBanks,\n excludedBanks\n );\n\n const refreshReservesTx = new VersionedTransaction(\n new TransactionMessage({\n instructions: [computeIx, ...refreshReservesIx],\n payerKey: authority,\n recentBlockhash: blockhash,\n }).compileToV0Message([...luts])\n );\n\n additionalTxs.push(\n addTransactionMetadata(refreshReservesTx, {\n type: TransactionType.CRANK,\n signers: [],\n addressLookupTables: luts,\n })\n );\n\n const healthCrankTx = new VersionedTransaction(\n new TransactionMessage({\n instructions: [computeIx, ...healthPulseIx.instructions],\n payerKey: authority,\n recentBlockhash: blockhash,\n }).compileToV0Message([...luts])\n );\n\n if (updateFeedIx) {\n const oracleCrankTx = new VersionedTransaction(\n new TransactionMessage({\n instructions: [...updateFeedIx.instructions],\n payerKey: authority,\n recentBlockhash: blockhash,\n }).compileToV0Message([...updateFeedIx.luts])\n );\n\n additionalTxs.push(\n addTransactionMetadata(oracleCrankTx, {\n type: TransactionType.CRANK,\n signers: [],\n addressLookupTables: updateFeedIx.luts,\n })\n );\n }\n\n additionalTxs.push(\n addTransactionMetadata(healthCrankTx, {\n type: TransactionType.CRANK,\n signers: [],\n addressLookupTables: luts,\n })\n );\n\n return additionalTxs;\n}\n","import { Connection, PublicKey } from \"@solana/web3.js\";\n\nimport { deriveMarginfiAccount } from \"~/utils\";\nimport { BankIntegrationMetadataMap, MarginfiProgram } from \"~/types\";\nimport { BankType } from \"~/services/bank\";\n\nimport {\n HealthCacheSimulationError,\n MarginfiAccountRaw,\n MarginfiAccountType,\n} from \"../types\";\nimport { simulateAccountHealthCache } from \"../services\";\n\nimport { parseMarginfiAccountRaw } from \"./deserialize.utils\";\n\nexport const fetchMarginfiAccountAddresses = async (\n program: MarginfiProgram,\n authority: PublicKey,\n group: PublicKey\n): Promise<PublicKey[]> => {\n const marginfiAccounts = (\n await program.account.marginfiAccount.all([\n {\n memcmp: {\n bytes: group.toBase58(),\n offset: 8, // marginfiGroup is the first field in the account, so only offset is the discriminant\n },\n },\n {\n memcmp: {\n bytes: authority.toBase58(),\n offset: 8 + 32, // authority is the second field in the account after the authority, so offset by the discriminant and a pubkey\n },\n },\n ])\n ).map((a) => a.publicKey);\n\n return marginfiAccounts;\n};\n\nexport const fetchMarginfiAccountData = async (\n program: MarginfiProgram,\n marginfiAccountPk: PublicKey,\n bankMap: Map<string, BankType>,\n bankMetadataMap?: BankIntegrationMetadataMap\n): Promise<{\n marginfiAccount: MarginfiAccountType;\n error?: HealthCacheSimulationError;\n}> => {\n const marginfiAccountRaw: MarginfiAccountRaw =\n await program.account.marginfiAccount.fetch(marginfiAccountPk, \"confirmed\");\n const marginfiAccount = parseMarginfiAccountRaw(\n marginfiAccountPk,\n marginfiAccountRaw\n );\n\n try {\n const simulatedAccount = await simulateAccountHealthCache({\n program,\n bankMap,\n marginfiAccountPk,\n balances: marginfiAccount.balances,\n bankMetadataMap,\n });\n\n const marginfiAccountWithCache = parseMarginfiAccountRaw(\n marginfiAccountPk,\n simulatedAccount\n );\n\n return { marginfiAccount: marginfiAccountWithCache };\n } catch (e) {\n console.error(\"Error simulating account health cache\", e);\n if (e instanceof HealthCacheSimulationError) {\n return { marginfiAccount, error: e };\n }\n return { marginfiAccount };\n }\n};\n\nfunction randomDistinctIndices(count: number, maxExclusive: number): number[] {\n const chosen = new Set<number>();\n while (chosen.size < count) {\n chosen.add(Math.floor(Math.random() * maxExclusive));\n }\n return [...chosen];\n}\n\n/**\n * Generates a random available account index that doesn't collide with existing accounts.\n * Account indices are 0-255 (u8 range).\n *\n * @param connection - Solana connection\n * @param programId - MarginFi program ID\n * @param group - MarginFi group public key\n * @param authority - User's wallet public key\n * @param thirdPartyId - Third party ID (default 0)\n * @returns A random available account index (0-255)\n */\nexport async function findRandomAvailableAccountIndex(\n connection: Connection,\n programId: PublicKey,\n group: PublicKey,\n authority: PublicKey,\n thirdPartyId: number = 0\n): Promise<number> {\n const MAX_INDEX = 255; // u8 range: 0-255\n const BATCH_SIZE = 16; // 16 or 32 is fine\n const MAX_ATTEMPTS = 8; // realisticly all accounts will be found in the first attempt\n\n for (let attempt = 0; attempt < MAX_ATTEMPTS; attempt++) {\n // 1. Pick a random batch of distinct indices in [0, 255]\n const indices = randomDistinctIndices(\n Math.min(BATCH_SIZE, MAX_INDEX),\n MAX_INDEX\n );\n\n // 2. Derive PDAs for these indices\n const pdas = indices.map(\n (i) =>\n deriveMarginfiAccount(programId, group, authority, i, thirdPartyId)[0]\n );\n\n // 3. Check which PDAs exist on-chain\n const accountInfos = await connection.getMultipleAccountsInfo(pdas);\n\n // 4. Find the first index whose PDA doesn't exist yet\n for (let i = 0; i < indices.length; i++) {\n const indice = indices[i];\n if (accountInfos[i] === null && indice !== undefined) {\n // This index is free right now\n return indice;\n }\n }\n }\n\n // If we get here, indices are taken, (create custom error)\n throw new Error(\"Unable to find free index after many attempts\");\n}\n","import BigNumber from \"bignumber.js\";\nimport { PublicKey } from \"@solana/web3.js\";\n\nimport {\n ActiveEmodePair,\n BankType,\n computeAssetUsdValue,\n EmodeImpactStatus,\n getAssetWeight,\n getLiabilityWeight,\n RiskTier,\n} from \"~/services/bank\";\nimport { getPrice, OraclePrice, PriceBias } from \"~/services/price\";\n\nimport { MarginfiAccountType, MarginRequirementType } from \"../types\";\n\nimport {\n computeFreeCollateral,\n computeFreeCollateralLegacy,\n computeHealthComponents,\n computeQuantityUi,\n getActiveBalances,\n getBalance,\n} from \"./compute.utils\";\n\n/**\n * Applies emode weights to all banks with matching emode tags.\n * Uses BigNumber.max to take the higher of existing or emode weight.\n */\nfunction applyEmodeWeightsToBanks(\n banks: Map<string, BankType>,\n activePair: ActiveEmodePair\n): Map<string, BankType> {\n const modifiedBanks = new Map(banks);\n\n banks.forEach((bank, key) => {\n if (bank.emode?.emodeTag && activePair.collateralBankTags.includes(bank.emode.emodeTag)) {\n modifiedBanks.set(key, {\n ...bank,\n config: {\n ...bank.config,\n assetWeightMaint: BigNumber.max(\n bank.config.assetWeightMaint,\n activePair.assetWeightMaint\n ),\n assetWeightInit: BigNumber.max(bank.config.assetWeightInit, activePair.assetWeightInit),\n },\n });\n }\n });\n\n return modifiedBanks;\n}\n\nexport function computeMaxBorrowForBank(\n account: MarginfiAccountType,\n banks: Map<string, BankType>,\n oraclePrices: Map<string, OraclePrice>,\n bankAddress: PublicKey,\n opts?: {\n emodeImpactStatus?: EmodeImpactStatus;\n volatilityFactor?: number;\n activePair?: ActiveEmodePair;\n }\n): BigNumber {\n // Apply emode weights to all banks with matching tags\n const effectiveBanks = opts?.activePair\n ? applyEmodeWeightsToBanks(banks, opts.activePair)\n : banks;\n\n const bank = effectiveBanks.get(bankAddress.toBase58());\n\n if (!bank) throw Error(`Bank ${bankAddress.toBase58()} not found`);\n\n const priceInfo = oraclePrices.get(bankAddress.toBase58());\n if (!priceInfo) throw Error(`Price info for ${bankAddress.toBase58()} not found`);\n\n const activeBalances = getActiveBalances(account.balances);\n\n // -------------------------- //\n // isolated asset constraints //\n // -------------------------- //\n\n const hasLiabilitiesAlready =\n activeBalances.filter((b) => b.liabilityShares.gt(0) && !b.bankPk.equals(bankAddress)).length >\n 0;\n\n const attemptingToBorrowIsolatedAssetWithActiveDebt =\n bank.config.riskTier === RiskTier.Isolated && hasLiabilitiesAlready;\n\n const existingLiabilityBanks = activeBalances\n .filter((b) => b.liabilityShares.gt(0))\n .map((b) => effectiveBanks.get(b.bankPk.toBase58())!);\n\n const attemptingToBorrowNewAssetWithExistingIsolatedDebt = existingLiabilityBanks.some(\n (b) => b.config.riskTier === RiskTier.Isolated && !b.address.equals(bankAddress)\n );\n\n if (\n attemptingToBorrowIsolatedAssetWithActiveDebt ||\n attemptingToBorrowNewAssetWithExistingIsolatedDebt\n ) {\n // Cannot borrow due to isolated tier constraints\n return new BigNumber(0);\n }\n\n // ------------- //\n // FC-based calc //\n // ------------- //\n\n const _volatilityFactor = opts?.volatilityFactor ?? 1;\n\n const balance = getBalance(bankAddress, activeBalances);\n\n const useCache =\n opts?.emodeImpactStatus === EmodeImpactStatus.InactiveEmode ||\n opts?.emodeImpactStatus === EmodeImpactStatus.ExtendEmode;\n\n let freeCollateral = useCache\n ? computeFreeCollateral(account).times(_volatilityFactor)\n : computeFreeCollateralLegacy(activeBalances, effectiveBanks, oraclePrices).times(\n _volatilityFactor\n );\n\n const untiedCollateralForBank = BigNumber.min(\n computeAssetUsdValue(\n bank,\n priceInfo,\n balance.assetShares,\n MarginRequirementType.Initial,\n PriceBias.Lowest\n ),\n freeCollateral\n );\n\n const priceLowestBias = getPrice(priceInfo, PriceBias.Lowest, true);\n const priceHighestBias = getPrice(priceInfo, PriceBias.Highest, true);\n const assetWeight = getAssetWeight(bank, MarginRequirementType.Initial, priceInfo);\n const liabWeight = getLiabilityWeight(bank.config, MarginRequirementType.Initial);\n\n if (assetWeight.eq(0)) {\n return computeQuantityUi(balance, bank).assets.plus(\n freeCollateral.minus(untiedCollateralForBank).div(priceHighestBias.times(liabWeight))\n );\n } else {\n return untiedCollateralForBank\n .div(priceLowestBias.times(assetWeight))\n .plus(freeCollateral.minus(untiedCollateralForBank).div(priceHighestBias.times(liabWeight)));\n }\n}\n\nexport function computeMaxWithdrawForBank(\n account: MarginfiAccountType,\n banks: Map<string, BankType>,\n oraclePrices: Map<string, OraclePrice>,\n bankAddress: PublicKey,\n opts?: {\n volatilityFactor?: number;\n activePair?: ActiveEmodePair;\n }\n): BigNumber {\n // Apply emode weights to all banks with matching tags\n const effectiveBanks = opts?.activePair\n ? applyEmodeWeightsToBanks(banks, opts.activePair)\n : banks;\n\n const bank = effectiveBanks.get(bankAddress.toBase58());\n if (!bank) throw Error(`Bank ${bankAddress.toBase58()} not found`);\n const priceInfo = oraclePrices.get(bankAddress.toBase58());\n if (!priceInfo) throw Error(`Price info for ${bankAddress.toBase58()} not found`);\n\n const _volatilityFactor = opts?.volatilityFactor ?? 1;\n\n // Get weights - they'll use emode weights if bank was modified\n const initAssetWeight = getAssetWeight(bank, MarginRequirementType.Initial, priceInfo, {\n ignoreSoftLimits: false,\n });\n const maintAssetWeight = getAssetWeight(bank, MarginRequirementType.Maintenance, priceInfo, {\n ignoreSoftLimits: false,\n });\n const activeBalances = getActiveBalances(account.balances);\n const balance = getBalance(bankAddress, activeBalances);\n\n // Recalculate free collateral if emode weights were applied\n const freeCollateral = opts?.activePair\n ? computeFreeCollateralLegacy(activeBalances, effectiveBanks, oraclePrices)\n : computeFreeCollateral(account);\n\n const initCollateralForBank = computeAssetUsdValue(\n bank,\n priceInfo,\n balance.assetShares,\n MarginRequirementType.Initial,\n PriceBias.Lowest\n );\n\n const entireBalance = computeQuantityUi(balance, bank).assets;\n\n const { liabilities: liabilitiesInit } = computeHealthComponents(\n account,\n MarginRequirementType.Initial\n );\n\n // -------------------------------------------------- //\n // isolated bank (=> init weight = maint weight = 0) //\n // or collateral bank with 0-weights (does not happen //\n // in practice) //\n // -------------------------------------------------- //\n\n if (\n bank.config.riskTier === RiskTier.Isolated ||\n (initAssetWeight.isZero() && maintAssetWeight.isZero())\n ) {\n if (freeCollateral.isZero() && !liabilitiesInit.isZero()) {\n // if account is already below init requirements and has active debt, prevent any withdrawal even if those don't count as collateral\n // inefficient, but reflective of contract which does not look at action delta, but only end state atm\n return new BigNumber(0);\n } else {\n return entireBalance;\n }\n }\n\n // ----------------------------- //\n // collateral bank being retired //\n // ----------------------------- //\n\n if (initAssetWeight.isZero() && !maintAssetWeight.isZero()) {\n if (liabilitiesInit.eq(0)) {\n return entireBalance;\n } else if (freeCollateral.isZero()) {\n return new BigNumber(0); // inefficient, but reflective of contract which does not look at action delta, but only end state\n } else {\n const { liabilities: maintLiabilities, assets: maintAssets } = computeHealthComponents(\n account,\n MarginRequirementType.Maintenance\n );\n const maintUntiedCollateral = maintAssets.minus(maintLiabilities);\n\n const priceLowestBias = getPrice(priceInfo, PriceBias.Lowest, true);\n const maintWeightedPrice = priceLowestBias.times(maintAssetWeight);\n\n return maintUntiedCollateral.div(maintWeightedPrice);\n }\n }\n\n // ------------------------------------- //\n // collateral bank with positive weights //\n // ------------------------------------- //\n // bypass volatility factor if no liabilities or if all collateral is untied\n if (liabilitiesInit.isZero() || initCollateralForBank.lte(freeCollateral)) {\n return entireBalance;\n }\n\n // apply volatility factor to avoid failure due to price volatility / slippage\n const initUntiedCollateralForBank = freeCollateral.times(_volatilityFactor);\n\n const priceLowestBias = getPrice(priceInfo, PriceBias.Lowest, true);\n const initWeightedPrice = priceLowestBias.times(initAssetWeight);\n const maxWithdraw = initUntiedCollateralForBank.div(initWeightedPrice);\n\n return maxWithdraw;\n}\n","import {\n createJupiterApiClient,\n QuoteGetRequest,\n Instruction as JupiterInstruction,\n QuoteResponse,\n} from \"@jup-ag/api\";\nimport {\n AddressLookupTableAccount,\n Connection,\n PublicKey,\n TransactionInstruction,\n} from \"@solana/web3.js\";\n\nimport { ADDRESS_LOOKUP_TABLE_FOR_SWAP, JUP_SWAP_LUT_PROGRAM_AUTHORITY_INDEX } from \"~/constants\";\n\nconst REFERRAL_PROGRAM_ID = new PublicKey(\"REFER4ZgmyYx9c6He5XfaTMiGfdLwRnkV4RPp9t9iF3\");\nconst REFERRAL_ACCOUNT_PUBKEY = new PublicKey(\"Mm7HcujSK2JzPW4eX7g4oqTXbWYDuFxapNMHXe8yp1B\");\n\nconst getFeeAccount = (mint: PublicKey) => {\n const referralProgramPubkey = REFERRAL_PROGRAM_ID;\n const referralAccountPubkey = REFERRAL_ACCOUNT_PUBKEY;\n\n const [feeAccount] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"referral_ata\"), referralAccountPubkey.toBuffer(), mint.toBuffer()],\n referralProgramPubkey\n );\n return feeAccount.toBase58();\n};\n\nfunction deserializeJupiterInstruction(instruction: JupiterInstruction) {\n return new TransactionInstruction({\n programId: new PublicKey(instruction.programId),\n keys: instruction.accounts.map((key) => ({\n pubkey: new PublicKey(key.pubkey),\n isSigner: key.isSigner,\n isWritable: key.isWritable,\n })),\n data: Buffer.from(instruction.data, \"base64\"),\n });\n}\n\ntype GetJupiterSwapIxsForFlashloanParams = {\n quoteParams: QuoteGetRequest;\n authority: PublicKey;\n connection: Connection;\n destinationTokenAccount: PublicKey;\n};\n\nexport const getJupiterSwapIxsForFlashloan = async ({\n quoteParams,\n authority,\n connection,\n destinationTokenAccount,\n}: GetJupiterSwapIxsForFlashloanParams): Promise<\n {\n swapInstruction: TransactionInstruction;\n addressLookupTableAddresses: AddressLookupTableAccount[];\n quoteResponse: QuoteResponse;\n setupInstructions: TransactionInstruction[];\n }[]\n> => {\n const jupiterApiClient = createJupiterApiClient({\n basePath: \"https://lite-api.jup.ag/swap/v1\",\n });\n\n const feeMint =\n quoteParams.swapMode === \"ExactIn\" ? quoteParams.outputMint : quoteParams.inputMint;\n const feeAccount = getFeeAccount(new PublicKey(feeMint));\n const hasFeeAccount = !!(await connection.getAccountInfo(new PublicKey(feeAccount)));\n const project0JupiterLut = (await connection.getAddressLookupTable(ADDRESS_LOOKUP_TABLE_FOR_SWAP))\n ?.value;\n\n let finalQuoteParams: QuoteGetRequest = quoteParams;\n // Ideally we shouldn't be checking this, slows the entire flow down by a rpc call\n if (!hasFeeAccount) {\n // TODO: setup logging if a fee account has not been created\n console.warn(\"Warning: feeAccountInfo is undefined\");\n // removes platformFeeBps from quoteParams to avoid errors\n finalQuoteParams = {\n ...quoteParams,\n platformFeeBps: undefined,\n };\n }\n\n // fetch quotes for maxAccounts 40 and 30\n const maxAccountsArr = [40, 30];\n const swapQuotes = await Promise.all(\n maxAccountsArr.map((maxAccounts) => {\n return jupiterApiClient.quoteGet({\n ...finalQuoteParams,\n maxAccounts,\n });\n })\n );\n\n const swapInstructionResponses = await Promise.all(\n swapQuotes.map((quote) =>\n jupiterApiClient.swapInstructionsPost({\n swapRequest: {\n quoteResponse: quote,\n userPublicKey: authority.toBase58(),\n programAuthorityId: JUP_SWAP_LUT_PROGRAM_AUTHORITY_INDEX,\n feeAccount: hasFeeAccount ? feeAccount : undefined,\n wrapAndUnwrapSol: false,\n destinationTokenAccount: destinationTokenAccount.toBase58(),\n },\n })\n )\n );\n\n const lutAddresses = swapInstructionResponses.map(\n (swapInstructionResponse) => swapInstructionResponse.addressLookupTableAddresses\n );\n\n const lutAccountsRaw = await connection.getMultipleAccountsInfo(\n lutAddresses.flat().map((address) => new PublicKey(address))\n );\n\n let currentIndex = 0;\n const jupiterSwapIxs: {\n swapInstruction: TransactionInstruction;\n setupInstructions: TransactionInstruction[];\n addressLookupTableAddresses: AddressLookupTableAccount[];\n quoteResponse: QuoteResponse;\n }[] = [];\n\n for (let i = 0; i < swapInstructionResponses.length; i++) {\n const response = swapInstructionResponses[i];\n const quote = swapQuotes[i];\n const isLast = i === swapInstructionResponses.length - 1;\n\n if (!response || !quote) continue;\n\n const address = response.addressLookupTableAddresses;\n const addressesLength = address.length;\n const addressesStartIndex = currentIndex;\n const addressesEndIndex = addressesStartIndex + addressesLength;\n currentIndex = addressesEndIndex;\n\n const lutAccounts = lutAccountsRaw.slice(addressesStartIndex, addressesEndIndex);\n\n const addressLookupTableAccounts = lutAccounts\n .map((accountInfo, index) => {\n const addressLookupTableAddress = address[index];\n\n if (!accountInfo || !addressLookupTableAddress) {\n return null;\n }\n\n return new AddressLookupTableAccount({\n key: new PublicKey(addressLookupTableAddress),\n state: AddressLookupTableAccount.deserialize(accountInfo.data),\n });\n })\n .filter((account) => account !== null)\n .concat(project0JupiterLut ? [project0JupiterLut] : []);\n\n const instruction = deserializeJupiterInstruction(response.swapInstruction);\n const setupInstructions = response.setupInstructions.map(deserializeJupiterInstruction);\n\n jupiterSwapIxs.push({\n swapInstruction: instruction,\n setupInstructions,\n addressLookupTableAddresses: addressLookupTableAccounts,\n quoteResponse: quote,\n });\n }\n\n return jupiterSwapIxs;\n};\n","function floor(value: number, decimals: number): number {\n return Math.floor(value * 10 ** decimals) / 10 ** decimals;\n}\n\nfunction ceil(value: number, decimals: number): number {\n return Math.ceil(value * 10 ** decimals) / 10 ** decimals;\n}\n\nexport function computeClosePositionTokenAmount(\n position: { amount: number; isLending: boolean },\n mintDecimals: number\n): number {\n const closePositionTokenAmount = position.isLending\n ? floor(position.amount, mintDecimals)\n : ceil(position.amount, mintDecimals);\n return closePositionTokenAmount;\n}\n\nexport function isWholePosition(\n position: { amount: number; isLending: boolean },\n amount: number,\n mintDecimals: number\n): boolean {\n const closePositionTokenAmount = computeClosePositionTokenAmount(position, mintDecimals);\n return amount >= closePositionTokenAmount;\n}\n","import { PublicKey, TransactionInstruction, Connection } from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\n\nimport { MarginfiProgram } from \"~/types\";\nimport { BankType, OracleSetup } from \"~/services/bank\";\nimport { MarginfiAccountType } from \"~/services/account/types\";\nimport {\n computeAssetHealthComponent,\n computeLiabilityHealthComponent,\n} from \"~/services/account/utils\";\nimport {\n computeProjectedActiveBalancesNoCpi,\n MarginRequirementType,\n} from \"~/services/account\";\n\nimport { OraclePrice } from \"../types\";\nimport {\n checkMultipleOraclesCrankability,\n partitionBanksByCrankability,\n} from \"./crankability.utils\";\n\n/**\n * A combination of banks that need to be cranked\n */\nexport interface CrankCombination {\n banks: PublicKey[];\n oracleKeys: Array<{ key: PublicKey; price: OraclePrice }>; // Deduplicated oracle keys with prices that need to be cranked\n healthAfter: BigNumber;\n}\n\n/**\n * Parameters for smart crank calculation\n */\nexport interface SmartCrankParams {\n marginfiAccount: MarginfiAccountType;\n bankMap: Map<string, BankType>;\n oraclePrices: Map<string, OraclePrice>;\n instructions: TransactionInstruction[];\n program: MarginfiProgram;\n connection?: Connection;\n crossbarUrl?: string;\n}\n\n/**\n * Result of smart crank analysis\n */\nexport interface SmartCrankResult {\n requiredOracles: Array<{ key: PublicKey; price: OraclePrice }>;\n /** Banks with liabilities that cannot be cranked - BLOCKS ALL TRANSACTIONS */\n uncrankableLiabilities: Array<{ bank: BankType; reason: string }>;\n /** Banks with assets that cannot be cranked */\n uncrankableAssets: Array<{ bank: BankType; reason: string }>;\n isCrankable: boolean;\n}\n\n/**\n * Determines which oracles need to be cranked for a transaction to succeed.\n *\n * Algorithm:\n * 1. Parse instructions to determine projected active banks after transaction\n * 2. Check crankability of all relevant oracles\n * 3. If any liability oracle is uncrankable, throw error (transaction blocked)\n * 4. Identify required cranks (liabilities + interaction banks)\n * 5. Calculate health with only required banks cranked\n * 6. If healthy, return just required banks\n * 7. If not healthy, find minimal asset combinations to achieve health\n *\n * @param params - Smart crank parameters\n * @returns Smart crank result with ordered combinations\n */\nexport async function computeSmartCrank({\n marginfiAccount,\n bankMap,\n oraclePrices,\n instructions,\n program,\n connection,\n crossbarUrl,\n}: SmartCrankParams): Promise<SmartCrankResult> {\n // Step 0: Determine projected active balances after transaction\n const { projectedBalances, impactedAssetsBanks, impactedLiabilityBanks } =\n computeProjectedActiveBalancesNoCpi(\n marginfiAccount.balances,\n instructions,\n program,\n bankMap\n );\n\n const liabilityBalances = projectedBalances.filter((b) =>\n b.liabilityShares.gt(0)\n );\n const assetBalances = projectedBalances.filter((b) => b.assetShares.gt(0));\n\n // No liabilities means no risk, no cranking needed\n if (liabilityBalances.length === 0) {\n return {\n requiredOracles: [],\n uncrankableLiabilities: [],\n uncrankableAssets: [],\n isCrankable: true,\n };\n }\n\n // Helper to check if bank is Switchboard\n const isSwitchboard = (bank: BankType) =>\n bank.config.oracleSetup === OracleSetup.SwitchboardPull ||\n bank.config.oracleSetup === OracleSetup.KaminoSwitchboardPull;\n\n // Get banks from balances\n const getBanks = (balances: typeof projectedBalances) =>\n balances\n .map((b) => bankMap.get(b.bankPk.toBase58()))\n .filter((bank): bank is BankType => bank !== undefined);\n\n const assetBanks = getBanks(assetBalances);\n const liabilityBanks = getBanks(liabilityBalances);\n const allActiveBanks = [...liabilityBanks, ...assetBanks];\n\n // Only Switchboard Pull oracles need cranking\n const allActiveSwbBanks = allActiveBanks.filter(isSwitchboard);\n\n if (allActiveSwbBanks.length === 0) {\n return {\n requiredOracles: [],\n uncrankableLiabilities: [],\n uncrankableAssets: [],\n isCrankable: true,\n };\n }\n\n // Check crankability for all Switchboard banks\n const crankabilityResults = await checkMultipleOraclesCrankability(\n allActiveSwbBanks,\n oraclePrices,\n connection,\n crossbarUrl\n );\n\n const { crankable, uncrankable } = partitionBanksByCrankability(\n allActiveSwbBanks,\n crankabilityResults\n );\n\n // Separate uncrankable banks into liabilities and assets\n const uncrankableLiabilities = uncrankable.filter((uc) =>\n liabilityBanks.some((lb) => lb.address.equals(uc.bank.address))\n );\n const uncrankableAssets = uncrankable.filter((uc) =>\n assetBanks.some((ab) => ab.address.equals(uc.bank.address))\n );\n\n // Get all available assets (both Switchboard and non-Switchboard)\n const allAvailableAssets = assetBanks.filter(\n (ab) =>\n crankable.some((c) => c.address.equals(ab.address)) || !isSwitchboard(ab)\n );\n\n // If any liability oracle is uncrankable, transaction is blocked\n if (uncrankableLiabilities.length > 0) {\n console.log(\n \"\\n✗ BLOCKED: Uncrankable liabilities:\",\n uncrankableLiabilities.map((l) => l.bank.tokenSymbol)\n );\n return {\n requiredOracles: [],\n uncrankableLiabilities,\n uncrankableAssets,\n isCrankable: false,\n };\n }\n // Helper to collect unique oracle keys with prices from banks\n const getOracleKeys = (\n banks: PublicKey[]\n ): Array<{ key: PublicKey; price: OraclePrice }> => {\n const oracleMap = new Map<string, OraclePrice>();\n banks.forEach((addr) => {\n const bank = bankMap.get(addr.toBase58());\n if (bank) {\n const oracleKeyStr = bank.oracleKey.toBase58();\n const price = oraclePrices.get(bank.address.toBase58());\n if (price && !oracleMap.has(oracleKeyStr)) {\n oracleMap.set(oracleKeyStr, price);\n }\n }\n });\n return Array.from(oracleMap.entries()).map(([keyStr, price]) => ({\n key: new PublicKey(keyStr),\n price,\n }));\n };\n\n // Get total liability health\n const totalLiabilitiesInitHealth = computeLiabilityHealthComponent(\n projectedBalances,\n bankMap,\n oraclePrices,\n liabilityBanks.map((b) => b.address),\n MarginRequirementType.Initial\n );\n\n const liabilityBankAddresses = liabilityBanks\n .filter(isSwitchboard)\n .map((b) => b.address);\n const nonSWBAssets = assetBanks.filter((bank) => !isSwitchboard(bank));\n const swbAssets = assetBanks.filter(isSwitchboard);\n\n // If non-Switchboard assets (Pyth) cover liabilities, only crank liabilities\n if (nonSWBAssets.length > 0) {\n const nonSWBAssetsHealth = computeAssetHealthComponent(\n projectedBalances,\n bankMap,\n oraclePrices,\n nonSWBAssets.map((b) => b.address),\n MarginRequirementType.Initial\n );\n\n const healthDiff = nonSWBAssetsHealth.minus(totalLiabilitiesInitHealth);\n\n if (healthDiff.gt(0)) {\n console.log(\n \"\\n✓ Pyth assets cover liabilities, cranking only liability SWB banks\"\n );\n return {\n requiredOracles: getOracleKeys(liabilityBankAddresses),\n uncrankableLiabilities: [],\n uncrankableAssets,\n isCrankable: true,\n };\n }\n }\n\n // Filter to only crankable Switchboard assets\n const crankableSWBAssets = swbAssets.filter((bank) =>\n crankable.some((cb) => cb.address.equals(bank.address))\n );\n\n let combinations: CrankCombination[] = [];\n\n // Generate combinations of a specific size\n const getCombinations = <T>(arr: T[], size: number): T[][] => {\n if (size === 0) return [[]];\n if (size > arr.length) return [];\n\n const result: T[][] = [];\n const combine = (start: number, current: T[]) => {\n if (current.length === size) {\n result.push([...current]);\n return;\n }\n for (let i = start; i < arr.length; i++) {\n combine(i + 1, [...current, arr[i]!]);\n }\n };\n combine(0, []);\n return result;\n };\n\n // Calculate health with ALL available assets (both Switchboard and non-Switchboard)\n const allAvailableAssetAddresses = allAvailableAssets.map(\n (bank) => bank.address\n );\n const allAssetsHealth = computeAssetHealthComponent(\n projectedBalances,\n bankMap,\n oraclePrices,\n allAvailableAssetAddresses,\n MarginRequirementType.Initial\n );\n const healthWithAllAssets = allAssetsHealth.minus(totalLiabilitiesInitHealth);\n\n // If assets don't cover liabilities even with all available cranked\n if (!healthWithAllAssets.gt(0)) {\n console.log(\"✗ Assets don't cover liabilities even with all cranked\");\n // If there are uncrankable assets, they're blocking a potentially healthy transaction\n if (uncrankableAssets.length > 0) {\n return {\n requiredOracles: [],\n uncrankableLiabilities: [],\n uncrankableAssets,\n isCrankable: false,\n };\n }\n\n // If no uncrankable assets, this is a bug - fallback to cranking everything\n return {\n requiredOracles: getOracleKeys(\n allActiveSwbBanks.map((bank) => bank.address)\n ),\n uncrankableLiabilities: [],\n uncrankableAssets: [],\n isCrankable: true,\n };\n }\n\n // Add full crank combination as fallback\n combinations.push({\n banks: crankable.map((cb) => cb.address),\n oracleKeys: getOracleKeys(crankable.map((cb) => cb.address)),\n healthAfter: healthWithAllAssets,\n });\n\n // Find minimal asset combinations needed for positive health\n const nonSWBAssetAddresses = nonSWBAssets.map((b) => b.address);\n const liabilityOracleKeySet = new Set(\n liabilityBanks.map((lb) => lb.oracleKey.toBase58())\n );\n\n for (let comboSize = 1; comboSize < crankableSWBAssets.length; comboSize++) {\n const assetCombos = getCombinations(crankableSWBAssets, comboSize);\n\n for (const assetCombo of assetCombos) {\n const comboAddresses = assetCombo.map((bank) => bank.address);\n const comboHealth = computeAssetHealthComponent(\n projectedBalances,\n bankMap,\n oraclePrices,\n [...nonSWBAssetAddresses, ...comboAddresses],\n MarginRequirementType.Initial\n );\n\n const health = comboHealth.minus(totalLiabilitiesInitHealth);\n if (!health.gt(0)) continue;\n\n // Collect banks that need new oracle cranks (not already in liability oracles)\n const additionalBanks = comboAddresses.filter((addr) => {\n const bank = bankMap.get(addr.toBase58());\n return bank && !liabilityOracleKeySet.has(bank.oracleKey.toBase58());\n });\n\n const allBanks = [...liabilityBankAddresses, ...additionalBanks];\n const uniqueBanks = Array.from(\n new Set(allBanks.map((b) => b.toBase58()))\n ).map((addr) => new PublicKey(addr));\n\n combinations.push({\n banks: uniqueBanks,\n oracleKeys: getOracleKeys(uniqueBanks),\n healthAfter: health,\n });\n }\n }\n\n // Sort by: (1) fewest oracle cranks, (2) best health\n combinations.sort((a, b) =>\n a.oracleKeys.length !== b.oracleKeys.length\n ? a.oracleKeys.length - b.oracleKeys.length\n : b.healthAfter.minus(a.healthAfter).toNumber()\n );\n\n const bestCombination = combinations[0];\n if (!bestCombination) {\n // No valid combination found - this shouldn't happen as we always add the full crank combo\n // Fallback to cranking all available oracles\n console.error(\n \"BUG: No valid crank combination found. Falling back to crank all available oracles.\"\n );\n return {\n requiredOracles: getOracleKeys(crankable.map((bank) => bank.address)),\n uncrankableLiabilities: [],\n uncrankableAssets: [],\n isCrankable: true,\n };\n }\n\n return {\n requiredOracles: bestCombination.oracleKeys,\n uncrankableLiabilities: [],\n uncrankableAssets,\n isCrankable: true,\n };\n}\n","import {\n AddressLookupTableAccount,\n Connection,\n PublicKey,\n TransactionInstruction,\n} from \"@solana/web3.js\";\nimport { BN } from \"bn.js\";\nimport { AnchorProvider } from \"@coral-xyz/anchor\";\nimport { AnchorUtils, Gateway, PullFeed, PullFeedAccountData } from \"@switchboard-xyz/on-demand\";\nimport { CrossbarClient } from \"@switchboard-xyz/common\";\n\nimport { MarginfiAccountType } from \"~/services/account\";\nimport { BankType, OracleSetup } from \"~/services/bank\";\nimport { MarginfiProgram } from \"~/types\";\nimport { TransactionBuildingError } from \"~/errors\";\n\nimport { OraclePrice } from \"../types\";\nimport { computeSmartCrank } from \"../utils\";\nimport { ZERO_ORACLE_KEY } from \"~/constants\";\n\ntype MakeSmartCrankSwbFeedIxParams = {\n marginfiAccount: MarginfiAccountType;\n bankMap: Map<string, BankType>;\n oraclePrices: Map<string, OraclePrice>;\n instructions: TransactionInstruction[];\n program: MarginfiProgram;\n connection: Connection;\n crossbarUrl?: string;\n};\n\nexport async function makeSmartCrankSwbFeedIx(params: MakeSmartCrankSwbFeedIxParams): Promise<{\n instructions: TransactionInstruction[];\n luts: AddressLookupTableAccount[];\n}> {\n const crankResult = await computeSmartCrank(params);\n\n if (crankResult.uncrankableLiabilities.length > 0) {\n console.log(\n \"Uncrankable liability details:\",\n crankResult.uncrankableLiabilities.map((l) => ({\n symbol: l.bank.tokenSymbol,\n reason: l.reason,\n }))\n );\n }\n if (crankResult.uncrankableAssets.length > 0) {\n console.log(\n \"Uncrankable asset details:\",\n crankResult.uncrankableAssets.map((a) => ({\n symbol: a.bank.tokenSymbol,\n reason: a.reason,\n }))\n );\n }\n\n if (!crankResult.isCrankable) {\n throw TransactionBuildingError.oracleCrankFailed(\n crankResult.uncrankableLiabilities.map((liability) => ({\n bankAddress: liability.bank.address.toBase58(),\n mint: liability.bank.mint.toBase58(),\n symbol: liability.bank.tokenSymbol,\n reason: liability.reason,\n })),\n crankResult.uncrankableAssets.map((asset) => ({\n bankAddress: asset.bank.address.toBase58(),\n mint: asset.bank.mint.toBase58(),\n symbol: asset.bank.tokenSymbol,\n reason: asset.reason,\n }))\n );\n }\n\n const oraclesToCrank = crankResult.requiredOracles;\n\n const { instructions, luts } = await makeUpdateSwbFeedIx({\n swbPullOracles: oraclesToCrank,\n feePayer: params.marginfiAccount.authority,\n connection: params.connection,\n });\n\n return { instructions, luts };\n}\n\nexport async function makeCrankSwbFeedIx(\n marginfiAccount: MarginfiAccountType,\n bankMap: Map<string, BankType>,\n newBanksPk: PublicKey[],\n provider: AnchorProvider\n): Promise<{\n instructions: TransactionInstruction[];\n luts: AddressLookupTableAccount[];\n}> {\n // filter active and newly opening balances\n const activeBanksPk = marginfiAccount.balances\n .filter((balance) => balance.active)\n .map((balance) => balance.bankPk);\n\n const allActiveBanks = [\n ...new Set([\n ...activeBanksPk.map((pk) => pk.toBase58()),\n ...newBanksPk.map((pk) => pk.toBase58()),\n ]).values(),\n ].map((pk) => bankMap.get(pk)!);\n\n const swbPullBanks = allActiveBanks.filter(\n (bank) =>\n bank.config.oracleSetup === OracleSetup.SwitchboardPull ||\n bank.config.oracleSetup === OracleSetup.KaminoSwitchboardPull\n );\n\n if (swbPullBanks.length > 0) {\n const staleOracles = swbPullBanks\n .filter((bank) => {\n return true;\n })\n .filter((bank) => !bank.oracleKey.equals(new PublicKey(ZERO_ORACLE_KEY)))\n .map((bank) => bank.oracleKey);\n\n if (staleOracles.length > 0) {\n const { instructions, luts } = await makeUpdateSwbFeedIx({\n swbPullOracles: staleOracles.map((oracle) => ({ key: oracle })),\n feePayer: provider.publicKey,\n connection: provider.connection,\n });\n return { instructions, luts };\n }\n\n return { instructions: [], luts: [] };\n } else {\n return { instructions: [], luts: [] };\n }\n}\n\nexport async function makeUpdateSwbFeedIx(props: {\n swbPullOracles: {\n key: PublicKey;\n price?: OraclePrice;\n }[];\n feePayer: PublicKey;\n connection: Connection;\n}): Promise<{\n instructions: TransactionInstruction[];\n luts: AddressLookupTableAccount[];\n}> {\n // Deduplicate oracles by address\n const seen = new Set<string>();\n const uniqueOracles = props.swbPullOracles.filter((oracle) => {\n const key = oracle.key.toBase58();\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n });\n\n // latest swb intergation\n const swbProgram = await AnchorUtils.loadProgramFromConnection(props.connection);\n\n const pullFeedInstances: PullFeed[] = uniqueOracles.map((oracle) => {\n const pullFeed = new PullFeed(swbProgram, oracle.key);\n if (oracle.price?.switchboardData) {\n const swbData = oracle.price?.switchboardData;\n\n pullFeed.data = {\n queue: new PublicKey(swbData.queue),\n feedHash: new Uint8Array(Buffer.from(swbData.feedHash, \"hex\")),\n maxVariance: new BN(swbData.maxVariance),\n minResponses: swbData.minResponses,\n } as PullFeedAccountData;\n }\n return pullFeed;\n });\n\n // No crank needed\n if (pullFeedInstances.length === 0) {\n return { instructions: [], luts: [] };\n }\n\n const crossbarClient = new CrossbarClient(\n process.env.NEXT_PUBLIC_SWITCHBOARD_CROSSSBAR_API || \"https://integrator-crossbar.prod.mrgn.app\"\n );\n\n const gatewayUrls = await crossbarClient.fetchGateways(\"mainnet\");\n if (!gatewayUrls || gatewayUrls.length === 0) {\n throw new Error(`No gateways available for mainnet`);\n }\n\n const gatewayUrl = gatewayUrls[0];\n if (!gatewayUrl) {\n throw new Error(`Invalid gateway URL received formainnet`);\n }\n\n const gateway = new Gateway(swbProgram, gatewayUrl);\n\n const [pullIx, luts] = await PullFeed.fetchUpdateManyIx(swbProgram, {\n feeds: pullFeedInstances,\n gateway: gateway.gatewayUrl,\n numSignatures: 1,\n payer: props.feePayer,\n crossbarClient,\n });\n\n return { instructions: pullIx, luts };\n}\n","import { PublicKey, TransactionInstruction } from \"@solana/web3.js\";\n\nimport { MarginfiAccountType } from \"~/services/account\";\nimport { BankType } from \"~/services/bank\";\nimport { InstructionsWrapper } from \"~/services/transaction\";\nimport { BankIntegrationMetadataMap } from \"~/types\";\nimport { makeRefreshObligationIx, makeRefreshReservesBatchIx } from \"~/vendor/klend\";\n\n/**\n * Creates instructions to refresh Kamino lending protocol reserves and obligations.\n *\n * This function generates the necessary Solana instructions to update Kamino (Klend) reserve\n * data and refresh obligations for all active Kamino banks in the marginfi account, plus any\n * new banks being added. This ensures price and state data is current before executing transactions.\n *\n * @param marginfiAccount - The marginfi account containing active bank balances\n * @param bankMap - Map of bank addresses (base58) to bank instances\n * @param newBanksPk - Public keys of new banks being added to the account\n * @param bankMetadataMap - Map containing Bank-specific metadata (reserve states, lending markets)\n * @returns InstructionsWrapper containing refresh reserve and obligation instructions\n */\nexport function makeRefreshKaminoBanksIxs(\n marginfiAccount: MarginfiAccountType,\n bankMap: Map<string, BankType>,\n newBanksPk: PublicKey[],\n bankMetadataMap: BankIntegrationMetadataMap\n): InstructionsWrapper {\n const ixs: TransactionInstruction[] = [];\n\n const activeBanksPk = marginfiAccount.balances\n .filter((balance) => balance.active)\n .map((balance) => balance.bankPk);\n\n const allActiveBanks = [\n ...new Set([\n ...activeBanksPk.map((pk) => pk.toBase58()),\n ...newBanksPk.map((pk) => pk.toBase58()),\n ]).values(),\n ].map((pk) => bankMap.get(pk)!);\n\n // filter kamino banks\n const kaminoBanks = allActiveBanks.filter((bank) => bank.config.assetTag === 3);\n\n if (kaminoBanks.length > 0) {\n const newBanksPkBase = newBanksPk.map((pk) => pk.toBase58());\n\n const banksToRefreshObligations = kaminoBanks.filter((bank) =>\n newBanksPkBase.includes(bank.address.toBase58())\n );\n\n const refreshReserveData = kaminoBanks\n .map((kaminoBank) => {\n const bankMetadata = bankMetadataMap?.[kaminoBank.address.toBase58()];\n if (!bankMetadata?.kaminoStates) return;\n\n const kaminoReserve = kaminoBank.kaminoReserve;\n const lendingMarket = bankMetadata.kaminoStates.reserveState.lendingMarket;\n\n return {\n reserve: kaminoReserve,\n lendingMarket,\n };\n })\n .filter((bank): bank is NonNullable<typeof bank> => !!bank);\n\n //refresh obligations\n const reserveIx = makeRefreshReservesBatchIx(refreshReserveData);\n\n ixs.push(reserveIx);\n\n for (const kaminoBank of banksToRefreshObligations) {\n const bankMetadata = bankMetadataMap?.[kaminoBank.address.toBase58()];\n if (!bankMetadata?.kaminoStates) continue;\n\n const kaminoReserve = kaminoBank.kaminoReserve;\n const lendingMarket = bankMetadata.kaminoStates.reserveState.lendingMarket;\n\n const obligationIx = makeRefreshObligationIx(\n lendingMarket,\n kaminoBank.kaminoObligation,\n kaminoReserve\n );\n ixs.push(obligationIx);\n }\n }\n\n return {\n instructions: ixs,\n keys: [],\n };\n}\n","/**\n * Temporary Module for Functions Pending Refactoring\n *\n * This file serves as a temporary staging area for utility functions that need proper\n * categorization and relocation to their appropriate service modules. All functions\n * placed here should include:\n *\n * IMPORTANT: Do not add new features to functions in this file. Instead, refactor\n * them to their proper location first, then implement new functionality.\n */\n\nimport { AccountInfo, Connection, PublicKey } from \"@solana/web3.js\";\n\nimport {\n BankIntegrationMetadata,\n BankIntegrationMetadataDto,\n BankIntegrationMetadataMap,\n BankIntegrationMetadataMapDto,\n} from \"~/types\";\n\nimport {\n dtoToFarmRaw,\n dtoToObligationRaw,\n dtoToReserveRaw,\n farmRawToDto,\n obligationRawToDto,\n reserveRawToDto,\n} from \"../vendor\";\nimport { TOKEN_2022_PROGRAM_ID, TOKEN_PROGRAM_ID } from \"~/vendor/spl\";\n\nexport function bankMetadataMapToDto(\n bankMetadataMap: BankIntegrationMetadataMap\n): BankIntegrationMetadataMapDto {\n return Object.fromEntries(\n Object.entries(bankMetadataMap).map(([bankPk, bankMetadata]) => [\n bankPk,\n bankMetadataToDto(bankMetadata),\n ])\n );\n}\n\nexport function dtoToBankMetadataMap(\n bankMetadataDto: BankIntegrationMetadataMapDto\n): BankIntegrationMetadataMap {\n return Object.fromEntries(\n Object.entries(bankMetadataDto).map(([bankPk, bankMetadataDto]) => [\n bankPk,\n dtoToBankMetadata(bankMetadataDto),\n ])\n );\n}\n\nexport function dtoToBankMetadata(\n bankMetadataDto: BankIntegrationMetadataDto\n): BankIntegrationMetadata {\n return {\n kaminoStates: bankMetadataDto.kaminoStates\n ? {\n reserveState: dtoToReserveRaw(bankMetadataDto.kaminoStates.reserveState),\n obligationState: dtoToObligationRaw(bankMetadataDto.kaminoStates.obligationState),\n farmState: bankMetadataDto.kaminoStates.farmState\n ? dtoToFarmRaw(bankMetadataDto.kaminoStates.farmState)\n : undefined,\n }\n : undefined,\n };\n}\n\nexport function bankMetadataToDto(\n bankMetadata: BankIntegrationMetadata\n): BankIntegrationMetadataDto {\n return {\n kaminoStates: bankMetadata.kaminoStates\n ? {\n reserveState: reserveRawToDto(bankMetadata.kaminoStates.reserveState),\n obligationState: obligationRawToDto(bankMetadata.kaminoStates.obligationState),\n farmState: bankMetadata.kaminoStates.farmState\n ? farmRawToDto(bankMetadata.kaminoStates.farmState)\n : undefined,\n }\n : undefined,\n };\n}\n\nexport async function fetchProgramForMints(connection: Connection, mintAddress: PublicKey[]) {\n const chunkSize = 100;\n const mintData: {\n mint: PublicKey;\n program: PublicKey;\n }[] = [];\n\n for (let i = 0; i < mintAddress.length; i += chunkSize) {\n const chunk = mintAddress.slice(i, i + chunkSize);\n const infos = await connection.getMultipleAccountsInfo(chunk);\n\n infos.forEach((info, idx) => {\n const mint = chunk[idx];\n if (info && mint) {\n const program = info.owner;\n if (program.equals(TOKEN_PROGRAM_ID) || program.equals(TOKEN_2022_PROGRAM_ID)) {\n mintData.push({ mint, program });\n }\n }\n });\n }\n\n return mintData;\n}\n\n/* BATCH ACCOUNT FECTHING LOGIC */\n\ninterface Result {\n jsonrpc: string;\n result: {\n context: { slot: number };\n value: Array<AccountInfo<string[]> | null>;\n };\n}\n\nexport async function chunkedGetRawMultipleAccountInfos(\n connection: Connection,\n pks: string[],\n batchChunkSize: number = 1000,\n maxAccountsChunkSize: number = 100\n): Promise<[number, Map<string, AccountInfo<Buffer>>]> {\n const accountInfoMap = new Map<string, AccountInfo<Buffer>>();\n let contextSlot = 0;\n\n const batches = chunkArray(pks, batchChunkSize);\n\n for (let i = 0; i < batches.length; i++) {\n const batch = batches[i];\n\n const batchRequest = chunkArray(batch, maxAccountsChunkSize).map((pubkeys) => ({\n methodName: \"getMultipleAccounts\",\n args: connection._buildArgs([pubkeys], \"confirmed\", \"base64\"),\n }));\n\n let accountInfos: Array<AccountInfo<string[]> | null> = [];\n let retries = 0;\n const maxRetries = 3;\n\n while (retries < maxRetries && accountInfos.length === 0) {\n try {\n accountInfos = await connection\n // @ts-ignore\n ._rpcBatchRequest(batchRequest)\n .then((batchResults: Result[]) => {\n contextSlot = Math.max(...batchResults.map((res) => res.result.context.slot));\n\n const accounts = batchResults.reduce(\n (acc, res) => {\n acc.push(...res.result.value);\n return acc;\n },\n [] as Result[\"result\"][\"value\"]\n );\n\n return accounts;\n });\n } catch (error) {\n retries++;\n }\n }\n\n if (accountInfos.length === 0) {\n throw new Error(`Failed to fetch account infos after ${maxRetries} retries`);\n }\n\n accountInfos.forEach((item, index) => {\n const publicKey = batch[index];\n if (item) {\n accountInfoMap.set(publicKey, {\n ...item,\n owner: new PublicKey(item.owner),\n data: Buffer.from(item.data[0], \"base64\"),\n });\n }\n });\n }\n\n return [contextSlot, accountInfoMap];\n}\n\nexport async function chunkedGetRawMultipleAccountInfoOrderedWithNulls(\n connection: Connection,\n pks: string[],\n batchChunkSize: number = 1000,\n maxAccountsChunkSize: number = 100\n): Promise<Array<AccountInfo<Buffer> | null>> {\n const allAccountInfos: Array<AccountInfo<Buffer> | null> = [];\n\n const batches = chunkArray(pks, batchChunkSize);\n\n for (let i = 0; i < batches.length; i++) {\n const batch = batches[i];\n\n const batchRequest = chunkArray(batch, maxAccountsChunkSize).map((pubkeys) => ({\n methodName: \"getMultipleAccounts\",\n args: connection._buildArgs([pubkeys], \"confirmed\", \"base64\"),\n }));\n\n let accountInfos: Array<AccountInfo<string[]> | null> = [];\n let retries = 0;\n const maxRetries = 3;\n\n while (retries < maxRetries && accountInfos.length === 0) {\n try {\n accountInfos = await connection\n // @ts-ignore\n ._rpcBatchRequest(batchRequest)\n .then((batchResults: Result[]) => {\n const accounts = batchResults.reduce(\n (acc, res) => {\n acc.push(...res.result.value);\n return acc;\n },\n [] as Result[\"result\"][\"value\"]\n );\n\n return accounts;\n });\n } catch (error) {\n retries++;\n }\n }\n\n if (accountInfos.length === 0) {\n throw new Error(`Failed to fetch account infos after ${maxRetries} retries`);\n }\n\n accountInfos.forEach((item) => {\n if (item) {\n allAccountInfos.push({\n ...item,\n owner: new PublicKey(item.owner),\n data: Buffer.from(item.data[0], \"base64\"),\n });\n } else {\n allAccountInfos.push(null);\n }\n });\n }\n\n return allAccountInfos;\n}\n\nexport async function chunkedGetRawMultipleAccountInfoOrdered(\n connection: Connection,\n pks: string[],\n batchChunkSize: number = 1000,\n maxAccountsChunkSize: number = 100\n): Promise<Array<AccountInfo<Buffer>>> {\n const allAccountInfos: Array<AccountInfo<Buffer>> = [];\n\n const batches = chunkArray(pks, batchChunkSize);\n\n for (let i = 0; i < batches.length; i++) {\n const batch = batches[i];\n\n const batchRequest = chunkArray(batch, maxAccountsChunkSize).map((pubkeys) => ({\n methodName: \"getMultipleAccounts\",\n args: connection._buildArgs([pubkeys], \"confirmed\", \"base64\"),\n }));\n\n let accountInfos: Array<AccountInfo<string[]> | null> = [];\n let retries = 0;\n const maxRetries = 3;\n\n while (retries < maxRetries && accountInfos.length === 0) {\n try {\n accountInfos = await connection\n // @ts-ignore\n ._rpcBatchRequest(batchRequest)\n .then((batchResults: Result[]) => {\n const accounts = batchResults.reduce(\n (acc, res) => {\n acc.push(...res.result.value);\n return acc;\n },\n [] as Result[\"result\"][\"value\"]\n );\n\n return accounts;\n });\n } catch (error) {\n retries++;\n }\n }\n\n if (accountInfos.length === 0) {\n throw new Error(`Failed to fetch account infos after ${maxRetries} retries`);\n }\n\n accountInfos.forEach((item) => {\n if (item) {\n allAccountInfos.push({\n ...item,\n owner: new PublicKey(item.owner),\n data: Buffer.from(item.data[0], \"base64\"),\n });\n }\n });\n }\n\n return allAccountInfos;\n}\n\nfunction chunkArray<T>(array: T[], chunkSize: number): T[][] {\n const chunks: T[][] = [];\n for (let i = 0; i < array.length; i += chunkSize) {\n chunks.push(array.slice(i, i + chunkSize));\n }\n return chunks;\n}\n","import { Connection } from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\n\nimport { BankType } from \"~/services/bank\";\nimport { chunkedGetRawMultipleAccountInfoOrdered } from \"~/services/misc\";\n\nimport { OraclePrice, OraclePriceDto } from \"../types\";\nimport {\n categorizePythBanks,\n extractPythOracleKeys,\n mapPythBanksToOraclePrices,\n parseRpcPythPriceData,\n} from \"../utils\";\n\ntype ValidatorVoteAccountByBank = {\n [address: string]: string;\n};\n\ntype FetchPythOracleOnChainOpts = {\n mode: \"on-chain\";\n connection: Connection;\n validatorVoteAccountByBank?: ValidatorVoteAccountByBank;\n};\n\ntype FetchPythOracleApiOpts = {\n mode: \"api\";\n pythOnchainData: {\n endpoint: string;\n queryKey?: string;\n };\n stakedCollatData: {\n endpoint: string;\n queryKey?: string;\n };\n validatorVoteAccountByBank?: ValidatorVoteAccountByBank;\n};\n\nexport type PythOracleServiceOpts = FetchPythOracleOnChainOpts | FetchPythOracleApiOpts;\n\n/**\n * Fetches comprehensive Pyth oracle data including push oracles and staked collateral data\n * @param banks - Array of bank objects\n * @param opts - Optional configuration including API endpoint usage and connection\n * @returns Promise resolving to map of bank addresses to their oracle prices\n */\nexport const fetchPythOracleData = async (\n banks: BankType[],\n opts: PythOracleServiceOpts\n): Promise<{\n bankOraclePriceMap: Map<string, OraclePrice>;\n}> => {\n // Step 1: Categorize banks by oracle type\n const { pythPushBanks, pythStakedCollateralBanks, pythPushKaminosBanks } =\n categorizePythBanks(banks);\n\n if (!pythPushBanks.length && !pythStakedCollateralBanks.length && !pythPushKaminosBanks.length) {\n // Return empty structures when there are no banks to process\n return {\n bankOraclePriceMap: new Map<string, OraclePrice>(),\n };\n }\n\n // Step 2: Prepare vote account mint tuples for staked collateral\n const voteAccMintTuples: [string, string][] = pythStakedCollateralBanks.map((bank) => [\n opts.validatorVoteAccountByBank?.[bank.address.toBase58()] ?? \"\",\n bank.mint.toBase58(),\n ]);\n\n // Step 3: Fetch Pyth price coefficients\n const priceCoeffByBank: Record<string, number> = {};\n\n // Native stake not supported\n // if (opts?.useApiEndpoint || !opts?.connection) {\n // const { priceCoeffByBank: voteAccCoeffs } =\n // await fetchPythStakedCollateralDataViaAPI(voteAccMintTuples);\n\n // priceCoeffByBank = convertVoteAccCoeffsToBankCoeffs(\n // pythStakedCollateralBanks,\n // validatorVoteAccountByBank ?? {},\n // voteAccCoeffs,\n // );\n // } else {\n // priceCoeffByBank = {};\n // }\n\n // Step 4: Extract oracle keys for price fetching\n const combinedPythBanks = [...pythPushBanks, ...pythPushKaminosBanks];\n const pythOracleKeys = extractPythOracleKeys(combinedPythBanks);\n\n // Filter for unique oracle keys to avoid duplicate fetches\n const uniquePythOracleKeys = Array.from(new Set(pythOracleKeys));\n\n // Step 5: Fetch oracle prices\n let oraclePrices: Record<string, OraclePrice>;\n if (opts.mode === \"api\") {\n oraclePrices = await fetchPythOraclePricesFromAPI(\n uniquePythOracleKeys,\n opts.pythOnchainData.endpoint,\n { queryKey: opts.pythOnchainData.queryKey }\n );\n } else {\n oraclePrices = await fetchPythOraclePricesFromChain(uniquePythOracleKeys, opts.connection);\n }\n\n // Step 6: Map banks to oracle prices\n const bankOraclePriceMap = mapPythBanksToOraclePrices(\n combinedPythBanks,\n pythStakedCollateralBanks,\n oraclePrices,\n priceCoeffByBank\n );\n\n return {\n bankOraclePriceMap,\n };\n};\n\n/**\n * Fetches Pyth oracle price data via internal API endpoint\n * @param pythOracleKeys - Array of Pyth oracle key strings\n * @param apiEndpoint - Fetches pyth oracle data with a GET request using the pyth keys as params\n * @returns Promise resolving to oracle prices indexed by oracle key\n */\nexport const fetchPythOraclePricesFromAPI = async (\n pythOracleKeys: string[],\n apiEndpoint: string,\n opts?: { queryKey?: string }\n): Promise<Record<string, OraclePrice>> => {\n const queryKey = opts?.queryKey ?? \"pythOracleKeys\";\n const response = await fetch(`${apiEndpoint}?${queryKey}=${pythOracleKeys.join(\",\")}`);\n\n if (!response.ok) {\n throw new Error(\"Failed to fetch pyth oracle data\");\n }\n\n const { data } = (await response.json()) as { data: Record<string, OraclePriceDto> };\n\n return Object.fromEntries(\n Object.entries(data).map(([key, oraclePrice]) => [\n key,\n {\n priceRealtime: {\n price: BigNumber(oraclePrice.priceRealtime.price),\n confidence: BigNumber(oraclePrice.priceRealtime.confidence),\n lowestPrice: BigNumber(oraclePrice.priceRealtime.lowestPrice),\n highestPrice: BigNumber(oraclePrice.priceRealtime.highestPrice),\n },\n priceWeighted: {\n price: BigNumber(oraclePrice.priceWeighted.price),\n confidence: BigNumber(oraclePrice.priceWeighted.confidence),\n lowestPrice: BigNumber(oraclePrice.priceWeighted.lowestPrice),\n highestPrice: BigNumber(oraclePrice.priceWeighted.highestPrice),\n },\n timestamp: oraclePrice.timestamp ? BigNumber(oraclePrice.timestamp) : null,\n },\n ])\n ) as Record<string, OraclePrice>;\n};\n\n/**\n * Fetches Pyth oracle data directly from the blockchain via RPC connection\n * @param requestedPythOracleKeys - Array of Pyth oracle key strings to fetch\n * @param connection - Solana RPC connection instance\n * @returns Promise resolving to oracle price data indexed by oracle key\n */\nexport const fetchPythOraclePricesFromChain = async (\n requestedPythOracleKeys: string[],\n connection: Connection\n): Promise<Record<string, OraclePrice>> => {\n const updatedOraclePriceByKey: Record<string, OraclePrice> = {};\n const oracleAis = await chunkedGetRawMultipleAccountInfoOrdered(\n connection,\n requestedPythOracleKeys\n );\n\n for (const index in requestedPythOracleKeys) {\n const oracleKey = requestedPythOracleKeys[index]!;\n const priceDataRaw = oracleAis[index];\n\n let oraclePrice = priceDataRaw && parseRpcPythPriceData(priceDataRaw.data);\n\n if (!oraclePrice || oraclePrice.priceRealtime.price.eq(new BigNumber(0))) {\n oraclePrice = {\n ...oraclePrice,\n priceRealtime: {\n price: new BigNumber(0),\n confidence: new BigNumber(0),\n lowestPrice: new BigNumber(0),\n highestPrice: new BigNumber(0),\n },\n priceWeighted: {\n price: new BigNumber(0),\n confidence: new BigNumber(0),\n lowestPrice: new BigNumber(0),\n highestPrice: new BigNumber(0),\n },\n timestamp: new BigNumber(Date.now()),\n };\n }\n\n updatedOraclePriceByKey[oracleKey] = oraclePrice;\n }\n\n return updatedOraclePriceByKey;\n};\n","import { Connection } from \"@solana/web3.js\";\nimport BN from \"bn.js\";\n\nimport {\n CrossbarSimulatePayload,\n decodeSwitchboardPullFeedData,\n FeedResponse,\n} from \"~/vendor/switchboard_pull\";\nimport { BankType, OracleSetup } from \"~/services/bank\";\nimport { chunkedGetRawMultipleAccountInfoOrdered } from \"~/services/misc\";\n\nimport { OraclePrice, SwbOracleAiDataByKey } from \"../types\";\nimport {\n getBirdeyeFallbackPricesByFeedId,\n mapBrokenFeedsToOraclePrices,\n mapSwbBanksToOraclePrices,\n} from \"../utils\";\n\ntype FetchSwbOracleOnChainOpts = {\n mode: \"on-chain\";\n connection: Connection;\n crossbarEndpoint?: string;\n};\n\ntype FetchSwbOracleApiOpts = {\n mode: \"api\";\n swbOnChainData: {\n endpoint: string;\n queryKey?: string;\n };\n swbCrossbarPrice: {\n endpoint: string;\n queryKey?: string;\n };\n stakedCollatData: {\n endpoint: string;\n queryKey?: string;\n };\n birdeyeFallback?: {\n endpoint: string;\n queryKey?: string;\n };\n};\n\nexport type SwbOracleServiceOpts = FetchSwbOracleOnChainOpts | FetchSwbOracleApiOpts;\n\n/**\n * Fetches comprehensive Switchboard oracle data including price feeds and broken feed detection\n * @param banks - Array of bank objects\n * @param opts - Optional configuration including API endpoint usage\n * @returns Promise resolving to map of bank addresses to their oracle prices\n */\nexport const fetchSwbOracleData = async (\n banks: BankType[],\n opts: SwbOracleServiceOpts\n): Promise<{\n bankOraclePriceMap: Map<string, OraclePrice>;\n}> => {\n // Step 1: Fetch Switchboard oracle map\n const switchboardBanks = banks.filter(\n (bank) =>\n bank.config.oracleSetup === OracleSetup.SwitchboardPull ||\n bank.config.oracleSetup === OracleSetup.SwitchboardV2 ||\n bank.config.oracleSetup === OracleSetup.KaminoSwitchboardPull\n );\n\n if (switchboardBanks.length === 0) {\n return {\n bankOraclePriceMap: new Map<string, OraclePrice>(),\n };\n }\n\n let swbOracleAiDataByKey: SwbOracleAiDataByKey;\n const oracleKeys = switchboardBanks.map((bank) => bank.config.oracleKeys[0]!.toBase58());\n if (opts.mode === \"api\") {\n swbOracleAiDataByKey = await fetchSwbOracleAccountsFromAPI(\n oracleKeys,\n opts.swbOnChainData.endpoint,\n { queryKey: opts.swbOnChainData.queryKey }\n );\n } else {\n swbOracleAiDataByKey = await fetchSwbOracleAccountsFromChain(oracleKeys, opts.connection);\n }\n\n // Step 4: Extract oracle keys for price fetching\n const swbFeedIds: string[] = [];\n const brokenSwbFeeds: { feedId: string; mintAddress: string }[] = [];\n\n Object.keys(swbOracleAiDataByKey).forEach((oracleKey) => {\n const oracleAiData = swbOracleAiDataByKey[oracleKey]!;\n\n const rawPriceBN = new BN(oracleAiData.rawPrice);\n\n const isFeedBroken =\n rawPriceBN.isZero() || rawPriceBN.eq(new BN(0.000001)) || rawPriceBN.eq(new BN(0.00000001));\n\n if (isFeedBroken) {\n const bank = switchboardBanks.find(\n (bank) => bank.config.oracleKeys[0]!.toBase58() === oracleKey\n );\n if (bank) {\n brokenSwbFeeds.push({\n feedId: oracleAiData.feedHash,\n mintAddress: bank.mint.toBase58(),\n });\n } else {\n console.warn(\n `Bank not found for oracle key ${oracleKey} - feed id ${oracleAiData.feedHash}`\n );\n }\n } else {\n swbFeedIds.push(oracleAiData.feedHash);\n }\n });\n\n // Step 5: Fetch oracle prices\n let crossbarResponse: Record<string, FeedResponse | undefined>;\n let birdeyeResponse: Record<string, number> = {};\n if (opts.mode === \"api\") {\n crossbarResponse = await fetchSwbOraclePricesFromAPI(\n swbFeedIds,\n opts.swbCrossbarPrice.endpoint,\n { queryKey: opts.swbCrossbarPrice.queryKey }\n );\n if (brokenSwbFeeds.length > 0 && opts.birdeyeFallback) {\n birdeyeResponse = await getBirdeyeFallbackPricesByFeedId(\n brokenSwbFeeds,\n opts.birdeyeFallback.endpoint,\n { queryKey: opts.birdeyeFallback.queryKey }\n );\n }\n } else {\n // Handle non-API endpoint case - placeholder for now\n crossbarResponse = await fetchSwbOraclePricesFromCrossbar(\n swbFeedIds,\n opts.crossbarEndpoint || \"https://34.97.218.183.sslip.io\",\n \"https://crossbar.switchboard.xyz\"\n );\n birdeyeResponse = {};\n }\n\n // Step 6: Map switchboardBanks to oracle prices\n const bankOraclePriceMap = mapSwbBanksToOraclePrices(\n switchboardBanks,\n swbOracleAiDataByKey,\n crossbarResponse\n );\n\n // Step 7: Map broken feeds to oracle prices\n const brokenFeedOraclePriceMap = mapBrokenFeedsToOraclePrices(\n switchboardBanks,\n swbOracleAiDataByKey,\n birdeyeResponse\n );\n\n // Step 8: Combine bank oracle prices and broken feed oracle prices\n const combinedOraclePriceMap = new Map<string, OraclePrice>();\n bankOraclePriceMap.forEach((oraclePrice, bankAddress) => {\n combinedOraclePriceMap.set(bankAddress, oraclePrice);\n });\n brokenFeedOraclePriceMap.forEach((oraclePrice, bankAddress) => {\n combinedOraclePriceMap.set(bankAddress, oraclePrice);\n });\n\n return {\n bankOraclePriceMap: combinedOraclePriceMap,\n };\n};\n\n/**\n * Fetches Switchboard oracle account information data via internal API endpoint\n * @param oracleKeys - Array of Switchboard oracle key strings\n * @returns Promise resolving to oracle account information indexed by oracle key\n */\nexport const fetchSwbOracleAccountsFromAPI = async (\n oracleKeys: string[],\n apiEndpoint: string,\n opts?: { queryKey?: string }\n): Promise<SwbOracleAiDataByKey> => {\n const queryKey = opts?.queryKey ?? \"oracleKeys\";\n const swbOracleKeyMapResponse = await fetch(`${apiEndpoint}?${queryKey}=` + oracleKeys.join(\",\"));\n\n if (!swbOracleKeyMapResponse.ok) {\n throw new Error(\"Failed to fetch swb oracle key map\");\n }\n\n const { data } = (await swbOracleKeyMapResponse.json()) as { data: SwbOracleAiDataByKey };\n\n return data;\n};\n\n/**\n * Fetches Switchboard oracle account information data directly from the blockchain\n * @param oracleKeys - Array of Switchboard oracle key strings\n * @param connection - Solana RPC connection instance\n * @returns Promise resolving to oracle account information indexed by oracle key\n */\nexport const fetchSwbOracleAccountsFromChain = async (\n oracleKeys: string[],\n connection: Connection\n): Promise<SwbOracleAiDataByKey> => {\n const swbOracleAiDataByKey: SwbOracleAiDataByKey = {};\n\n // Get oracle account info\n const oracleAis = await chunkedGetRawMultipleAccountInfoOrdered(connection, oracleKeys);\n\n // Process each oracle account\n oracleAis.forEach((oracleAi, idx) => {\n if (!oracleAi?.data || idx >= oracleKeys.length) return;\n\n const oracleKey = oracleKeys[idx];\n if (!oracleKey) return;\n\n const feedData = decodeSwitchboardPullFeedData(oracleAi.data);\n\n const feedHash = Buffer.from(feedData.feed_hash).toString(\"hex\");\n const queue = feedData.queue.toBase58();\n const maxVariance = feedData.max_variance.toString();\n const minResponses = feedData.min_responses;\n const rawPrice = feedData.result.value.toString();\n const stdev = feedData.result.std_dev.toString();\n\n swbOracleAiDataByKey[oracleKey] = {\n queue,\n feedHash,\n maxVariance,\n minResponses,\n rawPrice,\n stdev,\n };\n });\n\n return swbOracleAiDataByKey;\n};\n\n/**\n * Fetches Switchboard oracle price data via internal API endpoint using feed IDs\n * @param swbFeedIds - Array of Switchboard feed ID strings\n * @param apiEndpoint - API endpoint for fetching Switchboard oracle prices\n * @returns Promise resolving to feed response data indexed by feed ID\n */\nexport const fetchSwbOraclePricesFromAPI = async (\n swbFeedIds: string[],\n apiEndpoint: string,\n opts?: { queryKey?: string }\n): Promise<Record<string, FeedResponse | undefined>> => {\n const queryKey = opts?.queryKey ?? \"feedIds\";\n\n const response = await fetch(`${apiEndpoint}?${queryKey}=` + swbFeedIds.join(\",\"));\n\n if (!response.ok) {\n throw new Error(\"Failed to fetch swb oracle data\");\n }\n\n return (await response.json()) as Record<string, FeedResponse | undefined>;\n};\n\n/**\n * Fetches Switchboard oracle price data via internal API endpoint using feed IDs\n * @param swbFeedIds - Array of Switchboard feed ID strings\n * @param apiEndpoint - API endpoint for fetching Switchboard oracle prices\n * @returns Promise resolving to feed response data indexed by feed ID\n */\nexport const fetchSwbOraclePricesFromCrossbar = async (\n swbFeedIds: string[],\n primaryCrossbarEndpoint: string,\n fallbackCrossbarEndpoint: string\n): Promise<Record<string, FeedResponse | undefined>> => {\n // fn to split array in chunks\n function chunkArray(array: string[], chunkSize: number): string[][] {\n const chunks: string[][] = [];\n for (let i = 0; i < array.length; i += chunkSize) {\n chunks.push(array.slice(i, i + chunkSize));\n }\n return chunks;\n }\n\n // Split feed hashes into chunks of 5 (to avoid overloading crossbar)\n const chunks = chunkArray(swbFeedIds, 5);\n\n // Create requests that try primary first, then fallback on failure\n const requests = chunks.map((chunk) => {\n const swbFeedIdsChunk = chunk.join(\",\");\n return fetchCrossbarChunkWithFallback(\n swbFeedIdsChunk,\n primaryCrossbarEndpoint,\n fallbackCrossbarEndpoint\n );\n });\n\n // Execute all requests in parallel\n const results = await Promise.allSettled(requests);\n\n const feedMap: Record<string, FeedResponse | undefined> = {};\n swbFeedIds.forEach((swbFeedId) => {\n feedMap[swbFeedId] = undefined;\n });\n\n // Process successful responses\n for (const result of results) {\n if (result.status === \"fulfilled\") {\n const { validFeeds } = result.value;\n\n // Set valid feeds in the map\n validFeeds.forEach((feed) => {\n feedMap[feed.feedHash] = feed;\n });\n\n // Broken feeds remain undefined (already set above)\n } else if (result.status === \"rejected\") {\n console.error(\"Chunk request failed:\", result.reason);\n }\n }\n\n return feedMap;\n};\n\n/**\n * Fetch a single chunk with fallback retry logic\n */\nasync function fetchCrossbarChunkWithFallback(\n swbFeedIdsChunk: string,\n primaryCrossbarEndpoint: string,\n fallbackCrossbarEndpoint: string\n): Promise<{ validFeeds: FeedResponse[] }> {\n // Try primary endpoint first\n try {\n return await fetchSingleCrossbarChunk(primaryCrossbarEndpoint, swbFeedIdsChunk, true);\n } catch (primaryError) {\n console.warn(\"Primary endpoint failed, trying fallback:\", primaryError);\n\n // If primary fails, try fallback endpoint\n try {\n return await fetchSingleCrossbarChunk(fallbackCrossbarEndpoint, swbFeedIdsChunk, false);\n } catch (fallbackError) {\n console.error(\"Both primary and fallback endpoints failed:\", {\n primary: primaryError,\n fallback: fallbackError,\n });\n throw fallbackError;\n }\n }\n}\n\n/**\n * Fetch a single chunk from crossbar\n */\nasync function fetchSingleCrossbarChunk(\n endpoint: string,\n swbFeedIdsChunk: string,\n isPrimary: boolean\n): Promise<{ validFeeds: FeedResponse[] }> {\n try {\n const response = await fetch(`${endpoint}/simulate/${swbFeedIdsChunk}`, {\n headers: {\n Accept: \"application/json\",\n },\n signal: AbortSignal.timeout(8000),\n });\n\n if (!response.ok) {\n throw new Error(`${isPrimary ? \"Primary\" : \"Fallback\"} endpoint failed: ${response.status}`);\n }\n\n const payload = (await response.json()) as CrossbarSimulatePayload;\n\n // Check validity of crossbar response\n const brokenFeeds = payload\n .filter((feed) => {\n const result = feed.results[0];\n return result === null || result === undefined || isNaN(Number(result));\n })\n .map((feed) => feed.feedHash);\n\n const validFeeds = payload.filter((feed) => !brokenFeeds.includes(feed.feedHash));\n\n if (brokenFeeds.length > 0) {\n console.log(`Broken feeds from ${isPrimary ? \"primary\" : \"fallback\"} endpoint:`, brokenFeeds);\n }\n\n return { validFeeds };\n } catch (error) {\n console.error(`${isPrimary ? \"Primary\" : \"Fallback\"} crossbar chunk failed:`, error);\n throw error;\n }\n}\n","import BigNumber from \"bignumber.js\";\nimport { PublicKey } from \"@solana/web3.js\";\n\nimport { BankType, RiskTier, OracleSetup } from \"~/services/bank\";\nimport { ZERO_ORACLE_KEY } from \"~/constants\";\n\nimport { OraclePrice } from \"../types\";\n\nimport {\n fetchPythOracleData,\n PythOracleServiceOpts,\n} from \"./pyth-oracle.service\";\nimport { fetchSwbOracleData, SwbOracleServiceOpts } from \"./swb-oracle.service\";\n\n/**\n * Fetches comprehensive oracle data from multiple providers (Pyth and Switchboard)\n * Implements intelligent routing based on oracle type and risk tier:\n * - Zero oracles: Returns 0 price immediately\n * - Isolated assets: Uses enriched bank price (no external calls)\n * - Collateral assets: Uses Pyth/Switchboard with Birdeye fallback\n *\n * @param banks - Array of bank objects\n * @param opts - Optional configuration including API endpoint usage, connection, and enriched banks\n * @returns Promise resolving to oracle price maps indexed by bank address and mint address\n */\nexport const fetchOracleData = async (\n banks: BankType[],\n opts: {\n pythOpts: PythOracleServiceOpts;\n swbOpts: SwbOracleServiceOpts;\n isolatedBanksOpts?: {\n fetchPrices: boolean;\n staticPricesByBank?: Record<string, number>;\n };\n }\n): Promise<{\n bankOraclePriceMap: Map<string, OraclePrice>;\n mintOraclePriceMap: Map<string, OraclePrice>;\n}> => {\n const {\n zeroOracleBanks,\n isolatedAssetBanks,\n collateralAssetBanks,\n fixedAssetBanks,\n } = classifyBanksForOracleStrategy(banks);\n\n // we don't fetch oracle data for zero oracle banks and use the enriched bank price for isolated assets\n const zeroResults = handleZeroOracleBanks(zeroOracleBanks);\n\n const fetchIsolatedPrice = opts?.isolatedBanksOpts?.fetchPrices ?? false;\n const isolatedResults = fetchIsolatedPrice\n ? handleIsolatedAssetBanks(\n isolatedAssetBanks,\n opts?.isolatedBanksOpts?.staticPricesByBank\n )\n : new Map();\n\n // handle fixed price assets\n const fixedResults = handleFixedOracleBanks(fixedAssetBanks);\n\n const assetBanks = [\n ...collateralAssetBanks,\n ...(fetchIsolatedPrice ? isolatedAssetBanks : []),\n ];\n\n // fetch oracle for asset banks\n const assetResults = await handleAssetBanks(assetBanks, {\n pythOpts: opts.pythOpts,\n swbOpts: opts.swbOpts,\n });\n\n return mergeOracleResults(\n [zeroResults, isolatedResults, assetResults, fixedResults],\n banks\n );\n};\n\n/**\n * Classifies banks based on their oracle setup and risk tier to determine pricing strategy\n * @param banks - Array of bank objects to classify\n * @returns Object containing arrays of banks categorized by pricing strategy\n */\nfunction classifyBanksForOracleStrategy(banks: BankType[]): {\n zeroOracleBanks: BankType[];\n isolatedAssetBanks: BankType[];\n collateralAssetBanks: BankType[];\n fixedAssetBanks: BankType[];\n} {\n const zeroOracleBanks: BankType[] = [];\n const isolatedAssetBanks: BankType[] = [];\n const collateralAssetBanks: BankType[] = [];\n const fixedAssetBanks: BankType[] = [];\n\n banks.forEach((bank) => {\n const hasZeroOracle = bank.config.oracleKeys.some((key) =>\n key.equals(new PublicKey(ZERO_ORACLE_KEY))\n );\n\n if (hasZeroOracle) {\n zeroOracleBanks.push(bank);\n return;\n }\n\n const isIsolatedAsset = bank.config.riskTier === RiskTier.Isolated;\n const isFixedAsset = bank.config.oracleSetup === OracleSetup.Fixed;\n\n if (isFixedAsset) {\n fixedAssetBanks.push(bank);\n } else if (isIsolatedAsset) {\n isolatedAssetBanks.push(bank);\n } else {\n collateralAssetBanks.push(bank);\n }\n });\n\n return {\n zeroOracleBanks,\n isolatedAssetBanks,\n collateralAssetBanks,\n fixedAssetBanks,\n };\n}\n\nfunction handleFixedOracleBanks(banks: BankType[]): Map<string, OraclePrice> {\n const oracleMap = new Map<string, OraclePrice>();\n\n banks.forEach((bank) => {\n const fixedPrice = bank.config.fixedPrice;\n\n const fixedOraclePrice: OraclePrice = {\n priceRealtime: {\n price: fixedPrice,\n confidence: BigNumber(0),\n lowestPrice: fixedPrice,\n highestPrice: fixedPrice,\n },\n priceWeighted: {\n price: fixedPrice,\n confidence: BigNumber(0),\n lowestPrice: fixedPrice,\n highestPrice: fixedPrice,\n },\n timestamp: BigNumber(Date.now()),\n };\n\n oracleMap.set(bank.address.toBase58(), fixedOraclePrice);\n });\n\n return oracleMap;\n}\n\n/**\n * Handles banks with zero oracles by returning zero prices\n * @param banks - Array of zero oracle banks\n * @returns Map of bank addresses to zero oracle prices\n */\nfunction handleZeroOracleBanks(banks: BankType[]): Map<string, OraclePrice> {\n const oracleMap = new Map<string, OraclePrice>();\n\n banks.forEach((bank) => {\n const zeroOraclePrice: OraclePrice = {\n priceRealtime: {\n price: BigNumber(0),\n confidence: BigNumber(0),\n lowestPrice: BigNumber(0),\n highestPrice: BigNumber(0),\n },\n priceWeighted: {\n price: BigNumber(0),\n confidence: BigNumber(0),\n lowestPrice: BigNumber(0),\n highestPrice: BigNumber(0),\n },\n timestamp: BigNumber(Date.now()),\n };\n\n oracleMap.set(bank.address.toBase58(), zeroOraclePrice);\n });\n\n return oracleMap;\n}\n\n/**\n * Handles isolated asset banks by using static prices\n * @param banks - Array of isolated asset banks\n * @param staticPrices - Optional static prices for isolated assets\n * @returns Map of bank addresses to oracle prices derived from static prices\n */\nfunction handleIsolatedAssetBanks(\n banks: BankType[],\n staticPrices?: Record<string, number>\n): Map<string, OraclePrice> {\n const oracleMap = new Map<string, OraclePrice>();\n\n banks.forEach((bank) => {\n const price = staticPrices?.[bank.address.toBase58()] ?? 0;\n\n const oraclePrice: OraclePrice = {\n priceRealtime: {\n price: BigNumber(price),\n confidence: BigNumber(0),\n lowestPrice: BigNumber(price),\n highestPrice: BigNumber(price),\n },\n priceWeighted: {\n price: BigNumber(price),\n confidence: BigNumber(0),\n lowestPrice: BigNumber(price),\n highestPrice: BigNumber(price),\n },\n timestamp: BigNumber(Date.now()),\n };\n\n oracleMap.set(bank.address.toBase58(), oraclePrice);\n });\n\n return oracleMap;\n}\n\n/**\n * Handles banks using existing oracle infrastructure (Pyth + Switchboard + Birdeye fallback)\n * @param banks - Array of banks\n * @param opts - Optional configuration\n * @returns Map of bank addresses to oracle prices from external oracle providers\n */\nasync function handleAssetBanks(\n banks: BankType[],\n opts: { pythOpts: PythOracleServiceOpts; swbOpts: SwbOracleServiceOpts }\n): Promise<Map<string, OraclePrice>> {\n if (banks.length === 0) {\n return new Map<string, OraclePrice>();\n }\n\n const [pythData, swbData] = await Promise.all([\n fetchPythOracleData(banks, opts.pythOpts),\n fetchSwbOracleData(banks, opts.swbOpts),\n ]);\n\n const bankOraclePriceMap = new Map<string, OraclePrice>();\n\n // Map pyth data\n pythData.bankOraclePriceMap.forEach((oraclePrice, bankAddress) => {\n bankOraclePriceMap.set(bankAddress, oraclePrice);\n });\n\n // Map swb data\n swbData.bankOraclePriceMap.forEach((oraclePrice, bankAddress) => {\n bankOraclePriceMap.set(bankAddress, oraclePrice);\n });\n\n // Check for any missing oracle prices and set to zero as fallback\n banks.forEach((bank) => {\n const bankAddress = bank.address.toBase58();\n const oraclePrice = bankOraclePriceMap.get(bankAddress);\n if (!oraclePrice) {\n bankOraclePriceMap.set(bankAddress, {\n priceRealtime: {\n price: BigNumber(0),\n confidence: BigNumber(0),\n lowestPrice: BigNumber(0),\n highestPrice: BigNumber(0),\n },\n priceWeighted: {\n price: BigNumber(0),\n confidence: BigNumber(0),\n lowestPrice: BigNumber(0),\n highestPrice: BigNumber(0),\n },\n timestamp: BigNumber(Date.now()),\n });\n }\n });\n\n return bankOraclePriceMap;\n}\n\n/**\n * Merges oracle results from different strategies and builds mint-based oracle map\n * @param results - Array of oracle price maps from different strategies\n * @param allBanks - All banks for mint mapping\n * @returns Combined oracle price maps indexed by bank address and mint address\n */\nfunction mergeOracleResults(\n results: Map<string, OraclePrice>[],\n allBanks: BankType[]\n): {\n bankOraclePriceMap: Map<string, OraclePrice>;\n mintOraclePriceMap: Map<string, OraclePrice>;\n} {\n const bankOraclePriceMap = new Map<string, OraclePrice>();\n const mintOraclePriceMap = new Map<string, OraclePrice>();\n\n // Merge all oracle price maps\n results.forEach((resultMap) => {\n resultMap.forEach((oraclePrice, bankAddress) => {\n bankOraclePriceMap.set(bankAddress, oraclePrice);\n });\n });\n\n // Build mint-based oracle map\n allBanks.forEach((bank) => {\n const bankAddress = bank.address.toBase58();\n const oraclePrice = bankOraclePriceMap.get(bankAddress);\n if (oraclePrice) {\n const mintAddress = bank.mint.toBase58();\n mintOraclePriceMap.set(mintAddress, oraclePrice);\n }\n });\n\n return {\n bankOraclePriceMap,\n mintOraclePriceMap,\n };\n}\n","import BigNumber from \"bignumber.js\";\nimport { PublicKey } from \"@solana/web3.js\";\n\nimport { OraclePrice, PriceBias, getPrice } from \"~/services/price\";\nimport { MarginRequirementType } from \"~/services/account/types\";\nimport {\n PDA_BANK_LIQUIDITY_VAULT_SEED,\n PDA_BANK_INSURANCE_VAULT_SEED,\n PDA_BANK_FEE_VAULT_SEED,\n PDA_BANK_LIQUIDITY_VAULT_AUTH_SEED,\n PDA_BANK_INSURANCE_VAULT_AUTH_SEED,\n PDA_BANK_FEE_VAULT_AUTH_SEED,\n toBigNumber,\n} from \"~/utils\";\nimport { Amount } from \"~/types\";\n\nimport { BankType, BankConfigType, BankVaultType } from \"../types\";\n\nexport function computeMaxLeverage(\n depositBank: BankType,\n borrowBank: BankType,\n opts?: { assetWeightInit?: BigNumber; liabilityWeightInit?: BigNumber }\n): { maxLeverage: number; ltv: number } {\n const assetWeightInit = opts?.assetWeightInit || depositBank.config.assetWeightInit;\n const liabilityWeightInit = opts?.liabilityWeightInit || borrowBank.config.liabilityWeightInit;\n\n const ltv = assetWeightInit.div(liabilityWeightInit).toNumber();\n const maxLeverage = 1 / (1 - ltv);\n\n return {\n maxLeverage,\n ltv,\n };\n}\n\nexport function computeLoopingParams(\n principal: Amount,\n targetLeverage: number,\n depositBank: BankType,\n borrowBank: BankType,\n depositOracleInfo: OraclePrice,\n borrowOracleInfo: OraclePrice,\n opts?: { assetWeightInit?: BigNumber; liabilityWeightInit?: BigNumber }\n): { totalBorrowAmount: BigNumber; totalDepositAmount: BigNumber } {\n const initialCollateral = toBigNumber(principal);\n const { maxLeverage } = computeMaxLeverage(depositBank, borrowBank, opts);\n\n // Clamp target leverage to valid range instead of throwing\n let clampedLeverage = targetLeverage;\n\n if (targetLeverage < 1) {\n console.warn(`computeLoopingParams: targetLeverage ${targetLeverage} < 1, clamping to 1`);\n clampedLeverage = 1;\n } else if (targetLeverage > maxLeverage) {\n console.warn(\n `computeLoopingParams: targetLeverage ${targetLeverage} > maxLeverage ${maxLeverage}, clamping to ${maxLeverage}`\n );\n clampedLeverage = maxLeverage;\n }\n\n const totalDepositAmount = initialCollateral.times(new BigNumber(clampedLeverage));\n const additionalDepositAmount = totalDepositAmount.minus(initialCollateral);\n const totalBorrowAmount = additionalDepositAmount\n .times(depositOracleInfo.priceWeighted.lowestPrice)\n .div(borrowOracleInfo.priceWeighted.highestPrice);\n\n return {\n totalBorrowAmount: totalBorrowAmount.decimalPlaces(\n borrowBank.mintDecimals,\n BigNumber.ROUND_DOWN\n ),\n totalDepositAmount: totalDepositAmount.decimalPlaces(\n depositBank.mintDecimals,\n BigNumber.ROUND_DOWN\n ),\n };\n}\n\n/** Small getters */\n\nexport function getTotalAssetQuantity(bank: BankType): BigNumber {\n return bank.totalAssetShares.times(bank.assetShareValue);\n}\n\nexport function getTotalLiabilityQuantity(bank: BankType): BigNumber {\n return bank.totalLiabilityShares.times(bank.liabilityShareValue);\n}\n\nexport function getAssetQuantity(bank: BankType, assetShares: BigNumber): BigNumber {\n return assetShares.times(bank.assetShareValue);\n}\n\nexport function getLiabilityQuantity(bank: BankType, liabilityShares: BigNumber): BigNumber {\n return liabilityShares.times(bank.liabilityShareValue);\n}\n\nexport function getAssetShares(bank: BankType, assetQuantity: BigNumber): BigNumber {\n if (bank.assetShareValue.isZero()) {\n return new BigNumber(0);\n }\n return assetQuantity.div(bank.assetShareValue);\n}\n\nexport function getLiabilityShares(bank: BankType, liabilityQuantity: BigNumber): BigNumber {\n if (bank.liabilityShareValue.isZero()) {\n return new BigNumber(0);\n }\n return liabilityQuantity.div(bank.liabilityShareValue);\n}\n\nexport function getAssetWeight(\n bank: BankType,\n marginRequirementType: MarginRequirementType,\n oraclePrice: OraclePrice,\n opts?: {\n ignoreSoftLimits?: boolean;\n overrideWeights?: {\n assetWeightInit: BigNumber;\n assetWeightMaint: BigNumber;\n };\n }\n): BigNumber {\n const assetWeightInit = opts?.overrideWeights?.assetWeightInit ?? bank.config.assetWeightInit;\n const assetWeightMaint = opts?.overrideWeights?.assetWeightMaint ?? bank.config.assetWeightMaint;\n\n switch (marginRequirementType) {\n case MarginRequirementType.Initial:\n const isSoftLimitDisabled = bank.config.totalAssetValueInitLimit.isZero();\n if (opts?.ignoreSoftLimits || isSoftLimitDisabled) return assetWeightInit;\n const totalBankCollateralValue = computeAssetUsdValue(\n bank,\n oraclePrice,\n bank.totalAssetShares,\n MarginRequirementType.Equity,\n PriceBias.Lowest,\n opts?.overrideWeights\n );\n if (totalBankCollateralValue.isGreaterThan(bank.config.totalAssetValueInitLimit)) {\n return bank.config.totalAssetValueInitLimit\n .div(totalBankCollateralValue)\n .times(assetWeightInit);\n } else {\n return assetWeightInit;\n }\n case MarginRequirementType.Maintenance:\n return assetWeightMaint;\n case MarginRequirementType.Equity:\n return new BigNumber(1);\n default:\n throw new Error(\"Invalid margin requirement type\");\n }\n}\n\nexport function getLiabilityWeight(\n config: BankConfigType,\n marginRequirementType: MarginRequirementType\n): BigNumber {\n switch (marginRequirementType) {\n case MarginRequirementType.Initial:\n return config.liabilityWeightInit;\n case MarginRequirementType.Maintenance:\n return config.liabilityWeightMaint;\n case MarginRequirementType.Equity:\n return new BigNumber(1);\n default:\n throw new Error(\"Invalid margin requirement type\");\n }\n}\n\n/** Computes */\n\nexport function computeLiabilityUsdValue(\n bank: BankType,\n oraclePrice: OraclePrice,\n liabilityShares: BigNumber,\n marginRequirementType: MarginRequirementType,\n priceBias: PriceBias\n): BigNumber {\n const liabilityQuantity = getLiabilityQuantity(bank, liabilityShares);\n const liabilityWeight = getLiabilityWeight(bank.config, marginRequirementType);\n const isWeighted = isWeightedPrice(marginRequirementType);\n return computeUsdValue(\n bank,\n oraclePrice,\n liabilityQuantity,\n priceBias,\n isWeighted,\n liabilityWeight\n );\n}\n\nexport function computeAssetUsdValue(\n bank: BankType,\n oraclePrice: OraclePrice,\n assetShares: BigNumber,\n marginRequirementType: MarginRequirementType,\n priceBias: PriceBias,\n overrideWeights?: {\n assetWeightMaint: BigNumber;\n assetWeightInit: BigNumber;\n }\n): BigNumber {\n const assetQuantity = getAssetQuantity(bank, assetShares);\n const assetWeight = getAssetWeight(bank, marginRequirementType, oraclePrice, {\n overrideWeights,\n });\n const isWeighted = isWeightedPrice(marginRequirementType);\n return computeUsdValue(bank, oraclePrice, assetQuantity, priceBias, isWeighted, assetWeight);\n}\n\nexport function computeUsdValue(\n bank: BankType,\n oraclePrice: OraclePrice,\n quantity: BigNumber,\n priceBias: PriceBias,\n weightedPrice: boolean,\n weight?: BigNumber,\n scaleToBase: boolean = true\n): BigNumber {\n const price = getPrice(oraclePrice, priceBias, weightedPrice);\n return quantity\n .times(price)\n .times(weight ?? 1)\n .dividedBy(scaleToBase ? 10 ** bank.mintDecimals : 1);\n}\n\nexport function computeTvl(bank: BankType, oraclePrice: OraclePrice): BigNumber {\n return computeAssetUsdValue(\n bank,\n oraclePrice,\n bank.totalAssetShares,\n MarginRequirementType.Equity,\n PriceBias.None\n ).minus(\n computeLiabilityUsdValue(\n bank,\n oraclePrice,\n bank.totalLiabilityShares,\n MarginRequirementType.Equity,\n PriceBias.None\n )\n );\n}\n\nexport function getBankVaultSeeds(type: BankVaultType): Buffer {\n switch (type) {\n case BankVaultType.LiquidityVault:\n return PDA_BANK_LIQUIDITY_VAULT_SEED;\n case BankVaultType.InsuranceVault:\n return PDA_BANK_INSURANCE_VAULT_SEED;\n case BankVaultType.FeeVault:\n return PDA_BANK_FEE_VAULT_SEED;\n default:\n throw Error(`Unknown vault type ${type}`);\n }\n}\n\nfunction getBankVaultAuthoritySeeds(type: BankVaultType): Buffer {\n switch (type) {\n case BankVaultType.LiquidityVault:\n return PDA_BANK_LIQUIDITY_VAULT_AUTH_SEED;\n case BankVaultType.InsuranceVault:\n return PDA_BANK_INSURANCE_VAULT_AUTH_SEED;\n case BankVaultType.FeeVault:\n return PDA_BANK_FEE_VAULT_AUTH_SEED;\n default:\n throw Error(`Unknown vault type ${type}`);\n }\n}\n\n/**\n * Compute authority PDA for a specific marginfi group bank vault\n */\nexport function getBankVaultAuthority(\n bankVaultType: BankVaultType,\n bankPk: PublicKey,\n programId: PublicKey\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [getBankVaultAuthoritySeeds(bankVaultType), bankPk.toBuffer()],\n programId\n );\n}\n\nexport function isWeightedPrice(reqType: MarginRequirementType): boolean {\n return reqType === MarginRequirementType.Initial;\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport { Address } from \"@coral-xyz/anchor\";\n\nimport { MarginfiProgram } from \"~/types\";\n\nimport { BankRaw } from \"../types\";\n\nexport const fetchBank = async (\n program: MarginfiProgram,\n bankAddress: Address\n): Promise<{ address: PublicKey; data: BankRaw }> => {\n const address = new PublicKey(bankAddress);\n const data = await program.account.bank.fetch(address);\n\n if (!data) {\n throw new Error(`Bank ${address.toBase58()} not found`);\n }\n\n return { address, data };\n};\n\nexport const fetchMultipleBanks = async (\n program: MarginfiProgram,\n opts?: { bankAddresses?: Address[]; groupAddress?: PublicKey }\n): Promise<{ address: PublicKey; data: BankRaw }[]> => {\n let bankDatas: { address: PublicKey; data: BankRaw }[] = [];\n\n if (opts?.bankAddresses && opts.bankAddresses.length > 0) {\n const addresses = opts.bankAddresses;\n const data = await program.account.bank.fetchMultiple(addresses);\n\n data.forEach((d, idx) => {\n if (d && addresses[idx]) {\n bankDatas.push({ address: new PublicKey(addresses[idx]), data: d });\n } else {\n console.error(`Bank ${addresses[idx]} not found`);\n }\n });\n } else {\n const bankOpts = opts?.groupAddress\n ? [\n {\n memcmp: { offset: 8 + 32 + 1, bytes: opts.groupAddress.toBase58() },\n },\n ]\n : [];\n const data = await program.account.bank.all(bankOpts);\n bankDatas = data.map((d) => ({ address: d.publicKey, data: d.account }));\n }\n\n return bankDatas;\n};\n","import BigNumber from \"bignumber.js\";\n\nimport { BankType } from \"../types\";\n\nimport {\n getTotalAssetQuantity,\n getTotalLiabilityQuantity,\n} from \"./compute.utils\";\n\nexport function computeInterestRates(bank: BankType): {\n lendingRate: BigNumber;\n borrowingRate: BigNumber;\n} {\n const {\n insuranceFeeFixedApr,\n insuranceIrFee,\n protocolFixedFeeApr,\n protocolIrFee,\n } = bank.config.interestRateConfig;\n\n const fixedFee = insuranceFeeFixedApr.plus(protocolFixedFeeApr);\n const rateFee = insuranceIrFee.plus(protocolIrFee);\n\n const baseInterestRate = computeBaseInterestRate(bank);\n const utilizationRate = computeUtilizationRate(bank);\n\n const lendingRate = baseInterestRate.times(utilizationRate);\n const borrowingRate = baseInterestRate\n .times(new BigNumber(1).plus(rateFee))\n .plus(fixedFee);\n\n return { lendingRate, borrowingRate };\n}\n\n/**\n * Maximum value for u32\n *\n * NOTE: AI-slop\n */\nconst U32_MAX = 0xffffffff;\n\n/**\n * Convert u32 encoded rate to APR percentage (0.0 to 10.0)\n * Rate is encoded as: rate / u32::MAX * 1000%\n * Example: 100% APR = 0.1 * u32::MAX\n *\n * NOTE: AI-slop\n */\nfunction rateFromU32(rate: number): BigNumber {\n const ratio = new BigNumber(rate).div(U32_MAX);\n return ratio.times(10);\n}\n\n/**\n * Convert u32 encoded utilization to percentage (0.0 to 1.0)\n * Util is encoded as: util / u32::MAX * 100%\n * Example: 50% = 0.5 * u32::MAX\n *\n * NOTE: AI-slop\n */\nfunction utilFromU32(util: number): BigNumber {\n return new BigNumber(util).div(U32_MAX);\n}\n\n/**\n * Linear interpolation between two points\n * Given points (startX, startY) and (endX, endY), find Y at targetX\n */\nfunction calculateRateBetweenPoints(\n startX: BigNumber,\n startY: BigNumber,\n endX: BigNumber,\n endY: BigNumber,\n targetX: BigNumber\n): BigNumber {\n // Handle edge cases\n if (endX.lte(startX)) return startY;\n if (targetX.lt(startX)) return startY;\n if (targetX.gt(endX)) return endY;\n // Program enforces that points must be ascending (or equal)\n if (endY.lt(startY)) return startY;\n\n const deltaX = endX.minus(startX);\n if (deltaX.isZero()) return startY;\n\n // Calculate interpolation\n const offset = targetX.minus(startX);\n const proportion = offset.div(deltaX);\n const deltaY = endY.minus(startY);\n const scaledDelta = deltaY.times(proportion);\n\n return startY.plus(scaledDelta);\n}\n\n/**\n * Compute base interest rate using the legacy 3-point curve\n */\nfunction computeLegacyCurve(\n utilizationRate: BigNumber,\n optimalUtilizationRate: BigNumber,\n plateauInterestRate: BigNumber,\n maxInterestRate: BigNumber\n): BigNumber {\n if (utilizationRate.lte(optimalUtilizationRate)) {\n return utilizationRate\n .times(plateauInterestRate)\n .div(optimalUtilizationRate);\n } else {\n return utilizationRate\n .minus(optimalUtilizationRate)\n .div(new BigNumber(1).minus(optimalUtilizationRate))\n .times(maxInterestRate.minus(plateauInterestRate))\n .plus(plateauInterestRate);\n }\n}\n\n/**\n * Compute base interest rate using the 7-point multipoint curve\n * Locates utilization on a linear function with up to 7 points:\n * - Point 1: (0%, zeroUtilRate)\n * - Points 2-6: Custom points from the points array\n * - Point 7: (100%, hundredUtilRate)\n *\n * Note: all will migrate to the new 7 point curve, the result for your normal legacy\n * curve getting migrated over is described in that test there. then we'll start creating curves with more points later\n */\nfunction computeMultipointCurve(\n utilizationRate: BigNumber,\n zeroUtilRate: number,\n hundredUtilRate: number,\n points: Array<{ util: number; rate: number }>\n): BigNumber {\n const zeroRate = rateFromU32(zeroUtilRate);\n const hundredRate = rateFromU32(hundredUtilRate);\n\n // clamp utilization rate to [0, 1] for safety\n const clampedUtilizationRate = BigNumber.max(\n 0,\n BigNumber.min(1, utilizationRate)\n );\n\n // Filter out padding (where util = 0) to match on-chain behavior\n // Program enforces: no gaps, ascending order, all padding at end\n const nonPaddingPoints = points.filter((point) => point.util !== 0);\n\n // start from point (0%, zeroRate)\n let prevUtil = new BigNumber(0);\n let prevRate = zeroRate;\n\n // Iterate through non-padding custom points\n for (const point of nonPaddingPoints) {\n const pointUtil = utilFromU32(point.util);\n const pointRate = rateFromU32(point.rate);\n\n // If current utilization is <= this point's utilization,\n // interpolate between previous point and this point\n if (clampedUtilizationRate.lte(pointUtil)) {\n return calculateRateBetweenPoints(\n prevUtil,\n prevRate,\n pointUtil,\n pointRate,\n clampedUtilizationRate\n );\n }\n\n // update previous point and continue\n prevUtil = pointUtil;\n prevRate = pointRate;\n }\n\n // interpolate between points\n return calculateRateBetweenPoints(\n prevUtil,\n prevRate,\n new BigNumber(1),\n hundredRate,\n clampedUtilizationRate\n );\n}\n\nexport function computeBaseInterestRate(bank: BankType): BigNumber {\n const interestRateConfig = bank.config.interestRateConfig;\n const utilizationRate = computeUtilizationRate(bank);\n const curveType = interestRateConfig.curveType;\n\n // verify 1 is indeed the only curve type for multipoint\n if (curveType === 1) {\n return computeMultipointCurve(\n utilizationRate,\n interestRateConfig.zeroUtilRate,\n interestRateConfig.hundredUtilRate,\n interestRateConfig.points\n );\n } else {\n return computeLegacyCurve(\n utilizationRate,\n interestRateConfig.optimalUtilizationRate,\n interestRateConfig.plateauInterestRate,\n interestRateConfig.maxInterestRate\n );\n }\n}\n\nexport function computeUtilizationRate(bank: BankType): BigNumber {\n const assets = getTotalAssetQuantity(bank);\n const liabilities = getTotalLiabilityQuantity(bank);\n if (assets.isZero()) return new BigNumber(0);\n return liabilities.div(assets);\n}\n\nconst SECONDS_PER_DAY = 24 * 60 * 60;\nconst SECONDS_PER_YEAR = SECONDS_PER_DAY * 365.25;\n\nexport function computeRemainingCapacity(bank: BankType): {\n depositCapacity: BigNumber;\n borrowCapacity: BigNumber;\n} {\n const totalDeposits = getTotalAssetQuantity(bank);\n const remainingCapacity = BigNumber.max(\n 0,\n bank.config.depositLimit.minus(totalDeposits)\n );\n\n const totalBorrows = getTotalLiabilityQuantity(bank);\n const remainingBorrowCapacity = BigNumber.max(\n 0,\n bank.config.borrowLimit.minus(totalBorrows)\n );\n\n const durationSinceLastAccrual = Date.now() / 1000 - bank.lastUpdate;\n\n const { lendingRate, borrowingRate } = computeInterestRates(bank);\n\n const outstandingLendingInterest = lendingRate\n .times(durationSinceLastAccrual)\n .dividedBy(SECONDS_PER_YEAR)\n .times(totalDeposits);\n const outstandingBorrowInterest = borrowingRate\n .times(durationSinceLastAccrual)\n .dividedBy(SECONDS_PER_YEAR)\n .times(totalBorrows);\n\n const depositCapacity = remainingCapacity.minus(\n outstandingLendingInterest.times(2)\n );\n const borrowCapacity = remainingBorrowCapacity.minus(\n outstandingBorrowInterest.times(2)\n );\n\n return {\n depositCapacity,\n borrowCapacity,\n };\n}\n","import { PublicKey } from \"@solana/web3.js\";\n\nimport instructions from \"~/instructions\";\nimport { MarginfiProgram } from \"~/types\";\n\nimport { InstructionsWrapper } from \"../transaction\";\n\nimport { BankConfigOpt, BankConfigOptRaw, OracleSetup } from \"./types\";\nimport { serializeBankConfigOpt, serializeOracleSetupToIndex } from \"./utils\";\n\nexport async function freezeBankConfigIx(\n program: MarginfiProgram,\n bankAddress: PublicKey,\n bankConfigOpt: BankConfigOpt\n): Promise<InstructionsWrapper> {\n let bankConfigRaw: BankConfigOptRaw;\n if (!bankConfigOpt) {\n // todo: make bankConfigOpt optional and create function to get bankConfigOptRaw from bank\n }\n bankConfigRaw = serializeBankConfigOpt(bankConfigOpt);\n\n const ix = await instructions.makePoolConfigureBankIx(\n program,\n {\n bank: bankAddress,\n },\n {\n bankConfigOpt: {\n ...bankConfigRaw,\n assetWeightInit: null,\n assetWeightMaint: null,\n\n liabilityWeightInit: null,\n liabilityWeightMaint: null,\n\n depositLimit: null,\n borrowLimit: null,\n riskTier: null,\n assetTag: null,\n totalAssetValueInitLimit: null,\n\n interestRateConfig: null,\n operationalState: null,\n\n oracleMaxAge: null,\n permissionlessBadDebtSettlement: null,\n freezeSettings: true,\n oracleMaxConfidence: null,\n tokenlessRepaymentsAllowed: null,\n },\n }\n );\n\n return {\n instructions: [ix],\n keys: [],\n };\n}\n\ntype AddOracleToBanksIxArgs = {\n program: MarginfiProgram;\n bankAddress: PublicKey;\n feedId: PublicKey;\n oracleKey?: PublicKey;\n setup: OracleSetup;\n groupAddress?: PublicKey;\n adminAddress?: PublicKey;\n};\n\nexport async function addOracleToBanksIx({\n program,\n bankAddress,\n feedId,\n oracleKey,\n setup,\n groupAddress,\n adminAddress,\n}: AddOracleToBanksIxArgs): Promise<InstructionsWrapper> {\n const ix = await instructions.makeLendingPoolConfigureBankOracleIx(\n program,\n {\n bank: bankAddress,\n group: groupAddress,\n admin: adminAddress,\n },\n {\n setup: serializeOracleSetupToIndex(setup),\n feedId,\n },\n oracleKey ? [{ isSigner: false, isWritable: false, pubkey: oracleKey }] : []\n );\n\n return {\n instructions: [ix],\n keys: [],\n };\n}\n","import {\n PublicKey,\n StakeProgram,\n SystemProgram,\n SYSVAR_RENT_PUBKEY,\n TransactionInstruction,\n} from \"@solana/web3.js\";\nimport BN from \"bn.js\";\n\nimport instructions from \"~/instructions\";\nimport { MarginfiProgram } from \"~/types\";\nimport { SINGLE_POOL_PROGRAM_ID } from \"~/constants\";\nimport { TOKEN_PROGRAM_ID } from \"~/vendor/spl\";\nimport {\n findPoolAddress,\n findPoolStakeAddress,\n findPoolMintAddress,\n findPoolOnRampAddress,\n} from \"~/vendor/single-spl-pool\";\n\nimport {\n BankConfigOptRaw,\n BankConfigOpt,\n serializeBankConfigOpt,\n BankConfigCompactRaw,\n} from \"../bank\";\nimport { InstructionsWrapper } from \"../transaction\";\n\nexport async function makePoolConfigureBankIx(\n program: MarginfiProgram,\n bank: PublicKey,\n args: BankConfigOptRaw\n): Promise<InstructionsWrapper> {\n const ix = await instructions.makePoolConfigureBankIx(\n program,\n {\n bank: bank,\n },\n { bankConfigOpt: args }\n );\n\n return {\n instructions: [ix],\n keys: [],\n };\n}\n\nexport async function makeAddPermissionlessStakedBankIx(\n program: MarginfiProgram,\n group: PublicKey,\n voteAccountAddress: PublicKey,\n feePayer: PublicKey,\n pythOracle: PublicKey // wSOL oracle\n): Promise<InstructionsWrapper> {\n const [settingsKey] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"staked_settings\", \"utf-8\"), group.toBuffer()],\n program.programId\n );\n const poolAddress = findPoolAddress(voteAccountAddress);\n const solPool = findPoolStakeAddress(poolAddress);\n const lstMint = findPoolMintAddress(poolAddress);\n const onRampAddress = findPoolOnRampAddress(poolAddress);\n\n const keys = [\n { pubkey: poolAddress, isSigner: false, isWritable: false },\n { pubkey: onRampAddress, isSigner: false, isWritable: true },\n { pubkey: solPool, isSigner: false, isWritable: false },\n { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false },\n { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },\n { pubkey: StakeProgram.programId, isSigner: false, isWritable: false },\n ];\n\n // TODO don't hard code the instruction index? (or why not, it's not gna change is it?)\n const data = Buffer.from(Uint8Array.of(6));\n\n const onrampIx = new TransactionInstruction({\n keys,\n programId: SINGLE_POOL_PROGRAM_ID,\n data,\n });\n\n const remainingKeys = [pythOracle, lstMint, solPool];\n\n const ix = await instructions.makePoolAddPermissionlessStakedBankIx(\n program,\n {\n stakedSettings: settingsKey,\n feePayer: feePayer,\n bankMint: lstMint,\n solPool,\n stakePool: poolAddress,\n },\n remainingKeys.map((key) => ({\n pubkey: key,\n isSigner: false,\n isWritable: false,\n })),\n {\n seed: new BN(0),\n }\n );\n\n return {\n instructions: [ix],\n keys: [],\n };\n}\n\nexport async function makePoolAddBankIx(\n program: MarginfiProgram,\n group: PublicKey,\n bank: PublicKey,\n feePayer: PublicKey,\n bankMint: PublicKey,\n bankConfig: BankConfigOpt,\n tokenProgram: PublicKey = TOKEN_PROGRAM_ID,\n overrideOpt: { admin?: PublicKey; globalFeeWallet?: PublicKey } = {}\n): Promise<InstructionsWrapper> {\n let rawBankConfig = serializeBankConfigOpt(bankConfig);\n\n // TODO verify this is correct\n const rawBankConfigCompact = {\n ...rawBankConfig,\n oracleMaxAge: bankConfig.oracleMaxAge,\n auto_padding_0: [0],\n auto_padding_1: [0],\n configFlags: 0,\n } as BankConfigCompactRaw;\n\n const ix = await instructions.makePoolAddBankIx(\n program,\n {\n marginfiGroup: group,\n feePayer,\n bankMint,\n bank,\n tokenProgram,\n ...overrideOpt,\n // if two oracle keys: first is feed id, second is oracle key\n },\n {\n bankConfig: rawBankConfigCompact,\n }\n );\n\n return {\n instructions: [ix], //ix\n keys: [],\n };\n}\n","import { PublicKey } from \"@solana/web3.js\";\n\nimport { MarginfiGroupTypeDto, MarginfiGroupType } from \"../types\";\n\nexport function dtoToGroup(groupDto: MarginfiGroupTypeDto): MarginfiGroupType {\n return {\n admin: new PublicKey(groupDto.admin),\n address: new PublicKey(groupDto.address),\n };\n}\n","import { MarginfiGroupTypeDto, MarginfiGroupType } from \"../types\";\n\nexport function groupToDto(group: MarginfiGroupType): MarginfiGroupTypeDto {\n return {\n admin: group.admin.toBase58(),\n address: group.address.toBase58(),\n };\n}\n","import {\n Connection,\n PublicKey,\n StakeProgram,\n ParsedAccountData,\n LAMPORTS_PER_SOL,\n} from \"@solana/web3.js\";\n\nimport {\n findPoolAddress,\n findPoolStakeAddress,\n findPoolMintAddress,\n findPoolOnRampAddress,\n} from \"~/vendor/single-spl-pool\";\nimport { chunkedGetRawMultipleAccountInfoOrdered } from \"~/services/misc\";\nimport { MAX_U64 } from \"~/constants\";\n\nimport { ValidatorStakeGroup, StakeAccount, StakePoolMevMap } from \"../types\";\n\n/**\n * Retrieves all active stake accounts associated with a given public key grouped by validator\n *\n * @warning this is an expensive rpc call and should be heavily cached\n *\n * @param connection - Solana RPC connection\n * @param publicKey - Users's public key\n * @param opts - Options for filtering inactive stake accounts\n * @returns {Promise<ValidatorStakeGroup[]>} An array of validator stake groups\n */\nexport const fetchNativeStakeAccounts = async (\n connection: Connection,\n publicKey: PublicKey,\n opts: {\n filterInactive: boolean;\n } = {\n filterInactive: true,\n }\n): Promise<ValidatorStakeGroup[]> => {\n if (!connection || !publicKey) {\n throw new Error(\"Invalid connection or public key\");\n }\n\n try {\n const epochInfo = await connection.getEpochInfo();\n const accounts = await connection.getParsedProgramAccounts(StakeProgram.programId, {\n filters: [\n {\n memcmp: {\n offset: 12,\n bytes: publicKey.toBase58(),\n },\n },\n ],\n });\n\n const validatorMap = new Map<string, { pubkey: PublicKey; amount: number }[]>();\n\n // Map accounts to promises and run them in parallel\n await Promise.all(\n accounts.map(async (acc) => {\n const parsedAccount = acc.account.data as ParsedAccountData;\n const stakeInfo = parsedAccount.parsed.info;\n\n // filter out inactive stake accounts\n if (\n !stakeInfo.stake?.delegation ||\n (opts.filterInactive &&\n (Number(stakeInfo.stake.delegation.activationEpoch) >= epochInfo.epoch ||\n stakeInfo.stake.delegation.deactivationEpoch !== MAX_U64))\n ) {\n return;\n }\n\n const validatorAddress = stakeInfo.stake.delegation.voter;\n const accountPubkey = acc.pubkey;\n const amount = Number(stakeInfo.stake.delegation.stake) / LAMPORTS_PER_SOL;\n\n const existingAccounts = validatorMap.get(validatorAddress) || [];\n validatorMap.set(validatorAddress, [\n ...existingAccounts,\n { pubkey: accountPubkey, amount },\n ]);\n })\n );\n\n // Calculate pool keys once per validator when creating return value\n return Promise.all(\n Array.from(validatorMap.entries()).map(async ([validatorAddress, accounts]) => {\n const poolKey = findPoolAddress(new PublicKey(validatorAddress));\n const poolMintKey = findPoolMintAddress(poolKey);\n const totalStake = accounts.reduce((acc, curr) => acc + curr.amount, 0);\n const largestAccount = accounts.reduce((acc, curr) =>\n acc.amount > curr.amount ? acc : curr\n );\n const sortedAccounts = accounts.sort((a, b) => b.amount - a.amount);\n\n // if the largest account is not the first in the array, move it to the front\n const firstAccount = sortedAccounts[0];\n if (firstAccount && !firstAccount.pubkey.equals(largestAccount.pubkey)) {\n const largestIndex = sortedAccounts.indexOf(largestAccount);\n if (largestIndex > 0) {\n const [removed] = sortedAccounts.splice(largestIndex, 1);\n if (removed) {\n sortedAccounts.unshift(removed);\n }\n }\n }\n\n return {\n validator: new PublicKey(validatorAddress),\n poolKey,\n poolMintKey,\n accounts: sortedAccounts,\n totalStake,\n selectedAccount: largestAccount,\n };\n })\n );\n } catch (e) {\n console.error(\"Error getting stake accounts\", e);\n return [];\n }\n};\n\n/**\n * Gets active states for stake pools associated with staked asset banks\n *\n * @param connection - Solana RPC connection\n * @param bankInfos - Array of ExtendedBankInfo objects\n * @returns Promise<Map<string, boolean>> - Map of bank addresses to active states\n */\nexport const fetchStakePoolActiveStates = async (\n connection: Connection,\n validatorVoteAccounts: PublicKey[]\n): Promise<Map<string, boolean>> => {\n const currentEpoch = await connection.getEpochInfo();\n const activeStates = new Map<string, boolean>();\n\n const poolMintAddressRecord: Record<string, PublicKey> = {};\n const poolStakeAddressRecord: Record<string, PublicKey> = {};\n\n validatorVoteAccounts.forEach((validatorVoteAccount) => {\n const poolAddress = findPoolAddress(validatorVoteAccount);\n const poolStakeAddress = findPoolStakeAddress(poolAddress);\n const poolMintAddress = findPoolMintAddress(poolAddress);\n\n poolMintAddressRecord[validatorVoteAccount.toBase58()] = poolMintAddress;\n poolStakeAddressRecord[poolStakeAddress.toBase58()] = validatorVoteAccount;\n });\n\n const poolStakeAddressKeys = Object.keys(poolStakeAddressRecord);\n\n const poolStakeAccounts = Object.fromEntries(\n (await chunkedGetRawMultipleAccountInfoOrdered(connection, poolStakeAddressKeys))\n .map((ai, index) => {\n const key = poolStakeAddressKeys[index];\n const validatorVote = key ? poolStakeAddressRecord[key] : undefined;\n return [validatorVote, ai?.data || null];\n })\n .filter(([key]) => key !== undefined)\n );\n\n validatorVoteAccounts.map((validatorVoteAccount) => {\n const voteAccountKey = validatorVoteAccount.toBase58();\n const stakeAccount = fetchStakeAccount(poolStakeAccounts[voteAccountKey]);\n const poolMintAddress = poolMintAddressRecord[voteAccountKey];\n\n if (!poolMintAddress) {\n return;\n }\n\n if (!stakeAccount) {\n activeStates.set(poolMintAddress.toBase58(), false);\n return;\n }\n\n if (!stakeAccount.stake?.delegation) {\n activeStates.set(poolMintAddress.toBase58(), false);\n return;\n }\n\n const activationEpoch = stakeAccount.stake.delegation.activationEpoch;\n const isActive = currentEpoch.epoch > Number(activationEpoch);\n activeStates.set(validatorVoteAccount.toBase58(), isActive);\n });\n\n return activeStates;\n};\n\n/**\n * Gets APY rates for validators associated with staked asset banks\n *\n * @param validatorVoteAccounts - Array of validator vote account public keys\n * @returns Promise<Map<string, number>> - Map of bank addresses to APY rates\n */\n// export const getValidatorRates = async (validatorVoteAccounts: PublicKey[]): Promise<Map<string, number>> => {\n// const rates = new Map<string, number>();\n\n// await Promise.all(\n// validatorVoteAccounts.map(async (validatorVoteAccount) => {\n// const poolAddress = findPoolAddress(validatorVoteAccount);\n// const poolMintAddress = findPoolMintAddress(poolAddress);\n\n// try {\n// const response = await fetch(`/api/validator-info?validator=${validatorVoteAccount.toBase58()}`);\n\n// if (!response.ok) {\n// rates.set(poolMintAddress.toBase58(), 0);\n// return;\n// }\n\n// const data = await response.json();\n// rates.set(poolMintAddress.toBase58(), data.data?.total_apy ?? 0);\n// } catch (error) {\n// console.error(\"Error fetching validator rate:\", error);\n// rates.set(poolMintAddress.toBase58(), 0);\n// }\n// })\n// );\n\n// return rates;\n// };\n\nexport const fetchStakeAccount = function (data: Buffer): StakeAccount {\n let offset = 0;\n\n // Discriminant (4 bytes)\n const discriminant = data.readUInt32LE(offset);\n offset += 4;\n\n // Meta\n const rentExemptReserve = data.readBigUInt64LE(offset);\n offset += 8;\n\n // Authorized staker and withdrawer (2 public keys)\n const staker = new PublicKey(data.subarray(offset, offset + 32));\n offset += 32;\n const withdrawer = new PublicKey(data.subarray(offset, offset + 32));\n offset += 32;\n\n // Lockup: unixTimestamp, epoch, custodian\n const unixTimestamp = data.readBigUInt64LE(offset);\n offset += 8;\n const epoch = data.readBigUInt64LE(offset);\n offset += 8;\n const custodian = new PublicKey(data.subarray(offset, offset + 32));\n offset += 32;\n\n // Stake: Delegation\n const voterPubkey = new PublicKey(data.subarray(offset, offset + 32));\n offset += 32;\n const stake = data.readBigUInt64LE(offset);\n offset += 8;\n const activationEpoch = data.readBigUInt64LE(offset);\n offset += 8;\n const deactivationEpoch = data.readBigUInt64LE(offset);\n offset += 8;\n\n // Credits observed\n const creditsObserved = data.readBigUInt64LE(offset);\n\n // Return the parsed StakeAccount object\n return {\n discriminant,\n meta: {\n rentExemptReserve,\n authorized: {\n staker,\n withdrawer,\n },\n lockup: {\n unixTimestamp,\n epoch,\n custodian,\n },\n },\n stake: {\n delegation: {\n voterPubkey,\n stake,\n activationEpoch,\n deactivationEpoch,\n },\n creditsObserved,\n },\n };\n};\n\nexport const fetchStakePoolMev = async (\n connection: Connection,\n validatorVoteAccounts: PublicKey[]\n): Promise<StakePoolMevMap> => {\n const poolAddressRecord: Record<string, PublicKey> = {};\n const poolStakeAddressRecord: Record<string, PublicKey> = {};\n const onRampAddressRecord: Record<string, PublicKey> = {};\n const mev: StakePoolMevMap = new Map<string, { pool: number; onramp: number }>();\n\n validatorVoteAccounts.forEach((validatorVoteAccount) => {\n const poolAddress = findPoolAddress(validatorVoteAccount);\n const poolStakeAddress = findPoolStakeAddress(poolAddress);\n const onRampAddress = findPoolOnRampAddress(poolAddress);\n\n poolAddressRecord[validatorVoteAccount.toBase58()] = poolAddress;\n poolStakeAddressRecord[validatorVoteAccount.toBase58()] = poolStakeAddress;\n onRampAddressRecord[validatorVoteAccount.toBase58()] = onRampAddress;\n });\n\n const poolStakeAddresses = validatorVoteAccounts\n .map((validatorVoteAccount) => poolStakeAddressRecord[validatorVoteAccount.toBase58()])\n .filter((address): address is PublicKey => address !== undefined);\n\n const onRampAddresses = validatorVoteAccounts\n .map((validatorVoteAccount) => onRampAddressRecord[validatorVoteAccount.toBase58()])\n .filter((address): address is PublicKey => address !== undefined);\n\n const allAddresses = [...poolStakeAddresses, ...onRampAddresses].map((address) =>\n address.toBase58()\n );\n\n return chunkedGetRawMultipleAccountInfoOrdered(connection, allAddresses).then((accountInfos) => {\n const poolStakeInfos = accountInfos.slice(0, poolStakeAddresses.length);\n const onRampInfos = accountInfos.slice(poolStakeAddresses.length);\n const rent = 2282280;\n\n validatorVoteAccounts.forEach((validatorVoteAccount, index) => {\n const poolStakeInfo = poolStakeInfos[index];\n const onRampInfo = onRampInfos[index];\n\n if (poolStakeInfo && onRampInfo) {\n const stakeDecoded = fetchStakeAccount(poolStakeInfo.data);\n const onrampDecoded = fetchStakeAccount(onRampInfo.data);\n const poolLamps =\n poolStakeInfo.lamports - rent - Number(stakeDecoded.stake.delegation.stake.toString());\n const onrampStake = Number(onrampDecoded.stake.delegation.stake.toString());\n\n mev.set(validatorVoteAccount.toBase58(), {\n pool: poolLamps >= 1000 ? poolLamps : 0,\n onramp: onrampStake,\n });\n }\n });\n\n return mev;\n });\n};\n","import { ValidatorStakeGroup, ValidatorStakeGroupDto } from \"../types\";\n\nexport function validatorStakeGroupToDto(validatorStakeGroup: ValidatorStakeGroup): ValidatorStakeGroupDto {\n return {\n validator: validatorStakeGroup.validator.toBase58(),\n poolKey: validatorStakeGroup.poolKey.toBase58(),\n poolMintKey: validatorStakeGroup.poolMintKey.toBase58(),\n totalStake: validatorStakeGroup.totalStake,\n selectedAccount: {\n pubkey: validatorStakeGroup.selectedAccount.pubkey.toBase58(),\n amount: validatorStakeGroup.selectedAccount.amount,\n },\n accounts: validatorStakeGroup.accounts.map((account) => ({\n pubkey: account.pubkey.toBase58(),\n amount: account.amount,\n })),\n };\n}\n","import { PublicKey } from \"@solana/web3.js\";\n\nimport { ValidatorStakeGroup, ValidatorStakeGroupDto } from \"../types\";\n\nexport function dtoToValidatorStakeGroup(validatorStakeGroupDto: ValidatorStakeGroupDto): ValidatorStakeGroup {\n return {\n validator: new PublicKey(validatorStakeGroupDto.validator),\n poolKey: new PublicKey(validatorStakeGroupDto.poolKey),\n poolMintKey: new PublicKey(validatorStakeGroupDto.poolMintKey),\n totalStake: validatorStakeGroupDto.totalStake,\n selectedAccount: {\n pubkey: new PublicKey(validatorStakeGroupDto.selectedAccount.pubkey),\n amount: validatorStakeGroupDto.selectedAccount.amount,\n },\n accounts: validatorStakeGroupDto.accounts.map((account) => ({\n pubkey: new PublicKey(account.pubkey),\n amount: account.amount,\n })),\n };\n}\n","import { Connection, PublicKey } from \"@solana/web3.js\";\n\nimport { Bank } from \"~/models/bank\";\nimport { chunkedGetRawMultipleAccountInfoOrderedWithNulls } from \"~/services/misc\";\nimport {\n ObligationRaw,\n ReserveRaw,\n FarmStateRaw,\n decodeKlendReserveData,\n decodeKlendObligationData,\n decodeFarmDataRaw,\n} from \"~/vendor/klend\";\n\nexport interface KaminoMetadata {\n kaminoStates: {\n reserveState: ReserveRaw;\n obligationState: ObligationRaw;\n farmState?: FarmStateRaw;\n };\n}\n\nexport interface FetchKaminoMetadataOptions {\n connection: Connection;\n banks: Bank[];\n}\n\n/**\n * Fetch Kamino reserve, obligation, and farm states for banks with Kamino integration\n *\n * This function:\n * 1. Filters banks that have Kamino reserves/obligations\n * 2. Batch fetches all reserve and obligation data in one RPC call\n * 3. Decodes reserve and obligation states\n * 4. Identifies farms from reserve.farmCollateral addresses\n * 5. Batch fetches and decodes farm states in a second RPC call\n * 6. Returns a complete map keyed by bank address\n *\n * @param options - Connection and banks to fetch metadata for\n * @returns Map of bank addresses to their complete Kamino metadata (reserve, obligation, farm)\n */\nexport async function fetchKaminoMetadata(\n options: FetchKaminoMetadataOptions\n): Promise<Map<string, KaminoMetadata>> {\n const { connection, banks } = options;\n const kaminoMap = new Map<string, KaminoMetadata>();\n\n // Filter banks that have Kamino integration\n const kaminoBanks = banks.filter(\n (b) =>\n !b.kaminoReserve.equals(PublicKey.default) && !b.kaminoObligation.equals(PublicKey.default)\n );\n\n if (kaminoBanks.length === 0) {\n return kaminoMap;\n }\n\n // Collect keys and track indices for parallel fetch\n const keysToFetch: PublicKey[] = [];\n const bankTuples: Array<{\n bankAddress: string;\n reserveIndex: number;\n obligationIndex: number;\n }> = [];\n\n for (const bank of kaminoBanks) {\n bankTuples.push({\n bankAddress: bank.address.toBase58(),\n reserveIndex: keysToFetch.length,\n obligationIndex: keysToFetch.length + 1,\n });\n\n keysToFetch.push(bank.kaminoReserve, bank.kaminoObligation);\n }\n\n // Batch fetch all accounts in one RPC call\n const accountInfos = await chunkedGetRawMultipleAccountInfoOrderedWithNulls(\n connection,\n keysToFetch.map((k) => k.toBase58())\n );\n\n // Decode and populate map, track farm collateral addresses\n const bankByFarmKey: Record<string, string> = {};\n\n for (const tuple of bankTuples) {\n const reserveInfo = accountInfos[tuple.reserveIndex];\n const obligationInfo = accountInfos[tuple.obligationIndex];\n\n if (!reserveInfo || !obligationInfo) {\n console.warn(`Missing Kamino account data for bank ${tuple.bankAddress}`);\n continue;\n }\n\n try {\n const reserveState = decodeKlendReserveData(reserveInfo.data);\n const obligationState = decodeKlendObligationData(obligationInfo.data);\n\n // Track farm collateral for second batch fetch\n if (!reserveState.farmCollateral.equals(new PublicKey(\"11111111111111111111111111111111\"))) {\n bankByFarmKey[reserveState.farmCollateral.toBase58()] = tuple.bankAddress;\n }\n\n kaminoMap.set(tuple.bankAddress, {\n kaminoStates: {\n reserveState,\n obligationState,\n farmState: undefined,\n },\n });\n } catch (error) {\n console.warn(`Failed to decode Kamino data for bank ${tuple.bankAddress}:`, error);\n }\n }\n\n // Fetch farm states if any farm collateral keys were found\n if (Object.keys(bankByFarmKey).length > 0) {\n const farmKeys = Object.keys(bankByFarmKey);\n const farmStates = await chunkedGetRawMultipleAccountInfoOrderedWithNulls(connection, farmKeys);\n\n // Add farm states to the corresponding banks\n for (let idx = 0; idx < farmKeys.length; idx++) {\n const farmState = farmStates[idx];\n if (!farmState) {\n continue;\n }\n\n const farmKey = farmKeys[idx];\n if (!farmKey) {\n console.error(`Farm key not found for index ${idx}`);\n continue;\n }\n\n const bankAddress = bankByFarmKey[farmKey];\n if (!bankAddress) {\n console.error(`Bank address not found for farm key ${farmKey}`);\n continue;\n }\n\n const kaminoMetadata = kaminoMap.get(bankAddress);\n if (!kaminoMetadata) {\n console.error(`Kamino metadata not found for bank ${bankAddress}`);\n continue;\n }\n\n try {\n const decodedFarmState = decodeFarmDataRaw(farmState.data);\n\n // Update the existing entry with farm state\n kaminoMap.set(bankAddress, {\n kaminoStates: {\n ...kaminoMetadata.kaminoStates,\n farmState: decodedFarmState,\n },\n });\n } catch (error) {\n console.warn(`Failed to decode farm state for bank ${bankAddress}:`, error);\n }\n }\n }\n\n return kaminoMap;\n}\n","import { Connection } from \"@solana/web3.js\";\nimport { Bank } from \"~/models/bank\";\nimport { BankIntegrationMetadataMap } from \"~/types\";\nimport { fetchKaminoMetadata, KaminoMetadata } from \"./kamino/kamino.service\";\n\nexport type IntegrationType = \"kamino\"; // Future: | \"drift\" | \"solend\"\n\nexport interface FetchBankIntegrationMetadataOptions {\n connection: Connection;\n banks: Bank[];\n integrations?: IntegrationType[];\n}\n\n/**\n * Fetch metadata from all enabled integrations and merge into single map\n *\n * This orchestrator:\n * 1. Fetches data from all specified integrations in parallel\n * 2. Merges results into a single BankIntegrationMetadataMap\n * 3. Each bank can have metadata from multiple integrations\n *\n * @param options - Connection, banks, and optional integration filter\n * @returns Combined metadata map keyed by bank address\n *\n * @example\n * ```typescript\n * const metadata = await fetchBankIntegrationMetadata({\n * connection,\n * banks: allBanks,\n * integrations: [\"kamino\"], // Optional, defaults to all\n * });\n *\n * // Access Kamino data for a specific bank\n * const kaminoData = metadata[bankAddress]?.kaminoStates;\n * ```\n */\nexport async function fetchBankIntegrationMetadata(\n options: FetchBankIntegrationMetadataOptions\n): Promise<BankIntegrationMetadataMap> {\n const { connection, banks, integrations = [\"kamino\"] } = options;\n const bankIntegrationMap: BankIntegrationMetadataMap = {};\n\n // Fetch from each integration in parallel\n const fetchPromises: Promise<{\n type: IntegrationType;\n data: Map<string, KaminoMetadata>; // Future: union type for all integration metadata\n }>[] = [];\n\n if (integrations.includes(\"kamino\")) {\n fetchPromises.push(\n fetchKaminoMetadata({ connection, banks }).then(\n (kaminoMap: Map<string, KaminoMetadata>) => ({\n type: \"kamino\" as const,\n data: kaminoMap,\n })\n )\n );\n }\n\n // Future integrations:\n // if (integrations.includes(\"drift\")) {\n // fetchPromises.push(\n // fetchDriftMetadata({ connection, banks }).then((driftMap) => ({\n // type: \"drift\" as const,\n // data: driftMap,\n // }))\n // );\n // }\n //\n // if (integrations.includes(\"solend\")) {\n // fetchPromises.push(\n // fetchSolendMetadata({ connection, banks }).then((solendMap) => ({\n // type: \"solend\" as const,\n // data: solendMap,\n // }))\n // );\n // }\n\n const results = await Promise.all(fetchPromises);\n\n // Merge all results into single map\n for (const result of results) {\n for (const [bankAddress, metadata] of result.data.entries()) {\n if (!bankIntegrationMap[bankAddress]) {\n bankIntegrationMap[bankAddress] = {};\n }\n\n // Merge integration-specific metadata\n Object.assign(bankIntegrationMap[bankAddress], metadata);\n }\n }\n\n return bankIntegrationMap;\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\n\nimport { MarginfiIdlType } from \"~/idl\";\nimport { nativeToUi } from \"~/utils\";\nimport { MarginfiProgram } from \"~/types\";\n\nimport {\n BankType,\n BankRaw,\n decodeBankRaw,\n parseBankRaw,\n OraclePrice,\n PriceBias,\n getPrice,\n getTotalAssetQuantity,\n getTotalLiabilityQuantity,\n getAssetQuantity,\n getLiabilityQuantity,\n getAssetShares,\n getLiabilityShares,\n computeAssetUsdValue,\n computeLiabilityUsdValue,\n computeUsdValue,\n getAssetWeight,\n getLiabilityWeight,\n computeTvl,\n computeInterestRates,\n computeBaseInterestRate,\n computeUtilizationRate,\n computeRemainingCapacity,\n BankConfigType,\n RiskTier,\n AssetTag,\n BankConfigFlag,\n OracleSetup,\n InterestRateConfig,\n OperationalState,\n BankConfigRaw,\n parseBankConfigRaw,\n MarginRequirementType,\n} from \"../services\";\nimport { EmodeSettings } from \"./emode-settings\";\n\nconst SECONDS_PER_DAY = 24 * 60 * 60;\nconst SECONDS_PER_YEAR = SECONDS_PER_DAY * 365.25;\n\ninterface BankMetadata {\n tokenAddress: string;\n tokenName: string;\n tokenSymbol: string;\n}\n\n// ----------------------------------------------------------------------------\n// Client types\n// ----------------------------------------------------------------------------\n\nclass Bank implements BankType {\n constructor(\n public readonly address: PublicKey,\n public readonly mint: PublicKey,\n public readonly mintDecimals: number,\n public readonly group: PublicKey,\n public readonly mintRate: number | null,\n public readonly mintPrice: number,\n public readonly assetShareValue: BigNumber,\n public readonly liabilityShareValue: BigNumber,\n public readonly liquidityVault: PublicKey,\n public readonly liquidityVaultBump: number,\n public readonly liquidityVaultAuthorityBump: number,\n public readonly insuranceVault: PublicKey,\n public readonly insuranceVaultBump: number,\n public readonly insuranceVaultAuthorityBump: number,\n public readonly collectedInsuranceFeesOutstanding: BigNumber,\n public readonly feeVault: PublicKey,\n public readonly feeVaultBump: number,\n public readonly feeVaultAuthorityBump: number,\n public readonly collectedGroupFeesOutstanding: BigNumber,\n public readonly lastUpdate: number,\n public config: BankConfig,\n public readonly totalAssetShares: BigNumber,\n public readonly totalLiabilityShares: BigNumber,\n public readonly emissionsActiveBorrowing: boolean,\n public readonly emissionsActiveLending: boolean,\n public readonly emissionsRate: number,\n public readonly emissionsMint: PublicKey,\n public readonly emissionsRemaining: BigNumber,\n public readonly oracleKey: PublicKey,\n public readonly emode: EmodeSettings,\n public readonly kaminoReserve: PublicKey,\n public readonly kaminoObligation: PublicKey,\n public readonly feesDestinationAccount?: PublicKey,\n public readonly lendingPositionCount?: BigNumber,\n public readonly borrowingPositionCount?: BigNumber,\n public readonly tokenSymbol?: string\n ) {}\n\n static async fetch(\n address: PublicKey,\n program: MarginfiProgram,\n bankMetadata?: BankMetadata\n ): Promise<Bank> {\n const data: BankRaw = await program.account.bank.fetch(address);\n return Bank.fromAccountParsed(address, data, bankMetadata);\n }\n\n static decodeBankRaw(encoded: Buffer, idl: MarginfiIdlType): BankRaw {\n return decodeBankRaw(encoded, idl);\n }\n\n static fromBuffer(bankPk: PublicKey, rawData: Buffer, idl: MarginfiIdlType): Bank {\n const accountParsed = Bank.decodeBankRaw(rawData, idl);\n return Bank.fromAccountParsed(bankPk, accountParsed);\n }\n\n static fromBankType(bankType: BankType): Bank {\n const config = new BankConfig(\n bankType.config.assetWeightInit,\n bankType.config.assetWeightMaint,\n bankType.config.liabilityWeightInit,\n bankType.config.liabilityWeightMaint,\n bankType.config.depositLimit,\n bankType.config.borrowLimit,\n bankType.config.riskTier,\n bankType.config.totalAssetValueInitLimit,\n bankType.config.assetTag,\n bankType.config.oracleSetup,\n bankType.config.oracleKeys,\n bankType.config.oracleMaxAge,\n bankType.config.interestRateConfig,\n bankType.config.operationalState,\n bankType.config.oracleMaxConfidence,\n bankType.config.fixedPrice,\n bankType.config.configFlags\n );\n return new Bank(\n bankType.address,\n bankType.mint,\n bankType.mintDecimals,\n bankType.group,\n bankType.mintRate,\n bankType.mintPrice,\n bankType.assetShareValue,\n bankType.liabilityShareValue,\n bankType.liquidityVault,\n bankType.liquidityVaultBump,\n bankType.liquidityVaultAuthorityBump,\n bankType.insuranceVault,\n bankType.insuranceVaultBump,\n bankType.insuranceVaultAuthorityBump,\n bankType.collectedInsuranceFeesOutstanding,\n bankType.feeVault,\n bankType.feeVaultBump,\n bankType.feeVaultAuthorityBump,\n bankType.collectedGroupFeesOutstanding,\n bankType.lastUpdate,\n config,\n bankType.totalAssetShares,\n bankType.totalLiabilityShares,\n bankType.emissionsActiveBorrowing,\n bankType.emissionsActiveLending,\n bankType.emissionsRate,\n bankType.emissionsMint,\n bankType.emissionsRemaining,\n bankType.oracleKey,\n bankType.emode,\n bankType.kaminoReserve,\n bankType.kaminoObligation,\n bankType.feesDestinationAccount,\n bankType.lendingPositionCount,\n bankType.borrowingPositionCount,\n bankType.tokenSymbol\n );\n }\n\n static fromAccountParsed(\n address: PublicKey,\n accountParsed: BankRaw,\n bankMetadata?: BankMetadata\n ): Bank {\n const props = parseBankRaw(address, accountParsed, bankMetadata);\n return new Bank(\n props.address,\n props.mint,\n props.mintDecimals,\n props.group,\n props.mintRate,\n props.mintPrice,\n props.assetShareValue,\n props.liabilityShareValue,\n props.liquidityVault,\n props.liquidityVaultBump,\n props.liquidityVaultAuthorityBump,\n props.insuranceVault,\n props.insuranceVaultBump,\n props.insuranceVaultAuthorityBump,\n props.collectedInsuranceFeesOutstanding,\n props.feeVault,\n props.feeVaultBump,\n props.feeVaultAuthorityBump,\n props.collectedGroupFeesOutstanding,\n props.lastUpdate,\n props.config,\n props.totalAssetShares,\n props.totalLiabilityShares,\n props.emissionsActiveBorrowing,\n props.emissionsActiveLending,\n props.emissionsRate,\n props.emissionsMint,\n props.emissionsRemaining,\n props.oracleKey,\n props.emode,\n props.kaminoReserve,\n props.kaminoObligation,\n props.feesDestinationAccount,\n props.lendingPositionCount,\n props.borrowingPositionCount,\n props.tokenSymbol\n );\n }\n\n static withEmodeWeights(\n bank: Bank,\n emodeWeights: { assetWeightMaint: BigNumber; assetWeightInit: BigNumber }\n ): Bank {\n const newBank = Object.create(Bank.prototype);\n\n Object.assign(newBank, bank);\n\n newBank.config = Object.assign({}, bank.config);\n newBank.config.assetWeightInit = BigNumber.max(\n bank.config.assetWeightInit,\n emodeWeights.assetWeightInit\n );\n newBank.config.assetWeightMaint = BigNumber.max(\n bank.config.assetWeightMaint,\n emodeWeights.assetWeightMaint\n );\n\n return newBank;\n }\n\n static getPrice(\n oraclePrice: OraclePrice,\n priceBias: PriceBias = PriceBias.None,\n weightedPrice: boolean = false\n ): BigNumber {\n return getPrice(oraclePrice, priceBias, weightedPrice);\n }\n\n static computeQuantityFromUsdValue(\n oraclePrice: OraclePrice,\n usdValue: BigNumber,\n priceBias: PriceBias,\n weightedPrice: boolean\n ): BigNumber {\n const price = getPrice(oraclePrice, priceBias, weightedPrice);\n return usdValue.div(price);\n }\n\n getTotalAssetQuantity(): BigNumber {\n return getTotalAssetQuantity(this);\n }\n\n getTotalLiabilityQuantity(): BigNumber {\n return getTotalLiabilityQuantity(this);\n }\n\n getAssetQuantity(assetShares: BigNumber): BigNumber {\n return getAssetQuantity(this, assetShares);\n }\n\n getLiabilityQuantity(liabilityShares: BigNumber): BigNumber {\n return getLiabilityQuantity(this, liabilityShares);\n }\n\n getAssetShares(assetQuantity: BigNumber): BigNumber {\n return getAssetShares(this, assetQuantity);\n }\n\n getLiabilityShares(liabilityQuantity: BigNumber): BigNumber {\n return getLiabilityShares(this, liabilityQuantity);\n }\n\n computeAssetUsdValue(\n oraclePrice: OraclePrice,\n assetShares: BigNumber,\n marginRequirementType: MarginRequirementType,\n priceBias: PriceBias,\n overrideWeights?: {\n assetWeightMaint: BigNumber;\n assetWeightInit: BigNumber;\n }\n ): BigNumber {\n return computeAssetUsdValue(\n this,\n oraclePrice,\n assetShares,\n marginRequirementType,\n priceBias,\n overrideWeights\n );\n }\n\n computeLiabilityUsdValue(\n oraclePrice: OraclePrice,\n liabilityShares: BigNumber,\n marginRequirementType: MarginRequirementType,\n priceBias: PriceBias\n ): BigNumber {\n return computeLiabilityUsdValue(\n this,\n oraclePrice,\n liabilityShares,\n marginRequirementType,\n priceBias\n );\n }\n\n computeUsdValue(\n oraclePrice: OraclePrice,\n quantity: BigNumber,\n priceBias: PriceBias,\n weightedPrice: boolean,\n weight?: BigNumber,\n scaleToBase: boolean = true\n ): BigNumber {\n return computeUsdValue(\n this,\n oraclePrice,\n quantity,\n priceBias,\n weightedPrice,\n weight,\n scaleToBase\n );\n }\n\n getAssetWeight(\n marginRequirementType: MarginRequirementType,\n oraclePrice: OraclePrice,\n ignoreSoftLimits: boolean = false,\n overrideWeights?: {\n assetWeightInit: BigNumber;\n assetWeightMaint: BigNumber;\n }\n ): BigNumber {\n return getAssetWeight(this, marginRequirementType, oraclePrice, {\n ignoreSoftLimits,\n overrideWeights,\n });\n }\n\n getLiabilityWeight(marginRequirementType: MarginRequirementType): BigNumber {\n return getLiabilityWeight(this.config, marginRequirementType);\n }\n\n computeTvl(oraclePrice: OraclePrice): BigNumber {\n return computeTvl(this, oraclePrice);\n }\n\n computeInterestRates(): {\n lendingRate: BigNumber;\n borrowingRate: BigNumber;\n } {\n return computeInterestRates(this);\n }\n\n computeBaseInterestRate(): BigNumber {\n return computeBaseInterestRate(this);\n }\n\n computeUtilizationRate(): BigNumber {\n return computeUtilizationRate(this);\n }\n\n computeRemainingCapacity(): {\n depositCapacity: BigNumber;\n borrowCapacity: BigNumber;\n } {\n return computeRemainingCapacity(this);\n }\n\n describe(oraclePrice: OraclePrice): string {\n return `\nBank address: ${this.address.toBase58()}\nMint: ${this.mint.toBase58()}, decimals: ${this.mintDecimals}\n\nTotal deposits: ${nativeToUi(this.getTotalAssetQuantity(), this.mintDecimals)}\nTotal borrows: ${nativeToUi(this.getTotalLiabilityQuantity(), this.mintDecimals)}\n\nTotal assets (USD value): ${this.computeAssetUsdValue(\n oraclePrice,\n this.totalAssetShares,\n MarginRequirementType.Equity,\n PriceBias.None\n )}\nTotal liabilities (USD value): ${this.computeLiabilityUsdValue(\n oraclePrice,\n this.totalLiabilityShares,\n MarginRequirementType.Equity,\n PriceBias.None\n )}\n\nAsset price (USD): ${Bank.getPrice(oraclePrice, PriceBias.None, false)}\nAsset price Weighted (USD): ${Bank.getPrice(oraclePrice, PriceBias.None, true)}\n\nConfig:\n- Asset weight init: ${this.config.assetWeightInit.toFixed(2)}\n- Asset weight maint: ${this.config.assetWeightMaint.toFixed(2)}\n- Liability weight init: ${this.config.liabilityWeightInit.toFixed(2)}\n- Liability weight maint: ${this.config.liabilityWeightMaint.toFixed(2)}\n\n- Deposit limit: ${this.config.depositLimit}\n- Borrow limit: ${this.config.borrowLimit}\n\nLTVs:\n- Initial: ${new BigNumber(1).div(this.config.liabilityWeightInit).times(100).toFixed(2)}%\n- Maintenance: ${new BigNumber(1).div(this.config.liabilityWeightMaint).times(100).toFixed(2)}%\n`;\n }\n}\n\nclass BankConfig implements BankConfigType {\n constructor(\n public assetWeightInit: BigNumber,\n public assetWeightMaint: BigNumber,\n public readonly liabilityWeightInit: BigNumber,\n public readonly liabilityWeightMaint: BigNumber,\n public readonly depositLimit: BigNumber,\n public readonly borrowLimit: BigNumber,\n public readonly riskTier: RiskTier,\n public readonly totalAssetValueInitLimit: BigNumber,\n public readonly assetTag: AssetTag,\n public readonly oracleSetup: OracleSetup,\n public readonly oracleKeys: PublicKey[],\n public readonly oracleMaxAge: number,\n public readonly interestRateConfig: InterestRateConfig,\n public readonly operationalState: OperationalState,\n public readonly oracleMaxConfidence: number,\n public readonly fixedPrice: BigNumber,\n public readonly configFlags?: BankConfigFlag\n ) {}\n\n static fromAccountParsed(bankConfigRaw: BankConfigRaw): BankConfig {\n const bankConfig = parseBankConfigRaw(bankConfigRaw);\n return new BankConfig(\n bankConfig.assetWeightInit,\n bankConfig.assetWeightMaint,\n bankConfig.liabilityWeightInit,\n bankConfig.liabilityWeightMaint,\n bankConfig.depositLimit,\n bankConfig.borrowLimit,\n bankConfig.riskTier,\n bankConfig.totalAssetValueInitLimit,\n bankConfig.assetTag,\n bankConfig.oracleSetup,\n bankConfig.oracleKeys,\n bankConfig.oracleMaxAge,\n bankConfig.interestRateConfig,\n bankConfig.operationalState,\n bankConfig.oracleMaxConfidence,\n bankConfig.fixedPrice,\n bankConfig.configFlags\n );\n }\n}\n\nexport { Bank, BankConfig };\n","import { PublicKey } from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\n\nimport { Bank } from \"./bank\";\nimport {\n BalanceType,\n BalanceRaw,\n parseBalanceRaw,\n createEmptyBalance,\n OraclePrice,\n MarginRequirementType,\n computeBalanceUsdValue,\n getBalanceUsdValueWithPriceBias,\n computeQuantity,\n computeQuantityUi,\n computeTotalOutstandingEmissions,\n computeClaimedEmissions,\n} from \"../services\";\n\n// ----------------------------------------------------------------------------\n// Client types\n// ----------------------------------------------------------------------------\n\nclass Balance implements BalanceType {\n constructor(\n public active: boolean,\n public bankPk: PublicKey,\n public assetShares: BigNumber,\n public liabilityShares: BigNumber,\n public emissionsOutstanding: BigNumber,\n public lastUpdate: number\n ) {}\n\n static from(balanceRaw: BalanceRaw): Balance {\n const props = parseBalanceRaw(balanceRaw);\n return new Balance(\n props.active,\n props.bankPk,\n props.assetShares,\n props.liabilityShares,\n props.emissionsOutstanding,\n props.lastUpdate\n );\n }\n\n static fromBalanceType(balance: BalanceType): Balance {\n return new Balance(\n balance.active,\n balance.bankPk,\n balance.assetShares,\n balance.liabilityShares,\n balance.emissionsOutstanding,\n balance.lastUpdate\n );\n }\n\n static createEmpty(bankPk: PublicKey): Balance {\n const balance = createEmptyBalance(bankPk);\n return this.fromBalanceType(balance);\n }\n\n computeUsdValue(\n bank: Bank,\n oraclePrice: OraclePrice,\n marginRequirementType = MarginRequirementType.Equity\n ): {\n assets: BigNumber;\n liabilities: BigNumber;\n } {\n return computeBalanceUsdValue(\n this,\n bank,\n oraclePrice,\n marginRequirementType\n );\n }\n\n getUsdValueWithPriceBias(\n bank: Bank,\n oraclePrice: OraclePrice,\n marginRequirementType = MarginRequirementType.Equity\n ): {\n assets: BigNumber;\n liabilities: BigNumber;\n } {\n return getBalanceUsdValueWithPriceBias(\n this,\n bank,\n oraclePrice,\n marginRequirementType\n );\n }\n\n computeQuantity(bank: Bank): {\n assets: BigNumber;\n liabilities: BigNumber;\n } {\n return computeQuantity(this, bank);\n }\n\n computeQuantityUi(bank: Bank): {\n assets: BigNumber;\n liabilities: BigNumber;\n } {\n return computeQuantityUi(this, bank);\n }\n\n computeTotalOutstandingEmissions(bank: Bank): BigNumber {\n return computeTotalOutstandingEmissions(this, bank);\n }\n\n computeClaimedEmissions(bank: Bank, currentTimestamp: number): BigNumber {\n return computeClaimedEmissions(this, bank, currentTimestamp);\n }\n}\n\nexport { Balance };\n","import { BorshCoder } from \"@coral-xyz/anchor\";\nimport { PublicKey } from \"@solana/web3.js\";\n\nimport { MarginfiIdlType } from \"../idl\";\nimport { AccountType, MarginfiProgram } from \"../types\";\nimport {\n BankConfigOpt,\n BankConfigOptRaw,\n fetchMultipleBanks,\n InstructionsWrapper,\n makeAddPermissionlessStakedBankIx,\n makePoolAddBankIx,\n makePoolConfigureBankIx,\n MarginfiGroupRaw,\n MarginfiGroupType,\n} from \"../services\";\n\nimport { Bank } from \"./bank\";\n\n// ----------------------------------------------------------------------------\n// Client types\n// ----------------------------------------------------------------------------\n\nclass MarginfiGroup implements MarginfiGroupType {\n public address: PublicKey;\n public admin: PublicKey;\n\n constructor(admin: PublicKey, address: PublicKey) {\n this.admin = admin;\n this.address = address;\n }\n\n static async fetch(address: PublicKey, program: MarginfiProgram): Promise<MarginfiGroup> {\n const data: MarginfiGroupRaw = await program.account.marginfiGroup.fetch(address);\n return MarginfiGroup.fromAccountParsed(address, data);\n }\n\n /**\n * Fetch all banks belonging to this group\n *\n * @param program - The Marginfi program instance\n * @param feedIdMap - Optional Pyth feed ID map for oracle configuration\n * @returns Array of Bank instances for this group\n */\n async fetchBanks(program: MarginfiProgram): Promise<Bank[]> {\n const bankDatas = await fetchMultipleBanks(program, {\n groupAddress: this.address,\n });\n\n return bankDatas.map((bankData) => Bank.fromAccountParsed(bankData.address, bankData.data));\n }\n\n // ----------------------------------------------------------------------------\n // Factories\n // ----------------------------------------------------------------------------\n\n static fromAccountParsed(address: PublicKey, accountData: MarginfiGroupRaw): MarginfiGroup {\n const marginfiGroup = {\n admin: accountData.admin,\n };\n return new MarginfiGroup(marginfiGroup.admin, address);\n }\n\n static fromBuffer(address: PublicKey, rawData: Buffer, idl: MarginfiIdlType) {\n const data = MarginfiGroup.decode(rawData, idl);\n return MarginfiGroup.fromAccountParsed(address, data);\n }\n\n static decode(encoded: Buffer, idl: MarginfiIdlType): MarginfiGroupRaw {\n const coder = new BorshCoder(idl);\n return coder.accounts.decode(AccountType.MarginfiGroup, encoded);\n }\n\n static async encode(decoded: MarginfiGroupRaw, idl: MarginfiIdlType): Promise<Buffer> {\n const coder = new BorshCoder(idl);\n return await coder.accounts.encode(AccountType.MarginfiGroup, decoded);\n }\n\n // ----------------------------------------------------------------------------\n // Admin actions\n // ----------------------------------------------------------------------------\n\n // ------------------------------------------------------------------------\n // (TODO: move to Bank class)\n // ------------------------------------------------------------------------\n public async makePoolConfigureBankIx(\n program: MarginfiProgram,\n bank: PublicKey,\n args: BankConfigOptRaw\n ): Promise<InstructionsWrapper> {\n return makePoolConfigureBankIx(program, bank, args);\n }\n\n public async makeAddPermissionlessStakedBankIx(\n program: MarginfiProgram,\n voteAccountAddress: PublicKey,\n feePayer: PublicKey,\n pythOracle: PublicKey // wSOL oracle\n ): Promise<InstructionsWrapper> {\n return makeAddPermissionlessStakedBankIx(\n program,\n this.address,\n voteAccountAddress,\n feePayer,\n pythOracle\n );\n }\n\n public async makePoolAddBankIx(\n program: MarginfiProgram,\n bankPubkey: PublicKey,\n bankMint: PublicKey,\n bankConfig: BankConfigOpt,\n feePayer?: PublicKey\n ): Promise<InstructionsWrapper> {\n return makePoolAddBankIx(\n program,\n this.address,\n bankPubkey,\n feePayer ?? this.admin,\n bankMint,\n bankConfig\n );\n }\n}\n\nexport { MarginfiGroup };\n","import BigNumber from \"bignumber.js\";\n\nimport {\n HealthCacheFlags,\n HealthCacheRaw,\n HealthCacheStatus,\n HealthCacheType,\n parseHealthCacheRaw,\n} from \"../services\";\nexport class HealthCache implements HealthCacheType {\n constructor(\n public assetValue: BigNumber,\n public liabilityValue: BigNumber,\n public assetValueMaint: BigNumber,\n public liabilityValueMaint: BigNumber,\n public assetValueEquity: BigNumber,\n public liabilityValueEquity: BigNumber,\n public timestamp: BigNumber,\n public flags: HealthCacheFlags[],\n public prices: number[][],\n public simulationStatus: HealthCacheStatus\n ) {}\n\n static fromHealthCacheType(healthCacheType: HealthCacheType): HealthCache {\n return new HealthCache(\n healthCacheType.assetValue,\n healthCacheType.liabilityValue,\n healthCacheType.assetValueMaint,\n healthCacheType.liabilityValueMaint,\n healthCacheType.assetValueEquity,\n healthCacheType.liabilityValueEquity,\n healthCacheType.timestamp,\n healthCacheType.flags,\n healthCacheType.prices,\n healthCacheType.simulationStatus\n );\n }\n\n static from(healthCacheRaw: HealthCacheRaw): HealthCache {\n return this.fromHealthCacheType(parseHealthCacheRaw(healthCacheRaw));\n }\n}\n","import { PublicKey, TransactionInstruction } from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\nimport { QuoteResponse } from \"@jup-ag/api\";\n\nimport instructions from \"~/instructions\";\nimport { Amount, BankIntegrationMetadataMap, MarginfiProgram, MintData, Program } from \"~/types\";\nimport { MarginfiIdlType } from \"~/idl\";\nimport {\n AccountFlags,\n computeAccountValue,\n computeActiveEmodePairs,\n computeEmodeImpacts,\n computeFreeCollateral,\n computeFreeCollateralLegacy,\n computeHealthCheckAccounts,\n computeHealthComponents,\n computeHealthComponentsLegacy,\n computeHealthComponentsWithoutBiasLegacy,\n computeMaxBorrowForBank,\n computeMaxWithdrawForBank,\n computeNetApy,\n computeProjectedActiveBalancesNoCpi,\n computeProjectedActiveBanksNoCpi,\n decodeAccountRaw,\n getBalance,\n makeBeginFlashLoanIx,\n makeBorrowIx,\n MakeBorrowIxParams,\n makeBorrowTx,\n MakeBorrowTxParams,\n makeDepositIx,\n MakeDepositIxParams,\n makeDepositTx,\n MakeDepositTxParams,\n makeEndFlashLoanIx,\n makeFlashLoanTx,\n MakeFlashLoanTxParams,\n makeKaminoDepositTx,\n MakeKaminoDepositTxParams,\n makeKaminoWithdrawTx,\n MakeKaminoWithdrawTxParams,\n makeLoopTx,\n makePulseHealthIx,\n makeRepayIx,\n MakeRepayIxParams,\n makeRepayTx,\n MakeRepayTxParams,\n makeRepayWithCollatTx,\n MakeRepayWithCollatTxParams,\n makeWithdrawEmissionsIx,\n makeWithdrawIx,\n MakeWithdrawIxParams,\n makeWithdrawTx,\n MakeWithdrawTxParams,\n MarginfiAccountRaw,\n MarginfiAccountType,\n MarginRequirementType,\n MakeLoopTxParams,\n parseMarginfiAccountRaw,\n simulateAccountHealthCacheWithFallback,\n TransactionBuilderResult,\n} from \"~/services/account\";\nimport {\n BankType,\n EmodeImpactStatus,\n EmodePair,\n ActionEmodeImpact,\n ActiveEmodePair,\n} from \"~/services/bank\";\nimport { OraclePrice } from \"~/services/price\";\nimport {\n ExtendedTransaction,\n ExtendedV0Transaction,\n InstructionsWrapper,\n makeUnwrapSolIx,\n makeWrapSolIxs,\n} from \"~/services/transaction\";\n\nimport { Balance } from \"./balance\";\nimport { Bank } from \"./bank\";\nimport { HealthCache } from \"./health-cache\";\n\n// ----------------------------------------------------------------------------\n// Client types\n// ----------------------------------------------------------------------------\n\nclass MarginfiAccount implements MarginfiAccountType {\n constructor(\n public readonly address: PublicKey,\n public readonly group: PublicKey,\n public readonly authority: PublicKey,\n public readonly balances: Balance[],\n public readonly accountFlags: AccountFlags[],\n public readonly emissionsDestinationAccount: PublicKey,\n public healthCache: HealthCache\n ) {}\n\n /**\n * Fetches a marginfi account from on-chain data.\n *\n * @param address - The public key of the marginfi account\n * @param program - The Marginfi program instance\n *\n * @returns Promise resolving to a MarginfiAccount instance\n */\n static async fetch(address: PublicKey, program: MarginfiProgram): Promise<MarginfiAccount> {\n const data: MarginfiAccountRaw = await program.account.marginfiAccount.fetch(address);\n return MarginfiAccount.fromAccountParsed(address, data);\n }\n\n static decodeAccountRaw(encoded: Buffer, idl: MarginfiIdlType): MarginfiAccountRaw {\n return decodeAccountRaw(encoded, idl);\n }\n\n static fromAccountType(account: MarginfiAccountType) {\n return new MarginfiAccount(\n account.address,\n account.group,\n account.authority,\n account.balances.map((b) => Balance.fromBalanceType(b)),\n account.accountFlags,\n account.emissionsDestinationAccount,\n account.healthCache\n );\n }\n\n /**\n * Creates a MarginfiAccount instance from parsed account data.\n *\n * @param marginfiAccountPk - The public key of the marginfi account\n * @param accountData - The raw account data from the program\n *\n * @returns A new MarginfiAccount instance\n */\n static fromAccountParsed(marginfiAccountPk: PublicKey, accountData: MarginfiAccountRaw) {\n const props = parseMarginfiAccountRaw(marginfiAccountPk, accountData);\n return new MarginfiAccount(\n props.address,\n props.group,\n props.authority,\n props.balances.map((b) => Balance.fromBalanceType(b)),\n props.accountFlags,\n props.emissionsDestinationAccount,\n HealthCache.fromHealthCacheType(props.healthCache)\n );\n }\n\n /**\n * Simulates and updates the health cache for this account.\n *\n * Fetches current oracle prices and computes fresh health values. Returns a new\n * account instance with updated health cache (does not mutate this instance).\n *\n * @param program - The Marginfi program instance\n * @param bankMap - Map of all available banks\n * @param oraclePrices - Map of current oracle prices\n * @param bankMetadataMap - Bank integration metadata\n *\n * @returns Object containing the updated account and any errors\n */\n async simulateHealthCache(\n program: Program<MarginfiIdlType>,\n bankMap: Map<string, Bank>,\n oraclePrices: Map<string, OraclePrice>,\n bankMetadataMap: BankIntegrationMetadataMap\n ) {\n const accountWithHealthCache = await simulateAccountHealthCacheWithFallback({\n program,\n bankMap,\n oraclePrices,\n marginfiAccount: this,\n balances: this.balances,\n bankMetadataMap: bankMetadataMap,\n });\n\n return {\n account: MarginfiAccount.fromAccountType(accountWithHealthCache.marginfiAccount),\n error: accountWithHealthCache.error,\n };\n }\n\n static fromAccountDataRaw(marginfiAccountPk: PublicKey, rawData: Buffer, idl: MarginfiIdlType) {\n const marginfiAccountData = MarginfiAccount.decodeAccountRaw(rawData, idl);\n return MarginfiAccount.fromAccountParsed(marginfiAccountPk, marginfiAccountData);\n }\n // ----------------------------------------------------------------------------\n // Attributes\n // ----------------------------------------------------------------------------\n\n /**\n * Gets all balances that are currently active (non-zero).\n *\n * @returns Array of active Balance instances\n */\n get activeBalances(): Balance[] {\n return this.balances.filter((b) => b.active);\n }\n\n /**\n * Gets the balance for a specific bank.\n *\n * @param bankPk - The public key of the bank\n *\n * @returns The Balance instance for the bank (may be empty)\n */\n getBalance(bankPk: PublicKey): Balance {\n return Balance.fromBalanceType(getBalance(bankPk, this.balances));\n }\n\n /**\n * Checks if the account is disabled.\n *\n * @returns True if the account is disabled, false otherwise\n */\n get isDisabled(): boolean {\n return this.accountFlags.includes(AccountFlags.ACCOUNT_DISABLED);\n }\n\n /**\n * Checks if the account is currently in a flash loan.\n *\n * @returns True if a flash loan is active, false otherwise\n */\n get isFlashLoanEnabled(): boolean {\n return this.accountFlags.includes(AccountFlags.ACCOUNT_IN_FLASHLOAN);\n }\n\n /**\n * Checks if account authority transfer is enabled.\n *\n * @returns True if authority transfer is allowed, false otherwise\n */\n get isTransferAccountAuthorityEnabled(): boolean {\n return this.accountFlags.includes(AccountFlags.ACCOUNT_TRANSFER_AUTHORITY_ALLOWED);\n }\n\n /**\n * Sets the health cache for this account.\n *\n * Note: This mutates the account instance. Consider using simulateHealthCache()\n * for a pure functional approach that returns a new account instance.\n *\n * @param value - The new health cache to set\n */\n setHealthCache(value: HealthCache) {\n this.healthCache = value;\n }\n\n /**\n * Computes free collateral using cached health values.\n *\n * Free collateral represents the amount of collateral that is not backing any liabilities.\n *\n * @param opts - Optional configuration\n * @param opts.clamped - If true, clamps negative values to zero\n *\n * @returns The free collateral amount in USD\n */\n computeFreeCollateral(opts?: { clamped?: boolean }): BigNumber {\n return computeFreeCollateral(this, opts);\n }\n\n computeFreeCollateralLegacy(\n banks: Map<string, BankType>,\n oraclePrices: Map<string, OraclePrice>,\n opts?: { clamped?: boolean }\n ): BigNumber {\n return computeFreeCollateralLegacy(this.activeBalances, banks, oraclePrices, opts);\n }\n\n /**\n * Computes health components using cached health values.\n *\n * Returns weighted asset and liability values based on the margin requirement type.\n *\n * @param marginReqType - The margin requirement type (Initial, Maintenance, or Equity)\n *\n * @returns Object containing assets and liabilities values in USD\n */\n computeHealthComponents(marginReqType: MarginRequirementType): {\n assets: BigNumber;\n liabilities: BigNumber;\n } {\n return computeHealthComponents(this, marginReqType);\n }\n\n computeHealthComponentsLegacy(\n banks: Map<string, Bank>,\n oraclePrices: Map<string, OraclePrice>,\n marginReqType: MarginRequirementType,\n excludedBanks: PublicKey[] = []\n ): {\n assets: BigNumber;\n liabilities: BigNumber;\n } {\n return computeHealthComponentsLegacy(\n this.activeBalances,\n banks,\n oraclePrices,\n marginReqType,\n excludedBanks\n );\n }\n\n computeHealthComponentsWithoutBiasLegacy(\n banks: Map<string, Bank>,\n oraclePrices: Map<string, OraclePrice>,\n marginReqType: MarginRequirementType\n ): {\n assets: BigNumber;\n liabilities: BigNumber;\n } {\n return computeHealthComponentsWithoutBiasLegacy(\n this.activeBalances,\n banks,\n oraclePrices,\n marginReqType\n );\n }\n\n /**\n * Computes the total account value (equity).\n *\n * Account value is calculated as total assets minus total liabilities.\n *\n * @returns The account value in USD\n */\n computeAccountValue(): BigNumber {\n return computeAccountValue(this);\n }\n\n /**\n * Computes the net APY (Annual Percentage Yield) for this account.\n *\n * Takes into account all active positions and their respective interest rates.\n *\n * @param banks - Map of all available banks\n * @param oraclePrices - Map of oracle prices for all assets\n *\n * @returns The net APY as a decimal (e.g., 0.05 = 5%)\n */\n computeNetApy(banks: Map<string, BankType>, oraclePrices: Map<string, OraclePrice>): number {\n return computeNetApy(this, this.activeBalances, banks, oraclePrices);\n }\n\n /**\n * Calculates the maximum amount that can be borrowed from a bank.\n *\n * Takes into account:\n * - Free collateral available\n * - Existing deposits in the bank\n * - Risk weights and oracle prices\n * - E-mode configurations if applicable\n *\n * Formula:\n * q = (min(fc, ucb) / (price_lowest_bias * deposit_weight)) + (fc - min(fc, ucb)) / (price_highest_bias * liab_weight)\n * where fc = free collateral, ucb = untied collateral for bank\n *\n * @param banks - Map of all available banks\n * @param oraclePrices - Map of oracle prices\n * @param bankAddress - The bank to borrow from\n * @param opts - Optional configuration for e-mode and volatility\n *\n * @returns Maximum borrowable amount in UI units\n *\n * @remarks\n * NOTE FOR LIQUIDATORS: This function doesn't account for collateral received when liquidating.\n *\n * @see {@link computeMaxBorrowForBank} for implementation details\n */\n computeMaxBorrowForBank(\n banks: Map<string, BankType>,\n oraclePrices: Map<string, OraclePrice>,\n bankAddress: PublicKey,\n opts?: {\n emodeImpactStatus?: EmodeImpactStatus;\n volatilityFactor?: number;\n activePair?: ActiveEmodePair;\n }\n ): BigNumber {\n return computeMaxBorrowForBank(this, banks, oraclePrices, bankAddress, opts);\n }\n\n /**\n * Calculates the maximum amount that can be withdrawn from a bank without borrowing.\n *\n * Ensures the account remains healthy after withdrawal by checking collateral requirements.\n *\n * @param banks - Map of all available banks\n * @param oraclePrices - Map of oracle prices\n * @param bankAddress - The bank to withdraw from\n * @param opts - Optional configuration for e-mode and volatility\n *\n * @returns Maximum withdrawable amount in UI units\n *\n * @see {@link computeMaxWithdrawForBank} for implementation details\n */\n computeMaxWithdrawForBank(\n banks: Map<string, BankType>,\n oraclePrices: Map<string, OraclePrice>,\n bankAddress: PublicKey,\n opts?: {\n volatilityFactor?: number;\n activePair?: ActiveEmodePair;\n }\n ): BigNumber {\n return computeMaxWithdrawForBank(this, banks, oraclePrices, bankAddress, opts);\n }\n\n /**\n * Gets the banks required for health check calculations.\n *\n * Returns banks that have active balances, plus any mandatory banks, minus excluded banks.\n *\n * @param banks - Map of all available banks\n * @param mandatoryBanks - Banks to always include\n * @param excludedBanks - Banks to exclude\n *\n * @returns Array of banks needed for health checks\n */\n getHealthCheckAccounts(\n banks: Map<string, BankType>,\n mandatoryBanks: PublicKey[] = [],\n excludedBanks: PublicKey[] = []\n ): BankType[] {\n return computeHealthCheckAccounts(this.balances, banks, mandatoryBanks, excludedBanks);\n }\n\n /**\n * Determines which E-mode pairs are currently active for this account.\n *\n * E-mode (Efficiency Mode) allows for higher leverage when borrowing and lending\n * related assets (e.g., different stablecoins).\n *\n * @param emodePairs - All available E-mode pairs to check\n *\n * @returns Array of active E-mode pairs, or empty array if no E-mode is active\n */\n computeActiveEmodePairs(emodePairs: EmodePair[]): EmodePair[] {\n const activeLiabilities = this.activeBalances\n .filter((balance) => balance.liabilityShares.gt(0))\n .map((balance) => balance.bankPk);\n const activeCollateral = this.activeBalances\n .filter((balance) => balance.assetShares.gt(0))\n .map((balance) => balance.bankPk);\n return computeActiveEmodePairs(emodePairs, activeLiabilities, activeCollateral);\n }\n\n /**\n * Calculates how different actions would affect E-mode status.\n *\n * For each bank, simulates:\n * - Borrowing (for banks not currently borrowed from)\n * - Supplying (for supported collateral banks)\n * - Repaying (for banks with active liabilities)\n * - Withdrawing (for banks with active collateral)\n *\n * @param emodePairs - All available E-mode pairs\n * @param banks - Array of bank PublicKeys to analyze\n *\n * @returns Object mapping bank addresses to their action impact analysis\n */\n computeEmodeImpacts(\n emodePairs: EmodePair[],\n banks: PublicKey[]\n ): Record<string, ActionEmodeImpact> {\n const activeLiabilities = this.activeBalances\n .filter((balance) => balance.liabilityShares.gt(0))\n .map((balance) => balance.bankPk);\n const activeCollateral = this.activeBalances\n .filter((balance) => balance.assetShares.gt(0))\n .map((balance) => balance.bankPk);\n\n return computeEmodeImpacts(emodePairs, activeLiabilities, activeCollateral, banks);\n }\n\n // ----------------------------------------------------------------------------\n // Actions\n // ----------------------------------------------------------------------------\n\n /**\n * Creates a deposit instruction for this marginfi account.\n *\n * @param params - Deposit instruction parameters\n * @returns Promise resolving to InstructionsWrapper containing the deposit instructions\n *\n * @see {@link makeDepositIx} for detailed implementation and additional options\n */\n async makeDepositIx(\n params: Omit<MakeDepositIxParams, \"accountAddress\" | \"authority\" | \"group\">\n ): Promise<InstructionsWrapper> {\n return makeDepositIx({\n ...params,\n accountAddress: this.address,\n authority: this.authority,\n group: this.group,\n });\n }\n\n /**\n * Creates a repay instruction for this marginfi account.\n *\n * @param params - Repay instruction parameters\n * @returns Promise resolving to InstructionsWrapper containing the repay instructions\n *\n * @see {@link makeRepayIx} for detailed implementation\n */\n async makeRepayIx(\n params: Omit<MakeRepayIxParams, \"accountAddress\" | \"authority\">\n ): Promise<InstructionsWrapper> {\n return makeRepayIx({\n ...params,\n accountAddress: this.address,\n authority: this.authority,\n });\n }\n\n /**\n * Creates a withdraw instruction for this marginfi account.\n *\n * @param params - Withdraw instruction parameters\n * @returns Promise resolving to InstructionsWrapper containing the withdraw instructions\n *\n * @see {@link makeWithdrawIx} for detailed implementation\n */\n async makeWithdrawIx(\n params: Omit<MakeWithdrawIxParams, \"marginfiAccount\" | \"authority\">\n ): Promise<InstructionsWrapper> {\n return makeWithdrawIx({\n ...params,\n marginfiAccount: this,\n authority: this.authority,\n });\n }\n\n /**\n * Creates a borrow instruction for this marginfi account.\n *\n * @param params - Borrow instruction parameters\n * @returns Promise resolving to InstructionsWrapper containing the borrow instructions\n *\n * @see {@link makeBorrowIx} for detailed implementation\n */\n async makeBorrowIx(\n params: Omit<MakeBorrowIxParams, \"marginfiAccount\" | \"authority\">\n ): Promise<InstructionsWrapper> {\n return makeBorrowIx({\n ...params,\n marginfiAccount: this,\n authority: this.authority,\n });\n }\n\n /**\n * Creates a withdraw emissions instruction.\n *\n * @deprecated Rewards are now distributed offchain. If you wish to get access to emission data, please reach out.\n *\n * @param program - The Marginfi program instance\n * @param banks - Map of all available banks\n * @param mintDatas - Map of mint data for token programs\n * @param bankAddress - The bank to withdraw emissions from\n *\n * @returns Promise resolving to InstructionsWrapper containing the withdraw emissions instructions\n *\n * @see {@link makeWithdrawEmissionsIx} for implementation\n */\n async makeWithdrawEmissionsIx(\n program: MarginfiProgram,\n banks: Map<string, Bank>,\n mintDatas: Map<string, MintData>,\n bankAddress: PublicKey\n ): Promise<InstructionsWrapper> {\n return makeWithdrawEmissionsIx(program, this, banks, mintDatas, bankAddress);\n }\n\n /**\n * Creates an instruction to begin a flash loan.\n *\n * Flash loans allow borrowing assets within a single transaction, which must be\n * repaid before the transaction completes.\n *\n * @param params - Begin flash loan instruction parameters\n * @returns Promise resolving to InstructionsWrapper containing the begin flash loan instruction\n *\n * @see {@link makeBeginFlashLoanIx} for implementation\n */\n async makeBeginFlashLoanIx(\n program: MarginfiProgram,\n endIndex: number,\n authority?: PublicKey\n ): Promise<InstructionsWrapper> {\n return await makeBeginFlashLoanIx(program, this.address, endIndex, authority);\n }\n\n /**\n * Creates an instruction to end a flash loan.\n *\n * Validates that all required banks are available and constructs the end flash loan\n * instruction with proper health checks.\n *\n * @param program - The Marginfi program instance\n * @param bankMap - Map of all available banks\n * @param projectedActiveBanks - Banks that will be active after the flash loan\n * @param authority - Optional authority override (defaults to account authority)\n *\n * @returns Promise resolving to InstructionsWrapper containing the end flash loan instruction\n *\n * @throws {Error} If any projected active bank is not found in bankMap\n *\n * @see {@link makeEndFlashLoanIx} for implementation\n */\n async makeEndFlashLoanIx(\n program: MarginfiProgram,\n bankMap: Map<string, Bank>,\n projectedActiveBanks: PublicKey[],\n authority?: PublicKey\n ): Promise<InstructionsWrapper> {\n // Pre-validate all banks exist before processing\n const missingBanks = projectedActiveBanks.filter((account) => !bankMap.get(account.toBase58()));\n if (missingBanks.length > 0) {\n throw Error(\n `Banks not found for flashloan end operation: ${missingBanks.map((b) => b.toBase58()).join(\", \")}`\n );\n }\n\n const banks = projectedActiveBanks.map((account) => bankMap.get(account.toBase58())!);\n\n return makeEndFlashLoanIx(program, this.address, banks, authority);\n }\n\n /**\n * Creates an instruction to transfer this account to a new authority.\n *\n * Transfers ownership of the marginfi account to a new authority and account address.\n *\n * @param program - The Marginfi program instance\n * @param newMarginfiAccount - The new marginfi account public key\n * @param newAuthority - The new authority public key\n *\n * @returns Promise resolving to InstructionsWrapper containing the transfer instruction\n *\n * @see {@link makeAccountTransferToNewAccountIx} for implementation\n */\n async makeAccountTransferToNewAccountIx(\n program: MarginfiProgram,\n newMarginfiAccount: PublicKey,\n newAuthority: PublicKey\n ): Promise<InstructionsWrapper> {\n const accountTransferToNewAccountIx = await instructions.makeAccountTransferToNewAccountIx(\n program,\n {\n oldMarginfiAccount: this.address,\n newMarginfiAccount,\n newAuthority,\n feePayer: this.authority,\n }\n );\n return { instructions: [accountTransferToNewAccountIx], keys: [] };\n }\n\n /**\n * Creates an instruction to close this marginfi account.\n *\n * Closes the account and returns rent to the fee payer. The account must have\n * no active balances before closing.\n *\n * @param program - The Marginfi program instance\n *\n * @returns Promise resolving to InstructionsWrapper containing the close account instruction\n *\n * @see {@link makeCloseAccountIx} for implementation\n */\n async makeCloseAccountIx(program: MarginfiProgram): Promise<InstructionsWrapper> {\n const ix = await instructions.makeCloseAccountIx(program, {\n marginfiAccount: this.address,\n feePayer: this.authority,\n });\n return { instructions: [ix], keys: [] };\n }\n\n /**\n * Creates an instruction to update the account's health cache.\n *\n * Pulses the health of the account to ensure the cached health values are current.\n *\n * @param program - The Marginfi program instance\n * @param banks - Map of all available banks\n * @param mandatoryBanks - Banks that must be included in health calculation\n * @param excludedBanks - Banks to exclude from health calculation\n *\n * @returns Promise resolving to InstructionsWrapper containing the pulse health instruction\n *\n * @see {@link makePulseHealthIx} for implementation\n */\n async makePulseHealthIx(\n program: MarginfiProgram,\n banks: Map<string, Bank>,\n mandatoryBanks: PublicKey[],\n excludedBanks: PublicKey[]\n ) {\n return makePulseHealthIx(\n program,\n this.address,\n banks,\n this.balances,\n mandatoryBanks,\n excludedBanks\n );\n }\n\n /**\n * Computes which banks will be active after executing the given instructions.\n *\n * Analyzes transaction instructions to determine which banks will have active\n * balances, without making CPI calls.\n *\n * @param program - The Marginfi program instance\n * @param instructions - Transaction instructions to analyze\n *\n * @returns Array of PublicKeys for banks that will be active\n *\n * @see {@link computeProjectedActiveBanksNoCpi} for implementation\n */\n computeProjectedActiveBanksNoCpi(\n program: MarginfiProgram,\n instructions: TransactionInstruction[]\n ): PublicKey[] {\n return computeProjectedActiveBanksNoCpi(this.balances, instructions, program);\n }\n\n /**\n * Computes projected active balances after executing the given instructions.\n *\n * Simulates the effect of instructions on account balances without making CPI calls.\n * Returns the projected balances and which banks will be impacted.\n *\n * @param program - The Marginfi program instance\n * @param instructions - Transaction instructions to simulate\n * @param bankMap - Map of all available banks\n *\n * @returns Object containing projected balances and impacted banks\n *\n * @see {@link computeProjectedActiveBalancesNoCpi} for implementation\n */\n computeProjectedActiveBalancesNoCpi(\n program: MarginfiProgram,\n instructions: TransactionInstruction[],\n bankMap: Map<string, BankType>\n ): {\n projectedBalances: Balance[];\n impactedAssetsBanks: string[];\n impactedLiabilityBanks: string[];\n } {\n const { projectedBalances, ...rest } = computeProjectedActiveBalancesNoCpi(\n this.balances,\n instructions,\n program,\n bankMap\n );\n\n return {\n projectedBalances: projectedBalances.map(Balance.fromBalanceType),\n ...rest,\n };\n }\n\n /**\n * Wraps an instruction with SOL wrapping and unwrapping instructions.\n *\n * Useful for instructions that need native SOL to be converted to wSOL.\n * Automatically unwraps wSOL back to SOL after the instruction executes.\n *\n * @param ix - The instruction to wrap\n * @param amount - The amount of SOL to wrap (defaults to 0)\n *\n * @returns Array of instructions: [wrap SOL, original instruction, unwrap SOL]\n *\n * @see {@link makeWrapSolIxs} and {@link makeUnwrapSolIx} for wrap/unwrap implementation\n */\n wrapInstructionForWSol(\n ix: TransactionInstruction,\n amount: Amount = new BigNumber(0)\n ): TransactionInstruction[] {\n return [\n ...makeWrapSolIxs(this.authority, new BigNumber(amount)),\n ix,\n makeUnwrapSolIx(this.authority),\n ];\n }\n\n /**\n * Creates a loop transaction to leverage a position.\n *\n * A loop transaction:\n * 1. Deposits initial collateral (if in DEPOSIT mode)\n * 2. Borrows assets via flashloan\n * 3. Swaps borrowed assets to deposit asset (via Jupiter)\n * 4. Deposits swapped assets as additional collateral\n *\n * This creates a leveraged position by recursively depositing and borrowing.\n *\n * @param params - Loop transaction parameters\n * @param params.connection - Solana connection instance\n * @param params.oraclePrices - Map of current oracle prices\n * @param params.depositOpts - Deposit configuration (bank, amount, mode)\n * @param params.borrowOpts - Borrow configuration (bank, amount)\n * @param params.swapOpts - Jupiter swap configuration (slippage, fees)\n * @param params.addressLookupTableAccounts - Address lookup tables\n * @param params.overrideInferAccounts - Optional account overrides\n * @param params.additionalIxs - Additional instructions to include\n * @param params.crossbarUrl - Crossbar URL for oracle updates\n *\n * @returns Object containing transactions array, action index, and swap quote\n *\n * @throws {TransactionBuildingError} If swap exceeds transaction size limits\n *\n * @see {@link makeLoopTx} for detailed implementation\n */\n async makeLoopTx(params: Omit<MakeLoopTxParams, \"marginfiAccount\">): Promise<{\n transactions: ExtendedV0Transaction[];\n actionTxIndex: number;\n quoteResponse: QuoteResponse | undefined;\n }> {\n return makeLoopTx({\n ...params,\n marginfiAccount: this,\n });\n }\n\n /**\n * Creates a transaction to repay debt using collateral.\n *\n * A repay with collateral transaction:\n * 1. Withdraws collateral from the account via flashloan\n * 2. Swaps collateral to debt asset (via Jupiter)\n * 3. Repays the debt with swapped assets\n *\n * This allows users to close or reduce positions without external funds.\n *\n * @param params - Repay with collateral transaction parameters\n * @param params.connection - Solana connection instance\n * @param params.oraclePrices - Map of current oracle prices\n * @param params.withdrawOpts - Withdraw configuration (bank, amount)\n * @param params.repayOpts - Repay configuration (bank, optional amount)\n * @param params.swapOpts - Jupiter swap configuration\n * @param params.addressLookupTableAccounts - Address lookup tables\n * @param params.overrideInferAccounts - Optional account overrides\n * @param params.additionalIxs - Additional instructions to include\n * @param params.crossbarUrl - Crossbar URL for oracle updates\n *\n * @returns Object containing transactions array, action index, and swap details\n *\n * @throws {TransactionBuildingError} If swap exceeds transaction size limits\n * @throws {TransactionBuildingError} If Kamino reserve not found\n *\n * @see {@link makeRepayWithCollatTx} for detailed implementation\n */\n async makeRepayWithCollatTx(\n params: Omit<MakeRepayWithCollatTxParams, \"marginfiAccount\">\n ): Promise<{\n transactions: ExtendedV0Transaction[];\n swapQuote: QuoteResponse | undefined;\n amountToRepay: number;\n }> {\n return makeRepayWithCollatTx({\n ...params,\n marginfiAccount: this,\n });\n }\n\n /**\n * Creates a deposit transaction.\n *\n * @param params - Parameters for the deposit transaction\n * @returns Promise resolving to an ExtendedTransaction\n *\n * @see {@link makeDepositTx} for detailed implementation\n */\n async makeDepositTx(\n params: Omit<MakeDepositTxParams, \"accountAddress\" | \"authority\" | \"group\">\n ): Promise<ExtendedTransaction> {\n return makeDepositTx({\n ...params,\n accountAddress: this.address,\n authority: this.authority,\n group: this.group,\n });\n }\n\n /**\n * Creates a Kamino deposit transaction.\n *\n * @param params - Parameters for the Kamino deposit transaction\n * @returns Promise resolving to an ExtendedV0Transaction\n *\n * @see {@link makeKaminoDepositTx} for detailed implementation\n */\n async makeKaminoDepositTx(\n params: Omit<MakeKaminoDepositTxParams, \"accountAddress\" | \"authority\" | \"group\">\n ): Promise<ExtendedV0Transaction> {\n return makeKaminoDepositTx({\n ...params,\n accountAddress: this.address,\n authority: this.authority,\n group: this.group,\n });\n }\n\n /**\n * Creates a borrow transaction.\n *\n * @param params - Parameters for the borrow transaction\n * @returns Promise resolving to a TransactionBuilderResult\n *\n * @see {@link makeBorrowTx} for detailed implementation\n */\n async makeBorrowTx(\n params: Omit<MakeBorrowTxParams, \"marginfiAccount\">\n ): Promise<TransactionBuilderResult> {\n return makeBorrowTx({\n ...params,\n marginfiAccount: this,\n });\n }\n\n /**\n * Creates a repay transaction.\n *\n * @param params - Parameters for the repay transaction\n * @returns Promise resolving to an ExtendedTransaction\n *\n * @see {@link makeRepayTx} for detailed implementation\n */\n async makeRepayTx(\n params: Omit<MakeRepayTxParams, \"accountAddress\" | \"authority\">\n ): Promise<ExtendedTransaction> {\n return makeRepayTx({\n ...params,\n accountAddress: this.address,\n authority: this.authority,\n });\n }\n\n /**\n * Creates a withdraw transaction.\n *\n * @param params - Parameters for the withdraw transaction\n * @returns Promise resolving to a TransactionBuilderResult\n *\n * @see {@link makeWithdrawTx} for detailed implementation\n */\n async makeWithdrawTx(\n params: Omit<MakeWithdrawTxParams, \"marginfiAccount\">\n ): Promise<TransactionBuilderResult> {\n return makeWithdrawTx({\n ...params,\n marginfiAccount: this,\n });\n }\n\n /**\n * Creates a Kamino withdraw transaction.\n *\n * @param params - Parameters for the Kamino withdraw transaction\n * @returns Promise resolving to a TransactionBuilderResult\n *\n * @see {@link makeKaminoWithdrawTx} for detailed implementation\n */\n async makeKaminoWithdrawTx(\n params: Omit<MakeKaminoWithdrawTxParams, \"marginfiAccount\">\n ): Promise<TransactionBuilderResult> {\n return makeKaminoWithdrawTx({\n ...params,\n marginfiAccount: this,\n });\n }\n\n /**\n * Creates a flash loan transaction.\n *\n * @param params - Parameters for the flash loan transaction\n * @returns Promise resolving to flash loan transaction details\n *\n * @see {@link makeFlashLoanTx} for detailed implementation\n */\n async makeFlashLoanTx(params: Omit<MakeFlashLoanTxParams, \"marginfiAccount\">) {\n return makeFlashLoanTx({\n ...params,\n marginfiAccount: this,\n });\n }\n}\n\nexport { MarginfiAccount };\n","import { PublicKey } from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\nimport { QuoteResponse } from \"@jup-ag/api\";\n\nimport { Amount, BankIntegrationMetadataMap, MintData } from \"~/types\";\nimport { TOKEN_PROGRAM_ID } from \"~/vendor/spl\";\nimport {\n InstructionsWrapper,\n ExtendedV0Transaction,\n ExtendedTransaction,\n} from \"~/services/transaction\";\nimport {\n MakeBorrowIxOpts,\n MakeDepositIxOpts,\n MakeFlashLoanTxParams,\n MakeLoopTxParams,\n MakeRepayIxOpts,\n MakeRepayWithCollatTxParams,\n MakeWithdrawIxOpts,\n MarginRequirementType,\n TransactionBuilderResult,\n} from \"~/services/account\";\nimport { fetchProgramForMints } from \"~/services/misc\";\nimport {\n BankType,\n EmodeImpactStatus,\n EmodePair,\n ActionEmodeImpact,\n ActiveEmodePair,\n fetchBank,\n} from \"~/services/bank\";\n\nimport { MarginfiAccount } from \"./account\";\nimport { Project0Client } from \"./client\";\nimport { Balance } from \"./balance\";\nimport { HealthCache } from \"./health-cache\";\nimport { Bank } from \"./bank\";\nimport { NATIVE_MINT } from \"~/vendor/spl\";\n\n/**\n * Wrapper around MarginfiAccount that auto-injects client data for cleaner API.\n *\n * Instead of:\n * await account.makeDepositIx(program, banks, mintDatas, amount, bankAddress)\n *\n * Use:\n * await wrappedAccount.makeDepositIx(amount, bankAddress)\n *\n * The wrapper handles all the boilerplate of looking up banks, mint data, etc.\n */\nexport class MarginfiAccountWrapper {\n constructor(\n private readonly account: MarginfiAccount,\n private readonly client: Project0Client\n ) {}\n\n // ----------------------------------------------------------------------------\n // Delegate state access to underlying account\n // ----------------------------------------------------------------------------\n\n get address(): PublicKey {\n return this.account.address;\n }\n\n get group(): PublicKey {\n return this.account.group;\n }\n\n get authority(): PublicKey {\n return this.account.authority;\n }\n\n get balances(): Balance[] {\n return this.account.balances;\n }\n\n get activeBalances(): Balance[] {\n return this.account.activeBalances;\n }\n\n get accountFlags(): number[] {\n return this.account.accountFlags;\n }\n\n get emissionsDestinationAccount(): PublicKey {\n return this.account.emissionsDestinationAccount;\n }\n\n get healthCache(): HealthCache {\n return this.account.healthCache;\n }\n\n get isDisabled(): boolean {\n return this.account.isDisabled;\n }\n\n get isFlashLoanEnabled(): boolean {\n return this.account.isFlashLoanEnabled;\n }\n\n get isTransferAccountAuthorityEnabled(): boolean {\n return this.account.isTransferAccountAuthorityEnabled;\n }\n\n getBalance(bankPk: PublicKey): Balance {\n return this.account.getBalance(bankPk);\n }\n\n async getBankFromAddress(bankAddress: PublicKey): Promise<BankType> {\n const bank = this.client.bankMap.get(bankAddress.toBase58());\n if (!bank) {\n const bankData = await fetchBank(this.client.program, bankAddress);\n const bank = Bank.fromAccountParsed(bankAddress, bankData.data);\n return bank;\n } else {\n return bank;\n }\n }\n\n async getMintDataFromBank(bank: BankType): Promise<MintData> {\n let mintData = this.client.mintDataByBank.get(bank.address.toBase58());\n\n if (!mintData) {\n // For native SOL (wrapped SOL), use TOKEN_PROGRAM_ID directly\n if (bank.mint.equals(NATIVE_MINT)) {\n mintData = {\n mint: bank.mint,\n tokenProgram: TOKEN_PROGRAM_ID,\n };\n } else {\n // Try to fetch token program for other mints\n const connection = this.client.program.provider.connection;\n const fetchedMintData = await fetchProgramForMints(connection, [bank.mint]);\n const fetched = fetchedMintData[0];\n if (!fetched) {\n // Fallback to TOKEN_PROGRAM_ID for standard tokens\n console.warn(\n `Could not fetch token program for mint ${bank.mint.toBase58()}, using TOKEN_PROGRAM_ID`\n );\n mintData = {\n mint: bank.mint,\n tokenProgram: TOKEN_PROGRAM_ID,\n };\n } else {\n mintData = {\n mint: fetched.mint,\n tokenProgram: fetched.program,\n };\n }\n }\n }\n return mintData;\n }\n\n // ----------------------------------------------------------------------------\n // Wrapped transaction methods - clean API without boilerplate\n // ----------------------------------------------------------------------------\n\n /**\n * Creates a deposit instruction with auto-injected client data.\n *\n * Automatically looks up bank and mint data from the client.\n *\n * @param bankAddress - Bank address to deposit to\n * @param amount - Amount to deposit in UI units\n * @param opts - Optional configuration for wrapping SOL and overrides\n */\n async makeDepositIx(\n bankAddress: PublicKey,\n amount: Amount,\n opts: MakeDepositIxOpts = {}\n ): Promise<InstructionsWrapper> {\n if (new BigNumber(amount).lte(0)) {\n throw Error(`Deposit amount must be positive, got ${amount}`);\n }\n // Try to get bank from client, fallback to fetching it\n const bank = await this.getBankFromAddress(bankAddress);\n\n // Try to get mint data from cache, fallback to fetching it\n const mintData = await this.getMintDataFromBank(bank);\n\n return this.account.makeDepositIx({\n program: this.client.program,\n bank,\n tokenProgram: mintData.tokenProgram,\n amount,\n opts,\n });\n }\n\n /**\n * Creates a repay instruction with auto-injected client data.\n *\n * Automatically looks up bank and mint data from the client.\n *\n * @param bankAddress - Bank address to repay to\n * @param amount - Amount to repay in UI units\n * @param repayAll - If true, repays the entire borrowed position\n * @param opts - Optional configuration for wrapping SOL and overrides\n */\n async makeRepayIx(\n bankAddress: PublicKey,\n amount: Amount,\n repayAll: boolean = false,\n opts: MakeRepayIxOpts = {}\n ): Promise<InstructionsWrapper> {\n if (!repayAll && new BigNumber(amount).lte(0)) {\n throw Error(`Repay amount must be positive, got ${amount}`);\n }\n // Try to get bank from client, fallback to fetching it\n const bank = await this.getBankFromAddress(bankAddress);\n\n // Try to get mint data from cache, fallback to fetching it\n const mintData = await this.getMintDataFromBank(bank);\n\n return this.account.makeRepayIx({\n program: this.client.program,\n bank,\n tokenProgram: mintData.tokenProgram,\n amount,\n repayAll,\n opts,\n });\n }\n\n /**\n * Creates a withdraw instruction with auto-injected client data.\n *\n * Automatically looks up bank, mint data, and metadata from the client.\n *\n * @param bankAddress - Bank address to withdraw from\n * @param amount - Amount to withdraw in UI units\n * @param withdrawAll - If true, withdraws the entire collateral position\n * @param opts - Optional configuration for unwrapping SOL and overrides\n */\n async makeWithdrawIx(\n bankAddress: PublicKey,\n amount: Amount,\n withdrawAll: boolean = false,\n opts: MakeWithdrawIxOpts = {}\n ): Promise<InstructionsWrapper> {\n if (!withdrawAll && new BigNumber(amount).lte(0)) {\n throw Error(`Withdraw amount must be positive, got ${amount}`);\n }\n // Try to get bank from client, fallback to fetching it\n const bank = await this.getBankFromAddress(bankAddress);\n\n // Try to get mint data from cache, fallback to fetching it\n const mintData = await this.getMintDataFromBank(bank);\n\n return this.account.makeWithdrawIx({\n program: this.client.program,\n bank,\n bankMap: this.client.bankMap,\n tokenProgram: mintData.tokenProgram,\n amount,\n withdrawAll,\n bankMetadataMap: this.client.bankIntegrationMap,\n opts,\n });\n }\n\n /**\n * Creates a borrow instruction with auto-injected client data.\n *\n * Automatically looks up bank, mint data, and metadata from the client.\n *\n * @param bankAddress - Bank address to borrow from\n * @param amount - Amount to borrow in UI units\n * @param opts - Optional configuration for unwrapping SOL and overrides\n */\n async makeBorrowIx(\n bankAddress: PublicKey,\n amount: Amount,\n opts: MakeBorrowIxOpts = {}\n ): Promise<InstructionsWrapper> {\n if (new BigNumber(amount).lte(0)) {\n throw Error(`Borrow amount must be positive, got ${amount}`);\n }\n // Try to get bank from client, fallback to fetching it\n const bank = await this.getBankFromAddress(bankAddress);\n\n // Try to get mint data from cache, fallback to fetching it\n const mintData = await this.getMintDataFromBank(bank);\n\n return this.account.makeBorrowIx({\n program: this.client.program,\n bank,\n bankMap: this.client.bankMap,\n tokenProgram: mintData.tokenProgram,\n amount,\n opts,\n });\n }\n\n /**\n * Creates a withdraw emissions instruction with auto-injected client data.\n *\n * @param bankAddress - Bank address to withdraw emissions from\n */\n async makeWithdrawEmissionsIx(bankAddress: PublicKey): Promise<InstructionsWrapper> {\n return this.account.makeWithdrawEmissionsIx(\n this.client.program,\n this.client.bankMap,\n this.client.mintDataByBank,\n bankAddress\n );\n }\n\n /**\n * Creates a begin flash loan instruction.\n *\n * @param endIndex - End index for the flash loan\n * @param authority - Optional authority override\n */\n async makeBeginFlashLoanIx(\n endIndex: number,\n authority?: PublicKey\n ): Promise<InstructionsWrapper> {\n return this.account.makeBeginFlashLoanIx(this.client.program, endIndex, authority);\n }\n\n /**\n * Creates an end flash loan instruction with auto-injected client data.\n *\n * @param projectedActiveBanks - Array of active bank public keys after flash loan\n * @param authority - Optional authority override\n */\n async makeEndFlashLoanIx(\n projectedActiveBanks: PublicKey[],\n authority?: PublicKey\n ): Promise<InstructionsWrapper> {\n return this.account.makeEndFlashLoanIx(\n this.client.program,\n this.client.bankMap,\n projectedActiveBanks,\n authority\n );\n }\n\n /**\n * Creates an account transfer instruction.\n *\n * @param newMarginfiAccount - New account public key\n * @param newAuthority - New authority public key\n */\n async makeAccountTransferToNewAccountIx(\n newMarginfiAccount: PublicKey,\n newAuthority: PublicKey\n ): Promise<InstructionsWrapper> {\n return this.account.makeAccountTransferToNewAccountIx(\n this.client.program,\n newMarginfiAccount,\n newAuthority\n );\n }\n\n /**\n * Creates a close account instruction.\n */\n async makeCloseAccountIx(): Promise<InstructionsWrapper> {\n return this.account.makeCloseAccountIx(this.client.program);\n }\n\n /**\n * Creates a pulse health instruction with auto-injected client data.\n *\n * @param mandatoryBanks - Array of mandatory bank public keys\n * @param excludedBanks - Array of excluded bank public keys\n */\n async makePulseHealthIx(mandatoryBanks: PublicKey[], excludedBanks: PublicKey[]) {\n return this.account.makePulseHealthIx(\n this.client.program,\n this.client.bankMap,\n mandatoryBanks,\n excludedBanks\n );\n }\n\n /**\n * Creates a loop transaction (leverage) with auto-injected client data.\n *\n * Auto-injects: program, marginfiAccount, bankMap, oraclePrices, bankMetadataMap, addressLookupTables\n *\n * @param params - Loop transaction parameters (user provides: connection, depositOpts, borrowOpts, swapOpts, etc.)\n */\n async makeLoopTx(\n params: Omit<\n MakeLoopTxParams,\n | \"program\"\n | \"marginfiAccount\"\n | \"bankMap\"\n | \"oraclePrices\"\n | \"bankMetadataMap\"\n | \"addressLookupTableAccounts\"\n >\n ): Promise<{\n transactions: ExtendedV0Transaction[];\n actionTxIndex: number;\n quoteResponse: QuoteResponse | undefined;\n }> {\n const fullParams: MakeLoopTxParams = {\n ...params,\n program: this.client.program,\n marginfiAccount: this.account,\n bankMap: this.client.bankMap,\n oraclePrices: this.client.oraclePriceByBank,\n bankMetadataMap: this.client.bankIntegrationMap,\n addressLookupTableAccounts: this.client.addressLookupTables,\n };\n return this.account.makeLoopTx(fullParams);\n }\n\n /**\n * Creates a repay with collateral transaction with auto-injected client data.\n *\n * Auto-injects: program, marginfiAccount, bankMap, oraclePrices, bankMetadataMap, addressLookupTables\n *\n * @param params - Repay with collateral parameters (user provides: connection, withdrawOpts, repayOpts, swapOpts, etc.)\n */\n async makeRepayWithCollatTx(\n params: Omit<\n MakeRepayWithCollatTxParams,\n | \"program\"\n | \"marginfiAccount\"\n | \"bankMap\"\n | \"oraclePrices\"\n | \"bankMetadataMap\"\n | \"addressLookupTableAccounts\"\n >\n ): Promise<{\n transactions: ExtendedV0Transaction[];\n swapQuote: QuoteResponse | undefined;\n amountToRepay: number;\n }> {\n const fullParams: MakeRepayWithCollatTxParams = {\n ...params,\n program: this.client.program,\n marginfiAccount: this.account,\n bankMap: this.client.bankMap,\n oraclePrices: this.client.oraclePriceByBank,\n bankMetadataMap: this.client.bankIntegrationMap,\n addressLookupTableAccounts: this.client.addressLookupTables,\n };\n return this.account.makeRepayWithCollatTx(fullParams);\n }\n\n /**\n * Creates a deposit transaction with auto-injected client data.\n *\n * Automatically looks up bank and mint data, then builds and wraps instruction in a transaction.\n *\n * @param bankAddress - Bank address to deposit to\n * @param amount - Amount to deposit in UI units\n * @param opts - Optional configuration for wrapping SOL and overrides\n * @returns Promise resolving to an ExtendedTransaction\n */\n async makeDepositTx(\n bankAddress: PublicKey,\n amount: Amount,\n opts: MakeDepositIxOpts = {}\n ): Promise<ExtendedTransaction> {\n // Try to get bank from client, fallback to fetching it\n const bank = await this.getBankFromAddress(bankAddress);\n\n // Try to get mint data from cache, fallback to fetching it\n const mintData = await this.getMintDataFromBank(bank);\n\n return this.account.makeDepositTx({\n program: this.client.program,\n bank,\n tokenProgram: mintData.tokenProgram,\n amount,\n luts: this.client.addressLookupTables,\n opts,\n });\n }\n\n /**\n * Creates a Kamino deposit transaction with auto-injected client data.\n *\n * Automatically looks up bank, mint data, and connection.\n *\n * @param bankAddress - Bank address to deposit to\n * @param amount - Amount to deposit in UI units\n * @param reserve - Kamino reserve data\n * @param opts - Optional configuration\n * @returns Promise resolving to an ExtendedV0Transaction\n */\n async makeKaminoDepositTx(\n bankAddress: PublicKey,\n amount: Amount,\n reserve: any,\n opts: MakeDepositIxOpts = {}\n ): Promise<ExtendedV0Transaction> {\n // Try to get bank from client, fallback to fetching it\n const bank = await this.getBankFromAddress(bankAddress);\n\n // Try to get mint data from cache, fallback to fetching it\n const mintData = await this.getMintDataFromBank(bank);\n\n return this.account.makeKaminoDepositTx({\n program: this.client.program,\n bank,\n tokenProgram: mintData.tokenProgram,\n amount,\n reserve,\n luts: this.client.addressLookupTables,\n connection: this.client.program.provider.connection,\n opts,\n });\n }\n\n /**\n * Creates a borrow transaction with auto-injected client data.\n *\n * Automatically looks up bank, mint data, metadata, and oracle prices.\n *\n * @param bankAddress - Bank address to borrow from\n * @param amount - Amount to borrow in UI units\n * @param opts - Optional configuration\n * @returns Promise resolving to a TransactionBuilderResult\n */\n async makeBorrowTx(\n bankAddress: PublicKey,\n amount: Amount,\n opts: MakeBorrowIxOpts = {}\n ): Promise<TransactionBuilderResult> {\n // Try to get bank from client, fallback to fetching it\n const bank = await this.getBankFromAddress(bankAddress);\n\n // Try to get mint data from cache, fallback to fetching it\n const mintData = await this.getMintDataFromBank(bank);\n\n return this.account.makeBorrowTx({\n program: this.client.program,\n bank,\n tokenProgram: mintData.tokenProgram,\n amount,\n authority: this.account.authority,\n bankMap: this.client.bankMap,\n oraclePrices: this.client.oraclePriceByBank,\n bankMetadataMap: this.client.bankIntegrationMap,\n luts: this.client.addressLookupTables,\n connection: this.client.program.provider.connection,\n opts,\n });\n }\n\n /**\n * Creates a repay transaction with auto-injected client data.\n *\n * Automatically looks up bank and mint data.\n *\n * @param bankAddress - Bank address to repay to\n * @param amount - Amount to repay in UI units\n * @param repayAll - If true, repays the entire borrowed position\n * @param opts - Optional configuration\n * @returns Promise resolving to an ExtendedTransaction\n */\n async makeRepayTx(\n bankAddress: PublicKey,\n amount: Amount,\n repayAll: boolean = false,\n opts: MakeRepayIxOpts = {}\n ): Promise<ExtendedTransaction> {\n // Try to get bank from client, fallback to fetching it\n const bank = await this.getBankFromAddress(bankAddress);\n\n // Try to get mint data from cache, fallback to fetching it\n const mintData = await this.getMintDataFromBank(bank);\n\n return this.account.makeRepayTx({\n program: this.client.program,\n bank,\n tokenProgram: mintData.tokenProgram,\n amount,\n repayAll,\n luts: this.client.addressLookupTables,\n opts,\n });\n }\n\n /**\n * Creates a withdraw transaction with auto-injected client data.\n *\n * Automatically looks up bank, mint data, metadata, and oracle prices.\n *\n * @param bankAddress - Bank address to withdraw from\n * @param amount - Amount to withdraw in UI units\n * @param withdrawAll - If true, withdraws the entire collateral position\n * @param opts - Optional configuration\n * @returns Promise resolving to a TransactionBuilderResult\n */\n async makeWithdrawTx(\n bankAddress: PublicKey,\n amount: Amount,\n withdrawAll: boolean = false,\n opts: MakeWithdrawIxOpts = {}\n ): Promise<TransactionBuilderResult> {\n // Try to get bank from client, fallback to fetching it\n const bank = await this.getBankFromAddress(bankAddress);\n\n // Try to get mint data from cache, fallback to fetching it\n const mintData = await this.getMintDataFromBank(bank);\n\n return this.account.makeWithdrawTx({\n program: this.client.program,\n bank,\n tokenProgram: mintData.tokenProgram,\n amount,\n authority: this.account.authority,\n withdrawAll,\n bankMap: this.client.bankMap,\n oraclePrices: this.client.oraclePriceByBank,\n bankMetadataMap: this.client.bankIntegrationMap,\n luts: this.client.addressLookupTables,\n connection: this.client.program.provider.connection,\n opts,\n });\n }\n\n /**\n * Creates a Kamino withdraw transaction with auto-injected client data.\n *\n * Automatically looks up bank, mint data, metadata, and oracle prices.\n *\n * @param bankAddress - Bank address to withdraw from\n * @param amount - Amount to withdraw in UI units\n * @param reserve - Kamino reserve data\n * @param withdrawAll - If true, withdraws the entire collateral position\n * @param opts - Optional configuration\n * @returns Promise resolving to a TransactionBuilderResult\n */\n async makeKaminoWithdrawTx(\n bankAddress: PublicKey,\n amount: Amount,\n reserve: any,\n withdrawAll: boolean = false,\n opts: MakeWithdrawIxOpts = {}\n ): Promise<TransactionBuilderResult> {\n // Try to get bank from client, fallback to fetching it\n const bank = await this.getBankFromAddress(bankAddress);\n\n // Try to get mint data from cache, fallback to fetching it\n const mintData = await this.getMintDataFromBank(bank);\n\n return this.account.makeKaminoWithdrawTx({\n program: this.client.program,\n bank,\n tokenProgram: mintData.tokenProgram,\n amount,\n authority: this.account.authority,\n reserve,\n withdrawAll,\n bankMap: this.client.bankMap,\n oraclePrices: this.client.oraclePriceByBank,\n bankMetadataMap: this.client.bankIntegrationMap,\n luts: this.client.addressLookupTables,\n connection: this.client.program.provider.connection,\n opts,\n });\n }\n\n /**\n * Creates a flash loan transaction with auto-injected client data.\n *\n * Auto-injects: program, marginfiAccount\n *\n * @param params - Flash loan transaction parameters (user provides: ixs, endIndex, etc.)\n * @returns Promise resolving to flash loan transaction details\n */\n async makeFlashLoanTx(params: Omit<MakeFlashLoanTxParams, \"program\" | \"marginfiAccount\">) {\n return this.account.makeFlashLoanTx({\n ...params,\n program: this.client.program,\n });\n }\n\n // ----------------------------------------------------------------------------\n // Computation methods with auto-injected client data\n // ----------------------------------------------------------------------------\n\n /**\n * Simulates health cache update with auto-injected client data.\n *\n * @param bankMetadataMap - Bank metadata map (required for simulation)\n */\n async simulateHealthCache(bankMetadataMap: BankIntegrationMetadataMap) {\n return this.account.simulateHealthCache(\n this.client.program,\n this.client.bankMap,\n this.client.oraclePriceByBank,\n bankMetadataMap\n );\n }\n\n /**\n * Computes net APY with auto-injected client data.\n */\n computeNetApy(): number {\n return this.account.computeNetApy(this.client.bankMap, this.client.oraclePriceByBank);\n }\n\n /**\n * Computes account value (equity) with auto-injected client data.\n */\n computeAccountValue(): BigNumber {\n return this.account.computeAccountValue();\n }\n\n /**\n * Computes health components with auto-injected client data.\n *\n * @param marginRequirement - Margin requirement type\n */\n computeHealthComponents(marginRequirement: MarginRequirementType): {\n assets: BigNumber;\n liabilities: BigNumber;\n } {\n return this.account.computeHealthComponents(marginRequirement);\n }\n\n /**\n * Computes free collateral with auto-injected client data.\n *\n * @param opts - Optional configuration\n */\n computeFreeCollateral(opts?: { clamped?: boolean }): BigNumber {\n return this.account.computeFreeCollateral(opts);\n }\n\n /**\n * Computes max borrow for a bank with auto-injected client data.\n *\n * @param bankAddress - Bank address to check max borrow for\n * @param opts - Optional configuration for emode and volatility\n */\n computeMaxBorrowForBank(\n bankAddress: PublicKey,\n opts?: {\n emodeImpactStatus?: EmodeImpactStatus;\n volatilityFactor?: number;\n activePair?: ActiveEmodePair;\n }\n ): BigNumber {\n return this.account.computeMaxBorrowForBank(\n this.client.bankMap,\n this.client.oraclePriceByBank,\n bankAddress,\n opts\n );\n }\n\n /**\n * Computes max withdraw for a bank with auto-injected client data.\n *\n * @param bankAddress - Bank address to check max withdraw for\n * @param opts - Optional configuration for volatility and emode\n */\n computeMaxWithdrawForBank(\n bankAddress: PublicKey,\n opts?: {\n volatilityFactor?: number;\n activePair?: ActiveEmodePair;\n }\n ): BigNumber {\n return this.account.computeMaxWithdrawForBank(\n this.client.bankMap,\n this.client.oraclePriceByBank,\n bankAddress,\n opts\n );\n }\n\n /**\n * Computes active emode pairs.\n *\n * @param emodePairs - All available emode pairs\n */\n computeActiveEmodePairs(emodePairs: EmodePair[]): EmodePair[] {\n return this.account.computeActiveEmodePairs(emodePairs);\n }\n\n /**\n * Computes emode impacts.\n *\n * @param emodePairs - All available emode pairs\n * @param banks - Array of bank addresses to analyze\n */\n computeEmodeImpacts(\n emodePairs: EmodePair[],\n banks: PublicKey[]\n ): Record<string, ActionEmodeImpact> {\n return this.account.computeEmodeImpacts(emodePairs, banks);\n }\n\n /**\n * Gets health check accounts with auto-injected client data.\n *\n * @param mandatoryBanks - Array of mandatory bank public keys (default: [])\n * @param excludedBanks - Array of excluded bank public keys (default: [])\n */\n getHealthCheckAccounts(\n mandatoryBanks: PublicKey[] = [],\n excludedBanks: PublicKey[] = []\n ): BankType[] {\n return this.account.getHealthCheckAccounts(this.client.bankMap, mandatoryBanks, excludedBanks);\n }\n\n // ----------------------------------------------------------------------------\n // Helper methods\n // ----------------------------------------------------------------------------\n\n /**\n * Gets the underlying MarginfiAccount instance.\n * Useful for advanced operations that need direct access.\n */\n getUnderlyingAccount(): MarginfiAccount {\n return this.account;\n }\n\n /**\n * Gets the client instance.\n */\n getClient(): Project0Client {\n return this.client;\n }\n}\n","import { AddressLookupTableAccount, Connection, PublicKey } from \"@solana/web3.js\";\nimport { AnchorProvider, Program } from \"@coral-xyz/anchor\";\n\nimport {\n Project0Config,\n MintData,\n MarginfiProgram,\n BankIntegrationMetadataMap,\n Wallet,\n} from \"~/types\";\nimport { MARGINFI_IDL, MarginfiIdlType } from \"~/idl\";\nimport { ADDRESS_LOOKUP_TABLE_FOR_GROUP } from \"~/constants\";\nimport { fetchOracleData, OraclePrice } from \"~/services/price\";\nimport { fetchProgramForMints } from \"~/services/misc\";\nimport { fetchBankIntegrationMetadata } from \"~/services/integration\";\nimport {\n makeCreateMarginfiAccountTx,\n makeCreateAccountIxWithProjection,\n fetchMarginfiAccountAddresses,\n fetchMarginfiAccountData,\n} from \"~/services/account\";\n\nimport { MarginfiGroup } from \"./group\";\nimport { Bank } from \"./bank\";\nimport { MarginfiAccount } from \"./account\";\nimport { MarginfiAccountWrapper } from \"./account-wrapper\";\nimport { AssetTag } from \"../services\";\n\nexport class Project0Client {\n constructor(\n public readonly program: MarginfiProgram,\n public readonly group: MarginfiGroup,\n public readonly bankMap: Map<string, Bank>,\n public readonly bankIntegrationMap: BankIntegrationMetadataMap,\n public readonly oraclePriceByBank: Map<string, OraclePrice>,\n public readonly mintDataByBank: Map<string, MintData>,\n public readonly addressLookupTables: AddressLookupTableAccount[]\n ) {}\n\n /**\n * Gets all banks as an array.\n * Useful when you need to iterate over all banks.\n */\n get banks(): Bank[] {\n return Array.from(this.bankMap.values());\n }\n\n /**\n * Gets a bank by its address.\n */\n getBank(address: PublicKey): Bank | undefined {\n return this.bankMap.get(address.toBase58());\n }\n\n /**\n * Gets all banks matching the mint address.\n *\n * @param mint - The mint address to search for\n * @param assetTag - Optional asset tag to filter by (e.g., AssetTag.DEFAULT, AssetTag.KAMINO)\n * @returns Array of all matching banks (empty array if none found)\n *\n * @example\n * // Get all SOL banks\n * const allSolBanks = client.getBanksByMint(MINTS.SOL);\n *\n * // Get all Kamino SOL banks (may be multiple)\n * const kaminoBanks = client.getBanksByMint(MINTS.SOL, AssetTag.KAMINO);\n * console.log(`Found ${kaminoBanks.length} Kamino SOL banks`);\n *\n * // Iterate through all matching banks\n * kaminoBanks.forEach((bank) => {\n * console.log(`Bank: ${bank.address.toBase58()}`);\n * });\n */\n getBanksByMint(mint: PublicKey, assetTag?: AssetTag): Bank[] {\n return this.banks.filter((b) => {\n const mintMatches = b.mint.equals(mint);\n if (assetTag !== undefined) {\n return mintMatches && b.config.assetTag === assetTag;\n }\n return mintMatches;\n });\n }\n\n /**\n * Creates a transaction to initialize a new marginfi account.\n *\n * @param authority - The authority public key for the new account\n * @param accountIndex - The account index (default: 0)\n * @param thirdPartyId - Optional third party identifier\n * @returns A transaction ready to be signed and sent\n */\n async createMarginfiAccountTx(\n authority: PublicKey,\n accountIndex: number = 0,\n thirdPartyId?: number\n ) {\n return makeCreateMarginfiAccountTx(\n this.program,\n authority,\n this.group.address,\n this.addressLookupTables,\n accountIndex,\n thirdPartyId\n );\n }\n\n /**\n * Creates a marginfi account instruction with a projected account wrapper.\n *\n * Returns a wrapped account instance that can be used for building transactions\n * before the account actually exists on-chain. Useful for composing multiple\n * operations including account creation in a single flow.\n *\n * @param authority - The authority public key for the new account\n * @param accountIndex - The account index (default: 0)\n * @param thirdPartyId - Optional third party identifier\n * @returns Object containing the wrapped account and creation instruction\n */\n async createMarginfiAccountWithProjection(\n authority: PublicKey,\n accountIndex: number = 0,\n thirdPartyId?: number\n ) {\n const { account, ix } = await makeCreateAccountIxWithProjection({\n program: this.program,\n authority,\n group: this.group.address,\n accountIndex,\n thirdPartyId,\n });\n\n const marginfiAccount = MarginfiAccount.fromAccountType(account);\n const wrappedAccount = new MarginfiAccountWrapper(marginfiAccount, this);\n\n return {\n wrappedAccount,\n ix,\n };\n }\n\n /**\n * Fetches all marginfi account addresses for a given authority (wallet).\n *\n * This is useful for account discovery - finding all accounts that belong to a wallet.\n *\n * @param authority - The wallet public key to search for\n * @returns Array of account addresses owned by the authority\n */\n async getAccountAddresses(authority: PublicKey): Promise<PublicKey[]> {\n return fetchMarginfiAccountAddresses(this.program, authority, this.group.address);\n }\n\n /**\n * Fetches and wraps a marginfi account in one call.\n *\n * This is a convenience method that combines fetching the account data\n * and wrapping it for easier use. Equivalent to:\n * ```typescript\n * const account = await MarginfiAccount.fetch(address, client.program);\n * const wrapped = new MarginfiAccountWrapper(account, client);\n * ```\n *\n * @param accountAddress - The public key of the marginfi account\n * @returns A wrapped account ready to use\n */\n async fetchAccount(accountAddress: PublicKey): Promise<MarginfiAccountWrapper> {\n const bankMap = new Map(this.banks.map((b) => [b.address.toBase58(), b]));\n const { marginfiAccount } = await fetchMarginfiAccountData(\n this.program,\n accountAddress,\n bankMap,\n this.bankIntegrationMap\n );\n const account = MarginfiAccount.fromAccountType(marginfiAccount);\n return new MarginfiAccountWrapper(account, this);\n }\n\n static async initialize(connection: Connection, config: Project0Config) {\n const { groupPk, programId } = config;\n\n const idl: MarginfiIdlType = {\n ...MARGINFI_IDL,\n address: programId.toBase58(),\n };\n\n const provider = new AnchorProvider(connection, {} as Wallet, {\n ...AnchorProvider.defaultOptions(),\n commitment: connection.commitment ?? AnchorProvider.defaultOptions().commitment,\n });\n\n const program: MarginfiProgram = new Program<MarginfiIdlType>(\n idl,\n provider\n ) as unknown as MarginfiProgram;\n\n // fetch group data\n const group = await MarginfiGroup.fetch(groupPk, program);\n\n // fetch bank data\n const banksArray = await group.fetchBanks(program);\n const bankMap = new Map(banksArray.map((b) => [b.address.toBase58(), b]));\n\n // fetch oracle prices\n const { bankOraclePriceMap, mintOraclePriceMap } = await fetchOracleData(banksArray, {\n pythOpts: {\n mode: \"on-chain\",\n connection,\n },\n swbOpts: {\n mode: \"on-chain\",\n connection,\n },\n isolatedBanksOpts: {\n fetchPrices: true,\n },\n });\n\n // fetch mint data (keyed by bank address for consistency)\n const uniqueMints = Array.from(new Set(banksArray.map((b) => b.mint)));\n const mintProgramData = await fetchProgramForMints(connection, uniqueMints);\n\n const mintDataByBank = new Map<string, MintData>();\n banksArray.forEach((bank) => {\n const mintData = mintProgramData.find((m) => m.mint.equals(bank.mint));\n if (mintData) {\n mintDataByBank.set(bank.address.toBase58(), {\n mint: mintData.mint,\n tokenProgram: mintData.program,\n });\n }\n });\n\n // fetch address lookup tables\n const lutKeys = ADDRESS_LOOKUP_TABLE_FOR_GROUP[groupPk.toBase58()];\n let addressLookupTables: AddressLookupTableAccount[] = [];\n if (lutKeys) {\n addressLookupTables = (\n await Promise.all(lutKeys.map((lut) => connection.getAddressLookupTable(lut)))\n )\n .map((response) => response?.value ?? null)\n .filter((table) => table !== null);\n }\n\n // fetch bank integration metadata (Kamino reserves/obligations, etc.)\n const bankIntegrationMap = await fetchBankIntegrationMetadata({\n connection,\n banks: banksArray,\n });\n\n return new Project0Client(\n program,\n group,\n bankMap,\n bankIntegrationMap,\n bankOraclePriceMap,\n mintDataByBank,\n addressLookupTables\n );\n }\n}\n","import {\n EmodeEntry,\n EmodeFlags,\n EmodeSettingsRaw,\n EmodeSettingsType,\n EmodeTag,\n parseEmodeSettingsRaw,\n} from \"../services\";\n\nexport class EmodeSettings implements EmodeSettingsType {\n constructor(\n public emodeTag: EmodeTag,\n public timestamp: number,\n public flags: EmodeFlags[],\n public emodeEntries: EmodeEntry[]\n ) {\n this.emodeTag = emodeTag;\n this.timestamp = timestamp;\n this.flags = flags;\n this.emodeEntries = emodeEntries;\n }\n\n static fromEmodeSettingsType(emodeSettingsType: EmodeSettingsType): EmodeSettings {\n return new EmodeSettings(\n emodeSettingsType.emodeTag,\n emodeSettingsType.timestamp,\n emodeSettingsType.flags,\n emodeSettingsType.emodeEntries\n );\n }\n\n static from(emodeSettingsRaw: EmodeSettingsRaw): EmodeSettings {\n const emodeSettingsType = parseEmodeSettingsRaw(emodeSettingsRaw);\n return EmodeSettings.fromEmodeSettingsType(emodeSettingsType);\n }\n}\n"]}
|