diff --git a/packages/marginfi-client-v2/src/instructions.ts b/packages/marginfi-client-v2/src/instructions.ts index e71c586c36..524913620f 100644 --- a/packages/marginfi-client-v2/src/instructions.ts +++ b/packages/marginfi-client-v2/src/instructions.ts @@ -1,6 +1,7 @@ import { AccountMeta, PublicKey, SystemProgram } from "@solana/web3.js"; import BN from "bn.js"; import { MarginfiProgram } from "./types"; +import { BankConfigOpt } from "./models/bank"; async function makeInitMarginfiAccountIx( mfProgram: MarginfiProgram, @@ -227,6 +228,28 @@ function makeUnsetAccountFlagIx( }) .instruction(); } + +function makePoolConfigureBankIx( + mfiProgram: MarginfiProgram, + accounts: { + marginfiGroup: PublicKey; + admin: PublicKey; + bank: PublicKey; + }, + args: { + bankConfigOpt: BankConfigOpt; + } +) { + return mfiProgram.methods + .lendingPoolConfigureBank(args.bankConfigOpt) + .accounts({ + marginfiGroup: accounts.marginfiGroup, + admin: accounts.admin, + bank: accounts.bank, + }) + .instruction(); +} + const instructions = { makeDepositIx, makeRepayIx, @@ -237,6 +260,7 @@ const instructions = { makelendingAccountWithdrawEmissionIx, makeSetAccountFlagIx, makeUnsetAccountFlagIx, + makePoolConfigureBankIx, }; export default instructions; diff --git a/packages/marginfi-client-v2/src/models/bank.ts b/packages/marginfi-client-v2/src/models/bank.ts index 4ecfc03a91..6dd8229522 100644 --- a/packages/marginfi-client-v2/src/models/bank.ts +++ b/packages/marginfi-client-v2/src/models/bank.ts @@ -676,6 +676,29 @@ enum OracleSetup { SwitchboardV2 = 2, } +// BankConfigOpt Args +interface BankConfigOpt { + assetWeightInit: WrappedI80F48 | null; + assetWeightMaint: WrappedI80F48 | null; + + liabilityWeightInit: WrappedI80F48 | null; + liabilityWeightMaint: WrappedI80F48 | null; + + depositLimit: BN | null; + borrowLimit: BN | null; + riskTier: { collateral: {} } | { isolated: {} } | null; + totalAssetValueInitLimit: BN | null; + + interestRateConfig: InterestRateConfigRaw | null; + operationalState: { paused: {} } | { operational: {} } | { reduceOnly: {} } | null; + + oracle: { + setup: { none: {} } | { pythEma: {} } | { switchboardV2: {} } ; + keys: PublicKey[] ; + } | null +} + + function parseRiskTier(riskTierRaw: RiskTierRaw): RiskTier { switch (Object.keys(riskTierRaw)[0].toLowerCase()) { case "collateral": @@ -713,7 +736,7 @@ function parseOracleSetup(oracleSetupRaw: OracleSetupRaw): OracleSetup { } } -export type { InterestRateConfig }; +export type { InterestRateConfig, BankConfigOpt }; export { Bank, BankConfig, RiskTier, OperationalState, OracleSetup, parseRiskTier, parseOracleSetup }; // ---------------------------------------------------------------------------- diff --git a/packages/marginfi-client-v2/src/models/group.ts b/packages/marginfi-client-v2/src/models/group.ts index eadf6008ca..c7868b6f73 100644 --- a/packages/marginfi-client-v2/src/models/group.ts +++ b/packages/marginfi-client-v2/src/models/group.ts @@ -6,6 +6,7 @@ import { AccountType, MarginfiProgram } from "../types"; import { InstructionsWrapper } from "@mrgnlabs/mrgn-common"; import instructions from "../instructions"; import { FLASHLOAN_ENABLED_FLAG } from "../constants"; +import { BankConfigOpt } from "./bank"; // ---------------------------------------------------------------------------- // On-chain types @@ -101,6 +102,28 @@ class MarginfiGroup { keys: [], }; } + + public async makePoolConfigureBankIxb( + program: MarginfiProgram, + bank: PublicKey, + args: BankConfigOpt + ): Promise { + const ix = await instructions.makePoolConfigureBankIx( + program, + { + marginfiGroup: this.address, + + admin: this.admin, + bank: bank, + }, + { bankConfigOpt: args } + ); + + return { + instructions: [ix], + keys: [], + }; + } } export { MarginfiGroup };