@glamsystems/glam-cli 1.0.3-alpha.6 → 1.0.3

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.
Files changed (2) hide show
  1. package/main.js +935 -938
  2. package/package.json +2 -2
package/main.js CHANGED
@@ -110,7 +110,7 @@ module.exports = require("@coral-xyz/anchor");
110
110
  /* 5 */
111
111
  /***/ ((module) => {
112
112
 
113
- module.exports = /*#__PURE__*/JSON.parse('{"address":"GLAMpaME8wdTEzxtiYEAa5yD8fZbxZiz2hNtV58RZiEz","metadata":{"name":"glam_protocol","version":"1.0.1","spec":"0.1.0","description":"Glam Protocol"},"instructions":[{"name":"cancel_timelock","discriminator":[158,180,47,81,133,231,168,238],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_signer","writable":true,"signer":true}],"args":[]},{"name":"close_state","discriminator":[25,1,184,101,200,245,210,246],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_vault","writable":true,"pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"glam_state"}]}},{"name":"glam_signer","writable":true,"signer":true},{"name":"system_program","address":"11111111111111111111111111111111"}],"args":[]},{"name":"cpi_proxy","docs":["Only accessible by integration programs"],"discriminator":[65,134,48,2,7,232,199,46],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_vault","writable":true,"pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"glam_state"}]}},{"name":"glam_signer","writable":true,"signer":true},{"name":"cpi_program"},{"name":"integration_authority","signer":true},{"name":"system_program","address":"11111111111111111111111111111111"}],"args":[{"name":"data","type":"bytes"},{"name":"extra_params","type":{"vec":{"defined":{"name":"ExtraParams"}}}}]},{"name":"emergency_access_update","docs":["Bypasses the timelock for emergency updates on access control rules. Allowed operations:","- removing an integration program","- removing a delegate","- enabling/disabling glam state"],"discriminator":[207,247,157,14,87,132,230,0],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_signer","writable":true,"signer":true}],"args":[{"name":"args","type":{"defined":{"name":"EmergencyAccessUpdateArgs"}}}]},{"name":"enable_disable_protocols","discriminator":[222,198,164,163,194,161,11,171],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_signer","writable":true,"signer":true}],"args":[{"name":"integration_program","type":"pubkey"},{"name":"protocols_bitmask","type":"u16"},{"name":"set_enabled","type":"bool"}]},{"name":"extend_state","discriminator":[34,147,151,206,134,128,82,228],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_signer","writable":true,"signer":true},{"name":"system_program","address":"11111111111111111111111111111111"}],"args":[{"name":"bytes","type":"u32"}]},{"name":"grant_revoke_delegate_permissions","discriminator":[162,21,218,157,218,86,114,171],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_signer","writable":true,"signer":true}],"args":[{"name":"delegate","type":"pubkey"},{"name":"integration_program","type":"pubkey"},{"name":"protocol_bitflag","type":"u16"},{"name":"permissions_bitmask","type":"u64"},{"name":"set_granted","type":"bool"}]},{"name":"initialize_state","discriminator":[190,171,224,219,217,72,199,176],"accounts":[{"name":"glam_state","writable":true,"pda":{"seeds":[{"kind":"const","value":[115,116,97,116,101]},{"kind":"account","path":"glam_signer"},{"kind":"arg","path":"state_model.created"}]}},{"name":"glam_signer","writable":true,"signer":true},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"base_asset_mint"}],"args":[{"name":"state","type":{"defined":{"name":"StateModel"}}}]},{"name":"jupiter_swap","discriminator":[116,207,0,196,252,120,243,18],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_vault","writable":true,"pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"glam_state"}]}},{"name":"glam_signer","writable":true,"signer":true},{"name":"cpi_program","address":"JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4"},{"name":"input_vault_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"glam_vault"},{"kind":"account","path":"input_token_program"},{"kind":"account","path":"input_mint"}],"program":{"kind":"const","value":[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{"name":"output_vault_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"glam_vault"},{"kind":"account","path":"output_token_program"},{"kind":"account","path":"output_mint"}],"program":{"kind":"const","value":[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{"name":"input_mint"},{"name":"output_mint"},{"name":"input_stake_pool","optional":true},{"name":"output_stake_pool","optional":true},{"name":"associated_token_program","address":"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"},{"name":"input_token_program"},{"name":"output_token_program"}],"args":[{"name":"data","type":"bytes"}]},{"name":"link_unlink_mint_by_mint_authority","docs":["For glam mint program\'s use only"],"discriminator":[85,67,58,245,175,14,122,6],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_mint"},{"name":"glam_mint_authority","signer":true}],"args":[{"name":"link","type":"bool"}]},{"name":"reset_priced_protocols_by_mint_authority","docs":["For glam mint program\'s use only"],"discriminator":[86,95,153,145,179,181,107,235],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_mint"},{"name":"glam_mint_authority","signer":true}],"args":[]},{"name":"set_jupiter_swap_policy","discriminator":[189,182,227,165,127,148,246,189],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_signer","writable":true,"signer":true}],"args":[{"name":"policy","type":{"defined":{"name":"JupiterSwapPolicy"}}}]},{"name":"set_protocol_policy","discriminator":[37,99,61,122,227,102,182,180],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_signer","writable":true,"signer":true}],"args":[{"name":"integration_program","type":"pubkey"},{"name":"protocol_bitflag","type":"u16"},{"name":"data","type":"bytes"}]},{"name":"set_system_transfer_policy","discriminator":[102,21,157,101,19,4,100,213],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_signer","writable":true,"signer":true}],"args":[{"name":"policy","type":{"defined":{"name":"TransferPolicy"}}}]},{"name":"system_transfer","discriminator":[167,164,195,155,219,152,191,230],"accounts":[{"name":"glam_state"},{"name":"glam_vault","writable":true,"pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"glam_state"}]}},{"name":"glam_signer","writable":true,"signer":true},{"name":"cpi_program","address":"11111111111111111111111111111111"},{"name":"to","writable":true}],"args":[{"name":"lamports","type":"u64"}]},{"name":"token_transfer_checked_by_mint_authority","docs":["For glam mint program\'s use only"],"discriminator":[37,131,188,85,45,183,8,81],"accounts":[{"name":"glam_state"},{"name":"glam_vault","writable":true,"pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"glam_state"}]}},{"name":"glam_mint","writable":true},{"name":"glam_mint_authority","writable":true,"signer":true},{"name":"from","writable":true},{"name":"to","writable":true},{"name":"mint"},{"name":"token_program"}],"args":[{"name":"amount","type":"u64"},{"name":"decimals","type":"u8"}]},{"name":"update_mint_params","discriminator":[45,42,115,25,179,27,57,191],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_signer","writable":true,"signer":true}],"args":[{"name":"params","type":{"vec":{"defined":{"name":"EngineField"}}}}]},{"name":"update_mint_params_by_mint_authority","docs":["For glam mint program\'s use only, timelock is not enforced"],"discriminator":[94,160,55,53,175,225,62,118],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_mint"},{"name":"glam_mint_authority","signer":true}],"args":[{"name":"params","type":{"vec":{"defined":{"name":"EngineField"}}}}]},{"name":"update_priced_protocol","docs":["Only accessible by integration programs"],"discriminator":[10,106,94,171,118,217,62,98],"accounts":[{"name":"glam_state","writable":true},{"name":"integration_authority","signer":true}],"args":[{"name":"priced_protocol","type":{"defined":{"name":"PricedProtocol"}}}]},{"name":"update_state","discriminator":[135,112,215,75,247,185,53,176],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_signer","writable":true,"signer":true}],"args":[{"name":"state","type":{"defined":{"name":"StateModel"}}}]},{"name":"update_state_apply_timelock","discriminator":[66,12,138,80,133,85,46,220],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_signer","writable":true,"signer":true}],"args":[]}],"accounts":[{"name":"StateAccount","discriminator":[142,247,54,95,85,133,249,103]}],"errors":[{"code":48000,"name":"UnauthorizedSigner","msg":"Signer is not authorized"},{"code":48001,"name":"UnauthorizedIntegrationProgram","msg":"Integration program is not authorized"},{"code":48002,"name":"IntegrationNotEnabled","msg":"Integration is not enabled"},{"code":48003,"name":"ProtocolNotEnabled","msg":"Protocol is not enabled"},{"code":48004,"name":"GlamStateDisabled","msg":"GLAM state is disabled"},{"code":48005,"name":"ProtocolPolicyViolation","msg":"Protocol policy violation"},{"code":48006,"name":"EmergencyUpdateDenied","msg":"Emergency update denied"},{"code":48007,"name":"TimelockStillActive","msg":"Timelock still active"},{"code":48008,"name":"CannotApplyChanges","msg":"Pending changes cannot be applied due to unfulfilled requests"},{"code":48009,"name":"AssetNotBorrowable","msg":"Asset is not allowed to borrow"},{"code":48010,"name":"UnexpectedProgramOwner","msg":"Account is owned by an unexpected program"},{"code":48011,"name":"InvalidAuthority","msg":"Invalid authority"},{"code":49000,"name":"InvalidAccountType","msg":"Invalid account type"},{"code":49001,"name":"InvalidName","msg":"Invalid name"},{"code":49002,"name":"InvalidSymbol","msg":"Symbol too long: max 32 chars"},{"code":49003,"name":"InvalidUri","msg":"Uri too long: max 128 chars"},{"code":49004,"name":"InvalidAssetsLen","msg":"Too many assets: max 100"},{"code":49005,"name":"InvalidIxArgs","msg":"Invalid instruction arguments"},{"code":49006,"name":"CannotCloseState","msg":"Glam state cannot be closed: mint must be closed and state must be disabled"},{"code":49007,"name":"InvalidMintParams","msg":"Invalid mint params"},{"code":49008,"name":"InvalidRemainingAccounts","msg":"Invalid accounts: the transaction is malformed"},{"code":49009,"name":"InvalidVaultTokenAccount","msg":"Invalid vault ata"},{"code":49010,"name":"NonZeroSupply","msg":"Glam mint supply not zero"},{"code":49011,"name":"MissingAccount","msg":"An account required by the instruction is missing"},{"code":49012,"name":"InvalidTimestamp","msg":"Invalid timestamp"},{"code":49013,"name":"EngineFieldNotFound","msg":"Engine field not found"},{"code":49014,"name":"InvalidBaseAsset","msg":"Invalid base asset"},{"code":49015,"name":"InvalidProtocolBitflag","msg":"Invalid protocol bitflag"},{"code":50000,"name":"WithdrawDenied","msg":"Withdraw denied. Only vaults allow withdraws (funds and mints don\'t)"},{"code":50001,"name":"InvalidAssetForSwap","msg":"Asset cannot be swapped"},{"code":50002,"name":"UnsupportedSwapIx","msg":"Unsupported swap instruction"},{"code":50003,"name":"SlippageLimitExceeded","msg":"Max slippage exceeded"},{"code":50004,"name":"InvalidPlatformFeeForSwap","msg":"Invalid platform fee"},{"code":50005,"name":"InvalidTokenAccount","msg":"Invalid token account"},{"code":50006,"name":"InvalidVoteSide","msg":"Invalid vote side"},{"code":50007,"name":"MultipleStakeAccountsDisallowed","msg":"Multiple stake accounts disallowed"},{"code":51000,"name":"InvalidAssetPrice","msg":"Invalid asset price"},{"code":51001,"name":"InvalidStableCoinPriceForSubscribe","msg":"Subscription not allowed: invalid stable coin price"},{"code":51100,"name":"InvalidPricingOracle","msg":"Invalid oracle for asset price"},{"code":51101,"name":"PricingError","msg":"Pricing error"},{"code":51102,"name":"PriceTooOld","msg":"Price is too old"},{"code":51103,"name":"ExternalPositionsNotPriced","msg":"Not all external vault accounts are priced"},{"code":51104,"name":"VaultTokensNotPriced","msg":"Not all vault tokens are priced"},{"code":51105,"name":"PriceDivergenceTooLarge","msg":"No priced assets found"},{"code":51106,"name":"PositiveAumRequired","msg":"AUM must be positive"},{"code":51107,"name":"MathError","msg":"Math error"},{"code":51108,"name":"TypeCastingError","msg":"Type casting error"},{"code":51109,"name":"BaseAssetNotSupported","msg":"Base asset must have 6 decimals."},{"code":51110,"name":"InvalidQuoteSpotMarket","msg":"Unsupported spot market for perp quotes"},{"code":51111,"name":"UnknownExternalVaultAsset","msg":"Unknown external vault account"},{"code":51112,"name":"InvalidPriceDenom","msg":"Invalid price denom"},{"code":51113,"name":"UnexpectedDiscriminator","msg":"Invalid account: discriminator mismatch"},{"code":52000,"name":"TransfersDisabled","msg":"Policy violation: transfers disabled"},{"code":52001,"name":"InvalidPolicyAccount","msg":"Policy account is mandatory"},{"code":52002,"name":"AmountTooBig","msg":"Policy violation: amount too big"},{"code":52003,"name":"LockUp","msg":"Policy violation: lock-up has not expired"}],"types":[{"name":"AccountType","type":{"kind":"enum","variants":[{"name":"Vault"},{"name":"TokenizedVault"},{"name":"Mint"}]}},{"name":"AccruedFees","type":{"kind":"struct","fields":[{"name":"vault_subscription_fee","type":"u128"},{"name":"vault_redemption_fee","type":"u128"},{"name":"manager_subscription_fee","type":"u128"},{"name":"manager_redemption_fee","type":"u128"},{"name":"management_fee","type":"u128"},{"name":"performance_fee","type":"u128"},{"name":"protocol_base_fee","type":"u128"},{"name":"protocol_flow_fee","type":"u128"}]}},{"name":"ActionType","type":{"kind":"enum","variants":[{"name":"AddExternalAccount"},{"name":"DeleteExternalAccount"},{"name":"DeleteExternalAccountIfZeroLamports"},{"name":"DeleteExternalAccountIfZeroBalance"},{"name":"AddAsset"},{"name":"DeleteAsset"}]}},{"name":"CreatedModel","type":{"kind":"struct","fields":[{"name":"key","type":{"array":["u8",8]}},{"name":"created_by","type":"pubkey"},{"name":"created_at","type":"i64"}]}},{"name":"DelegateAcl","type":{"kind":"struct","fields":[{"name":"pubkey","type":"pubkey"},{"name":"integration_permissions","type":{"vec":{"defined":{"name":"IntegrationPermissions"}}}},{"name":"expires_at","type":"i64"}]}},{"name":"EmergencyAccessUpdateArgs","type":{"kind":"struct","fields":[{"name":"disabled_integrations","type":{"vec":"pubkey"}},{"name":"disabled_delegates","type":{"vec":"pubkey"}},{"name":"state_enabled","type":{"option":"bool"}}]}},{"name":"EngineField","type":{"kind":"struct","fields":[{"name":"name","type":{"defined":{"name":"EngineFieldName"}}},{"name":"value","type":{"defined":{"name":"EngineFieldValue"}}}]}},{"name":"EngineFieldName","type":{"kind":"enum","variants":[{"name":"Owner"},{"name":"PortfolioManagerName"},{"name":"Name"},{"name":"Uri"},{"name":"Assets"},{"name":"DelegateAcls"},{"name":"IntegrationAcls"},{"name":"TimelockDuration"},{"name":"Borrowable"},{"name":"DefaultAccountStateFrozen"},{"name":"PermanentDelegate"},{"name":"NotifyAndSettle"},{"name":"FeeStructure"},{"name":"FeeParams"},{"name":"ClaimableFees"},{"name":"ClaimedFees"},{"name":"OracleConfigs"}]}},{"name":"EngineFieldValue","type":{"kind":"enum","variants":[{"name":"Boolean","fields":[{"name":"val","type":"bool"}]},{"name":"U8","fields":[{"name":"val","type":"u8"}]},{"name":"U32","fields":[{"name":"val","type":"u32"}]},{"name":"U64","fields":[{"name":"val","type":"u64"}]},{"name":"String","fields":[{"name":"val","type":"string"}]},{"name":"Pubkey","fields":[{"name":"val","type":"pubkey"}]},{"name":"VecPubkey","fields":[{"name":"val","type":{"vec":"pubkey"}}]},{"name":"VecU8","fields":[{"name":"val","type":"bytes"}]},{"name":"VecU32","fields":[{"name":"val","type":{"vec":"u32"}}]},{"name":"VecDelegateAcl","fields":[{"name":"val","type":{"vec":{"defined":{"name":"DelegateAcl"}}}}]},{"name":"VecIntegrationAcl","fields":[{"name":"val","type":{"vec":{"defined":{"name":"IntegrationAcl"}}}}]},{"name":"FeeStructure","fields":[{"name":"val","type":{"defined":{"name":"FeeStructure"}}}]},{"name":"FeeParams","fields":[{"name":"val","type":{"defined":{"name":"FeeParams"}}}]},{"name":"AccruedFees","fields":[{"name":"val","type":{"defined":{"name":"AccruedFees"}}}]},{"name":"NotifyAndSettle","fields":[{"name":"val","type":{"defined":{"name":"NotifyAndSettle"}}}]},{"name":"OracleConfigs","fields":[{"name":"val","type":{"defined":{"name":"OracleConfigs"}}}]}]}},{"name":"EntryExitFees","type":{"kind":"struct","fields":[{"name":"subscription_fee_bps","type":"u16"},{"name":"redemption_fee_bps","type":"u16"}]}},{"name":"ExtraParams","type":{"kind":"struct","fields":[{"name":"action_type","type":{"defined":{"name":"ActionType"}}},{"name":"pubkey","type":"pubkey"},{"name":"amount","type":{"option":"u64"}}]}},{"name":"FeeParams","type":{"kind":"struct","fields":[{"name":"year_in_seconds","type":"u32"},{"name":"pa_high_water_mark","type":"i128"},{"name":"pa_last_nav","type":"i128"},{"name":"last_aum","type":"i128"},{"name":"last_performance_fee_crystallized","type":"i64"},{"name":"last_management_fee_crystallized","type":"i64"},{"name":"last_protocol_fee_crystallized","type":"i64"}]}},{"name":"FeeStructure","type":{"kind":"struct","fields":[{"name":"vault","type":{"defined":{"name":"EntryExitFees"}}},{"name":"manager","type":{"defined":{"name":"EntryExitFees"}}},{"name":"management","type":{"defined":{"name":"ManagementFee"}}},{"name":"performance","type":{"defined":{"name":"PerformanceFee"}}},{"name":"protocol","type":{"defined":{"name":"ProtocolFees"}}}]}},{"name":"HurdleType","type":{"kind":"enum","variants":[{"name":"Hard"},{"name":"Soft"}]}},{"name":"IntegrationAcl","docs":["An integration program can have multiple protocols supported.","Enabled protocols are stored in a bitmask, and each protocol can have its own policy."],"type":{"kind":"struct","fields":[{"name":"integration_program","type":"pubkey"},{"name":"protocols_bitmask","type":"u16"},{"name":"protocol_policies","type":{"vec":{"defined":{"name":"ProtocolPolicy"}}}}]}},{"name":"IntegrationPermissions","docs":["Stores delegate permissions for an integration program."],"type":{"kind":"struct","fields":[{"name":"integration_program","type":"pubkey"},{"name":"protocol_permissions","type":{"vec":{"defined":{"name":"ProtocolPermissions"}}}}]}},{"name":"JupiterSwapPolicy","type":{"kind":"struct","fields":[{"name":"max_slippage_bps","type":"u16"},{"name":"swap_allowlist","type":{"option":{"vec":"pubkey"}}}]}},{"name":"ManagementFee","type":{"kind":"struct","fields":[{"name":"fee_bps","type":"u16"}]}},{"name":"NoticePeriodType","type":{"kind":"enum","variants":[{"name":"Hard"},{"name":"Soft"}]}},{"name":"NotifyAndSettle","type":{"kind":"struct","fields":[{"name":"model","type":{"defined":{"name":"ValuationModel"}}},{"name":"permissionless_fulfillment","type":"bool"},{"name":"subscribe_notice_period_type","type":{"defined":{"name":"NoticePeriodType"}}},{"name":"subscribe_notice_period","type":"u64"},{"name":"subscribe_settlement_period","type":"u64"},{"name":"subscribe_cancellation_window","type":"u64"},{"name":"redeem_notice_period_type","type":{"defined":{"name":"NoticePeriodType"}}},{"name":"redeem_notice_period","type":"u64"},{"name":"redeem_settlement_period","type":"u64"},{"name":"redeem_cancellation_window","type":"u64"},{"name":"time_unit","type":{"defined":{"name":"TimeUnit"}}},{"name":"_padding","type":{"array":["u8",3]}}]}},{"name":"OracleConfigs","docs":["Vault-specific oracle configs. If available, these configs are preferred over the global config."],"type":{"kind":"struct","fields":[{"name":"max_ages_seconds","type":{"vec":{"array":["u16",2]}}},{"name":"padding","type":{"array":["u8",12]}}]}},{"name":"PerformanceFee","type":{"kind":"struct","fields":[{"name":"fee_bps","type":"u16"},{"name":"hurdle_rate_bps","type":"u16"},{"name":"hurdle_type","type":{"defined":{"name":"HurdleType"}}}]}},{"name":"PricedProtocol","type":{"kind":"struct","fields":[{"name":"rent","type":"u64"},{"name":"amount","type":"i128"},{"name":"decimals","type":"u8"},{"name":"last_updated_slot","type":"u64"},{"name":"integration_program","type":"pubkey"},{"name":"protocol_bitflag","type":"u16"},{"name":"positions","type":{"vec":"pubkey"}}]}},{"name":"ProtocolFees","type":{"kind":"struct","fields":[{"name":"base_fee_bps","type":"u16"},{"name":"flow_fee_bps","type":"u16"}]}},{"name":"ProtocolPermissions","docs":["Represents a delegate\'s permissions for a specific protocol"],"type":{"kind":"struct","fields":[{"name":"protocol_bitflag","type":"u16"},{"name":"permissions_bitmask","type":"u64"}]}},{"name":"ProtocolPolicy","docs":["Stores policy data for an integrated protocol.","Integration programs serialize/deserialize this data."],"type":{"kind":"struct","fields":[{"name":"protocol_bitflag","type":"u16"},{"name":"data","type":"bytes"}]}},{"name":"StateAccount","type":{"kind":"struct","fields":[{"name":"account_type","type":{"defined":{"name":"AccountType"}}},{"name":"enabled","type":"bool"},{"name":"vault","type":"pubkey"},{"name":"owner","type":"pubkey"},{"name":"portfolio_manager_name","type":{"array":["u8",32]}},{"name":"created","type":{"defined":{"name":"CreatedModel"}}},{"name":"base_asset_mint","type":"pubkey"},{"name":"base_asset_decimals","type":"u8"},{"name":"base_asset_token_program","type":"u8"},{"name":"name","type":{"array":["u8",32]}},{"name":"timelock_duration","type":"u32"},{"name":"timelock_expires_at","type":"u64"},{"name":"mint","type":"pubkey"},{"name":"assets","type":{"vec":"pubkey"}},{"name":"integration_acls","type":{"vec":{"defined":{"name":"IntegrationAcl"}}}},{"name":"delegate_acls","type":{"vec":{"defined":{"name":"DelegateAcl"}}}},{"name":"external_positions","type":{"vec":"pubkey"}},{"name":"priced_protocols","type":{"vec":{"defined":{"name":"PricedProtocol"}}}},{"name":"params","type":{"vec":{"vec":{"defined":{"name":"EngineField"}}}}}]}},{"name":"StateModel","type":{"kind":"struct","fields":[{"name":"account_type","type":{"option":{"defined":{"name":"AccountType"}}}},{"name":"name","type":{"option":{"array":["u8",32]}}},{"name":"uri","type":{"option":"string"}},{"name":"enabled","type":{"option":"bool"}},{"name":"assets","type":{"option":{"vec":"pubkey"}}},{"name":"created","type":{"option":{"defined":{"name":"CreatedModel"}}}},{"name":"owner","type":{"option":"pubkey"}},{"name":"portfolio_manager_name","type":{"option":{"array":["u8",32]}}},{"name":"borrowable","type":{"option":{"vec":"pubkey"}}},{"name":"timelock_duration","type":{"option":"u32"}},{"name":"integration_acls","type":{"option":{"vec":{"defined":{"name":"IntegrationAcl"}}}}},{"name":"delegate_acls","type":{"option":{"vec":{"defined":{"name":"DelegateAcl"}}}}}]}},{"name":"TimeUnit","type":{"kind":"enum","variants":[{"name":"Second"},{"name":"Slot"}]}},{"name":"TransferPolicy","type":{"kind":"struct","fields":[{"name":"allowlist","type":{"vec":"pubkey"}}]}},{"name":"ValuationModel","type":{"kind":"enum","variants":[{"name":"Continuous"},{"name":"Periodic"}]}}],"constants":[{"name":"PROTO_JUPITER_SWAP","type":"u16","value":"4"},{"name":"PROTO_JUPITER_SWAP_PERM_SWAP_ALLOWLISTED","type":"u64","value":"4"},{"name":"PROTO_JUPITER_SWAP_PERM_SWAP_ANY","type":"u64","value":"1"},{"name":"PROTO_JUPITER_SWAP_PERM_SWAP_LST","type":"u64","value":"2"},{"name":"PROTO_STAKE","type":"u16","value":"2"},{"name":"PROTO_STAKE_PERM_STAKE","type":"u64","value":"1"},{"name":"PROTO_STAKE_PERM_UNSTAKE","type":"u64","value":"2"},{"name":"PROTO_SYSTEM","type":"u16","value":"1"},{"name":"PROTO_SYSTEM_PERM_TRANSFER","type":"u64","value":"2"},{"name":"PROTO_SYSTEM_PERM_WSOL","type":"u64","value":"1"}]}');
113
+ module.exports = /*#__PURE__*/JSON.parse('{"address":"GLAMpaME8wdTEzxtiYEAa5yD8fZbxZiz2hNtV58RZiEz","metadata":{"name":"glam_protocol","version":"1.0.1","spec":"0.1.0","description":"Glam Protocol"},"instructions":[{"name":"cancel_timelock","discriminator":[158,180,47,81,133,231,168,238],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_signer","writable":true,"signer":true}],"args":[]},{"name":"close_state","discriminator":[25,1,184,101,200,245,210,246],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_vault","writable":true,"pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"glam_state"}]}},{"name":"glam_signer","writable":true,"signer":true},{"name":"system_program","address":"11111111111111111111111111111111"}],"args":[]},{"name":"cpi_proxy","docs":["Only accessible by integration programs"],"discriminator":[65,134,48,2,7,232,199,46],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_vault","writable":true,"pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"glam_state"}]}},{"name":"glam_signer","writable":true,"signer":true},{"name":"cpi_program"},{"name":"integration_authority","signer":true},{"name":"system_program","address":"11111111111111111111111111111111"}],"args":[{"name":"data","type":"bytes"},{"name":"extra_params","type":{"vec":{"defined":{"name":"ExtraParams"}}}}]},{"name":"emergency_access_update","docs":["Bypasses the timelock for emergency updates on access control rules. Allowed operations:","- removing an integration program","- removing a delegate","- enabling/disabling glam state"],"discriminator":[207,247,157,14,87,132,230,0],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_signer","writable":true,"signer":true}],"args":[{"name":"args","type":{"defined":{"name":"EmergencyAccessUpdateArgs"}}}]},{"name":"enable_disable_protocols","discriminator":[222,198,164,163,194,161,11,171],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_signer","writable":true,"signer":true}],"args":[{"name":"integration_program","type":"pubkey"},{"name":"protocols_bitmask","type":"u16"},{"name":"set_enabled","type":"bool"}]},{"name":"extend_state","discriminator":[34,147,151,206,134,128,82,228],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_signer","writable":true,"signer":true},{"name":"system_program","address":"11111111111111111111111111111111"}],"args":[{"name":"bytes","type":"u32"}]},{"name":"grant_revoke_delegate_permissions","discriminator":[162,21,218,157,218,86,114,171],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_signer","writable":true,"signer":true}],"args":[{"name":"delegate","type":"pubkey"},{"name":"integration_program","type":"pubkey"},{"name":"protocol_bitflag","type":"u16"},{"name":"permissions_bitmask","type":"u64"},{"name":"set_granted","type":"bool"}]},{"name":"initialize_state","discriminator":[190,171,224,219,217,72,199,176],"accounts":[{"name":"glam_state","writable":true,"pda":{"seeds":[{"kind":"const","value":[115,116,97,116,101]},{"kind":"account","path":"glam_signer"},{"kind":"arg","path":"state_model.created"}]}},{"name":"glam_signer","writable":true,"signer":true},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"base_asset_mint"}],"args":[{"name":"state","type":{"defined":{"name":"StateModel"}}}]},{"name":"jupiter_swap","discriminator":[116,207,0,196,252,120,243,18],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_vault","writable":true,"pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"glam_state"}]}},{"name":"glam_signer","writable":true,"signer":true},{"name":"cpi_program","address":"JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4"},{"name":"input_vault_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"glam_vault"},{"kind":"account","path":"input_token_program"},{"kind":"account","path":"input_mint"}],"program":{"kind":"const","value":[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{"name":"output_vault_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"glam_vault"},{"kind":"account","path":"output_token_program"},{"kind":"account","path":"output_mint"}],"program":{"kind":"const","value":[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{"name":"input_mint"},{"name":"output_mint"},{"name":"input_stake_pool","optional":true},{"name":"output_stake_pool","optional":true},{"name":"associated_token_program","address":"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"},{"name":"input_token_program"},{"name":"output_token_program"}],"args":[{"name":"data","type":"bytes"}]},{"name":"link_unlink_mint_by_mint_authority","docs":["For glam mint program\'s use only"],"discriminator":[85,67,58,245,175,14,122,6],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_mint"},{"name":"glam_mint_authority","signer":true}],"args":[{"name":"link","type":"bool"}]},{"name":"reset_priced_protocols_by_mint_authority","docs":["For glam mint program\'s use only"],"discriminator":[86,95,153,145,179,181,107,235],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_mint"},{"name":"glam_mint_authority","signer":true}],"args":[]},{"name":"set_jupiter_swap_policy","discriminator":[189,182,227,165,127,148,246,189],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_signer","writable":true,"signer":true}],"args":[{"name":"policy","type":{"defined":{"name":"JupiterSwapPolicy"}}}]},{"name":"set_protocol_policy","discriminator":[37,99,61,122,227,102,182,180],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_signer","writable":true,"signer":true}],"args":[{"name":"integration_program","type":"pubkey"},{"name":"protocol_bitflag","type":"u16"},{"name":"data","type":"bytes"}]},{"name":"set_system_transfer_policy","discriminator":[102,21,157,101,19,4,100,213],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_signer","writable":true,"signer":true}],"args":[{"name":"policy","type":{"defined":{"name":"TransferPolicy"}}}]},{"name":"stake_authorize","discriminator":[127,247,88,164,201,0,79,7],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_vault","writable":true,"pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"glam_state"}]}},{"name":"glam_signer","writable":true,"signer":true},{"name":"cpi_program","address":"Stake11111111111111111111111111111111111111"},{"name":"stake","writable":true},{"name":"clock","address":"SysvarC1ock11111111111111111111111111111111"}],"args":[{"name":"new_authority","type":"pubkey"},{"name":"staker_or_withdrawer","type":"u32"}]},{"name":"stake_deactivate","discriminator":[224,10,93,175,175,145,237,169],"accounts":[{"name":"glam_state"},{"name":"glam_vault","writable":true,"pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"glam_state"}]}},{"name":"glam_signer","writable":true,"signer":true},{"name":"cpi_program","address":"Stake11111111111111111111111111111111111111"},{"name":"stake","writable":true},{"name":"clock","address":"SysvarC1ock11111111111111111111111111111111"}],"args":[]},{"name":"stake_delegate_stake","discriminator":[202,40,152,239,175,251,66,228],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_vault","writable":true,"pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"glam_state"}]}},{"name":"glam_signer","writable":true,"signer":true},{"name":"cpi_program","address":"Stake11111111111111111111111111111111111111"},{"name":"stake","writable":true},{"name":"vote"},{"name":"clock","address":"SysvarC1ock11111111111111111111111111111111"},{"name":"stake_history","address":"SysvarStakeHistory1111111111111111111111111"},{"name":"stake_config"}],"args":[]},{"name":"stake_initialize","discriminator":[68,66,118,79,15,144,190,190],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_vault","writable":true,"pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"glam_state"}]}},{"name":"glam_signer","writable":true,"signer":true},{"name":"cpi_program","address":"Stake11111111111111111111111111111111111111"},{"name":"stake","writable":true},{"name":"rent","address":"SysvarRent111111111111111111111111111111111"},{"name":"system_program","address":"11111111111111111111111111111111"}],"args":[]},{"name":"stake_merge","discriminator":[46,181,125,12,51,179,134,176],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_vault","writable":true,"pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"glam_state"}]}},{"name":"glam_signer","writable":true,"signer":true},{"name":"cpi_program","address":"Stake11111111111111111111111111111111111111"},{"name":"destination_stake","writable":true},{"name":"source_stake","writable":true},{"name":"clock","address":"SysvarC1ock11111111111111111111111111111111"},{"name":"stake_history","address":"SysvarStakeHistory1111111111111111111111111"}],"args":[]},{"name":"stake_move","discriminator":[165,157,188,245,244,234,42,186],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_vault","writable":true,"pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"glam_state"}]}},{"name":"glam_signer","writable":true,"signer":true},{"name":"cpi_program","address":"Stake11111111111111111111111111111111111111"},{"name":"source_stake","writable":true},{"name":"destination_stake","writable":true}],"args":[{"name":"move_stake","type":"bool"},{"name":"lamports","type":"u64"}]},{"name":"stake_split","discriminator":[63,128,169,206,158,60,135,48],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_vault","writable":true,"pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"glam_state"}]}},{"name":"glam_signer","writable":true,"signer":true},{"name":"cpi_program","address":"Stake11111111111111111111111111111111111111"},{"name":"stake","writable":true},{"name":"split_stake","writable":true}],"args":[{"name":"lamports","type":"u64"}]},{"name":"stake_withdraw","discriminator":[199,13,168,20,92,151,29,56],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_vault","writable":true,"pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"glam_state"}]}},{"name":"glam_signer","writable":true,"signer":true},{"name":"cpi_program","address":"Stake11111111111111111111111111111111111111"},{"name":"stake","writable":true},{"name":"clock","address":"SysvarC1ock11111111111111111111111111111111"},{"name":"stake_history","address":"SysvarStakeHistory1111111111111111111111111"},{"name":"system_program","address":"11111111111111111111111111111111"}],"args":[{"name":"lamports","type":"u64"}]},{"name":"system_transfer","discriminator":[167,164,195,155,219,152,191,230],"accounts":[{"name":"glam_state"},{"name":"glam_vault","writable":true,"pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"glam_state"}]}},{"name":"glam_signer","writable":true,"signer":true},{"name":"cpi_program","address":"11111111111111111111111111111111"},{"name":"to","writable":true}],"args":[{"name":"lamports","type":"u64"}]},{"name":"token_transfer_checked_by_mint_authority","docs":["For glam mint program\'s use only"],"discriminator":[37,131,188,85,45,183,8,81],"accounts":[{"name":"glam_state"},{"name":"glam_vault","writable":true,"pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"glam_state"}]}},{"name":"glam_mint","writable":true},{"name":"glam_mint_authority","writable":true,"signer":true},{"name":"from","writable":true},{"name":"to","writable":true},{"name":"mint"},{"name":"token_program"}],"args":[{"name":"amount","type":"u64"},{"name":"decimals","type":"u8"}]},{"name":"update_mint_params","discriminator":[45,42,115,25,179,27,57,191],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_signer","writable":true,"signer":true}],"args":[{"name":"params","type":{"vec":{"defined":{"name":"EngineField"}}}}]},{"name":"update_mint_params_by_mint_authority","docs":["For glam mint program\'s use only, timelock is not enforced"],"discriminator":[94,160,55,53,175,225,62,118],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_mint"},{"name":"glam_mint_authority","signer":true}],"args":[{"name":"params","type":{"vec":{"defined":{"name":"EngineField"}}}}]},{"name":"update_priced_protocol","docs":["Only accessible by integration programs"],"discriminator":[10,106,94,171,118,217,62,98],"accounts":[{"name":"glam_state","writable":true},{"name":"integration_authority","signer":true}],"args":[{"name":"priced_protocol","type":{"defined":{"name":"PricedProtocol"}}}]},{"name":"update_state","discriminator":[135,112,215,75,247,185,53,176],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_signer","writable":true,"signer":true}],"args":[{"name":"state","type":{"defined":{"name":"StateModel"}}}]},{"name":"update_state_apply_timelock","discriminator":[66,12,138,80,133,85,46,220],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_signer","writable":true,"signer":true}],"args":[]}],"accounts":[{"name":"StateAccount","discriminator":[142,247,54,95,85,133,249,103]}],"errors":[{"code":48000,"name":"UnauthorizedSigner","msg":"Signer is not authorized"},{"code":48001,"name":"UnauthorizedIntegrationProgram","msg":"Integration program is not authorized"},{"code":48002,"name":"IntegrationNotEnabled","msg":"Integration is not enabled"},{"code":48003,"name":"ProtocolNotEnabled","msg":"Protocol is not enabled"},{"code":48004,"name":"GlamStateDisabled","msg":"GLAM state is disabled"},{"code":48005,"name":"ProtocolPolicyViolation","msg":"Protocol policy violation"},{"code":48006,"name":"EmergencyUpdateDenied","msg":"Emergency update denied"},{"code":48007,"name":"TimelockStillActive","msg":"Timelock still active"},{"code":48008,"name":"CannotApplyChanges","msg":"Pending changes cannot be applied due to unfulfilled requests"},{"code":48009,"name":"AssetNotBorrowable","msg":"Asset is not allowed to borrow"},{"code":48010,"name":"UnexpectedProgramOwner","msg":"Account is owned by an unexpected program"},{"code":48011,"name":"InvalidAuthority","msg":"Invalid authority"},{"code":49000,"name":"InvalidAccountType","msg":"Invalid account type"},{"code":49001,"name":"InvalidName","msg":"Invalid name"},{"code":49002,"name":"InvalidSymbol","msg":"Symbol too long: max 32 chars"},{"code":49003,"name":"InvalidUri","msg":"Uri too long: max 128 chars"},{"code":49004,"name":"InvalidAssetsLen","msg":"Too many assets: max 100"},{"code":49005,"name":"InvalidIxArgs","msg":"Invalid instruction arguments"},{"code":49006,"name":"CannotCloseState","msg":"Glam state cannot be closed: mint must be closed and state must be disabled"},{"code":49007,"name":"InvalidMintParams","msg":"Invalid mint params"},{"code":49008,"name":"InvalidRemainingAccounts","msg":"Invalid accounts: the transaction is malformed"},{"code":49009,"name":"InvalidVaultTokenAccount","msg":"Invalid vault ata"},{"code":49010,"name":"NonZeroSupply","msg":"Glam mint supply not zero"},{"code":49011,"name":"MissingAccount","msg":"An account required by the instruction is missing"},{"code":49012,"name":"InvalidTimestamp","msg":"Invalid timestamp"},{"code":49013,"name":"EngineFieldNotFound","msg":"Engine field not found"},{"code":49014,"name":"InvalidBaseAsset","msg":"Invalid base asset"},{"code":49015,"name":"InvalidProtocolBitflag","msg":"Invalid protocol bitflag"},{"code":50000,"name":"WithdrawDenied","msg":"Withdraw denied. Only vaults allow withdraws (funds and mints don\'t)"},{"code":50001,"name":"InvalidAssetForSwap","msg":"Asset cannot be swapped"},{"code":50002,"name":"UnsupportedSwapIx","msg":"Unsupported swap instruction"},{"code":50003,"name":"SlippageLimitExceeded","msg":"Max slippage exceeded"},{"code":50004,"name":"InvalidPlatformFeeForSwap","msg":"Invalid platform fee"},{"code":50005,"name":"InvalidTokenAccount","msg":"Invalid token account"},{"code":50006,"name":"InvalidVoteSide","msg":"Invalid vote side"},{"code":50007,"name":"MultipleStakeAccountsDisallowed","msg":"Multiple stake accounts disallowed"},{"code":51000,"name":"InvalidAssetPrice","msg":"Invalid asset price"},{"code":51001,"name":"InvalidStableCoinPriceForSubscribe","msg":"Subscription not allowed: invalid stable coin price"},{"code":51100,"name":"InvalidPricingOracle","msg":"Invalid oracle for asset price"},{"code":51101,"name":"PricingError","msg":"Pricing error"},{"code":51102,"name":"PriceTooOld","msg":"Price is too old"},{"code":51103,"name":"ExternalPositionsNotPriced","msg":"Not all external vault accounts are priced"},{"code":51104,"name":"VaultTokensNotPriced","msg":"Not all vault tokens are priced"},{"code":51105,"name":"PriceDivergenceTooLarge","msg":"No priced assets found"},{"code":51106,"name":"PositiveAumRequired","msg":"AUM must be positive"},{"code":51107,"name":"MathError","msg":"Math error"},{"code":51108,"name":"TypeCastingError","msg":"Type casting error"},{"code":51109,"name":"BaseAssetNotSupported","msg":"Base asset must have 6 decimals."},{"code":51110,"name":"InvalidQuoteSpotMarket","msg":"Unsupported spot market for perp quotes"},{"code":51111,"name":"UnknownExternalVaultAsset","msg":"Unknown external vault account"},{"code":51112,"name":"InvalidPriceDenom","msg":"Invalid price denom"},{"code":51113,"name":"UnexpectedDiscriminator","msg":"Invalid account: discriminator mismatch"},{"code":52000,"name":"TransfersDisabled","msg":"Policy violation: transfers disabled"},{"code":52001,"name":"InvalidPolicyAccount","msg":"Policy account is mandatory"},{"code":52002,"name":"AmountTooBig","msg":"Policy violation: amount too big"},{"code":52003,"name":"LockUp","msg":"Policy violation: lock-up has not expired"}],"types":[{"name":"AccountType","type":{"kind":"enum","variants":[{"name":"Vault"},{"name":"TokenizedVault"},{"name":"Mint"}]}},{"name":"AccruedFees","type":{"kind":"struct","fields":[{"name":"vault_subscription_fee","type":"u128"},{"name":"vault_redemption_fee","type":"u128"},{"name":"manager_subscription_fee","type":"u128"},{"name":"manager_redemption_fee","type":"u128"},{"name":"management_fee","type":"u128"},{"name":"performance_fee","type":"u128"},{"name":"protocol_base_fee","type":"u128"},{"name":"protocol_flow_fee","type":"u128"}]}},{"name":"ActionType","type":{"kind":"enum","variants":[{"name":"AddExternalAccount"},{"name":"DeleteExternalAccount"},{"name":"DeleteExternalAccountIfZeroLamports"},{"name":"DeleteExternalAccountIfZeroBalance"},{"name":"AddAsset"},{"name":"DeleteAsset"}]}},{"name":"CreatedModel","type":{"kind":"struct","fields":[{"name":"key","type":{"array":["u8",8]}},{"name":"created_by","type":"pubkey"},{"name":"created_at","type":"i64"}]}},{"name":"DelegateAcl","type":{"kind":"struct","fields":[{"name":"pubkey","type":"pubkey"},{"name":"integration_permissions","type":{"vec":{"defined":{"name":"IntegrationPermissions"}}}},{"name":"expires_at","type":"i64"}]}},{"name":"EmergencyAccessUpdateArgs","type":{"kind":"struct","fields":[{"name":"disabled_integrations","type":{"vec":"pubkey"}},{"name":"disabled_delegates","type":{"vec":"pubkey"}},{"name":"state_enabled","type":{"option":"bool"}}]}},{"name":"EngineField","type":{"kind":"struct","fields":[{"name":"name","type":{"defined":{"name":"EngineFieldName"}}},{"name":"value","type":{"defined":{"name":"EngineFieldValue"}}}]}},{"name":"EngineFieldName","type":{"kind":"enum","variants":[{"name":"Owner"},{"name":"PortfolioManagerName"},{"name":"Name"},{"name":"Uri"},{"name":"Assets"},{"name":"DelegateAcls"},{"name":"IntegrationAcls"},{"name":"TimelockDuration"},{"name":"Borrowable"},{"name":"DefaultAccountStateFrozen"},{"name":"PermanentDelegate"},{"name":"NotifyAndSettle"},{"name":"FeeStructure"},{"name":"FeeParams"},{"name":"ClaimableFees"},{"name":"ClaimedFees"},{"name":"OracleConfigs"}]}},{"name":"EngineFieldValue","type":{"kind":"enum","variants":[{"name":"Boolean","fields":[{"name":"val","type":"bool"}]},{"name":"U8","fields":[{"name":"val","type":"u8"}]},{"name":"U32","fields":[{"name":"val","type":"u32"}]},{"name":"U64","fields":[{"name":"val","type":"u64"}]},{"name":"String","fields":[{"name":"val","type":"string"}]},{"name":"Pubkey","fields":[{"name":"val","type":"pubkey"}]},{"name":"VecPubkey","fields":[{"name":"val","type":{"vec":"pubkey"}}]},{"name":"VecU8","fields":[{"name":"val","type":"bytes"}]},{"name":"VecU32","fields":[{"name":"val","type":{"vec":"u32"}}]},{"name":"VecDelegateAcl","fields":[{"name":"val","type":{"vec":{"defined":{"name":"DelegateAcl"}}}}]},{"name":"VecIntegrationAcl","fields":[{"name":"val","type":{"vec":{"defined":{"name":"IntegrationAcl"}}}}]},{"name":"FeeStructure","fields":[{"name":"val","type":{"defined":{"name":"FeeStructure"}}}]},{"name":"FeeParams","fields":[{"name":"val","type":{"defined":{"name":"FeeParams"}}}]},{"name":"AccruedFees","fields":[{"name":"val","type":{"defined":{"name":"AccruedFees"}}}]},{"name":"NotifyAndSettle","fields":[{"name":"val","type":{"defined":{"name":"NotifyAndSettle"}}}]},{"name":"OracleConfigs","fields":[{"name":"val","type":{"defined":{"name":"OracleConfigs"}}}]}]}},{"name":"EntryExitFees","type":{"kind":"struct","fields":[{"name":"subscription_fee_bps","type":"u16"},{"name":"redemption_fee_bps","type":"u16"}]}},{"name":"ExtraParams","type":{"kind":"struct","fields":[{"name":"action_type","type":{"defined":{"name":"ActionType"}}},{"name":"pubkey","type":"pubkey"},{"name":"amount","type":{"option":"u64"}}]}},{"name":"FeeParams","type":{"kind":"struct","fields":[{"name":"year_in_seconds","type":"u32"},{"name":"pa_high_water_mark","type":"i128"},{"name":"pa_last_nav","type":"i128"},{"name":"last_aum","type":"i128"},{"name":"last_performance_fee_crystallized","type":"i64"},{"name":"last_management_fee_crystallized","type":"i64"},{"name":"last_protocol_fee_crystallized","type":"i64"}]}},{"name":"FeeStructure","type":{"kind":"struct","fields":[{"name":"vault","type":{"defined":{"name":"EntryExitFees"}}},{"name":"manager","type":{"defined":{"name":"EntryExitFees"}}},{"name":"management","type":{"defined":{"name":"ManagementFee"}}},{"name":"performance","type":{"defined":{"name":"PerformanceFee"}}},{"name":"protocol","type":{"defined":{"name":"ProtocolFees"}}}]}},{"name":"HurdleType","type":{"kind":"enum","variants":[{"name":"Hard"},{"name":"Soft"}]}},{"name":"IntegrationAcl","docs":["An integration program can have multiple protocols supported.","Enabled protocols are stored in a bitmask, and each protocol can have its own policy."],"type":{"kind":"struct","fields":[{"name":"integration_program","type":"pubkey"},{"name":"protocols_bitmask","type":"u16"},{"name":"protocol_policies","type":{"vec":{"defined":{"name":"ProtocolPolicy"}}}}]}},{"name":"IntegrationPermissions","docs":["Stores delegate permissions for an integration program."],"type":{"kind":"struct","fields":[{"name":"integration_program","type":"pubkey"},{"name":"protocol_permissions","type":{"vec":{"defined":{"name":"ProtocolPermissions"}}}}]}},{"name":"JupiterSwapPolicy","type":{"kind":"struct","fields":[{"name":"max_slippage_bps","type":"u16"},{"name":"swap_allowlist","type":{"option":{"vec":"pubkey"}}}]}},{"name":"ManagementFee","type":{"kind":"struct","fields":[{"name":"fee_bps","type":"u16"}]}},{"name":"NoticePeriodType","type":{"kind":"enum","variants":[{"name":"Hard"},{"name":"Soft"}]}},{"name":"NotifyAndSettle","type":{"kind":"struct","fields":[{"name":"model","type":{"defined":{"name":"ValuationModel"}}},{"name":"permissionless_fulfillment","type":"bool"},{"name":"subscribe_notice_period_type","type":{"defined":{"name":"NoticePeriodType"}}},{"name":"subscribe_notice_period","type":"u64"},{"name":"subscribe_settlement_period","type":"u64"},{"name":"subscribe_cancellation_window","type":"u64"},{"name":"redeem_notice_period_type","type":{"defined":{"name":"NoticePeriodType"}}},{"name":"redeem_notice_period","type":"u64"},{"name":"redeem_settlement_period","type":"u64"},{"name":"redeem_cancellation_window","type":"u64"},{"name":"time_unit","type":{"defined":{"name":"TimeUnit"}}},{"name":"_padding","type":{"array":["u8",3]}}]}},{"name":"OracleConfigs","docs":["Vault-specific oracle configs. If available, these configs are preferred over the global config."],"type":{"kind":"struct","fields":[{"name":"max_ages_seconds","type":{"vec":{"array":["u16",2]}}},{"name":"padding","type":{"array":["u8",12]}}]}},{"name":"PerformanceFee","type":{"kind":"struct","fields":[{"name":"fee_bps","type":"u16"},{"name":"hurdle_rate_bps","type":"u16"},{"name":"hurdle_type","type":{"defined":{"name":"HurdleType"}}}]}},{"name":"PricedProtocol","type":{"kind":"struct","fields":[{"name":"rent","type":"u64"},{"name":"amount","type":"i128"},{"name":"decimals","type":"u8"},{"name":"last_updated_slot","type":"u64"},{"name":"integration_program","type":"pubkey"},{"name":"protocol_bitflag","type":"u16"},{"name":"positions","type":{"vec":"pubkey"}}]}},{"name":"ProtocolFees","type":{"kind":"struct","fields":[{"name":"base_fee_bps","type":"u16"},{"name":"flow_fee_bps","type":"u16"}]}},{"name":"ProtocolPermissions","docs":["Represents a delegate\'s permissions for a specific protocol"],"type":{"kind":"struct","fields":[{"name":"protocol_bitflag","type":"u16"},{"name":"permissions_bitmask","type":"u64"}]}},{"name":"ProtocolPolicy","docs":["Stores policy data for an integrated protocol.","Integration programs serialize/deserialize this data."],"type":{"kind":"struct","fields":[{"name":"protocol_bitflag","type":"u16"},{"name":"data","type":"bytes"}]}},{"name":"StateAccount","type":{"kind":"struct","fields":[{"name":"account_type","type":{"defined":{"name":"AccountType"}}},{"name":"enabled","type":"bool"},{"name":"vault","type":"pubkey"},{"name":"owner","type":"pubkey"},{"name":"portfolio_manager_name","type":{"array":["u8",32]}},{"name":"created","type":{"defined":{"name":"CreatedModel"}}},{"name":"base_asset_mint","type":"pubkey"},{"name":"base_asset_decimals","type":"u8"},{"name":"base_asset_token_program","type":"u8"},{"name":"name","type":{"array":["u8",32]}},{"name":"timelock_duration","type":"u32"},{"name":"timelock_expires_at","type":"u64"},{"name":"mint","type":"pubkey"},{"name":"assets","type":{"vec":"pubkey"}},{"name":"integration_acls","type":{"vec":{"defined":{"name":"IntegrationAcl"}}}},{"name":"delegate_acls","type":{"vec":{"defined":{"name":"DelegateAcl"}}}},{"name":"external_positions","type":{"vec":"pubkey"}},{"name":"priced_protocols","type":{"vec":{"defined":{"name":"PricedProtocol"}}}},{"name":"params","type":{"vec":{"vec":{"defined":{"name":"EngineField"}}}}}]}},{"name":"StateModel","type":{"kind":"struct","fields":[{"name":"account_type","type":{"option":{"defined":{"name":"AccountType"}}}},{"name":"name","type":{"option":{"array":["u8",32]}}},{"name":"uri","type":{"option":"string"}},{"name":"enabled","type":{"option":"bool"}},{"name":"assets","type":{"option":{"vec":"pubkey"}}},{"name":"created","type":{"option":{"defined":{"name":"CreatedModel"}}}},{"name":"owner","type":{"option":"pubkey"}},{"name":"portfolio_manager_name","type":{"option":{"array":["u8",32]}}},{"name":"borrowable","type":{"option":{"vec":"pubkey"}}},{"name":"timelock_duration","type":{"option":"u32"}},{"name":"integration_acls","type":{"option":{"vec":{"defined":{"name":"IntegrationAcl"}}}}},{"name":"delegate_acls","type":{"option":{"vec":{"defined":{"name":"DelegateAcl"}}}}}]}},{"name":"TimeUnit","type":{"kind":"enum","variants":[{"name":"Second"},{"name":"Slot"}]}},{"name":"TransferPolicy","type":{"kind":"struct","fields":[{"name":"allowlist","type":{"vec":"pubkey"}}]}},{"name":"ValuationModel","type":{"kind":"enum","variants":[{"name":"Continuous"},{"name":"Periodic"}]}}],"constants":[{"name":"PROTO_JUPITER_SWAP","type":"u16","value":"4"},{"name":"PROTO_JUPITER_SWAP_PERM_SWAP_ALLOWLISTED","type":"u64","value":"4"},{"name":"PROTO_JUPITER_SWAP_PERM_SWAP_ANY","type":"u64","value":"1"},{"name":"PROTO_JUPITER_SWAP_PERM_SWAP_LST","type":"u64","value":"2"},{"name":"PROTO_STAKE","type":"u16","value":"2"},{"name":"PROTO_STAKE_PERM_STAKE","type":"u64","value":"1"},{"name":"PROTO_STAKE_PERM_UNSTAKE","type":"u64","value":"2"},{"name":"PROTO_SYSTEM","type":"u16","value":"1"},{"name":"PROTO_SYSTEM_PERM_TRANSFER","type":"u64","value":"2"},{"name":"PROTO_SYSTEM_PERM_WSOL","type":"u64","value":"1"}]}');
114
114
 
115
115
  /***/ }),
116
116
  /* 6 */
@@ -122,7 +122,7 @@ module.exports = /*#__PURE__*/JSON.parse('{"address":"gConFzxKL9USmwTdJoeQJvfKmq
122
122
  /* 7 */
123
123
  /***/ ((module) => {
124
124
 
125
- module.exports = /*#__PURE__*/JSON.parse('{"address":"GM1NtvvnSXUptTrMCqbogAdZJydZSNv98DoU5AZVLmGh","metadata":{"name":"glam_mint","version":"1.0.1","spec":"0.1.0","description":"GLAM mint program"},"instructions":[{"name":"burn_tokens","discriminator":[76,15,51,254,229,215,121,66],"accounts":[{"name":"glam_state"},{"name":"glam_signer","writable":true,"signer":true},{"name":"glam_mint","writable":true},{"name":"from_token_account","writable":true},{"name":"from"},{"name":"token_2022_program","address":"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"}],"args":[{"name":"amount","type":"u64"}]},{"name":"cancel","discriminator":[232,219,223,41,219,236,220,190],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_mint","writable":true},{"name":"glam_escrow","pda":{"seeds":[{"kind":"const","value":[101,115,99,114,111,119]},{"kind":"account","path":"glam_mint"}]}},{"name":"request_queue","writable":true,"pda":{"seeds":[{"kind":"const","value":[114,101,113,117,101,115,116,45,113,117,101,117,101]},{"kind":"account","path":"glam_mint"}]}},{"name":"signer","writable":true,"signer":true},{"name":"user"},{"name":"recover_token_mint"},{"name":"user_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"user"},{"kind":"account","path":"recover_token_program"},{"kind":"account","path":"recover_token_mint"}],"program":{"kind":"const","value":[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{"name":"escrow_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"glam_escrow"},{"kind":"account","path":"recover_token_program"},{"kind":"account","path":"recover_token_mint"}],"program":{"kind":"const","value":[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"recover_token_program"},{"name":"associated_token_program","address":"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"}],"args":[]},{"name":"claim","discriminator":[62,198,214,193,213,159,108,210],"accounts":[{"name":"glam_state"},{"name":"glam_mint","writable":true},{"name":"glam_escrow","pda":{"seeds":[{"kind":"const","value":[101,115,99,114,111,119]},{"kind":"account","path":"glam_mint"}]}},{"name":"request_queue","writable":true,"pda":{"seeds":[{"kind":"const","value":[114,101,113,117,101,115,116,45,113,117,101,117,101]},{"kind":"account","path":"glam_mint"}]}},{"name":"signer","writable":true,"signer":true},{"name":"claim_user"},{"name":"claim_token_mint"},{"name":"claim_user_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"claim_user"},{"kind":"account","path":"claim_token_program"},{"kind":"account","path":"claim_token_mint"}],"program":{"kind":"const","value":[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{"name":"escrow_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"glam_escrow"},{"kind":"account","path":"claim_token_program"},{"kind":"account","path":"claim_token_mint"}],"program":{"kind":"const","value":[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{"name":"claim_user_policy","writable":true,"optional":true},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"claim_token_program"},{"name":"glam_policies_program","address":"po1iCYakK3gHCLbuju4wGzFowTMpAJxkqK1iwUqMonY"},{"name":"associated_token_program","address":"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"}],"args":[]},{"name":"claim_fees","discriminator":[82,251,233,156,12,52,184,202],"accounts":[{"name":"glam_state"},{"name":"glam_vault","writable":true,"pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"glam_state"}],"program":{"kind":"const","value":[227,199,235,230,176,132,243,117,43,131,173,18,78,255,26,50,209,135,86,219,140,126,61,255,0,218,252,224,172,8,223,207]}}},{"name":"glam_mint","writable":true},{"name":"glam_escrow","pda":{"seeds":[{"kind":"const","value":[101,115,99,114,111,119]},{"kind":"account","path":"glam_mint"}]}},{"name":"escrow_mint_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"glam_escrow"},{"kind":"account","path":"token_2022_program"},{"kind":"account","path":"glam_mint"}],"program":{"kind":"const","value":[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{"name":"signer","writable":true,"signer":true},{"name":"deposit_asset"},{"name":"vault_deposit_ata","docs":["To pay out fees"],"writable":true,"pda":{"seeds":[{"kind":"account","path":"glam_vault"},{"kind":"account","path":"deposit_token_program"},{"kind":"account","path":"deposit_asset"}],"program":{"kind":"const","value":[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{"name":"protocol_fee_authority","docs":["To receive protocol fee"]},{"name":"protocol_fee_authority_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"protocol_fee_authority"},{"kind":"account","path":"deposit_token_program"},{"kind":"account","path":"deposit_asset"}],"program":{"kind":"const","value":[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{"name":"manager_fee_authority","docs":["To receive manager fee"]},{"name":"manager_fee_authority_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"manager_fee_authority"},{"kind":"account","path":"deposit_token_program"},{"kind":"account","path":"deposit_asset"}],"program":{"kind":"const","value":[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{"name":"glam_config","pda":{"seeds":[{"kind":"const","value":[103,108,111,98,97,108,45,99,111,110,102,105,103]}],"program":{"kind":"const","value":[10,11,0,83,72,16,46,144,46,42,79,22,157,123,21,242,192,146,1,78,88,59,102,9,190,226,92,189,187,232,83,220]}}},{"name":"glam_protocol_program","address":"GLAMpaME8wdTEzxtiYEAa5yD8fZbxZiz2hNtV58RZiEz"},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"associated_token_program","address":"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"},{"name":"deposit_token_program"},{"name":"token_2022_program","address":"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"}],"args":[]},{"name":"close_mint","discriminator":[149,251,157,212,65,181,235,129],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_signer","writable":true,"signer":true},{"name":"glam_mint","writable":true},{"name":"request_queue","writable":true,"optional":true,"pda":{"seeds":[{"kind":"const","value":[114,101,113,117,101,115,116,45,113,117,101,117,101]},{"kind":"account","path":"glam_mint"}]}},{"name":"extra_metas_account","writable":true},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"policies_program","address":"po1iCYakK3gHCLbuju4wGzFowTMpAJxkqK1iwUqMonY"},{"name":"token_2022_program","address":"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"},{"name":"glam_protocol","address":"GLAMpaME8wdTEzxtiYEAa5yD8fZbxZiz2hNtV58RZiEz"}],"args":[]},{"name":"crystallize_fees","discriminator":[78,0,111,26,7,12,41,249],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_escrow","pda":{"seeds":[{"kind":"const","value":[101,115,99,114,111,119]},{"kind":"account","path":"glam_mint"}]}},{"name":"glam_mint","writable":true},{"name":"escrow_mint_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"glam_escrow"},{"kind":"account","path":"token_2022_program"},{"kind":"account","path":"glam_mint"}],"program":{"kind":"const","value":[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{"name":"signer","writable":true,"signer":true},{"name":"glam_protocol_program","address":"GLAMpaME8wdTEzxtiYEAa5yD8fZbxZiz2hNtV58RZiEz"},{"name":"token_2022_program","address":"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"}],"args":[]},{"name":"emergency_update_mint","discriminator":[141,210,26,160,120,140,28,239],"accounts":[{"name":"glam_state"},{"name":"glam_signer","writable":true,"signer":true},{"name":"glam_mint"},{"name":"request_queue","writable":true,"pda":{"seeds":[{"kind":"const","value":[114,101,113,117,101,115,116,45,113,117,101,117,101]},{"kind":"account","path":"glam_mint"}]}}],"args":[{"name":"args","type":{"defined":{"name":"EmergencyUpdateMintArgs"}}}]},{"name":"force_transfer_tokens","discriminator":[185,34,78,211,192,13,160,37],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_signer","writable":true,"signer":true},{"name":"glam_mint","writable":true},{"name":"from_token_account","writable":true},{"name":"to_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"to"},{"kind":"account","path":"token_2022_program"},{"kind":"account","path":"glam_mint"}],"program":{"kind":"const","value":[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{"name":"from"},{"name":"to"},{"name":"to_policy_account","writable":true,"optional":true},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"token_2022_program","address":"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"},{"name":"policies_program","address":"po1iCYakK3gHCLbuju4wGzFowTMpAJxkqK1iwUqMonY"}],"args":[{"name":"amount","type":"u64"}]},{"name":"fulfill","discriminator":[143,2,52,206,174,164,247,72],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_vault","writable":true,"pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"glam_state"}],"program":{"kind":"const","value":[227,199,235,230,176,132,243,117,43,131,173,18,78,255,26,50,209,135,86,219,140,126,61,255,0,218,252,224,172,8,223,207]}}},{"name":"glam_mint","writable":true},{"name":"glam_escrow","pda":{"seeds":[{"kind":"const","value":[101,115,99,114,111,119]},{"kind":"account","path":"glam_mint"}]}},{"name":"request_queue","writable":true,"pda":{"seeds":[{"kind":"const","value":[114,101,113,117,101,115,116,45,113,117,101,117,101]},{"kind":"account","path":"glam_mint"}]}},{"name":"signer","writable":true,"signer":true},{"name":"escrow_mint_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"glam_escrow"},{"kind":"account","path":"token_2022_program"},{"kind":"account","path":"glam_mint"}],"program":{"kind":"const","value":[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{"name":"asset"},{"name":"vault_asset_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"glam_vault"},{"kind":"account","path":"deposit_token_program"},{"kind":"account","path":"asset"}],"program":{"kind":"const","value":[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{"name":"escrow_asset_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"glam_escrow"},{"kind":"account","path":"deposit_token_program"},{"kind":"account","path":"asset"}],"program":{"kind":"const","value":[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"deposit_token_program"},{"name":"token_2022_program","address":"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"},{"name":"associated_token_program","address":"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"},{"name":"glam_protocol_program","address":"GLAMpaME8wdTEzxtiYEAa5yD8fZbxZiz2hNtV58RZiEz"}],"args":[{"name":"limit","type":{"option":"u32"}}]},{"name":"initialize_mint","docs":["Initialize a new GLAM mint with extensions and metadata.","","- `mint_model` - Configuration model containing mint parameters and metadata","- `created_key` - 8-byte key used in the GLAM state PDA derivation","- `account_type` - Fund (for tokenized vault mint) or Mint","- `decimals` - Decimals of new mint"],"discriminator":[209,42,195,4,129,85,209,44],"accounts":[{"name":"glam_state","writable":true},{"name":"signer","writable":true,"signer":true},{"name":"new_mint","writable":true},{"name":"request_queue","writable":true,"optional":true,"pda":{"seeds":[{"kind":"const","value":[114,101,113,117,101,115,116,45,113,117,101,117,101]},{"kind":"account","path":"new_mint"}]}},{"name":"extra_metas_account","writable":true},{"name":"base_asset_mint"},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"token_2022_program","address":"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"},{"name":"policies_program","address":"po1iCYakK3gHCLbuju4wGzFowTMpAJxkqK1iwUqMonY"},{"name":"glam_protocol","address":"GLAMpaME8wdTEzxtiYEAa5yD8fZbxZiz2hNtV58RZiEz"}],"args":[{"name":"mint_model","type":{"defined":{"name":"MintModel"}}},{"name":"created_key","type":{"array":["u8",8]}},{"name":"account_type","type":{"defined":{"name":"AccountType"}}},{"name":"decimals","type":{"option":"u8"}}]},{"name":"mint_tokens","discriminator":[59,132,24,246,122,39,8,243],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_signer","writable":true,"signer":true},{"name":"glam_mint","writable":true},{"name":"mint_to","writable":true,"pda":{"seeds":[{"kind":"account","path":"recipient"},{"kind":"account","path":"token_2022_program"},{"kind":"account","path":"glam_mint"}],"program":{"kind":"const","value":[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{"name":"recipient","writable":true},{"name":"policy_account","writable":true,"optional":true},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"token_2022_program","address":"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"},{"name":"policies_program","address":"po1iCYakK3gHCLbuju4wGzFowTMpAJxkqK1iwUqMonY"}],"args":[{"name":"amount","type":"u64"}]},{"name":"price_drift_users","docs":["Extra accounts for pricing N drift users under the same user stats:","- user_stats x 1","- drift_user x N","- markets and oracles used by all drift users (no specific order)"],"discriminator":[12,5,143,51,101,81,200,150],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_vault","pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"glam_state"}],"program":{"kind":"const","value":[227,199,235,230,176,132,243,117,43,131,173,18,78,255,26,50,209,135,86,219,140,126,61,255,0,218,252,224,172,8,223,207]}}},{"name":"signer","writable":true,"signer":true},{"name":"sol_usd_oracle"},{"name":"base_asset_oracle"},{"name":"integration_authority","pda":{"seeds":[{"kind":"const","value":[105,110,116,101,103,114,97,116,105,111,110,45,97,117,116,104,111,114,105,116,121]}]}},{"name":"glam_config","pda":{"seeds":[{"kind":"const","value":[103,108,111,98,97,108,45,99,111,110,102,105,103]}],"program":{"kind":"const","value":[10,11,0,83,72,16,46,144,46,42,79,22,157,123,21,242,192,146,1,78,88,59,102,9,190,226,92,189,187,232,83,220]}}},{"name":"glam_protocol","address":"GLAMpaME8wdTEzxtiYEAa5yD8fZbxZiz2hNtV58RZiEz"},{"name":"event_authority","optional":true,"pda":{"seeds":[{"kind":"const","value":[95,95,101,118,101,110,116,95,97,117,116,104,111,114,105,116,121]}]}},{"name":"event_program","optional":true,"address":"GM1NtvvnSXUptTrMCqbogAdZJydZSNv98DoU5AZVLmGh"}],"args":[{"name":"num_users","type":"u8"}]},{"name":"price_drift_vault_depositors","docs":["Extra accounts for pricing N vault depositors:","- (vault_depositor, drift_vault, drift_user) x N","- spot_market used by drift users of vaults (no specific order)","- perp markets used by drift users of vaults (no specific order)","- oracles of spot markets and perp markets (no specific order)"],"discriminator":[234,16,238,70,189,23,98,160],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_vault","pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"glam_state"}],"program":{"kind":"const","value":[227,199,235,230,176,132,243,117,43,131,173,18,78,255,26,50,209,135,86,219,140,126,61,255,0,218,252,224,172,8,223,207]}}},{"name":"signer","writable":true,"signer":true},{"name":"sol_usd_oracle"},{"name":"base_asset_oracle"},{"name":"integration_authority","pda":{"seeds":[{"kind":"const","value":[105,110,116,101,103,114,97,116,105,111,110,45,97,117,116,104,111,114,105,116,121]}]}},{"name":"glam_config","pda":{"seeds":[{"kind":"const","value":[103,108,111,98,97,108,45,99,111,110,102,105,103]}],"program":{"kind":"const","value":[10,11,0,83,72,16,46,144,46,42,79,22,157,123,21,242,192,146,1,78,88,59,102,9,190,226,92,189,187,232,83,220]}}},{"name":"glam_protocol","address":"GLAMpaME8wdTEzxtiYEAa5yD8fZbxZiz2hNtV58RZiEz"},{"name":"event_authority","optional":true,"pda":{"seeds":[{"kind":"const","value":[95,95,101,118,101,110,116,95,97,117,116,104,111,114,105,116,121]}]}},{"name":"event_program","optional":true,"address":"GM1NtvvnSXUptTrMCqbogAdZJydZSNv98DoU5AZVLmGh"}],"args":[{"name":"num_vault_depositors","type":"u8"},{"name":"num_spot_markets","type":"u8"},{"name":"num_perp_markets","type":"u8"}]},{"name":"price_kamino_obligations","docs":["Prices Kamino obligations. Reserves and obligations must be refreshed in the same slot before calling this ix.","","Extra accounts for pricing N kamino obligations:","- obligations x N"],"discriminator":[166,110,234,179,240,179,69,246],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_vault","pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"glam_state"}],"program":{"kind":"const","value":[227,199,235,230,176,132,243,117,43,131,173,18,78,255,26,50,209,135,86,219,140,126,61,255,0,218,252,224,172,8,223,207]}}},{"name":"signer","writable":true,"signer":true},{"name":"sol_usd_oracle"},{"name":"base_asset_oracle"},{"name":"integration_authority","pda":{"seeds":[{"kind":"const","value":[105,110,116,101,103,114,97,116,105,111,110,45,97,117,116,104,111,114,105,116,121]}]}},{"name":"glam_config","pda":{"seeds":[{"kind":"const","value":[103,108,111,98,97,108,45,99,111,110,102,105,103]}],"program":{"kind":"const","value":[10,11,0,83,72,16,46,144,46,42,79,22,157,123,21,242,192,146,1,78,88,59,102,9,190,226,92,189,187,232,83,220]}}},{"name":"glam_protocol","address":"GLAMpaME8wdTEzxtiYEAa5yD8fZbxZiz2hNtV58RZiEz"},{"name":"event_authority","optional":true,"pda":{"seeds":[{"kind":"const","value":[95,95,101,118,101,110,116,95,97,117,116,104,111,114,105,116,121]}]}},{"name":"event_program","optional":true,"address":"GM1NtvvnSXUptTrMCqbogAdZJydZSNv98DoU5AZVLmGh"}],"args":[]},{"name":"price_kamino_vault_shares","docs":["Prices Kamino vault shares.","- `num_vaults` Number of kamino vaults to price.","","Extra accounts for pricing N kamino vault shares:","- (kvault_share_ata, kvault_share_mint, kvault_state, kvault_deposit_token_oracle) x N","- reserve x M","- M = number of reserves used by all kvaults\' allocations","- reserve pubkeys must follow the same order of reserves used by each allocation"],"discriminator":[112,92,238,224,145,105,38,249],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_vault","pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"glam_state"}],"program":{"kind":"const","value":[227,199,235,230,176,132,243,117,43,131,173,18,78,255,26,50,209,135,86,219,140,126,61,255,0,218,252,224,172,8,223,207]}}},{"name":"signer","writable":true,"signer":true},{"name":"sol_usd_oracle"},{"name":"base_asset_oracle"},{"name":"integration_authority","pda":{"seeds":[{"kind":"const","value":[105,110,116,101,103,114,97,116,105,111,110,45,97,117,116,104,111,114,105,116,121]}]}},{"name":"glam_config","pda":{"seeds":[{"kind":"const","value":[103,108,111,98,97,108,45,99,111,110,102,105,103]}],"program":{"kind":"const","value":[10,11,0,83,72,16,46,144,46,42,79,22,157,123,21,242,192,146,1,78,88,59,102,9,190,226,92,189,187,232,83,220]}}},{"name":"glam_protocol","address":"GLAMpaME8wdTEzxtiYEAa5yD8fZbxZiz2hNtV58RZiEz"},{"name":"event_authority","optional":true,"pda":{"seeds":[{"kind":"const","value":[95,95,101,118,101,110,116,95,97,117,116,104,111,114,105,116,121]}]}},{"name":"event_program","optional":true,"address":"GM1NtvvnSXUptTrMCqbogAdZJydZSNv98DoU5AZVLmGh"}],"args":[{"name":"num_vaults","type":"u8"}]},{"name":"price_vault_tokens","docs":["Prices vault SOL balance and tokens it holds.","","Args:","- `denom`: Denomination of the price.","- `agg_indexes`: Indexes of the aggregation oracles for the tokens (must follow the same order of mints in extra accounts). If aggregation oracle is not used for token #`i`, `agg_indexes[i]` should be set to -1.","","Extra accounts for pricing N tokens:","- (ata, mint, oracle) x N","- optional oracle mapping (only add it if any token uses an agg oracle)"],"discriminator":[54,42,16,199,20,183,50,137],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_vault","pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"glam_state"}],"program":{"kind":"const","value":[227,199,235,230,176,132,243,117,43,131,173,18,78,255,26,50,209,135,86,219,140,126,61,255,0,218,252,224,172,8,223,207]}}},{"name":"signer","writable":true,"signer":true},{"name":"sol_usd_oracle"},{"name":"base_asset_oracle"},{"name":"integration_authority","pda":{"seeds":[{"kind":"const","value":[105,110,116,101,103,114,97,116,105,111,110,45,97,117,116,104,111,114,105,116,121]}]}},{"name":"glam_config","pda":{"seeds":[{"kind":"const","value":[103,108,111,98,97,108,45,99,111,110,102,105,103]}],"program":{"kind":"const","value":[10,11,0,83,72,16,46,144,46,42,79,22,157,123,21,242,192,146,1,78,88,59,102,9,190,226,92,189,187,232,83,220]}}},{"name":"glam_protocol","address":"GLAMpaME8wdTEzxtiYEAa5yD8fZbxZiz2hNtV58RZiEz"},{"name":"event_authority","optional":true,"pda":{"seeds":[{"kind":"const","value":[95,95,101,118,101,110,116,95,97,117,116,104,111,114,105,116,121]}]}},{"name":"event_program","optional":true,"address":"GM1NtvvnSXUptTrMCqbogAdZJydZSNv98DoU5AZVLmGh"}],"args":[{"name":"agg_indexes","type":{"vec":{"array":["i16",4]}}}]},{"name":"queued_redeem","discriminator":[82,242,202,93,170,196,215,113],"accounts":[{"name":"glam_state"},{"name":"glam_mint","writable":true},{"name":"glam_escrow","pda":{"seeds":[{"kind":"const","value":[101,115,99,114,111,119]},{"kind":"account","path":"glam_mint"}]}},{"name":"request_queue","writable":true,"pda":{"seeds":[{"kind":"const","value":[114,101,113,117,101,115,116,45,113,117,101,117,101]},{"kind":"account","path":"glam_mint"}]}},{"name":"signer","writable":true,"signer":true},{"name":"signer_mint_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"signer"},{"kind":"account","path":"token_2022_program"},{"kind":"account","path":"glam_mint"}],"program":{"kind":"const","value":[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{"name":"escrow_mint_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"glam_escrow"},{"kind":"account","path":"token_2022_program"},{"kind":"account","path":"glam_mint"}],"program":{"kind":"const","value":[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"token_2022_program","address":"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"},{"name":"associated_token_program","address":"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"}],"args":[{"name":"amount_in","type":"u64"}]},{"name":"queued_subscribe","discriminator":[107,180,212,63,146,0,159,255],"accounts":[{"name":"glam_state"},{"name":"glam_mint","writable":true},{"name":"glam_escrow","pda":{"seeds":[{"kind":"const","value":[101,115,99,114,111,119]},{"kind":"account","path":"glam_mint"}]}},{"name":"request_queue","writable":true,"pda":{"seeds":[{"kind":"const","value":[114,101,113,117,101,115,116,45,113,117,101,117,101]},{"kind":"account","path":"glam_mint"}]}},{"name":"signer","writable":true,"signer":true},{"name":"deposit_asset"},{"name":"escrow_deposit_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"glam_escrow"},{"kind":"account","path":"deposit_token_program"},{"kind":"account","path":"deposit_asset"}],"program":{"kind":"const","value":[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{"name":"signer_deposit_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"signer"},{"kind":"account","path":"deposit_token_program"},{"kind":"account","path":"deposit_asset"}],"program":{"kind":"const","value":[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"deposit_token_program"},{"name":"associated_token_program","address":"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"}],"args":[{"name":"amount_in","type":"u64"}]},{"name":"set_mint_policy","discriminator":[12,208,252,52,166,250,137,169],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_signer","writable":true,"signer":true},{"name":"glam_protocol_program","address":"GLAMpaME8wdTEzxtiYEAa5yD8fZbxZiz2hNtV58RZiEz"}],"args":[{"name":"policy","type":{"defined":{"name":"MintPolicy"}}}]},{"name":"set_protocol_fees","discriminator":[49,143,189,18,56,206,158,226],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_mint"},{"name":"signer","writable":true,"signer":true},{"name":"glam_config","pda":{"seeds":[{"kind":"const","value":[103,108,111,98,97,108,45,99,111,110,102,105,103]}],"program":{"kind":"const","value":[10,11,0,83,72,16,46,144,46,42,79,22,157,123,21,242,192,146,1,78,88,59,102,9,190,226,92,189,187,232,83,220]}}},{"name":"glam_protocol_program","address":"GLAMpaME8wdTEzxtiYEAa5yD8fZbxZiz2hNtV58RZiEz"}],"args":[{"name":"base_fee_bps","type":"u16"},{"name":"flow_fee_bps","type":"u16"}]},{"name":"set_token_accounts_states","discriminator":[50,133,45,86,117,66,115,195],"accounts":[{"name":"glam_state"},{"name":"glam_signer","writable":true,"signer":true},{"name":"glam_mint","writable":true},{"name":"token_2022_program","address":"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"}],"args":[{"name":"frozen","type":"bool"}]},{"name":"subscribe","discriminator":[254,28,191,138,156,179,183,53],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_vault","pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"glam_state"}],"program":{"kind":"const","value":[227,199,235,230,176,132,243,117,43,131,173,18,78,255,26,50,209,135,86,219,140,126,61,255,0,218,252,224,172,8,223,207]}}},{"name":"glam_mint","writable":true},{"name":"glam_escrow","pda":{"seeds":[{"kind":"const","value":[101,115,99,114,111,119]},{"kind":"account","path":"glam_mint"}]}},{"name":"request_queue","pda":{"seeds":[{"kind":"const","value":[114,101,113,117,101,115,116,45,113,117,101,117,101]},{"kind":"account","path":"glam_mint"}]}},{"name":"signer","writable":true,"signer":true},{"name":"signer_mint_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"signer"},{"kind":"account","path":"token_2022_program"},{"kind":"account","path":"glam_mint"}],"program":{"kind":"const","value":[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{"name":"escrow_mint_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"glam_escrow"},{"kind":"account","path":"token_2022_program"},{"kind":"account","path":"glam_mint"}],"program":{"kind":"const","value":[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{"name":"deposit_asset"},{"name":"vault_deposit_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"glam_vault"},{"kind":"account","path":"deposit_token_program"},{"kind":"account","path":"deposit_asset"}],"program":{"kind":"const","value":[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{"name":"signer_deposit_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"signer"},{"kind":"account","path":"deposit_token_program"},{"kind":"account","path":"deposit_asset"}],"program":{"kind":"const","value":[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{"name":"signer_policy","writable":true,"optional":true},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"deposit_token_program"},{"name":"token_2022_program","address":"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"},{"name":"associated_token_program","address":"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"},{"name":"policies_program","address":"po1iCYakK3gHCLbuju4wGzFowTMpAJxkqK1iwUqMonY"},{"name":"glam_protocol_program","address":"GLAMpaME8wdTEzxtiYEAa5yD8fZbxZiz2hNtV58RZiEz"}],"args":[{"name":"amount_in","type":"u64"}]},{"name":"update_mint","discriminator":[212,203,57,78,75,245,222,5],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_signer","writable":true,"signer":true},{"name":"glam_mint","writable":true},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"token_2022_program","address":"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"},{"name":"glam_protocol","address":"GLAMpaME8wdTEzxtiYEAa5yD8fZbxZiz2hNtV58RZiEz"}],"args":[{"name":"mint_model","type":{"defined":{"name":"MintModel"}}}]},{"name":"update_mint_apply_timelock","discriminator":[223,241,80,24,120,25,82,134],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_signer","writable":true,"signer":true},{"name":"glam_mint","writable":true},{"name":"request_queue","optional":true,"pda":{"seeds":[{"kind":"const","value":[114,101,113,117,101,115,116,45,113,117,101,117,101]},{"kind":"account","path":"glam_mint"}]}},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"token_2022_program","address":"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"},{"name":"glam_protocol","address":"GLAMpaME8wdTEzxtiYEAa5yD8fZbxZiz2hNtV58RZiEz"}],"args":[]},{"name":"validate_aum","docs":["Validates AUM of the vault and emits AumRecord event."],"discriminator":[101,15,233,89,134,123,224,99],"accounts":[{"name":"glam_state"},{"name":"signer","writable":true,"signer":true},{"name":"event_authority","optional":true,"pda":{"seeds":[{"kind":"const","value":[95,95,101,118,101,110,116,95,97,117,116,104,111,114,105,116,121]}]}},{"name":"event_program","optional":true,"address":"GM1NtvvnSXUptTrMCqbogAdZJydZSNv98DoU5AZVLmGh"}],"args":[]}],"accounts":[{"name":"GlobalConfig","discriminator":[149,8,156,202,160,252,176,217]},{"name":"RequestQueue","discriminator":[172,124,172,253,233,63,70,234]},{"name":"StateAccount","discriminator":[142,247,54,95,85,133,249,103]}],"events":[{"name":"AumRecord","discriminator":[162,116,55,29,223,230,239,205]},{"name":"PricedProtocolRecord","discriminator":[232,89,187,82,49,200,127,132]}],"errors":[{"code":6000,"name":"InvalidAuthority","msg":"Invalid authority"},{"code":6001,"name":"UnauthorizedSigner","msg":"Signer is not authorized"},{"code":6002,"name":"ActionPaused","msg":"Requested action is paused"},{"code":6003,"name":"InvalidAsset","msg":"Asset not allowed to subscribe"},{"code":6004,"name":"MaxCapExceeded","msg":"Max cap exceeded"},{"code":6005,"name":"InvalidAmount","msg":"Invalid amount for subscription or redemption"},{"code":6006,"name":"NewRequestNotAllowed","msg":"New request is not allowed"},{"code":6007,"name":"RequestNotClaimable","msg":"Request is not claimable"},{"code":6008,"name":"RequestNotCancellable","msg":"Request is not cancellable"},{"code":6009,"name":"RequestNotFound","msg":"Request not found"},{"code":6010,"name":"RequestQueueNotEmpty","msg":"Request queue not empty"},{"code":6011,"name":"InvalidRequestQueueData","msg":"Invalid request queue data"},{"code":6012,"name":"RequestQueueFull","msg":"Request queue full"},{"code":6013,"name":"ProtocolFeesNotCrystallized","msg":"Protocol fees should be crystallized before updating"}],"types":[{"name":"AccountType","type":{"kind":"enum","variants":[{"name":"Vault"},{"name":"TokenizedVault"},{"name":"Mint"}]}},{"name":"AccruedFees","type":{"kind":"struct","fields":[{"name":"vault_subscription_fee","type":"u128"},{"name":"vault_redemption_fee","type":"u128"},{"name":"manager_subscription_fee","type":"u128"},{"name":"manager_redemption_fee","type":"u128"},{"name":"management_fee","type":"u128"},{"name":"performance_fee","type":"u128"},{"name":"protocol_base_fee","type":"u128"},{"name":"protocol_flow_fee","type":"u128"}]}},{"name":"AssetMeta","type":{"kind":"struct","fields":[{"name":"asset","type":"pubkey"},{"name":"decimals","type":"u8"},{"name":"oracle","type":"pubkey"},{"name":"oracle_source","type":{"defined":{"name":"OracleSource"}}},{"name":"max_age_seconds","type":"u16"},{"name":"priority","type":"u8"},{"name":"padding","type":{"array":["u8",3]}}]}},{"name":"AumRecord","type":{"kind":"struct","fields":[{"name":"base_asset_amount","type":"i128"}]}},{"name":"CreatedModel","type":{"kind":"struct","fields":[{"name":"key","type":{"array":["u8",8]}},{"name":"created_by","type":"pubkey"},{"name":"created_at","type":"i64"}]}},{"name":"DelegateAcl","type":{"kind":"struct","fields":[{"name":"pubkey","type":"pubkey"},{"name":"integration_permissions","type":{"vec":{"defined":{"name":"IntegrationPermissions"}}}},{"name":"expires_at","type":"i64"}]}},{"name":"EmergencyUpdateMintArgs","type":{"kind":"struct","fields":[{"name":"request_type","type":{"defined":{"name":"RequestType"}}},{"name":"set_paused","type":"bool"}]}},{"name":"EngineField","type":{"kind":"struct","fields":[{"name":"name","type":{"defined":{"name":"EngineFieldName"}}},{"name":"value","type":{"defined":{"name":"EngineFieldValue"}}}]}},{"name":"EngineFieldName","type":{"kind":"enum","variants":[{"name":"Owner"},{"name":"PortfolioManagerName"},{"name":"Name"},{"name":"Uri"},{"name":"Assets"},{"name":"DelegateAcls"},{"name":"IntegrationAcls"},{"name":"TimelockDuration"},{"name":"Borrowable"},{"name":"DefaultAccountStateFrozen"},{"name":"PermanentDelegate"},{"name":"NotifyAndSettle"},{"name":"FeeStructure"},{"name":"FeeParams"},{"name":"ClaimableFees"},{"name":"ClaimedFees"},{"name":"OracleConfigs"}]}},{"name":"EngineFieldValue","type":{"kind":"enum","variants":[{"name":"Boolean","fields":[{"name":"val","type":"bool"}]},{"name":"U8","fields":[{"name":"val","type":"u8"}]},{"name":"U32","fields":[{"name":"val","type":"u32"}]},{"name":"U64","fields":[{"name":"val","type":"u64"}]},{"name":"String","fields":[{"name":"val","type":"string"}]},{"name":"Pubkey","fields":[{"name":"val","type":"pubkey"}]},{"name":"VecPubkey","fields":[{"name":"val","type":{"vec":"pubkey"}}]},{"name":"VecU8","fields":[{"name":"val","type":"bytes"}]},{"name":"VecU32","fields":[{"name":"val","type":{"vec":"u32"}}]},{"name":"VecDelegateAcl","fields":[{"name":"val","type":{"vec":{"defined":{"name":"DelegateAcl"}}}}]},{"name":"VecIntegrationAcl","fields":[{"name":"val","type":{"vec":{"defined":{"name":"IntegrationAcl"}}}}]},{"name":"FeeStructure","fields":[{"name":"val","type":{"defined":{"name":"FeeStructure"}}}]},{"name":"FeeParams","fields":[{"name":"val","type":{"defined":{"name":"FeeParams"}}}]},{"name":"AccruedFees","fields":[{"name":"val","type":{"defined":{"name":"AccruedFees"}}}]},{"name":"NotifyAndSettle","fields":[{"name":"val","type":{"defined":{"name":"NotifyAndSettle"}}}]},{"name":"OracleConfigs","fields":[{"name":"val","type":{"defined":{"name":"OracleConfigs"}}}]}]}},{"name":"EntryExitFees","type":{"kind":"struct","fields":[{"name":"subscription_fee_bps","type":"u16"},{"name":"redemption_fee_bps","type":"u16"}]}},{"name":"FeeParams","type":{"kind":"struct","fields":[{"name":"year_in_seconds","type":"u32"},{"name":"pa_high_water_mark","type":"i128"},{"name":"pa_last_nav","type":"i128"},{"name":"last_aum","type":"i128"},{"name":"last_performance_fee_crystallized","type":"i64"},{"name":"last_management_fee_crystallized","type":"i64"},{"name":"last_protocol_fee_crystallized","type":"i64"}]}},{"name":"FeeStructure","type":{"kind":"struct","fields":[{"name":"vault","type":{"defined":{"name":"EntryExitFees"}}},{"name":"manager","type":{"defined":{"name":"EntryExitFees"}}},{"name":"management","type":{"defined":{"name":"ManagementFee"}}},{"name":"performance","type":{"defined":{"name":"PerformanceFee"}}},{"name":"protocol","type":{"defined":{"name":"ProtocolFees"}}}]}},{"name":"GlobalConfig","type":{"kind":"struct","fields":[{"name":"admin","docs":["The authority that can modify the config"],"type":"pubkey"},{"name":"fee_authority","docs":["The authority that can modify fee structure of individual glam state and claim protocol fees"],"type":"pubkey"},{"name":"referrer","type":"pubkey"},{"name":"base_fee_bps","type":"u16"},{"name":"flow_fee_bps","type":"u16"},{"name":"asset_metas","type":{"vec":{"defined":{"name":"AssetMeta"}}}}]}},{"name":"HurdleType","type":{"kind":"enum","variants":[{"name":"Hard"},{"name":"Soft"}]}},{"name":"IntegrationAcl","docs":["An integration program can have multiple protocols supported.","Enabled protocols are stored in a bitmask, and each protocol can have its own policy."],"type":{"kind":"struct","fields":[{"name":"integration_program","type":"pubkey"},{"name":"protocols_bitmask","type":"u16"},{"name":"protocol_policies","type":{"vec":{"defined":{"name":"ProtocolPolicy"}}}}]}},{"name":"IntegrationPermissions","docs":["Stores delegate permissions for an integration program."],"type":{"kind":"struct","fields":[{"name":"integration_program","type":"pubkey"},{"name":"protocol_permissions","type":{"vec":{"defined":{"name":"ProtocolPermissions"}}}}]}},{"name":"ManagementFee","type":{"kind":"struct","fields":[{"name":"fee_bps","type":"u16"}]}},{"name":"MintModel","type":{"kind":"struct","fields":[{"name":"symbol","type":{"option":"string"}},{"name":"name","type":{"option":{"array":["u8",32]}}},{"name":"uri","type":{"option":"string"}},{"name":"year_in_seconds","type":{"option":"u32"}},{"name":"permanent_delegate","type":{"option":"pubkey"}},{"name":"default_account_state_frozen","type":{"option":"bool"}},{"name":"fee_structure","type":{"option":{"defined":{"name":"FeeStructure"}}}},{"name":"notify_and_settle","type":{"option":{"defined":{"name":"NotifyAndSettle"}}}},{"name":"lockup_period","type":{"option":"u32"}},{"name":"max_cap","type":{"option":"u64"}},{"name":"min_subscription","type":{"option":"u64"}},{"name":"min_redemption","type":{"option":"u64"}},{"name":"allowlist","type":{"option":{"vec":"pubkey"}}},{"name":"blocklist","type":{"option":{"vec":"pubkey"}}}]}},{"name":"MintPolicy","type":{"kind":"struct","fields":[{"name":"lockup_period","type":"u32"},{"name":"max_cap","type":"u64"},{"name":"min_subscription","type":"u64"},{"name":"min_redemption","type":"u64"},{"name":"reserved","type":"u64"},{"name":"allowlist","type":{"option":{"vec":"pubkey"}}},{"name":"blocklist","type":{"option":{"vec":"pubkey"}}}]}},{"name":"NoticePeriodType","type":{"kind":"enum","variants":[{"name":"Hard"},{"name":"Soft"}]}},{"name":"NotifyAndSettle","type":{"kind":"struct","fields":[{"name":"model","type":{"defined":{"name":"ValuationModel"}}},{"name":"permissionless_fulfillment","type":"bool"},{"name":"subscribe_notice_period_type","type":{"defined":{"name":"NoticePeriodType"}}},{"name":"subscribe_notice_period","type":"u64"},{"name":"subscribe_settlement_period","type":"u64"},{"name":"subscribe_cancellation_window","type":"u64"},{"name":"redeem_notice_period_type","type":{"defined":{"name":"NoticePeriodType"}}},{"name":"redeem_notice_period","type":"u64"},{"name":"redeem_settlement_period","type":"u64"},{"name":"redeem_cancellation_window","type":"u64"},{"name":"time_unit","type":{"defined":{"name":"TimeUnit"}}},{"name":"_padding","type":{"array":["u8",3]}}]}},{"name":"OracleConfigs","docs":["Vault-specific oracle configs. If available, these configs are preferred over the global config."],"type":{"kind":"struct","fields":[{"name":"max_ages_seconds","type":{"vec":{"array":["u16",2]}}},{"name":"padding","type":{"array":["u8",12]}}]}},{"name":"OracleSource","type":{"kind":"enum","variants":[{"name":"Pyth"},{"name":"Switchboard"},{"name":"QuoteAsset"},{"name":"Pyth1K"},{"name":"Pyth1M"},{"name":"PythStableCoin"},{"name":"Prelaunch"},{"name":"PythPull"},{"name":"Pyth1KPull"},{"name":"Pyth1MPull"},{"name":"PythStableCoinPull"},{"name":"SwitchboardOnDemand"},{"name":"PythLazer"},{"name":"PythLazer1K"},{"name":"PythLazer1M"},{"name":"PythLazerStableCoin"},{"name":"NotSet"},{"name":"LstPoolState"},{"name":"MarinadeState"},{"name":"BaseAsset"},{"name":"ChainlinkRWA"}]}},{"name":"PendingRequest","type":{"kind":"struct","fields":[{"name":"user","type":"pubkey"},{"name":"incoming","type":"u64"},{"name":"outgoing","type":"u64"},{"name":"created_at","type":"u64"},{"name":"fulfilled_at","type":"u64"},{"name":"time_unit","type":"u8"},{"name":"request_type","type":{"defined":{"name":"RequestType"}}},{"name":"reserved","type":{"array":["u8",6]}}]}},{"name":"PerformanceFee","type":{"kind":"struct","fields":[{"name":"fee_bps","type":"u16"},{"name":"hurdle_rate_bps","type":"u16"},{"name":"hurdle_type","type":{"defined":{"name":"HurdleType"}}}]}},{"name":"PricedProtocol","type":{"kind":"struct","fields":[{"name":"rent","type":"u64"},{"name":"amount","type":"i128"},{"name":"decimals","type":"u8"},{"name":"last_updated_slot","type":"u64"},{"name":"integration_program","type":"pubkey"},{"name":"protocol_bitflag","type":"u16"},{"name":"positions","type":{"vec":"pubkey"}}]}},{"name":"PricedProtocolRecord","type":{"kind":"struct","fields":[{"name":"base_asset_amount","type":"i128"}]}},{"name":"ProtocolFees","type":{"kind":"struct","fields":[{"name":"base_fee_bps","type":"u16"},{"name":"flow_fee_bps","type":"u16"}]}},{"name":"ProtocolPermissions","docs":["Represents a delegate\'s permissions for a specific protocol"],"type":{"kind":"struct","fields":[{"name":"protocol_bitflag","type":"u16"},{"name":"permissions_bitmask","type":"u64"}]}},{"name":"ProtocolPolicy","docs":["Stores policy data for an integrated protocol.","Integration programs serialize/deserialize this data."],"type":{"kind":"struct","fields":[{"name":"protocol_bitflag","type":"u16"},{"name":"data","type":"bytes"}]}},{"name":"RequestQueue","type":{"kind":"struct","fields":[{"name":"glam_state","type":"pubkey"},{"name":"glam_mint","type":"pubkey"},{"name":"subscription_paused","type":"bool"},{"name":"redemption_paused","type":"bool"},{"name":"data","type":{"vec":{"defined":{"name":"PendingRequest"}}}}]}},{"name":"RequestType","type":{"kind":"enum","variants":[{"name":"Subscription"},{"name":"Redemption"}]}},{"name":"StateAccount","type":{"kind":"struct","fields":[{"name":"account_type","type":{"defined":{"name":"AccountType"}}},{"name":"enabled","type":"bool"},{"name":"vault","type":"pubkey"},{"name":"owner","type":"pubkey"},{"name":"portfolio_manager_name","type":{"array":["u8",32]}},{"name":"created","type":{"defined":{"name":"CreatedModel"}}},{"name":"base_asset_mint","type":"pubkey"},{"name":"base_asset_decimals","type":"u8"},{"name":"base_asset_token_program","type":"u8"},{"name":"name","type":{"array":["u8",32]}},{"name":"timelock_duration","type":"u32"},{"name":"timelock_expires_at","type":"u64"},{"name":"mint","type":"pubkey"},{"name":"assets","type":{"vec":"pubkey"}},{"name":"integration_acls","type":{"vec":{"defined":{"name":"IntegrationAcl"}}}},{"name":"delegate_acls","type":{"vec":{"defined":{"name":"DelegateAcl"}}}},{"name":"external_positions","type":{"vec":"pubkey"}},{"name":"priced_protocols","type":{"vec":{"defined":{"name":"PricedProtocol"}}}},{"name":"params","type":{"vec":{"vec":{"defined":{"name":"EngineField"}}}}}]}},{"name":"TimeUnit","type":{"kind":"enum","variants":[{"name":"Second"},{"name":"Slot"}]}},{"name":"ValuationModel","type":{"kind":"enum","variants":[{"name":"Continuous"},{"name":"Periodic"}]}}],"constants":[{"name":"PROTO_MINT","type":"u16","value":"1"},{"name":"PROTO_MINT_PERM_BURN_TOKENS","type":"u64","value":"2"},{"name":"PROTO_MINT_PERM_CANCEL_REQUEST","type":"u64","value":"128"},{"name":"PROTO_MINT_PERM_CLAIM_FEES","type":"u64","value":"16"},{"name":"PROTO_MINT_PERM_CLAIM_REQUEST","type":"u64","value":"256"},{"name":"PROTO_MINT_PERM_EMERGENCY_UPDATE","type":"u64","value":"64"},{"name":"PROTO_MINT_PERM_FORCE_TRANSFER_TOKENS","type":"u64","value":"4"},{"name":"PROTO_MINT_PERM_FULFILL","type":"u64","value":"32"},{"name":"PROTO_MINT_PERM_MINT_TOKENS","type":"u64","value":"1"},{"name":"PROTO_MINT_PERM_SET_TOKEN_ACCOUNT_STATE","type":"u64","value":"8"}]}');
125
+ module.exports = /*#__PURE__*/JSON.parse('{"address":"GM1NtvvnSXUptTrMCqbogAdZJydZSNv98DoU5AZVLmGh","metadata":{"name":"glam_mint","version":"1.0.1","spec":"0.1.0","description":"GLAM mint program"},"instructions":[{"name":"burn_tokens","discriminator":[76,15,51,254,229,215,121,66],"accounts":[{"name":"glam_state"},{"name":"glam_signer","writable":true,"signer":true},{"name":"glam_mint","writable":true},{"name":"from_token_account","writable":true},{"name":"from"},{"name":"token_2022_program","address":"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"}],"args":[{"name":"amount","type":"u64"}]},{"name":"cancel","discriminator":[232,219,223,41,219,236,220,190],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_mint","writable":true},{"name":"glam_escrow","pda":{"seeds":[{"kind":"const","value":[101,115,99,114,111,119]},{"kind":"account","path":"glam_mint"}]}},{"name":"request_queue","writable":true,"pda":{"seeds":[{"kind":"const","value":[114,101,113,117,101,115,116,45,113,117,101,117,101]},{"kind":"account","path":"glam_mint"}]}},{"name":"signer","writable":true,"signer":true},{"name":"user"},{"name":"recover_token_mint"},{"name":"user_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"user"},{"kind":"account","path":"recover_token_program"},{"kind":"account","path":"recover_token_mint"}],"program":{"kind":"const","value":[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{"name":"escrow_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"glam_escrow"},{"kind":"account","path":"recover_token_program"},{"kind":"account","path":"recover_token_mint"}],"program":{"kind":"const","value":[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"recover_token_program"},{"name":"associated_token_program","address":"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"}],"args":[]},{"name":"claim","discriminator":[62,198,214,193,213,159,108,210],"accounts":[{"name":"glam_state"},{"name":"glam_mint","writable":true},{"name":"glam_escrow","pda":{"seeds":[{"kind":"const","value":[101,115,99,114,111,119]},{"kind":"account","path":"glam_mint"}]}},{"name":"request_queue","writable":true,"pda":{"seeds":[{"kind":"const","value":[114,101,113,117,101,115,116,45,113,117,101,117,101]},{"kind":"account","path":"glam_mint"}]}},{"name":"signer","writable":true,"signer":true},{"name":"claim_user"},{"name":"claim_token_mint"},{"name":"claim_user_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"claim_user"},{"kind":"account","path":"claim_token_program"},{"kind":"account","path":"claim_token_mint"}],"program":{"kind":"const","value":[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{"name":"escrow_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"glam_escrow"},{"kind":"account","path":"claim_token_program"},{"kind":"account","path":"claim_token_mint"}],"program":{"kind":"const","value":[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{"name":"claim_user_policy","writable":true,"optional":true},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"claim_token_program"},{"name":"glam_policies_program","address":"po1iCYakK3gHCLbuju4wGzFowTMpAJxkqK1iwUqMonY"},{"name":"associated_token_program","address":"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"}],"args":[]},{"name":"claim_fees","discriminator":[82,251,233,156,12,52,184,202],"accounts":[{"name":"glam_state"},{"name":"glam_vault","writable":true,"pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"glam_state"}],"program":{"kind":"const","value":[227,199,235,230,176,132,243,117,43,131,173,18,78,255,26,50,209,135,86,219,140,126,61,255,0,218,252,224,172,8,223,207]}}},{"name":"glam_mint","writable":true},{"name":"glam_escrow","pda":{"seeds":[{"kind":"const","value":[101,115,99,114,111,119]},{"kind":"account","path":"glam_mint"}]}},{"name":"escrow_mint_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"glam_escrow"},{"kind":"account","path":"token_2022_program"},{"kind":"account","path":"glam_mint"}],"program":{"kind":"const","value":[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{"name":"signer","writable":true,"signer":true},{"name":"deposit_asset"},{"name":"vault_deposit_ata","docs":["To pay out fees"],"writable":true,"pda":{"seeds":[{"kind":"account","path":"glam_vault"},{"kind":"account","path":"deposit_token_program"},{"kind":"account","path":"deposit_asset"}],"program":{"kind":"const","value":[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{"name":"protocol_fee_authority","docs":["To receive protocol fee"]},{"name":"protocol_fee_authority_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"protocol_fee_authority"},{"kind":"account","path":"deposit_token_program"},{"kind":"account","path":"deposit_asset"}],"program":{"kind":"const","value":[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{"name":"manager_fee_authority","docs":["To receive manager fee"]},{"name":"manager_fee_authority_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"manager_fee_authority"},{"kind":"account","path":"deposit_token_program"},{"kind":"account","path":"deposit_asset"}],"program":{"kind":"const","value":[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{"name":"glam_config","pda":{"seeds":[{"kind":"const","value":[103,108,111,98,97,108,45,99,111,110,102,105,103]}],"program":{"kind":"const","value":[10,11,0,83,72,16,46,144,46,42,79,22,157,123,21,242,192,146,1,78,88,59,102,9,190,226,92,189,187,232,83,220]}}},{"name":"glam_protocol_program","address":"GLAMpaME8wdTEzxtiYEAa5yD8fZbxZiz2hNtV58RZiEz"},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"associated_token_program","address":"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"},{"name":"deposit_token_program"},{"name":"token_2022_program","address":"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"}],"args":[]},{"name":"close_mint","discriminator":[149,251,157,212,65,181,235,129],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_signer","writable":true,"signer":true},{"name":"glam_mint","writable":true},{"name":"request_queue","writable":true,"optional":true,"pda":{"seeds":[{"kind":"const","value":[114,101,113,117,101,115,116,45,113,117,101,117,101]},{"kind":"account","path":"glam_mint"}]}},{"name":"extra_metas_account","writable":true},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"policies_program","address":"po1iCYakK3gHCLbuju4wGzFowTMpAJxkqK1iwUqMonY"},{"name":"token_2022_program","address":"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"},{"name":"glam_protocol","address":"GLAMpaME8wdTEzxtiYEAa5yD8fZbxZiz2hNtV58RZiEz"}],"args":[]},{"name":"crystallize_fees","discriminator":[78,0,111,26,7,12,41,249],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_escrow","pda":{"seeds":[{"kind":"const","value":[101,115,99,114,111,119]},{"kind":"account","path":"glam_mint"}]}},{"name":"glam_mint","writable":true},{"name":"escrow_mint_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"glam_escrow"},{"kind":"account","path":"token_2022_program"},{"kind":"account","path":"glam_mint"}],"program":{"kind":"const","value":[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{"name":"signer","writable":true,"signer":true},{"name":"glam_protocol_program","address":"GLAMpaME8wdTEzxtiYEAa5yD8fZbxZiz2hNtV58RZiEz"},{"name":"token_2022_program","address":"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"}],"args":[]},{"name":"emergency_update_mint","discriminator":[141,210,26,160,120,140,28,239],"accounts":[{"name":"glam_state"},{"name":"glam_signer","writable":true,"signer":true},{"name":"glam_mint"},{"name":"request_queue","writable":true,"pda":{"seeds":[{"kind":"const","value":[114,101,113,117,101,115,116,45,113,117,101,117,101]},{"kind":"account","path":"glam_mint"}]}}],"args":[{"name":"args","type":{"defined":{"name":"EmergencyUpdateMintArgs"}}}]},{"name":"force_transfer_tokens","discriminator":[185,34,78,211,192,13,160,37],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_signer","writable":true,"signer":true},{"name":"glam_mint","writable":true},{"name":"from_token_account","writable":true},{"name":"to_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"to"},{"kind":"account","path":"token_2022_program"},{"kind":"account","path":"glam_mint"}],"program":{"kind":"const","value":[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{"name":"from"},{"name":"to"},{"name":"to_policy_account","writable":true,"optional":true},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"token_2022_program","address":"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"},{"name":"policies_program","address":"po1iCYakK3gHCLbuju4wGzFowTMpAJxkqK1iwUqMonY"}],"args":[{"name":"amount","type":"u64"}]},{"name":"fulfill","discriminator":[143,2,52,206,174,164,247,72],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_vault","writable":true,"pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"glam_state"}],"program":{"kind":"const","value":[227,199,235,230,176,132,243,117,43,131,173,18,78,255,26,50,209,135,86,219,140,126,61,255,0,218,252,224,172,8,223,207]}}},{"name":"glam_mint","writable":true},{"name":"glam_escrow","pda":{"seeds":[{"kind":"const","value":[101,115,99,114,111,119]},{"kind":"account","path":"glam_mint"}]}},{"name":"request_queue","writable":true,"pda":{"seeds":[{"kind":"const","value":[114,101,113,117,101,115,116,45,113,117,101,117,101]},{"kind":"account","path":"glam_mint"}]}},{"name":"signer","writable":true,"signer":true},{"name":"escrow_mint_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"glam_escrow"},{"kind":"account","path":"token_2022_program"},{"kind":"account","path":"glam_mint"}],"program":{"kind":"const","value":[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{"name":"asset"},{"name":"vault_asset_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"glam_vault"},{"kind":"account","path":"deposit_token_program"},{"kind":"account","path":"asset"}],"program":{"kind":"const","value":[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{"name":"escrow_asset_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"glam_escrow"},{"kind":"account","path":"deposit_token_program"},{"kind":"account","path":"asset"}],"program":{"kind":"const","value":[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"deposit_token_program"},{"name":"token_2022_program","address":"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"},{"name":"associated_token_program","address":"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"},{"name":"glam_protocol_program","address":"GLAMpaME8wdTEzxtiYEAa5yD8fZbxZiz2hNtV58RZiEz"}],"args":[{"name":"limit","type":{"option":"u32"}}]},{"name":"initialize_mint","docs":["Initialize a new GLAM mint with extensions and metadata.","","- `mint_model` - Configuration model containing mint parameters and metadata","- `created_key` - 8-byte key used in the GLAM state PDA derivation","- `account_type` - Fund (for tokenized vault mint) or Mint","- `decimals` - Decimals of new mint"],"discriminator":[209,42,195,4,129,85,209,44],"accounts":[{"name":"glam_state","writable":true},{"name":"signer","writable":true,"signer":true},{"name":"new_mint","writable":true},{"name":"request_queue","writable":true,"optional":true,"pda":{"seeds":[{"kind":"const","value":[114,101,113,117,101,115,116,45,113,117,101,117,101]},{"kind":"account","path":"new_mint"}]}},{"name":"extra_metas_account","writable":true},{"name":"base_asset_mint"},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"token_2022_program","address":"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"},{"name":"policies_program","address":"po1iCYakK3gHCLbuju4wGzFowTMpAJxkqK1iwUqMonY"},{"name":"glam_protocol","address":"GLAMpaME8wdTEzxtiYEAa5yD8fZbxZiz2hNtV58RZiEz"}],"args":[{"name":"mint_model","type":{"defined":{"name":"MintModel"}}},{"name":"created_key","type":{"array":["u8",8]}},{"name":"account_type","type":{"defined":{"name":"AccountType"}}},{"name":"decimals","type":{"option":"u8"}}]},{"name":"mint_tokens","discriminator":[59,132,24,246,122,39,8,243],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_signer","writable":true,"signer":true},{"name":"glam_mint","writable":true},{"name":"mint_to","writable":true,"pda":{"seeds":[{"kind":"account","path":"recipient"},{"kind":"account","path":"token_2022_program"},{"kind":"account","path":"glam_mint"}],"program":{"kind":"const","value":[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{"name":"recipient","writable":true},{"name":"policy_account","writable":true,"optional":true},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"token_2022_program","address":"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"},{"name":"policies_program","address":"po1iCYakK3gHCLbuju4wGzFowTMpAJxkqK1iwUqMonY"}],"args":[{"name":"amount","type":"u64"}]},{"name":"price_drift_users","docs":["Extra accounts for pricing N drift users under the same user stats:","- user_stats x 1","- drift_user x N","- markets and oracles used by all drift users (no specific order)"],"discriminator":[12,5,143,51,101,81,200,150],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_vault","pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"glam_state"}],"program":{"kind":"const","value":[227,199,235,230,176,132,243,117,43,131,173,18,78,255,26,50,209,135,86,219,140,126,61,255,0,218,252,224,172,8,223,207]}}},{"name":"signer","writable":true,"signer":true},{"name":"sol_usd_oracle"},{"name":"base_asset_oracle"},{"name":"integration_authority","pda":{"seeds":[{"kind":"const","value":[105,110,116,101,103,114,97,116,105,111,110,45,97,117,116,104,111,114,105,116,121]}]}},{"name":"glam_config","pda":{"seeds":[{"kind":"const","value":[103,108,111,98,97,108,45,99,111,110,102,105,103]}],"program":{"kind":"const","value":[10,11,0,83,72,16,46,144,46,42,79,22,157,123,21,242,192,146,1,78,88,59,102,9,190,226,92,189,187,232,83,220]}}},{"name":"glam_protocol","address":"GLAMpaME8wdTEzxtiYEAa5yD8fZbxZiz2hNtV58RZiEz"},{"name":"event_authority","optional":true,"pda":{"seeds":[{"kind":"const","value":[95,95,101,118,101,110,116,95,97,117,116,104,111,114,105,116,121]}]}},{"name":"event_program","optional":true,"address":"GM1NtvvnSXUptTrMCqbogAdZJydZSNv98DoU5AZVLmGh"}],"args":[{"name":"num_users","type":"u8"}]},{"name":"price_drift_vault_depositors","docs":["Extra accounts for pricing N vault depositors:","- (vault_depositor, drift_vault, drift_user) x N","- spot_market used by drift users of vaults (no specific order)","- perp markets used by drift users of vaults (no specific order)","- oracles of spot markets and perp markets (no specific order)"],"discriminator":[234,16,238,70,189,23,98,160],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_vault","pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"glam_state"}],"program":{"kind":"const","value":[227,199,235,230,176,132,243,117,43,131,173,18,78,255,26,50,209,135,86,219,140,126,61,255,0,218,252,224,172,8,223,207]}}},{"name":"signer","writable":true,"signer":true},{"name":"sol_usd_oracle"},{"name":"base_asset_oracle"},{"name":"integration_authority","pda":{"seeds":[{"kind":"const","value":[105,110,116,101,103,114,97,116,105,111,110,45,97,117,116,104,111,114,105,116,121]}]}},{"name":"glam_config","pda":{"seeds":[{"kind":"const","value":[103,108,111,98,97,108,45,99,111,110,102,105,103]}],"program":{"kind":"const","value":[10,11,0,83,72,16,46,144,46,42,79,22,157,123,21,242,192,146,1,78,88,59,102,9,190,226,92,189,187,232,83,220]}}},{"name":"glam_protocol","address":"GLAMpaME8wdTEzxtiYEAa5yD8fZbxZiz2hNtV58RZiEz"},{"name":"event_authority","optional":true,"pda":{"seeds":[{"kind":"const","value":[95,95,101,118,101,110,116,95,97,117,116,104,111,114,105,116,121]}]}},{"name":"event_program","optional":true,"address":"GM1NtvvnSXUptTrMCqbogAdZJydZSNv98DoU5AZVLmGh"}],"args":[{"name":"num_vault_depositors","type":"u8"},{"name":"num_spot_markets","type":"u8"},{"name":"num_perp_markets","type":"u8"}]},{"name":"price_kamino_obligations","docs":["Prices Kamino obligations. Reserves and obligations must be refreshed in the same slot before calling this ix.","","Extra accounts for pricing N kamino obligations:","- obligations x N"],"discriminator":[166,110,234,179,240,179,69,246],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_vault","pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"glam_state"}],"program":{"kind":"const","value":[227,199,235,230,176,132,243,117,43,131,173,18,78,255,26,50,209,135,86,219,140,126,61,255,0,218,252,224,172,8,223,207]}}},{"name":"signer","writable":true,"signer":true},{"name":"sol_usd_oracle"},{"name":"base_asset_oracle"},{"name":"integration_authority","pda":{"seeds":[{"kind":"const","value":[105,110,116,101,103,114,97,116,105,111,110,45,97,117,116,104,111,114,105,116,121]}]}},{"name":"glam_config","pda":{"seeds":[{"kind":"const","value":[103,108,111,98,97,108,45,99,111,110,102,105,103]}],"program":{"kind":"const","value":[10,11,0,83,72,16,46,144,46,42,79,22,157,123,21,242,192,146,1,78,88,59,102,9,190,226,92,189,187,232,83,220]}}},{"name":"glam_protocol","address":"GLAMpaME8wdTEzxtiYEAa5yD8fZbxZiz2hNtV58RZiEz"},{"name":"event_authority","optional":true,"pda":{"seeds":[{"kind":"const","value":[95,95,101,118,101,110,116,95,97,117,116,104,111,114,105,116,121]}]}},{"name":"event_program","optional":true,"address":"GM1NtvvnSXUptTrMCqbogAdZJydZSNv98DoU5AZVLmGh"}],"args":[]},{"name":"price_kamino_vault_shares","docs":["Prices Kamino vault shares.","- `num_vaults` Number of kamino vaults to price.","","Extra accounts for pricing N kamino vault shares:","- (kvault_share_ata, kvault_share_mint, kvault_state, kvault_deposit_token_oracle) x N","- reserve x M","- M = number of reserves used by all kvaults\' allocations","- reserve pubkeys must follow the same order of reserves used by each allocation"],"discriminator":[112,92,238,224,145,105,38,249],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_vault","pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"glam_state"}],"program":{"kind":"const","value":[227,199,235,230,176,132,243,117,43,131,173,18,78,255,26,50,209,135,86,219,140,126,61,255,0,218,252,224,172,8,223,207]}}},{"name":"signer","writable":true,"signer":true},{"name":"sol_usd_oracle"},{"name":"base_asset_oracle"},{"name":"integration_authority","pda":{"seeds":[{"kind":"const","value":[105,110,116,101,103,114,97,116,105,111,110,45,97,117,116,104,111,114,105,116,121]}]}},{"name":"glam_config","pda":{"seeds":[{"kind":"const","value":[103,108,111,98,97,108,45,99,111,110,102,105,103]}],"program":{"kind":"const","value":[10,11,0,83,72,16,46,144,46,42,79,22,157,123,21,242,192,146,1,78,88,59,102,9,190,226,92,189,187,232,83,220]}}},{"name":"glam_protocol","address":"GLAMpaME8wdTEzxtiYEAa5yD8fZbxZiz2hNtV58RZiEz"},{"name":"event_authority","optional":true,"pda":{"seeds":[{"kind":"const","value":[95,95,101,118,101,110,116,95,97,117,116,104,111,114,105,116,121]}]}},{"name":"event_program","optional":true,"address":"GM1NtvvnSXUptTrMCqbogAdZJydZSNv98DoU5AZVLmGh"}],"args":[{"name":"num_vaults","type":"u8"}]},{"name":"price_stake_accounts","discriminator":[119,137,9,15,196,73,30,27],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_vault","pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"glam_state"}],"program":{"kind":"const","value":[227,199,235,230,176,132,243,117,43,131,173,18,78,255,26,50,209,135,86,219,140,126,61,255,0,218,252,224,172,8,223,207]}}},{"name":"signer","writable":true,"signer":true},{"name":"sol_usd_oracle"},{"name":"base_asset_oracle"},{"name":"integration_authority","pda":{"seeds":[{"kind":"const","value":[105,110,116,101,103,114,97,116,105,111,110,45,97,117,116,104,111,114,105,116,121]}]}},{"name":"glam_config","pda":{"seeds":[{"kind":"const","value":[103,108,111,98,97,108,45,99,111,110,102,105,103]}],"program":{"kind":"const","value":[10,11,0,83,72,16,46,144,46,42,79,22,157,123,21,242,192,146,1,78,88,59,102,9,190,226,92,189,187,232,83,220]}}},{"name":"glam_protocol","address":"GLAMpaME8wdTEzxtiYEAa5yD8fZbxZiz2hNtV58RZiEz"},{"name":"event_authority","optional":true,"pda":{"seeds":[{"kind":"const","value":[95,95,101,118,101,110,116,95,97,117,116,104,111,114,105,116,121]}]}},{"name":"event_program","optional":true,"address":"GM1NtvvnSXUptTrMCqbogAdZJydZSNv98DoU5AZVLmGh"}],"args":[]},{"name":"price_vault_tokens","docs":["Prices vault SOL balance and tokens it holds.","","Args:","- `denom`: Denomination of the price.","- `agg_indexes`: Indexes of the aggregation oracles for the tokens (must follow the same order of mints in extra accounts). If aggregation oracle is not used for token #`i`, `agg_indexes[i]` should be set to -1.","","Extra accounts for pricing N tokens:","- (ata, mint, oracle) x N","- optional oracle mapping (only add it if any token uses an agg oracle)"],"discriminator":[54,42,16,199,20,183,50,137],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_vault","pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"glam_state"}],"program":{"kind":"const","value":[227,199,235,230,176,132,243,117,43,131,173,18,78,255,26,50,209,135,86,219,140,126,61,255,0,218,252,224,172,8,223,207]}}},{"name":"signer","writable":true,"signer":true},{"name":"sol_usd_oracle"},{"name":"base_asset_oracle"},{"name":"integration_authority","pda":{"seeds":[{"kind":"const","value":[105,110,116,101,103,114,97,116,105,111,110,45,97,117,116,104,111,114,105,116,121]}]}},{"name":"glam_config","pda":{"seeds":[{"kind":"const","value":[103,108,111,98,97,108,45,99,111,110,102,105,103]}],"program":{"kind":"const","value":[10,11,0,83,72,16,46,144,46,42,79,22,157,123,21,242,192,146,1,78,88,59,102,9,190,226,92,189,187,232,83,220]}}},{"name":"glam_protocol","address":"GLAMpaME8wdTEzxtiYEAa5yD8fZbxZiz2hNtV58RZiEz"},{"name":"event_authority","optional":true,"pda":{"seeds":[{"kind":"const","value":[95,95,101,118,101,110,116,95,97,117,116,104,111,114,105,116,121]}]}},{"name":"event_program","optional":true,"address":"GM1NtvvnSXUptTrMCqbogAdZJydZSNv98DoU5AZVLmGh"}],"args":[{"name":"agg_indexes","type":{"vec":{"array":["i16",4]}}}]},{"name":"queued_redeem","discriminator":[82,242,202,93,170,196,215,113],"accounts":[{"name":"glam_state"},{"name":"glam_mint","writable":true},{"name":"glam_escrow","pda":{"seeds":[{"kind":"const","value":[101,115,99,114,111,119]},{"kind":"account","path":"glam_mint"}]}},{"name":"request_queue","writable":true,"pda":{"seeds":[{"kind":"const","value":[114,101,113,117,101,115,116,45,113,117,101,117,101]},{"kind":"account","path":"glam_mint"}]}},{"name":"signer","writable":true,"signer":true},{"name":"signer_mint_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"signer"},{"kind":"account","path":"token_2022_program"},{"kind":"account","path":"glam_mint"}],"program":{"kind":"const","value":[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{"name":"escrow_mint_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"glam_escrow"},{"kind":"account","path":"token_2022_program"},{"kind":"account","path":"glam_mint"}],"program":{"kind":"const","value":[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"token_2022_program","address":"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"},{"name":"associated_token_program","address":"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"}],"args":[{"name":"amount_in","type":"u64"}]},{"name":"queued_subscribe","discriminator":[107,180,212,63,146,0,159,255],"accounts":[{"name":"glam_state"},{"name":"glam_mint","writable":true},{"name":"glam_escrow","pda":{"seeds":[{"kind":"const","value":[101,115,99,114,111,119]},{"kind":"account","path":"glam_mint"}]}},{"name":"request_queue","writable":true,"pda":{"seeds":[{"kind":"const","value":[114,101,113,117,101,115,116,45,113,117,101,117,101]},{"kind":"account","path":"glam_mint"}]}},{"name":"signer","writable":true,"signer":true},{"name":"deposit_asset"},{"name":"escrow_deposit_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"glam_escrow"},{"kind":"account","path":"deposit_token_program"},{"kind":"account","path":"deposit_asset"}],"program":{"kind":"const","value":[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{"name":"signer_deposit_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"signer"},{"kind":"account","path":"deposit_token_program"},{"kind":"account","path":"deposit_asset"}],"program":{"kind":"const","value":[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"deposit_token_program"},{"name":"associated_token_program","address":"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"}],"args":[{"name":"amount_in","type":"u64"}]},{"name":"set_mint_policy","discriminator":[12,208,252,52,166,250,137,169],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_signer","writable":true,"signer":true},{"name":"glam_protocol_program","address":"GLAMpaME8wdTEzxtiYEAa5yD8fZbxZiz2hNtV58RZiEz"}],"args":[{"name":"policy","type":{"defined":{"name":"MintPolicy"}}}]},{"name":"set_protocol_fees","discriminator":[49,143,189,18,56,206,158,226],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_mint"},{"name":"signer","writable":true,"signer":true},{"name":"glam_config","pda":{"seeds":[{"kind":"const","value":[103,108,111,98,97,108,45,99,111,110,102,105,103]}],"program":{"kind":"const","value":[10,11,0,83,72,16,46,144,46,42,79,22,157,123,21,242,192,146,1,78,88,59,102,9,190,226,92,189,187,232,83,220]}}},{"name":"glam_protocol_program","address":"GLAMpaME8wdTEzxtiYEAa5yD8fZbxZiz2hNtV58RZiEz"}],"args":[{"name":"base_fee_bps","type":"u16"},{"name":"flow_fee_bps","type":"u16"}]},{"name":"set_token_accounts_states","discriminator":[50,133,45,86,117,66,115,195],"accounts":[{"name":"glam_state"},{"name":"glam_signer","writable":true,"signer":true},{"name":"glam_mint","writable":true},{"name":"token_2022_program","address":"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"}],"args":[{"name":"frozen","type":"bool"}]},{"name":"subscribe","discriminator":[254,28,191,138,156,179,183,53],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_vault","pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"glam_state"}],"program":{"kind":"const","value":[227,199,235,230,176,132,243,117,43,131,173,18,78,255,26,50,209,135,86,219,140,126,61,255,0,218,252,224,172,8,223,207]}}},{"name":"glam_mint","writable":true},{"name":"glam_escrow","pda":{"seeds":[{"kind":"const","value":[101,115,99,114,111,119]},{"kind":"account","path":"glam_mint"}]}},{"name":"request_queue","pda":{"seeds":[{"kind":"const","value":[114,101,113,117,101,115,116,45,113,117,101,117,101]},{"kind":"account","path":"glam_mint"}]}},{"name":"signer","writable":true,"signer":true},{"name":"signer_mint_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"signer"},{"kind":"account","path":"token_2022_program"},{"kind":"account","path":"glam_mint"}],"program":{"kind":"const","value":[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{"name":"escrow_mint_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"glam_escrow"},{"kind":"account","path":"token_2022_program"},{"kind":"account","path":"glam_mint"}],"program":{"kind":"const","value":[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{"name":"deposit_asset"},{"name":"vault_deposit_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"glam_vault"},{"kind":"account","path":"deposit_token_program"},{"kind":"account","path":"deposit_asset"}],"program":{"kind":"const","value":[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{"name":"signer_deposit_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"signer"},{"kind":"account","path":"deposit_token_program"},{"kind":"account","path":"deposit_asset"}],"program":{"kind":"const","value":[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{"name":"signer_policy","writable":true,"optional":true},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"deposit_token_program"},{"name":"token_2022_program","address":"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"},{"name":"associated_token_program","address":"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"},{"name":"policies_program","address":"po1iCYakK3gHCLbuju4wGzFowTMpAJxkqK1iwUqMonY"},{"name":"glam_protocol_program","address":"GLAMpaME8wdTEzxtiYEAa5yD8fZbxZiz2hNtV58RZiEz"}],"args":[{"name":"amount_in","type":"u64"}]},{"name":"update_mint","discriminator":[212,203,57,78,75,245,222,5],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_signer","writable":true,"signer":true},{"name":"glam_mint","writable":true},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"token_2022_program","address":"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"},{"name":"glam_protocol","address":"GLAMpaME8wdTEzxtiYEAa5yD8fZbxZiz2hNtV58RZiEz"}],"args":[{"name":"mint_model","type":{"defined":{"name":"MintModel"}}}]},{"name":"update_mint_apply_timelock","discriminator":[223,241,80,24,120,25,82,134],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_signer","writable":true,"signer":true},{"name":"glam_mint","writable":true},{"name":"request_queue","optional":true,"pda":{"seeds":[{"kind":"const","value":[114,101,113,117,101,115,116,45,113,117,101,117,101]},{"kind":"account","path":"glam_mint"}]}},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"token_2022_program","address":"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"},{"name":"glam_protocol","address":"GLAMpaME8wdTEzxtiYEAa5yD8fZbxZiz2hNtV58RZiEz"}],"args":[]},{"name":"validate_aum","docs":["Validates AUM of the vault and emits AumRecord event."],"discriminator":[101,15,233,89,134,123,224,99],"accounts":[{"name":"glam_state"},{"name":"signer","writable":true,"signer":true},{"name":"event_authority","optional":true,"pda":{"seeds":[{"kind":"const","value":[95,95,101,118,101,110,116,95,97,117,116,104,111,114,105,116,121]}]}},{"name":"event_program","optional":true,"address":"GM1NtvvnSXUptTrMCqbogAdZJydZSNv98DoU5AZVLmGh"}],"args":[]}],"accounts":[{"name":"GlobalConfig","discriminator":[149,8,156,202,160,252,176,217]},{"name":"RequestQueue","discriminator":[172,124,172,253,233,63,70,234]},{"name":"StateAccount","discriminator":[142,247,54,95,85,133,249,103]}],"events":[{"name":"AumRecord","discriminator":[162,116,55,29,223,230,239,205]},{"name":"PricedProtocolRecord","discriminator":[232,89,187,82,49,200,127,132]}],"errors":[{"code":6000,"name":"InvalidAuthority","msg":"Invalid authority"},{"code":6001,"name":"UnauthorizedSigner","msg":"Signer is not authorized"},{"code":6002,"name":"ActionPaused","msg":"Requested action is paused"},{"code":6003,"name":"InvalidAsset","msg":"Asset not allowed to subscribe"},{"code":6004,"name":"MaxCapExceeded","msg":"Max cap exceeded"},{"code":6005,"name":"InvalidAmount","msg":"Invalid amount for subscription or redemption"},{"code":6006,"name":"NewRequestNotAllowed","msg":"New request is not allowed"},{"code":6007,"name":"RequestNotClaimable","msg":"Request is not claimable"},{"code":6008,"name":"RequestNotCancellable","msg":"Request is not cancellable"},{"code":6009,"name":"RequestNotFound","msg":"Request not found"},{"code":6010,"name":"RequestQueueNotEmpty","msg":"Request queue not empty"},{"code":6011,"name":"InvalidRequestQueueData","msg":"Invalid request queue data"},{"code":6012,"name":"RequestQueueFull","msg":"Request queue full"},{"code":6013,"name":"ProtocolFeesNotCrystallized","msg":"Protocol fees should be crystallized before updating"}],"types":[{"name":"AccountType","type":{"kind":"enum","variants":[{"name":"Vault"},{"name":"TokenizedVault"},{"name":"Mint"}]}},{"name":"AccruedFees","type":{"kind":"struct","fields":[{"name":"vault_subscription_fee","type":"u128"},{"name":"vault_redemption_fee","type":"u128"},{"name":"manager_subscription_fee","type":"u128"},{"name":"manager_redemption_fee","type":"u128"},{"name":"management_fee","type":"u128"},{"name":"performance_fee","type":"u128"},{"name":"protocol_base_fee","type":"u128"},{"name":"protocol_flow_fee","type":"u128"}]}},{"name":"AssetMeta","type":{"kind":"struct","fields":[{"name":"asset","type":"pubkey"},{"name":"decimals","type":"u8"},{"name":"oracle","type":"pubkey"},{"name":"oracle_source","type":{"defined":{"name":"OracleSource"}}},{"name":"max_age_seconds","type":"u16"},{"name":"priority","type":"u8"},{"name":"padding","type":{"array":["u8",3]}}]}},{"name":"AumRecord","type":{"kind":"struct","fields":[{"name":"base_asset_amount","type":"i128"}]}},{"name":"CreatedModel","type":{"kind":"struct","fields":[{"name":"key","type":{"array":["u8",8]}},{"name":"created_by","type":"pubkey"},{"name":"created_at","type":"i64"}]}},{"name":"DelegateAcl","type":{"kind":"struct","fields":[{"name":"pubkey","type":"pubkey"},{"name":"integration_permissions","type":{"vec":{"defined":{"name":"IntegrationPermissions"}}}},{"name":"expires_at","type":"i64"}]}},{"name":"EmergencyUpdateMintArgs","type":{"kind":"struct","fields":[{"name":"request_type","type":{"defined":{"name":"RequestType"}}},{"name":"set_paused","type":"bool"}]}},{"name":"EngineField","type":{"kind":"struct","fields":[{"name":"name","type":{"defined":{"name":"EngineFieldName"}}},{"name":"value","type":{"defined":{"name":"EngineFieldValue"}}}]}},{"name":"EngineFieldName","type":{"kind":"enum","variants":[{"name":"Owner"},{"name":"PortfolioManagerName"},{"name":"Name"},{"name":"Uri"},{"name":"Assets"},{"name":"DelegateAcls"},{"name":"IntegrationAcls"},{"name":"TimelockDuration"},{"name":"Borrowable"},{"name":"DefaultAccountStateFrozen"},{"name":"PermanentDelegate"},{"name":"NotifyAndSettle"},{"name":"FeeStructure"},{"name":"FeeParams"},{"name":"ClaimableFees"},{"name":"ClaimedFees"},{"name":"OracleConfigs"}]}},{"name":"EngineFieldValue","type":{"kind":"enum","variants":[{"name":"Boolean","fields":[{"name":"val","type":"bool"}]},{"name":"U8","fields":[{"name":"val","type":"u8"}]},{"name":"U32","fields":[{"name":"val","type":"u32"}]},{"name":"U64","fields":[{"name":"val","type":"u64"}]},{"name":"String","fields":[{"name":"val","type":"string"}]},{"name":"Pubkey","fields":[{"name":"val","type":"pubkey"}]},{"name":"VecPubkey","fields":[{"name":"val","type":{"vec":"pubkey"}}]},{"name":"VecU8","fields":[{"name":"val","type":"bytes"}]},{"name":"VecU32","fields":[{"name":"val","type":{"vec":"u32"}}]},{"name":"VecDelegateAcl","fields":[{"name":"val","type":{"vec":{"defined":{"name":"DelegateAcl"}}}}]},{"name":"VecIntegrationAcl","fields":[{"name":"val","type":{"vec":{"defined":{"name":"IntegrationAcl"}}}}]},{"name":"FeeStructure","fields":[{"name":"val","type":{"defined":{"name":"FeeStructure"}}}]},{"name":"FeeParams","fields":[{"name":"val","type":{"defined":{"name":"FeeParams"}}}]},{"name":"AccruedFees","fields":[{"name":"val","type":{"defined":{"name":"AccruedFees"}}}]},{"name":"NotifyAndSettle","fields":[{"name":"val","type":{"defined":{"name":"NotifyAndSettle"}}}]},{"name":"OracleConfigs","fields":[{"name":"val","type":{"defined":{"name":"OracleConfigs"}}}]}]}},{"name":"EntryExitFees","type":{"kind":"struct","fields":[{"name":"subscription_fee_bps","type":"u16"},{"name":"redemption_fee_bps","type":"u16"}]}},{"name":"FeeParams","type":{"kind":"struct","fields":[{"name":"year_in_seconds","type":"u32"},{"name":"pa_high_water_mark","type":"i128"},{"name":"pa_last_nav","type":"i128"},{"name":"last_aum","type":"i128"},{"name":"last_performance_fee_crystallized","type":"i64"},{"name":"last_management_fee_crystallized","type":"i64"},{"name":"last_protocol_fee_crystallized","type":"i64"}]}},{"name":"FeeStructure","type":{"kind":"struct","fields":[{"name":"vault","type":{"defined":{"name":"EntryExitFees"}}},{"name":"manager","type":{"defined":{"name":"EntryExitFees"}}},{"name":"management","type":{"defined":{"name":"ManagementFee"}}},{"name":"performance","type":{"defined":{"name":"PerformanceFee"}}},{"name":"protocol","type":{"defined":{"name":"ProtocolFees"}}}]}},{"name":"GlobalConfig","type":{"kind":"struct","fields":[{"name":"admin","docs":["The authority that can modify the config"],"type":"pubkey"},{"name":"fee_authority","docs":["The authority that can modify fee structure of individual glam state and claim protocol fees"],"type":"pubkey"},{"name":"referrer","type":"pubkey"},{"name":"base_fee_bps","type":"u16"},{"name":"flow_fee_bps","type":"u16"},{"name":"asset_metas","type":{"vec":{"defined":{"name":"AssetMeta"}}}}]}},{"name":"HurdleType","type":{"kind":"enum","variants":[{"name":"Hard"},{"name":"Soft"}]}},{"name":"IntegrationAcl","docs":["An integration program can have multiple protocols supported.","Enabled protocols are stored in a bitmask, and each protocol can have its own policy."],"type":{"kind":"struct","fields":[{"name":"integration_program","type":"pubkey"},{"name":"protocols_bitmask","type":"u16"},{"name":"protocol_policies","type":{"vec":{"defined":{"name":"ProtocolPolicy"}}}}]}},{"name":"IntegrationPermissions","docs":["Stores delegate permissions for an integration program."],"type":{"kind":"struct","fields":[{"name":"integration_program","type":"pubkey"},{"name":"protocol_permissions","type":{"vec":{"defined":{"name":"ProtocolPermissions"}}}}]}},{"name":"ManagementFee","type":{"kind":"struct","fields":[{"name":"fee_bps","type":"u16"}]}},{"name":"MintModel","type":{"kind":"struct","fields":[{"name":"symbol","type":{"option":"string"}},{"name":"name","type":{"option":{"array":["u8",32]}}},{"name":"uri","type":{"option":"string"}},{"name":"year_in_seconds","type":{"option":"u32"}},{"name":"permanent_delegate","type":{"option":"pubkey"}},{"name":"default_account_state_frozen","type":{"option":"bool"}},{"name":"fee_structure","type":{"option":{"defined":{"name":"FeeStructure"}}}},{"name":"notify_and_settle","type":{"option":{"defined":{"name":"NotifyAndSettle"}}}},{"name":"lockup_period","type":{"option":"u32"}},{"name":"max_cap","type":{"option":"u64"}},{"name":"min_subscription","type":{"option":"u64"}},{"name":"min_redemption","type":{"option":"u64"}},{"name":"allowlist","type":{"option":{"vec":"pubkey"}}},{"name":"blocklist","type":{"option":{"vec":"pubkey"}}}]}},{"name":"MintPolicy","type":{"kind":"struct","fields":[{"name":"lockup_period","type":"u32"},{"name":"max_cap","type":"u64"},{"name":"min_subscription","type":"u64"},{"name":"min_redemption","type":"u64"},{"name":"reserved","type":"u64"},{"name":"allowlist","type":{"option":{"vec":"pubkey"}}},{"name":"blocklist","type":{"option":{"vec":"pubkey"}}}]}},{"name":"NoticePeriodType","type":{"kind":"enum","variants":[{"name":"Hard"},{"name":"Soft"}]}},{"name":"NotifyAndSettle","type":{"kind":"struct","fields":[{"name":"model","type":{"defined":{"name":"ValuationModel"}}},{"name":"permissionless_fulfillment","type":"bool"},{"name":"subscribe_notice_period_type","type":{"defined":{"name":"NoticePeriodType"}}},{"name":"subscribe_notice_period","type":"u64"},{"name":"subscribe_settlement_period","type":"u64"},{"name":"subscribe_cancellation_window","type":"u64"},{"name":"redeem_notice_period_type","type":{"defined":{"name":"NoticePeriodType"}}},{"name":"redeem_notice_period","type":"u64"},{"name":"redeem_settlement_period","type":"u64"},{"name":"redeem_cancellation_window","type":"u64"},{"name":"time_unit","type":{"defined":{"name":"TimeUnit"}}},{"name":"_padding","type":{"array":["u8",3]}}]}},{"name":"OracleConfigs","docs":["Vault-specific oracle configs. If available, these configs are preferred over the global config."],"type":{"kind":"struct","fields":[{"name":"max_ages_seconds","type":{"vec":{"array":["u16",2]}}},{"name":"padding","type":{"array":["u8",12]}}]}},{"name":"OracleSource","type":{"kind":"enum","variants":[{"name":"Pyth"},{"name":"Switchboard"},{"name":"QuoteAsset"},{"name":"Pyth1K"},{"name":"Pyth1M"},{"name":"PythStableCoin"},{"name":"Prelaunch"},{"name":"PythPull"},{"name":"Pyth1KPull"},{"name":"Pyth1MPull"},{"name":"PythStableCoinPull"},{"name":"SwitchboardOnDemand"},{"name":"PythLazer"},{"name":"PythLazer1K"},{"name":"PythLazer1M"},{"name":"PythLazerStableCoin"},{"name":"NotSet"},{"name":"LstPoolState"},{"name":"MarinadeState"},{"name":"BaseAsset"},{"name":"ChainlinkRWA"}]}},{"name":"PendingRequest","type":{"kind":"struct","fields":[{"name":"user","type":"pubkey"},{"name":"incoming","type":"u64"},{"name":"outgoing","type":"u64"},{"name":"created_at","type":"u64"},{"name":"fulfilled_at","type":"u64"},{"name":"time_unit","type":"u8"},{"name":"request_type","type":{"defined":{"name":"RequestType"}}},{"name":"reserved","type":{"array":["u8",6]}}]}},{"name":"PerformanceFee","type":{"kind":"struct","fields":[{"name":"fee_bps","type":"u16"},{"name":"hurdle_rate_bps","type":"u16"},{"name":"hurdle_type","type":{"defined":{"name":"HurdleType"}}}]}},{"name":"PricedProtocol","type":{"kind":"struct","fields":[{"name":"rent","type":"u64"},{"name":"amount","type":"i128"},{"name":"decimals","type":"u8"},{"name":"last_updated_slot","type":"u64"},{"name":"integration_program","type":"pubkey"},{"name":"protocol_bitflag","type":"u16"},{"name":"positions","type":{"vec":"pubkey"}}]}},{"name":"PricedProtocolRecord","type":{"kind":"struct","fields":[{"name":"base_asset_amount","type":"i128"}]}},{"name":"ProtocolFees","type":{"kind":"struct","fields":[{"name":"base_fee_bps","type":"u16"},{"name":"flow_fee_bps","type":"u16"}]}},{"name":"ProtocolPermissions","docs":["Represents a delegate\'s permissions for a specific protocol"],"type":{"kind":"struct","fields":[{"name":"protocol_bitflag","type":"u16"},{"name":"permissions_bitmask","type":"u64"}]}},{"name":"ProtocolPolicy","docs":["Stores policy data for an integrated protocol.","Integration programs serialize/deserialize this data."],"type":{"kind":"struct","fields":[{"name":"protocol_bitflag","type":"u16"},{"name":"data","type":"bytes"}]}},{"name":"RequestQueue","type":{"kind":"struct","fields":[{"name":"glam_state","type":"pubkey"},{"name":"glam_mint","type":"pubkey"},{"name":"subscription_paused","type":"bool"},{"name":"redemption_paused","type":"bool"},{"name":"data","type":{"vec":{"defined":{"name":"PendingRequest"}}}}]}},{"name":"RequestType","type":{"kind":"enum","variants":[{"name":"Subscription"},{"name":"Redemption"}]}},{"name":"StateAccount","type":{"kind":"struct","fields":[{"name":"account_type","type":{"defined":{"name":"AccountType"}}},{"name":"enabled","type":"bool"},{"name":"vault","type":"pubkey"},{"name":"owner","type":"pubkey"},{"name":"portfolio_manager_name","type":{"array":["u8",32]}},{"name":"created","type":{"defined":{"name":"CreatedModel"}}},{"name":"base_asset_mint","type":"pubkey"},{"name":"base_asset_decimals","type":"u8"},{"name":"base_asset_token_program","type":"u8"},{"name":"name","type":{"array":["u8",32]}},{"name":"timelock_duration","type":"u32"},{"name":"timelock_expires_at","type":"u64"},{"name":"mint","type":"pubkey"},{"name":"assets","type":{"vec":"pubkey"}},{"name":"integration_acls","type":{"vec":{"defined":{"name":"IntegrationAcl"}}}},{"name":"delegate_acls","type":{"vec":{"defined":{"name":"DelegateAcl"}}}},{"name":"external_positions","type":{"vec":"pubkey"}},{"name":"priced_protocols","type":{"vec":{"defined":{"name":"PricedProtocol"}}}},{"name":"params","type":{"vec":{"vec":{"defined":{"name":"EngineField"}}}}}]}},{"name":"TimeUnit","type":{"kind":"enum","variants":[{"name":"Second"},{"name":"Slot"}]}},{"name":"ValuationModel","type":{"kind":"enum","variants":[{"name":"Continuous"},{"name":"Periodic"}]}}],"constants":[{"name":"PROTO_MINT","type":"u16","value":"1"},{"name":"PROTO_MINT_PERM_BURN_TOKENS","type":"u64","value":"2"},{"name":"PROTO_MINT_PERM_CANCEL_REQUEST","type":"u64","value":"128"},{"name":"PROTO_MINT_PERM_CLAIM_FEES","type":"u64","value":"16"},{"name":"PROTO_MINT_PERM_CLAIM_REQUEST","type":"u64","value":"256"},{"name":"PROTO_MINT_PERM_EMERGENCY_UPDATE","type":"u64","value":"64"},{"name":"PROTO_MINT_PERM_FORCE_TRANSFER_TOKENS","type":"u64","value":"4"},{"name":"PROTO_MINT_PERM_FULFILL","type":"u64","value":"32"},{"name":"PROTO_MINT_PERM_MINT_TOKENS","type":"u64","value":"1"},{"name":"PROTO_MINT_PERM_SET_TOKEN_ACCOUNT_STATE","type":"u64","value":"8"}]}');
126
126
 
127
127
  /***/ }),
128
128
  /* 8 */
@@ -152,7 +152,7 @@ module.exports = /*#__PURE__*/JSON.parse('{"address":"G1NTMNMgmgJAWAD9G3toFVMtNc
152
152
  /* 12 */
153
153
  /***/ ((module) => {
154
154
 
155
- module.exports = /*#__PURE__*/JSON.parse('{"address":"G1NTstCVkEhGVQPnPe6r7yEyRTvnp3ta63AFkEKxqg25","metadata":{"name":"ext_stake_pool","version":"0.1.0","spec":"0.1.0","description":"GLAM extension for SPL stake pool programs"},"instructions":[{"name":"deposit_sol","discriminator":[108,81,78,117,125,155,56,200],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_vault","writable":true,"pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"glam_state"}],"program":{"kind":"account","path":"glam_protocol_program"}}},{"name":"glam_signer","writable":true,"signer":true},{"name":"integration_authority","pda":{"seeds":[{"kind":"const","value":[105,110,116,101,103,114,97,116,105,111,110,45,97,117,116,104,111,114,105,116,121]}]}},{"name":"cpi_program"},{"name":"glam_protocol_program","address":"GLAMpaME8wdTEzxtiYEAa5yD8fZbxZiz2hNtV58RZiEz"},{"name":"stake_pool","writable":true},{"name":"stake_pool_withdraw_authority"},{"name":"reserve_stake","writable":true},{"name":"pool_tokens_to","writable":true},{"name":"fee_account","writable":true},{"name":"referrer_pool_tokens_account","writable":true},{"name":"pool_mint","writable":true},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"token_program"}],"args":[{"name":"lamports","type":"u64"}]},{"name":"deposit_stake","discriminator":[160,167,9,220,74,243,228,43],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_vault","writable":true,"pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"glam_state"}],"program":{"kind":"account","path":"glam_protocol_program"}}},{"name":"glam_signer","writable":true,"signer":true},{"name":"integration_authority","pda":{"seeds":[{"kind":"const","value":[105,110,116,101,103,114,97,116,105,111,110,45,97,117,116,104,111,114,105,116,121]}]}},{"name":"cpi_program"},{"name":"glam_protocol_program","address":"GLAMpaME8wdTEzxtiYEAa5yD8fZbxZiz2hNtV58RZiEz"},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"stake_pool","writable":true},{"name":"validator_list","writable":true},{"name":"stake_pool_withdraw_authority"},{"name":"deposit_stake","writable":true},{"name":"validator_stake_account","writable":true},{"name":"reserve_stake_account","writable":true},{"name":"pool_tokens_to","writable":true},{"name":"fee_account","writable":true},{"name":"referrer_pool_tokens_account","writable":true},{"name":"pool_mint","writable":true},{"name":"clock","address":"SysvarC1ock11111111111111111111111111111111"},{"name":"stake_history","address":"SysvarStakeHistory1111111111111111111111111"},{"name":"token_program"},{"name":"stake_program","address":"Stake11111111111111111111111111111111111111"}],"args":[]},{"name":"withdraw_sol","discriminator":[145,131,74,136,65,137,42,38],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_vault","writable":true,"pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"glam_state"}],"program":{"kind":"account","path":"glam_protocol_program"}}},{"name":"glam_signer","writable":true,"signer":true},{"name":"integration_authority","pda":{"seeds":[{"kind":"const","value":[105,110,116,101,103,114,97,116,105,111,110,45,97,117,116,104,111,114,105,116,121]}]}},{"name":"cpi_program"},{"name":"glam_protocol_program","address":"GLAMpaME8wdTEzxtiYEAa5yD8fZbxZiz2hNtV58RZiEz"},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"stake_pool","writable":true},{"name":"stake_pool_withdraw_authority"},{"name":"pool_tokens_from","writable":true},{"name":"reserve_stake","writable":true},{"name":"fee_account","writable":true},{"name":"pool_mint","writable":true},{"name":"clock","address":"SysvarC1ock11111111111111111111111111111111"},{"name":"stake_history","address":"SysvarStakeHistory1111111111111111111111111"},{"name":"stake_program","address":"Stake11111111111111111111111111111111111111"},{"name":"token_program"}],"args":[{"name":"pool_tokens","type":"u64"}]},{"name":"withdraw_stake","discriminator":[153,8,22,138,105,176,87,66],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_vault","writable":true,"pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"glam_state"}],"program":{"kind":"account","path":"glam_protocol_program"}}},{"name":"glam_signer","writable":true,"signer":true},{"name":"integration_authority","pda":{"seeds":[{"kind":"const","value":[105,110,116,101,103,114,97,116,105,111,110,45,97,117,116,104,111,114,105,116,121]}]}},{"name":"cpi_program"},{"name":"glam_protocol_program","address":"GLAMpaME8wdTEzxtiYEAa5yD8fZbxZiz2hNtV58RZiEz"},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"stake_pool","writable":true},{"name":"validator_list","writable":true},{"name":"stake_pool_withdraw_authority"},{"name":"validator_stake_account","writable":true},{"name":"stake","writable":true},{"name":"pool_tokens_from","writable":true},{"name":"fee_account","writable":true},{"name":"pool_mint","writable":true},{"name":"clock","address":"SysvarC1ock11111111111111111111111111111111"},{"name":"token_program"},{"name":"stake_program","address":"Stake11111111111111111111111111111111111111"}],"args":[{"name":"pool_tokens","type":"u64"}]}],"accounts":[{"name":"StateAccount","discriminator":[142,247,54,95,85,133,249,103]}],"types":[{"name":"AccountType","type":{"kind":"enum","variants":[{"name":"Vault"},{"name":"TokenizedVault"},{"name":"Mint"}]}},{"name":"AccruedFees","type":{"kind":"struct","fields":[{"name":"vault_subscription_fee","type":"u128"},{"name":"vault_redemption_fee","type":"u128"},{"name":"manager_subscription_fee","type":"u128"},{"name":"manager_redemption_fee","type":"u128"},{"name":"management_fee","type":"u128"},{"name":"performance_fee","type":"u128"},{"name":"protocol_base_fee","type":"u128"},{"name":"protocol_flow_fee","type":"u128"}]}},{"name":"CreatedModel","type":{"kind":"struct","fields":[{"name":"key","type":{"array":["u8",8]}},{"name":"created_by","type":"pubkey"},{"name":"created_at","type":"i64"}]}},{"name":"DelegateAcl","type":{"kind":"struct","fields":[{"name":"pubkey","type":"pubkey"},{"name":"integration_permissions","type":{"vec":{"defined":{"name":"IntegrationPermissions"}}}},{"name":"expires_at","type":"i64"}]}},{"name":"EngineField","type":{"kind":"struct","fields":[{"name":"name","type":{"defined":{"name":"EngineFieldName"}}},{"name":"value","type":{"defined":{"name":"EngineFieldValue"}}}]}},{"name":"EngineFieldName","type":{"kind":"enum","variants":[{"name":"Owner"},{"name":"PortfolioManagerName"},{"name":"Name"},{"name":"Uri"},{"name":"Assets"},{"name":"DelegateAcls"},{"name":"IntegrationAcls"},{"name":"TimelockDuration"},{"name":"Borrowable"},{"name":"DefaultAccountStateFrozen"},{"name":"PermanentDelegate"},{"name":"NotifyAndSettle"},{"name":"FeeStructure"},{"name":"FeeParams"},{"name":"ClaimableFees"},{"name":"ClaimedFees"},{"name":"OracleConfigs"}]}},{"name":"EngineFieldValue","type":{"kind":"enum","variants":[{"name":"Boolean","fields":[{"name":"val","type":"bool"}]},{"name":"U8","fields":[{"name":"val","type":"u8"}]},{"name":"U32","fields":[{"name":"val","type":"u32"}]},{"name":"U64","fields":[{"name":"val","type":"u64"}]},{"name":"String","fields":[{"name":"val","type":"string"}]},{"name":"Pubkey","fields":[{"name":"val","type":"pubkey"}]},{"name":"VecPubkey","fields":[{"name":"val","type":{"vec":"pubkey"}}]},{"name":"VecU8","fields":[{"name":"val","type":"bytes"}]},{"name":"VecU32","fields":[{"name":"val","type":{"vec":"u32"}}]},{"name":"VecDelegateAcl","fields":[{"name":"val","type":{"vec":{"defined":{"name":"DelegateAcl"}}}}]},{"name":"VecIntegrationAcl","fields":[{"name":"val","type":{"vec":{"defined":{"name":"IntegrationAcl"}}}}]},{"name":"FeeStructure","fields":[{"name":"val","type":{"defined":{"name":"FeeStructure"}}}]},{"name":"FeeParams","fields":[{"name":"val","type":{"defined":{"name":"FeeParams"}}}]},{"name":"AccruedFees","fields":[{"name":"val","type":{"defined":{"name":"AccruedFees"}}}]},{"name":"NotifyAndSettle","fields":[{"name":"val","type":{"defined":{"name":"NotifyAndSettle"}}}]},{"name":"OracleConfigs","fields":[{"name":"val","type":{"defined":{"name":"OracleConfigs"}}}]}]}},{"name":"EntryExitFees","type":{"kind":"struct","fields":[{"name":"subscription_fee_bps","type":"u16"},{"name":"redemption_fee_bps","type":"u16"}]}},{"name":"FeeParams","type":{"kind":"struct","fields":[{"name":"year_in_seconds","type":"u32"},{"name":"pa_high_water_mark","type":"i128"},{"name":"pa_last_nav","type":"i128"},{"name":"last_aum","type":"i128"},{"name":"last_performance_fee_crystallized","type":"i64"},{"name":"last_management_fee_crystallized","type":"i64"},{"name":"last_protocol_fee_crystallized","type":"i64"}]}},{"name":"FeeStructure","type":{"kind":"struct","fields":[{"name":"vault","type":{"defined":{"name":"EntryExitFees"}}},{"name":"manager","type":{"defined":{"name":"EntryExitFees"}}},{"name":"management","type":{"defined":{"name":"ManagementFee"}}},{"name":"performance","type":{"defined":{"name":"PerformanceFee"}}},{"name":"protocol","type":{"defined":{"name":"ProtocolFees"}}}]}},{"name":"HurdleType","type":{"kind":"enum","variants":[{"name":"Hard"},{"name":"Soft"}]}},{"name":"IntegrationAcl","docs":["An integration program can have multiple protocols supported.","Enabled protocols are stored in a bitmask, and each protocol can have its own policy."],"type":{"kind":"struct","fields":[{"name":"integration_program","type":"pubkey"},{"name":"protocols_bitmask","type":"u16"},{"name":"protocol_policies","type":{"vec":{"defined":{"name":"ProtocolPolicy"}}}}]}},{"name":"IntegrationPermissions","docs":["Stores delegate permissions for an integration program."],"type":{"kind":"struct","fields":[{"name":"integration_program","type":"pubkey"},{"name":"protocol_permissions","type":{"vec":{"defined":{"name":"ProtocolPermissions"}}}}]}},{"name":"ManagementFee","type":{"kind":"struct","fields":[{"name":"fee_bps","type":"u16"}]}},{"name":"NoticePeriodType","type":{"kind":"enum","variants":[{"name":"Hard"},{"name":"Soft"}]}},{"name":"NotifyAndSettle","type":{"kind":"struct","fields":[{"name":"model","type":{"defined":{"name":"ValuationModel"}}},{"name":"permissionless_fulfillment","type":"bool"},{"name":"subscribe_notice_period_type","type":{"defined":{"name":"NoticePeriodType"}}},{"name":"subscribe_notice_period","type":"u64"},{"name":"subscribe_settlement_period","type":"u64"},{"name":"subscribe_cancellation_window","type":"u64"},{"name":"redeem_notice_period_type","type":{"defined":{"name":"NoticePeriodType"}}},{"name":"redeem_notice_period","type":"u64"},{"name":"redeem_settlement_period","type":"u64"},{"name":"redeem_cancellation_window","type":"u64"},{"name":"time_unit","type":{"defined":{"name":"TimeUnit"}}},{"name":"_padding","type":{"array":["u8",3]}}]}},{"name":"OracleConfigs","docs":["Vault-specific oracle configs. If available, these configs are preferred over the global config."],"type":{"kind":"struct","fields":[{"name":"max_ages_seconds","type":{"vec":{"array":["u16",2]}}},{"name":"padding","type":{"array":["u8",12]}}]}},{"name":"PerformanceFee","type":{"kind":"struct","fields":[{"name":"fee_bps","type":"u16"},{"name":"hurdle_rate_bps","type":"u16"},{"name":"hurdle_type","type":{"defined":{"name":"HurdleType"}}}]}},{"name":"PricedProtocol","type":{"kind":"struct","fields":[{"name":"rent","type":"u64"},{"name":"amount","type":"i128"},{"name":"decimals","type":"u8"},{"name":"last_updated_slot","type":"u64"},{"name":"integration_program","type":"pubkey"},{"name":"protocol_bitflag","type":"u16"},{"name":"positions","type":{"vec":"pubkey"}}]}},{"name":"ProtocolFees","type":{"kind":"struct","fields":[{"name":"base_fee_bps","type":"u16"},{"name":"flow_fee_bps","type":"u16"}]}},{"name":"ProtocolPermissions","docs":["Represents a delegate\'s permissions for a specific protocol"],"type":{"kind":"struct","fields":[{"name":"protocol_bitflag","type":"u16"},{"name":"permissions_bitmask","type":"u64"}]}},{"name":"ProtocolPolicy","docs":["Stores policy data for an integrated protocol.","Integration programs serialize/deserialize this data."],"type":{"kind":"struct","fields":[{"name":"protocol_bitflag","type":"u16"},{"name":"data","type":"bytes"}]}},{"name":"StateAccount","type":{"kind":"struct","fields":[{"name":"account_type","type":{"defined":{"name":"AccountType"}}},{"name":"enabled","type":"bool"},{"name":"vault","type":"pubkey"},{"name":"owner","type":"pubkey"},{"name":"portfolio_manager_name","type":{"array":["u8",32]}},{"name":"created","type":{"defined":{"name":"CreatedModel"}}},{"name":"base_asset_mint","type":"pubkey"},{"name":"base_asset_decimals","type":"u8"},{"name":"base_asset_token_program","type":"u8"},{"name":"name","type":{"array":["u8",32]}},{"name":"timelock_duration","type":"u32"},{"name":"timelock_expires_at","type":"u64"},{"name":"mint","type":"pubkey"},{"name":"assets","type":{"vec":"pubkey"}},{"name":"integration_acls","type":{"vec":{"defined":{"name":"IntegrationAcl"}}}},{"name":"delegate_acls","type":{"vec":{"defined":{"name":"DelegateAcl"}}}},{"name":"external_positions","type":{"vec":"pubkey"}},{"name":"priced_protocols","type":{"vec":{"defined":{"name":"PricedProtocol"}}}},{"name":"params","type":{"vec":{"vec":{"defined":{"name":"EngineField"}}}}}]}},{"name":"TimeUnit","type":{"kind":"enum","variants":[{"name":"Second"},{"name":"Slot"}]}},{"name":"ValuationModel","type":{"kind":"enum","variants":[{"name":"Continuous"},{"name":"Periodic"}]}}],"constants":[{"name":"PROTO_SANCTUM","type":"u16","value":"2"},{"name":"PROTO_STAKE_POOL","type":"u16","value":"1"},{"name":"SANCTUM_PERM_DEPOSIT_SOL","type":"u64","value":"1"},{"name":"SANCTUM_PERM_DEPOSIT_STAKE","type":"u64","value":"2"},{"name":"SANCTUM_PERM_WITHDRAW_SOL","type":"u64","value":"4"},{"name":"SANCTUM_PERM_WITHDRAW_STAKE","type":"u64","value":"8"},{"name":"STAKE_POOL_PERM_DEPOSIT_SOL","type":"u64","value":"1"},{"name":"STAKE_POOL_PERM_DEPOSIT_STAKE","type":"u64","value":"2"},{"name":"STAKE_POOL_PERM_WITHDRAW_SOL","type":"u64","value":"4"},{"name":"STAKE_POOL_PERM_WITHDRAW_STAKE","type":"u64","value":"8"}]}');
155
+ module.exports = /*#__PURE__*/JSON.parse('{"address":"G1NTstCVkEhGVQPnPe6r7yEyRTvnp3ta63AFkEKxqg25","metadata":{"name":"ext_stake_pool","version":"0.1.0","spec":"0.1.0","description":"GLAM extension for SPL stake pool programs"},"instructions":[{"name":"deposit_sol","discriminator":[108,81,78,117,125,155,56,200],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_vault","writable":true,"pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"glam_state"}],"program":{"kind":"account","path":"glam_protocol_program"}}},{"name":"glam_signer","writable":true,"signer":true},{"name":"integration_authority","pda":{"seeds":[{"kind":"const","value":[105,110,116,101,103,114,97,116,105,111,110,45,97,117,116,104,111,114,105,116,121]}]}},{"name":"cpi_program"},{"name":"glam_protocol_program","address":"GLAMpaME8wdTEzxtiYEAa5yD8fZbxZiz2hNtV58RZiEz"},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"stake_pool","writable":true},{"name":"stake_pool_withdraw_authority"},{"name":"reserve_stake","writable":true},{"name":"pool_tokens_to","writable":true},{"name":"fee_account","writable":true},{"name":"pool_mint","writable":true},{"name":"token_program"}],"args":[{"name":"lamports","type":"u64"}]},{"name":"deposit_stake","discriminator":[160,167,9,220,74,243,228,43],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_vault","writable":true,"pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"glam_state"}],"program":{"kind":"account","path":"glam_protocol_program"}}},{"name":"glam_signer","writable":true,"signer":true},{"name":"integration_authority","pda":{"seeds":[{"kind":"const","value":[105,110,116,101,103,114,97,116,105,111,110,45,97,117,116,104,111,114,105,116,121]}]}},{"name":"cpi_program"},{"name":"glam_protocol_program","address":"GLAMpaME8wdTEzxtiYEAa5yD8fZbxZiz2hNtV58RZiEz"},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"stake_pool","writable":true},{"name":"validator_list","writable":true},{"name":"stake_pool_deposit_authority"},{"name":"stake_pool_withdraw_authority"},{"name":"deposit_stake","writable":true},{"name":"validator_stake_account","writable":true},{"name":"reserve_stake_account","writable":true},{"name":"pool_tokens_to","writable":true},{"name":"fee_account","writable":true},{"name":"pool_mint","writable":true},{"name":"clock","address":"SysvarC1ock11111111111111111111111111111111"},{"name":"stake_history","address":"SysvarStakeHistory1111111111111111111111111"},{"name":"token_program"},{"name":"stake_program","address":"Stake11111111111111111111111111111111111111"}],"args":[]},{"name":"withdraw_sol","discriminator":[145,131,74,136,65,137,42,38],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_vault","writable":true,"pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"glam_state"}],"program":{"kind":"account","path":"glam_protocol_program"}}},{"name":"glam_signer","writable":true,"signer":true},{"name":"integration_authority","pda":{"seeds":[{"kind":"const","value":[105,110,116,101,103,114,97,116,105,111,110,45,97,117,116,104,111,114,105,116,121]}]}},{"name":"cpi_program"},{"name":"glam_protocol_program","address":"GLAMpaME8wdTEzxtiYEAa5yD8fZbxZiz2hNtV58RZiEz"},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"stake_pool","writable":true},{"name":"stake_pool_withdraw_authority"},{"name":"pool_tokens_from","writable":true},{"name":"reserve_stake","writable":true},{"name":"fee_account","writable":true},{"name":"pool_mint","writable":true},{"name":"clock","address":"SysvarC1ock11111111111111111111111111111111"},{"name":"stake_history","address":"SysvarStakeHistory1111111111111111111111111"},{"name":"stake_program","address":"Stake11111111111111111111111111111111111111"},{"name":"token_program"}],"args":[{"name":"pool_tokens","type":"u64"}]},{"name":"withdraw_stake","discriminator":[153,8,22,138,105,176,87,66],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_vault","writable":true,"pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"glam_state"}],"program":{"kind":"account","path":"glam_protocol_program"}}},{"name":"glam_signer","writable":true,"signer":true},{"name":"integration_authority","pda":{"seeds":[{"kind":"const","value":[105,110,116,101,103,114,97,116,105,111,110,45,97,117,116,104,111,114,105,116,121]}]}},{"name":"cpi_program"},{"name":"glam_protocol_program","address":"GLAMpaME8wdTEzxtiYEAa5yD8fZbxZiz2hNtV58RZiEz"},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"stake_pool","writable":true},{"name":"validator_list","writable":true},{"name":"stake_pool_withdraw_authority"},{"name":"validator_stake_account","writable":true},{"name":"stake","writable":true},{"name":"pool_tokens_from","writable":true},{"name":"fee_account","writable":true},{"name":"pool_mint","writable":true},{"name":"clock","address":"SysvarC1ock11111111111111111111111111111111"},{"name":"token_program"},{"name":"stake_program","address":"Stake11111111111111111111111111111111111111"}],"args":[{"name":"pool_tokens","type":"u64"}]}],"accounts":[{"name":"StateAccount","discriminator":[142,247,54,95,85,133,249,103]}],"types":[{"name":"AccountType","type":{"kind":"enum","variants":[{"name":"Vault"},{"name":"TokenizedVault"},{"name":"Mint"}]}},{"name":"AccruedFees","type":{"kind":"struct","fields":[{"name":"vault_subscription_fee","type":"u128"},{"name":"vault_redemption_fee","type":"u128"},{"name":"manager_subscription_fee","type":"u128"},{"name":"manager_redemption_fee","type":"u128"},{"name":"management_fee","type":"u128"},{"name":"performance_fee","type":"u128"},{"name":"protocol_base_fee","type":"u128"},{"name":"protocol_flow_fee","type":"u128"}]}},{"name":"CreatedModel","type":{"kind":"struct","fields":[{"name":"key","type":{"array":["u8",8]}},{"name":"created_by","type":"pubkey"},{"name":"created_at","type":"i64"}]}},{"name":"DelegateAcl","type":{"kind":"struct","fields":[{"name":"pubkey","type":"pubkey"},{"name":"integration_permissions","type":{"vec":{"defined":{"name":"IntegrationPermissions"}}}},{"name":"expires_at","type":"i64"}]}},{"name":"EngineField","type":{"kind":"struct","fields":[{"name":"name","type":{"defined":{"name":"EngineFieldName"}}},{"name":"value","type":{"defined":{"name":"EngineFieldValue"}}}]}},{"name":"EngineFieldName","type":{"kind":"enum","variants":[{"name":"Owner"},{"name":"PortfolioManagerName"},{"name":"Name"},{"name":"Uri"},{"name":"Assets"},{"name":"DelegateAcls"},{"name":"IntegrationAcls"},{"name":"TimelockDuration"},{"name":"Borrowable"},{"name":"DefaultAccountStateFrozen"},{"name":"PermanentDelegate"},{"name":"NotifyAndSettle"},{"name":"FeeStructure"},{"name":"FeeParams"},{"name":"ClaimableFees"},{"name":"ClaimedFees"},{"name":"OracleConfigs"}]}},{"name":"EngineFieldValue","type":{"kind":"enum","variants":[{"name":"Boolean","fields":[{"name":"val","type":"bool"}]},{"name":"U8","fields":[{"name":"val","type":"u8"}]},{"name":"U32","fields":[{"name":"val","type":"u32"}]},{"name":"U64","fields":[{"name":"val","type":"u64"}]},{"name":"String","fields":[{"name":"val","type":"string"}]},{"name":"Pubkey","fields":[{"name":"val","type":"pubkey"}]},{"name":"VecPubkey","fields":[{"name":"val","type":{"vec":"pubkey"}}]},{"name":"VecU8","fields":[{"name":"val","type":"bytes"}]},{"name":"VecU32","fields":[{"name":"val","type":{"vec":"u32"}}]},{"name":"VecDelegateAcl","fields":[{"name":"val","type":{"vec":{"defined":{"name":"DelegateAcl"}}}}]},{"name":"VecIntegrationAcl","fields":[{"name":"val","type":{"vec":{"defined":{"name":"IntegrationAcl"}}}}]},{"name":"FeeStructure","fields":[{"name":"val","type":{"defined":{"name":"FeeStructure"}}}]},{"name":"FeeParams","fields":[{"name":"val","type":{"defined":{"name":"FeeParams"}}}]},{"name":"AccruedFees","fields":[{"name":"val","type":{"defined":{"name":"AccruedFees"}}}]},{"name":"NotifyAndSettle","fields":[{"name":"val","type":{"defined":{"name":"NotifyAndSettle"}}}]},{"name":"OracleConfigs","fields":[{"name":"val","type":{"defined":{"name":"OracleConfigs"}}}]}]}},{"name":"EntryExitFees","type":{"kind":"struct","fields":[{"name":"subscription_fee_bps","type":"u16"},{"name":"redemption_fee_bps","type":"u16"}]}},{"name":"FeeParams","type":{"kind":"struct","fields":[{"name":"year_in_seconds","type":"u32"},{"name":"pa_high_water_mark","type":"i128"},{"name":"pa_last_nav","type":"i128"},{"name":"last_aum","type":"i128"},{"name":"last_performance_fee_crystallized","type":"i64"},{"name":"last_management_fee_crystallized","type":"i64"},{"name":"last_protocol_fee_crystallized","type":"i64"}]}},{"name":"FeeStructure","type":{"kind":"struct","fields":[{"name":"vault","type":{"defined":{"name":"EntryExitFees"}}},{"name":"manager","type":{"defined":{"name":"EntryExitFees"}}},{"name":"management","type":{"defined":{"name":"ManagementFee"}}},{"name":"performance","type":{"defined":{"name":"PerformanceFee"}}},{"name":"protocol","type":{"defined":{"name":"ProtocolFees"}}}]}},{"name":"HurdleType","type":{"kind":"enum","variants":[{"name":"Hard"},{"name":"Soft"}]}},{"name":"IntegrationAcl","docs":["An integration program can have multiple protocols supported.","Enabled protocols are stored in a bitmask, and each protocol can have its own policy."],"type":{"kind":"struct","fields":[{"name":"integration_program","type":"pubkey"},{"name":"protocols_bitmask","type":"u16"},{"name":"protocol_policies","type":{"vec":{"defined":{"name":"ProtocolPolicy"}}}}]}},{"name":"IntegrationPermissions","docs":["Stores delegate permissions for an integration program."],"type":{"kind":"struct","fields":[{"name":"integration_program","type":"pubkey"},{"name":"protocol_permissions","type":{"vec":{"defined":{"name":"ProtocolPermissions"}}}}]}},{"name":"ManagementFee","type":{"kind":"struct","fields":[{"name":"fee_bps","type":"u16"}]}},{"name":"NoticePeriodType","type":{"kind":"enum","variants":[{"name":"Hard"},{"name":"Soft"}]}},{"name":"NotifyAndSettle","type":{"kind":"struct","fields":[{"name":"model","type":{"defined":{"name":"ValuationModel"}}},{"name":"permissionless_fulfillment","type":"bool"},{"name":"subscribe_notice_period_type","type":{"defined":{"name":"NoticePeriodType"}}},{"name":"subscribe_notice_period","type":"u64"},{"name":"subscribe_settlement_period","type":"u64"},{"name":"subscribe_cancellation_window","type":"u64"},{"name":"redeem_notice_period_type","type":{"defined":{"name":"NoticePeriodType"}}},{"name":"redeem_notice_period","type":"u64"},{"name":"redeem_settlement_period","type":"u64"},{"name":"redeem_cancellation_window","type":"u64"},{"name":"time_unit","type":{"defined":{"name":"TimeUnit"}}},{"name":"_padding","type":{"array":["u8",3]}}]}},{"name":"OracleConfigs","docs":["Vault-specific oracle configs. If available, these configs are preferred over the global config."],"type":{"kind":"struct","fields":[{"name":"max_ages_seconds","type":{"vec":{"array":["u16",2]}}},{"name":"padding","type":{"array":["u8",12]}}]}},{"name":"PerformanceFee","type":{"kind":"struct","fields":[{"name":"fee_bps","type":"u16"},{"name":"hurdle_rate_bps","type":"u16"},{"name":"hurdle_type","type":{"defined":{"name":"HurdleType"}}}]}},{"name":"PricedProtocol","type":{"kind":"struct","fields":[{"name":"rent","type":"u64"},{"name":"amount","type":"i128"},{"name":"decimals","type":"u8"},{"name":"last_updated_slot","type":"u64"},{"name":"integration_program","type":"pubkey"},{"name":"protocol_bitflag","type":"u16"},{"name":"positions","type":{"vec":"pubkey"}}]}},{"name":"ProtocolFees","type":{"kind":"struct","fields":[{"name":"base_fee_bps","type":"u16"},{"name":"flow_fee_bps","type":"u16"}]}},{"name":"ProtocolPermissions","docs":["Represents a delegate\'s permissions for a specific protocol"],"type":{"kind":"struct","fields":[{"name":"protocol_bitflag","type":"u16"},{"name":"permissions_bitmask","type":"u64"}]}},{"name":"ProtocolPolicy","docs":["Stores policy data for an integrated protocol.","Integration programs serialize/deserialize this data."],"type":{"kind":"struct","fields":[{"name":"protocol_bitflag","type":"u16"},{"name":"data","type":"bytes"}]}},{"name":"StateAccount","type":{"kind":"struct","fields":[{"name":"account_type","type":{"defined":{"name":"AccountType"}}},{"name":"enabled","type":"bool"},{"name":"vault","type":"pubkey"},{"name":"owner","type":"pubkey"},{"name":"portfolio_manager_name","type":{"array":["u8",32]}},{"name":"created","type":{"defined":{"name":"CreatedModel"}}},{"name":"base_asset_mint","type":"pubkey"},{"name":"base_asset_decimals","type":"u8"},{"name":"base_asset_token_program","type":"u8"},{"name":"name","type":{"array":["u8",32]}},{"name":"timelock_duration","type":"u32"},{"name":"timelock_expires_at","type":"u64"},{"name":"mint","type":"pubkey"},{"name":"assets","type":{"vec":"pubkey"}},{"name":"integration_acls","type":{"vec":{"defined":{"name":"IntegrationAcl"}}}},{"name":"delegate_acls","type":{"vec":{"defined":{"name":"DelegateAcl"}}}},{"name":"external_positions","type":{"vec":"pubkey"}},{"name":"priced_protocols","type":{"vec":{"defined":{"name":"PricedProtocol"}}}},{"name":"params","type":{"vec":{"vec":{"defined":{"name":"EngineField"}}}}}]}},{"name":"TimeUnit","type":{"kind":"enum","variants":[{"name":"Second"},{"name":"Slot"}]}},{"name":"ValuationModel","type":{"kind":"enum","variants":[{"name":"Continuous"},{"name":"Periodic"}]}}],"constants":[{"name":"PROTO_SANCTUM","type":"u16","value":"2"},{"name":"PROTO_SANCTUM_MULTI","type":"u16","value":"4"},{"name":"PROTO_STAKE_POOL","type":"u16","value":"1"},{"name":"STAKE_POOL_PERM_DEPOSIT_SOL","type":"u64","value":"1"},{"name":"STAKE_POOL_PERM_DEPOSIT_STAKE","type":"u64","value":"2"},{"name":"STAKE_POOL_PERM_WITHDRAW_SOL","type":"u64","value":"4"},{"name":"STAKE_POOL_PERM_WITHDRAW_STAKE","type":"u64","value":"8"}]}');
156
156
 
157
157
  /***/ }),
158
158
  /* 13 */
@@ -1007,7 +1007,7 @@ async function fetchMintAndTokenProgram(connection, mintPubkey) {
1007
1007
 
1008
1008
 
1009
1009
  Object.defineProperty(exports, "__esModule", ({ value: true }));
1010
- exports.PROGRAM_AND_BITFLAG_BY_PROTOCOL_NAME = exports.PROTOCOL_NAME_BY_PROGRAM_AND_BITFLAG = exports.PROTOCOLS_AND_PERMISSIONS = exports.DRIFT_POOL_MAPPING = exports.CCTP_DOMAIN_MAPPING = exports.GLAM_REFERRER = exports.JUPSOL_STAKE_POOL = exports.JITO_STAKE_POOL = exports.MESSAGE_TRANSMITTER_V2 = exports.TOKEN_MESSENGER_MINTER_V2 = exports.ALT_PROGRAM_ID = exports.MEMO_PROGRAM = exports.KAMINO_FARM_PROGRAM = exports.KAMINO_VAULTS_PROGRAM = exports.KAMINO_LENDING_PROGRAM = exports.METEORA_DLMM_PROGRAM = exports.TRANSFER_HOOK_PROGRAM = exports.MERKLE_DISTRIBUTOR_PROGRAM = exports.JUP_VOTE_PROGRAM = exports.GOVERNANCE_PROGRAM_ID = exports.SANCTUM_STAKE_POOL_PROGRAM_ID = exports.JUPITER_PROGRAM_ID = exports.DRIFT_DISTRIBUTOR_PROGRAM = exports.DRIFT_VAULTS_PROGRAM_ID = exports.DRIFT_PROGRAM_ID = exports.MARINADE_PROGRAM_ID = exports.JUP = exports.USDC_DEVNET = exports.USDC = exports.MSOL = exports.WSOL = exports.MARINADE_NATIVE_STAKE_AUTHORITY = exports.KAMINO_SCOPE_PRICES = exports.JITO_TIP_DEFAULT = exports.JUPITER_API_DEFAULT = exports.DRIFT_VAULT_DEPOSITOR_SIZE = exports.KAMINO_RESERVE_SIZE = exports.KAMINO_OBTRIGATION_SIZE = exports.METEORA_POSITION_SIZE = exports.STAKE_ACCOUNT_SIZE = exports.SEED_INTEGRATION_AUTHORITY = exports.SEED_GLOBAL_CONFIG = exports.SEED_EXTRA_ACCOUNT_METAS = exports.SEED_ACCOUNT_POLICY = exports.SEED_REQUEST_QUEUE = exports.SEED_ESCROW = exports.SEED_MINT = exports.SEED_METADATA = exports.SEED_VAULT = exports.SEED_STATE = void 0;
1010
+ exports.PROGRAM_AND_BITFLAG_BY_PROTOCOL_NAME = exports.PROTOCOL_NAME_BY_PROGRAM_AND_BITFLAG = exports.PROTOCOLS_AND_PERMISSIONS = exports.DRIFT_POOL_MAPPING = exports.CCTP_DOMAIN_MAPPING = exports.GLAM_REFERRER = exports.MESSAGE_TRANSMITTER_V2 = exports.TOKEN_MESSENGER_MINTER_V2 = exports.ALT_PROGRAM_ID = exports.MEMO_PROGRAM = exports.KAMINO_FARM_PROGRAM = exports.KAMINO_VAULTS_PROGRAM = exports.KAMINO_LENDING_PROGRAM = exports.METEORA_DLMM_PROGRAM = exports.TRANSFER_HOOK_PROGRAM = exports.MERKLE_DISTRIBUTOR_PROGRAM = exports.JUP_VOTE_PROGRAM = exports.GOVERNANCE_PROGRAM_ID = exports.SANCTUM_STAKE_POOL_PROGRAM_ID = exports.JUPITER_PROGRAM_ID = exports.DRIFT_VAULTS_PROGRAM_ID = exports.DRIFT_PROGRAM_ID = exports.MARINADE_PROGRAM_ID = exports.JUP = exports.USDC_DEVNET = exports.USDC = exports.MSOL = exports.WSOL = exports.MARINADE_NATIVE_STAKE_AUTHORITY = exports.JITO_TIP_DEFAULT = exports.JUPITER_API_DEFAULT = exports.DRIFT_VAULT_DEPOSITOR_SIZE = exports.KAMINO_RESERVE_SIZE = exports.KAMINO_OBTRIGATION_SIZE = exports.METEORA_POSITION_SIZE = exports.STAKE_ACCOUNT_SIZE = exports.SEED_INTEGRATION_AUTHORITY = exports.SEED_GLOBAL_CONFIG = exports.SEED_EXTRA_ACCOUNT_METAS = exports.SEED_ACCOUNT_POLICY = exports.SEED_REQUEST_QUEUE = exports.SEED_ESCROW = exports.SEED_MINT = exports.SEED_METADATA = exports.SEED_VAULT = exports.SEED_STATE = void 0;
1011
1011
  const web3_js_1 = __webpack_require__(16);
1012
1012
  exports.SEED_STATE = "state"; // protocol program
1013
1013
  exports.SEED_VAULT = "vault"; // protocol program
@@ -1026,7 +1026,6 @@ exports.KAMINO_RESERVE_SIZE = 8624;
1026
1026
  exports.DRIFT_VAULT_DEPOSITOR_SIZE = 272;
1027
1027
  exports.JUPITER_API_DEFAULT = "https://lite-api.jup.ag";
1028
1028
  exports.JITO_TIP_DEFAULT = new web3_js_1.PublicKey("96gYZGLnJYVFmbjzopPSU6QiEV5fGqZNyN9nmNhvrZU5");
1029
- exports.KAMINO_SCOPE_PRICES = new web3_js_1.PublicKey("3NJYftD5sjVfxSnUdZ1wVML8f3aC6mp1CXCL6L7TnU8C");
1030
1029
  exports.MARINADE_NATIVE_STAKE_AUTHORITY = new web3_js_1.PublicKey("stWirqFCf2Uts1JBL1Jsd3r6VBWhgnpdPxCTe1MFjrq");
1031
1030
  /**
1032
1031
  * Token mints. If no devnet version is defined, assume mainnet and devnet addresses are the same.
@@ -1046,7 +1045,6 @@ exports.JUP = new web3_js_1.PublicKey("JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDv
1046
1045
  exports.MARINADE_PROGRAM_ID = new web3_js_1.PublicKey("MarBmsSgKXdrN1egZf5sqe1TMai9K1rChYNDJgjq7aD");
1047
1046
  exports.DRIFT_PROGRAM_ID = new web3_js_1.PublicKey("dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH");
1048
1047
  exports.DRIFT_VAULTS_PROGRAM_ID = new web3_js_1.PublicKey("vAuLTsyrvSfZRuRB3XgvkPwNGgYSs9YRYymVebLKoxR");
1049
- exports.DRIFT_DISTRIBUTOR_PROGRAM = new web3_js_1.PublicKey("E7HtfkEMhmn9uwL7EFNydcXBWy5WCYN1vFmKKjipEH1x");
1050
1048
  exports.JUPITER_PROGRAM_ID = new web3_js_1.PublicKey("JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4");
1051
1049
  exports.SANCTUM_STAKE_POOL_PROGRAM_ID = new web3_js_1.PublicKey("SP12tWFxD9oJsVWNavTTBZvMbA6gkAmxtVgxdqvyvhY");
1052
1050
  exports.GOVERNANCE_PROGRAM_ID = new web3_js_1.PublicKey("GovaE4iu227srtG2s3tZzB4RmWBzw8sTwrCLZz7kN7rY");
@@ -1061,11 +1059,6 @@ exports.MEMO_PROGRAM = new web3_js_1.PublicKey("MemoSq4gqABAXKb96qnH8TysNcWxMyWC
1061
1059
  exports.ALT_PROGRAM_ID = new web3_js_1.PublicKey("AddressLookupTab1e1111111111111111111111111");
1062
1060
  exports.TOKEN_MESSENGER_MINTER_V2 = new web3_js_1.PublicKey("CCTPV2vPZJS2u2BBsUoscuikbYjnpFmbFsvVuJdgUMQe");
1063
1061
  exports.MESSAGE_TRANSMITTER_V2 = new web3_js_1.PublicKey("CCTPV2Sm4AdWt5296sk4P66VBZ7bEhcARwFaaS9YPbeC");
1064
- /**
1065
- * Stake pools
1066
- */
1067
- exports.JITO_STAKE_POOL = new web3_js_1.PublicKey("Jito4APyf642JPZPx3hGc6WWJ8zPKtRbRs4P815Awbb");
1068
- exports.JUPSOL_STAKE_POOL = new web3_js_1.PublicKey("8VpRhuxa7sUUepdY3kQiTmX9rS5vx4WgaXiAnXq4KCtr");
1069
1062
  /**
1070
1063
  * Referrers
1071
1064
  */
@@ -4057,8 +4050,11 @@ class BaseTxBuilder {
4057
4050
  constructor(base) {
4058
4051
  this.base = base;
4059
4052
  }
4060
- build(ix, txOptions = {}) {
4061
- const tx = new web3_js_1.Transaction().add(...(txOptions.preInstructions || []), ix, ...(txOptions.postInstructions || []));
4053
+ /**
4054
+ * Build a transaction with the given instructions. Pre and post instructions in txOptions are preserved.
4055
+ */
4056
+ build(ixs, txOptions = {}) {
4057
+ const tx = new web3_js_1.Transaction().add(...(txOptions.preInstructions || []), ...ixs, ...(txOptions.postInstructions || []));
4062
4058
  return tx;
4063
4059
  }
4064
4060
  }
@@ -4096,122 +4092,485 @@ const web3_js_1 = __webpack_require__(16);
4096
4092
  const types_1 = __webpack_require__(43);
4097
4093
  const driftLayouts_1 = __webpack_require__(55);
4098
4094
  const user_1 = __webpack_require__(45);
4095
+ const base_1 = __webpack_require__(52);
4099
4096
  const constants_1 = __webpack_require__(25);
4100
4097
  const spl_token_1 = __webpack_require__(17);
4101
4098
  const anchor_1 = __webpack_require__(4);
4102
4099
  const common_1 = __webpack_require__(19);
4103
4100
  const DRIFT_SIGNER = new web3_js_1.PublicKey("JCNCMFXo5M5qwUPg2Utu1u6YWp3MbygxqBsBeXXJfrw");
4104
4101
  const DRIFT_MARGIN_PRECISION = 10000;
4105
- class DriftClient {
4106
- constructor(base, vault) {
4102
+ class TxBuilder extends base_1.BaseTxBuilder {
4103
+ constructor(base, vault, drift) {
4104
+ super(base);
4107
4105
  this.base = base;
4108
4106
  this.vault = vault;
4109
- this.spotMarkets = new Map();
4110
- this.perpMarkets = new Map();
4111
- this.marketConfigs = null;
4112
- /*
4113
- * Utils
4114
- */
4115
- this.getMarketPda = (marketType, marketIndex) => web3_js_1.PublicKey.findProgramAddressSync([
4116
- Buffer.from(`${marketType === types_1.MarketType.PERP ? "perp" : "spot"}_market`),
4117
- new anchor.BN(marketIndex).toArrayLike(Buffer, "le", 2),
4118
- ], constants_1.DRIFT_PROGRAM_ID)[0];
4119
- this.getUserPda = (authority, subAccountId = 0) => web3_js_1.PublicKey.findProgramAddressSync([
4120
- Buffer.from("user"),
4121
- authority.toBuffer(),
4122
- new anchor.BN(subAccountId).toArrayLike(Buffer, "le", 2),
4123
- ], constants_1.DRIFT_PROGRAM_ID)[0];
4124
- this.getUserStatsPda = (authority) => web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("user_stats"), authority.toBuffer()], constants_1.DRIFT_PROGRAM_ID)[0];
4125
- this.marketTypeEquals = (a, b) => a && Object.keys(a)[0] === Object.keys(b)[0];
4107
+ this.drift = drift;
4126
4108
  }
4127
- /*
4128
- * Client methods
4129
- */
4130
- async initialize(subAccountId = 0, txOptions = {}) {
4131
- const tx = await this.initializeTx(subAccountId, txOptions);
4132
- return await this.base.sendAndConfirm(tx);
4109
+ async initializeUserStatsIx(glamSigner) {
4110
+ const { userStats } = this.drift.getDriftUserPdas();
4111
+ return await this.base.extDriftProgram.methods
4112
+ .initializeUserStats()
4113
+ .accounts({
4114
+ glamState: this.base.statePda,
4115
+ glamSigner,
4116
+ state: this.drift.driftStatePda,
4117
+ userStats,
4118
+ })
4119
+ .instruction();
4133
4120
  }
4134
- async updateUserCustomMarginRatio(maxLeverage, // 1=1x, 2=2x ... 50=50x leverage
4135
- subAccountId = 0) {
4136
- const tx = await this.updateUserCustomMarginRatioTx(maxLeverage, subAccountId);
4137
- return await this.base.sendAndConfirm(tx);
4121
+ async initializeUserIx(glamSigner, subAccountId) {
4122
+ const name = `GLAM *.+ ${subAccountId}`
4123
+ .split("")
4124
+ .map((char) => char.charCodeAt(0))
4125
+ .concat(Array(24).fill(0));
4126
+ const { user, userStats } = this.drift.getDriftUserPdas(subAccountId);
4127
+ const { user: referrer, userStats: referrerStats } = this.drift.getGlamReferrerPdas();
4128
+ const remainingAccounts = [
4129
+ { pubkey: referrer, isWritable: true, isSigner: false },
4130
+ { pubkey: referrerStats, isWritable: true, isSigner: false },
4131
+ ];
4132
+ return await this.base.extDriftProgram.methods
4133
+ .initializeUser(subAccountId, name)
4134
+ .accounts({
4135
+ glamState: this.base.statePda,
4136
+ user,
4137
+ userStats,
4138
+ state: this.drift.driftStatePda,
4139
+ glamSigner,
4140
+ })
4141
+ .remainingAccounts(remainingAccounts)
4142
+ .instruction();
4138
4143
  }
4139
- async updateUserMarginTradingEnabled(marginTradingEnabled, subAccountId = 0, txOptions = {}) {
4140
- const tx = await this.updateUserMarginTradingEnabledTx(marginTradingEnabled, subAccountId, txOptions);
4141
- return await this.base.sendAndConfirm(tx);
4144
+ async updateUserPoolIdIx(subAccountId, poolId) {
4145
+ const { user } = this.drift.getDriftUserPdas(subAccountId);
4146
+ return await this.base.extDriftProgram.methods
4147
+ .updateUserPoolId(subAccountId, poolId)
4148
+ .accounts({
4149
+ glamState: this.base.statePda,
4150
+ user,
4151
+ })
4152
+ .instruction();
4142
4153
  }
4143
- async updateUserDelegate(delegate, subAccountId = 0) {
4144
- const tx = await this.updateUserDelegateTx(new web3_js_1.PublicKey(delegate), subAccountId);
4145
- return await this.base.sendAndConfirm(tx);
4154
+ async initializeIxs(subAccountId, glamSigner) {
4155
+ const ixs = [];
4156
+ // Create userStats account if it doesn't exist
4157
+ const { userStats } = this.drift.getDriftUserPdas();
4158
+ const userStatsInfo = await this.base.provider.connection.getAccountInfo(userStats);
4159
+ if (!userStatsInfo) {
4160
+ ixs.push(await this.initializeUserStatsIx(glamSigner));
4161
+ }
4162
+ // Initialize user (aka sub-account)
4163
+ ixs.push(await this.initializeUserIx(glamSigner, subAccountId));
4164
+ return ixs;
4146
4165
  }
4147
- async deleteUser(subAccountId = 0, txOptions = {}) {
4148
- const tx = await this.deleteUserTx(subAccountId, txOptions);
4149
- return await this.base.sendAndConfirm(tx);
4166
+ async initializeTx(subAccountId, txOptions = {}) {
4167
+ const glamSigner = txOptions.signer || this.base.signer;
4168
+ const ixs = await this.initializeIxs(subAccountId, glamSigner);
4169
+ const tx = this.build(ixs, txOptions);
4170
+ return await this.base.intoVersionedTransaction(tx, txOptions);
4150
4171
  }
4151
- async deposit(amount, marketIndex = 1, subAccountId = 0, txOptions = {}) {
4152
- const tx = await this.depositTx(amount, marketIndex, subAccountId, txOptions);
4153
- return await this.base.sendAndConfirm(tx);
4172
+ async depositIxs(amount, marketIndex, subAccountId, glamSigner) {
4173
+ const { user, userStats } = this.drift.getDriftUserPdas(subAccountId);
4174
+ const { mint, oracle, tokenProgram, marketPda, vault: driftVault, name, } = await this.drift.fetchAndParseSpotMarket(marketIndex);
4175
+ console.log(`Spot market ${marketIndex} mint ${mint}, oracle: ${oracle}, marketPda: ${marketPda}, vault: ${driftVault}`);
4176
+ const preInstructions = [];
4177
+ const postInstructions = [];
4178
+ // If drift user doesn't exist, prepend initialization ixs
4179
+ if (!(await this.drift.fetchDriftUser(subAccountId))) {
4180
+ // Only add ix to initialize user stats if subAccountId is 0
4181
+ if (subAccountId === 0) {
4182
+ preInstructions.push(await this.initializeUserStatsIx(glamSigner));
4183
+ }
4184
+ preInstructions.push(await this.initializeUserIx(glamSigner, subAccountId));
4185
+ // If market name ends with "-N", it means we're depositing to an isolated pool
4186
+ const isolatedPoolMatch = name.match(/-(\d+)$/);
4187
+ if (isolatedPoolMatch) {
4188
+ const poolId = parseInt(isolatedPoolMatch[1]);
4189
+ preInstructions.push(await this.updateUserPoolIdIx(subAccountId, poolId));
4190
+ }
4191
+ }
4192
+ if (mint.equals(constants_1.WSOL)) {
4193
+ const wrapSolIxs = await this.vault.maybeWrapSol(amount, glamSigner);
4194
+ preInstructions.push(...wrapSolIxs);
4195
+ // If we need to wrap SOL, it means the wSOL balance will be drained,
4196
+ // and we close the wSOL token account for convenience
4197
+ const tokenAccount = this.base.getVaultAta(constants_1.WSOL);
4198
+ const closeTokenAccountIx = await this.base.extSplProgram.methods
4199
+ .tokenCloseAccount()
4200
+ .accounts({
4201
+ glamState: this.base.statePda,
4202
+ glamSigner,
4203
+ tokenAccount,
4204
+ cpiProgram: spl_token_1.TOKEN_PROGRAM_ID,
4205
+ })
4206
+ .instruction();
4207
+ postInstructions.push(closeTokenAccountIx);
4208
+ }
4209
+ const remainingAccounts = [
4210
+ { pubkey: new web3_js_1.PublicKey(oracle), isSigner: false, isWritable: false },
4211
+ { pubkey: new web3_js_1.PublicKey(marketPda), isSigner: false, isWritable: true },
4212
+ ];
4213
+ if (tokenProgram.equals(spl_token_1.TOKEN_2022_PROGRAM_ID)) {
4214
+ remainingAccounts.push({
4215
+ pubkey: mint,
4216
+ isSigner: false,
4217
+ isWritable: false,
4218
+ });
4219
+ }
4220
+ const ix = await this.base.extDriftProgram.methods
4221
+ .deposit(marketIndex, amount, false)
4222
+ .accounts({
4223
+ glamState: this.base.statePda,
4224
+ glamSigner,
4225
+ state: this.drift.driftStatePda,
4226
+ user,
4227
+ userStats,
4228
+ spotMarketVault: driftVault,
4229
+ userTokenAccount: this.base.getVaultAta(mint, tokenProgram),
4230
+ tokenProgram,
4231
+ })
4232
+ .remainingAccounts(remainingAccounts)
4233
+ .instruction();
4234
+ return [...preInstructions, ix, ...postInstructions];
4154
4235
  }
4155
- async withdraw(amount, marketIndex = 1, subAccountId = 0, txOptions = {}) {
4156
- const tx = await this.withdrawTx(amount, marketIndex, subAccountId, txOptions);
4157
- return await this.base.sendAndConfirm(tx);
4236
+ async depositTx(amount, marketIndex, subAccountId, txOptions = {}) {
4237
+ const glamSigner = txOptions.signer || this.base.signer;
4238
+ const ixs = await this.depositIxs(amount, marketIndex, subAccountId, glamSigner);
4239
+ const tx = this.build(ixs, txOptions);
4240
+ return await this.base.intoVersionedTransaction(tx, txOptions);
4158
4241
  }
4159
- async placeOrder(orderParams, subAccountId = 0, txOptions = {}) {
4160
- const tx = await this.placeOrderTx(orderParams, subAccountId, txOptions);
4161
- return await this.base.sendAndConfirm(tx);
4242
+ async withdrawIxs(amount, marketIndex, subAccountId, glamSigner) {
4243
+ const { user, userStats } = this.drift.getDriftUserPdas(subAccountId);
4244
+ const { mint, tokenProgram, vault: driftVault, } = await this.drift.fetchAndParseSpotMarket(marketIndex);
4245
+ const glamVault = this.base.vaultPda;
4246
+ const glamVaultAta = this.base.getVaultAta(mint, tokenProgram);
4247
+ const remainingAccounts = await this.drift.composeRemainingAccounts(subAccountId, types_1.MarketType.SPOT, marketIndex);
4248
+ if (tokenProgram.equals(spl_token_1.TOKEN_2022_PROGRAM_ID)) {
4249
+ remainingAccounts.push({
4250
+ pubkey: mint,
4251
+ isSigner: false,
4252
+ isWritable: false,
4253
+ });
4254
+ }
4255
+ // Create vault ata in case it doesn't exist
4256
+ const preIx = (0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(glamSigner, glamVaultAta, glamVault, mint, tokenProgram);
4257
+ const ix = await this.base.extDriftProgram.methods
4258
+ .withdraw(marketIndex, amount, false)
4259
+ .accounts({
4260
+ glamState: this.base.statePda,
4261
+ glamSigner,
4262
+ state: this.drift.driftStatePda,
4263
+ user,
4264
+ userStats,
4265
+ spotMarketVault: driftVault,
4266
+ userTokenAccount: glamVaultAta,
4267
+ driftSigner: DRIFT_SIGNER,
4268
+ tokenProgram,
4269
+ })
4270
+ .remainingAccounts(remainingAccounts)
4271
+ .instruction();
4272
+ return [preIx, ix];
4162
4273
  }
4163
- async modifyOrder(modifyOrderParams, orderId, marketIndex, marketType, subAccountId = 0, txOptions = {}) {
4164
- const tx = await this.modifyOrderTx(modifyOrderParams, orderId, marketIndex, marketType, subAccountId, txOptions);
4165
- return await this.base.sendAndConfirm(tx);
4274
+ async withdrawTx(amount, marketIndex, subAccountId, txOptions = {}) {
4275
+ const glamSigner = txOptions.signer || this.base.signer;
4276
+ const ixs = await this.withdrawIxs(amount, marketIndex, subAccountId, glamSigner);
4277
+ const tx = this.build(ixs, txOptions);
4278
+ return await this.base.intoVersionedTransaction(tx, txOptions);
4166
4279
  }
4167
- async cancelOrders(marketType, marketIndex, direction, subAccountId = 0, txOptions = {}) {
4168
- const tx = await this.cancelOrdersTx(marketType, marketIndex, direction, subAccountId, txOptions);
4169
- return await this.base.sendAndConfirm(tx);
4280
+ async updateUserCustomMarginRatioIx(maxLeverage, // 1=1x, 2=2x ... 50=50x leverage
4281
+ subAccountId, glamSigner) {
4282
+ const { user } = this.drift.getDriftUserPdas(subAccountId);
4283
+ // https://github.com/drift-labs/protocol-v2/blob/babed162b08b1fe34e49a81c5aa3e4ec0a88ecdf/programs/drift/src/math/constants.rs#L183-L184
4284
+ // 0 means No Limit
4285
+ const marginRatio = maxLeverage === 0 ? 0 : DRIFT_MARGIN_PRECISION / maxLeverage;
4286
+ return await this.base.extDriftProgram.methods
4287
+ .updateUserCustomMarginRatio(subAccountId, marginRatio)
4288
+ .accounts({
4289
+ glamState: this.base.statePda,
4290
+ glamSigner,
4291
+ user,
4292
+ })
4293
+ .instruction();
4170
4294
  }
4171
- async cancelOrdersByIds(orderIds, subAccountId = 0, txOptions = {}) {
4172
- const tx = await this.cancelOrdersByIdsTx(orderIds, subAccountId, txOptions);
4173
- return await this.base.sendAndConfirm(tx);
4295
+ async updateUserCustomMarginRatioTx(maxLeverage, // 1=1x, 2=2x ... 50=50x leverage
4296
+ subAccountId = 0, txOptions = {}) {
4297
+ const glamSigner = txOptions.signer || this.base.signer;
4298
+ const ix = await this.updateUserCustomMarginRatioIx(maxLeverage, subAccountId, glamSigner);
4299
+ const tx = this.build([ix], txOptions);
4300
+ return await this.base.intoVersionedTransaction(tx, txOptions);
4174
4301
  }
4175
- async settlePnl(marketIndex, subAccountId = 0, txOptions = {}) {
4176
- const tx = await this.settlePnlTx(marketIndex, subAccountId, txOptions);
4177
- return await this.base.sendAndConfirm(tx);
4302
+ async updateUserMarginTradingEnabledIx(marginTradingEnabled, subAccountId, glamSigner) {
4303
+ const { user } = this.drift.getDriftUserPdas(subAccountId);
4304
+ return await this.base.extDriftProgram.methods
4305
+ .updateUserMarginTradingEnabled(subAccountId, marginTradingEnabled)
4306
+ .accounts({
4307
+ glamState: this.base.statePda,
4308
+ glamSigner,
4309
+ user,
4310
+ })
4311
+ .instruction();
4178
4312
  }
4179
- getGlamReferrerPdas() {
4180
- return {
4181
- user: this.getUserPda(constants_1.GLAM_REFERRER, 0),
4182
- userStats: this.getUserStatsPda(constants_1.GLAM_REFERRER),
4183
- };
4313
+ async updateUserMarginTradingEnabledTx(marginTradingEnabled, subAccountId = 0, txOptions = {}) {
4314
+ const glamSigner = txOptions.signer || this.base.signer;
4315
+ const ix = await this.updateUserMarginTradingEnabledIx(marginTradingEnabled, subAccountId, glamSigner);
4316
+ const tx = this.build([ix], txOptions);
4317
+ return await this.base.intoVersionedTransaction(tx, txOptions);
4184
4318
  }
4185
- parsePerpMarket(address, data) {
4186
- const perpMarket = driftLayouts_1.DriftPerpMarket.decode(address, data);
4187
- return {
4188
- name: perpMarket.nameStr,
4189
- marketPda: perpMarket.marketPda,
4190
- marketIndex: perpMarket.marketIndex,
4191
- oracle: perpMarket.oracle,
4192
- oracleSource: types_1.OracleSource.get(perpMarket.oracleSource),
4193
- };
4319
+ async updateUserDelegateIx(delegate, subAccountId, glamSigner) {
4320
+ const { user } = this.drift.getDriftUserPdas(subAccountId);
4321
+ return await this.base.extDriftProgram.methods
4322
+ .updateUserDelegate(subAccountId, new web3_js_1.PublicKey(delegate))
4323
+ .accounts({
4324
+ glamState: this.base.statePda,
4325
+ glamSigner,
4326
+ user,
4327
+ })
4328
+ .instruction();
4194
4329
  }
4195
- parseSpotMarket(address, data) {
4196
- const driftSpotMarket = driftLayouts_1.DriftSpotMarket.decode(address, data);
4197
- return {
4198
- name: driftSpotMarket.nameStr,
4199
- marketIndex: driftSpotMarket.marketIndex,
4200
- poolId: driftSpotMarket.poolId,
4201
- marketPda: driftSpotMarket.marketPda,
4202
- oracle: driftSpotMarket.oracle,
4203
- oracleSource: types_1.OracleSource.get(driftSpotMarket.oracleSource),
4204
- vault: driftSpotMarket.vault,
4205
- mint: driftSpotMarket.mint,
4206
- decimals: driftSpotMarket.decimals,
4207
- tokenProgram: driftSpotMarket.tokenProgram === 0
4208
- ? spl_token_1.TOKEN_PROGRAM_ID
4209
- : spl_token_1.TOKEN_2022_PROGRAM_ID,
4210
- cumulativeDepositInterest: driftSpotMarket.cumulativeDepositInterest,
4211
- cumulativeBorrowInterest: driftSpotMarket.cumulativeBorrowInterest,
4212
- };
4330
+ async updateUserDelegateTx(delegate, subAccountId = 0, txOptions = {}) {
4331
+ const glamSigner = txOptions.signer || this.base.signer;
4332
+ const ix = await this.updateUserDelegateIx(delegate, subAccountId, glamSigner);
4333
+ const tx = this.build([ix], txOptions);
4334
+ return await this.base.intoVersionedTransaction(tx, txOptions);
4213
4335
  }
4214
- calcSpotBalance(scaledBalance, scaledBalanceType, decimals, cumulativeDepositInterest, cumulativeBorrowInterest) {
4336
+ async deleteUserIx(subAccountId, glamSigner) {
4337
+ const { user, userStats } = this.drift.getDriftUserPdas(subAccountId);
4338
+ return await this.base.extDriftProgram.methods
4339
+ .deleteUser()
4340
+ .accounts({
4341
+ glamState: this.base.statePda,
4342
+ state: this.drift.driftStatePda,
4343
+ user,
4344
+ userStats,
4345
+ glamSigner,
4346
+ })
4347
+ .instruction();
4348
+ }
4349
+ async deleteUserTx(subAccountId, txOptions = {}) {
4350
+ const glamSigner = txOptions.signer || this.base.signer;
4351
+ const ix = await this.deleteUserIx(subAccountId, glamSigner);
4352
+ const tx = this.build([ix], txOptions);
4353
+ return await this.base.intoVersionedTransaction(tx, txOptions);
4354
+ }
4355
+ async placeOrderIx(orderParams, subAccountId, glamSigner) {
4356
+ const { marketIndex, marketType } = orderParams;
4357
+ const { user: referrer, userStats: referrerStats } = this.drift.getGlamReferrerPdas();
4358
+ const remainingAccounts = (await this.drift.composeRemainingAccounts(subAccountId, marketType, marketIndex)).concat([
4359
+ { pubkey: referrer, isWritable: true, isSigner: false },
4360
+ { pubkey: referrerStats, isWritable: true, isSigner: false },
4361
+ ]);
4362
+ const { user } = this.drift.getDriftUserPdas(subAccountId);
4363
+ return await this.base.extDriftProgram.methods
4364
+ .placeOrders([orderParams])
4365
+ .accounts({
4366
+ glamState: this.base.statePda,
4367
+ glamSigner,
4368
+ user,
4369
+ state: this.drift.driftStatePda,
4370
+ })
4371
+ .remainingAccounts(remainingAccounts)
4372
+ .instruction();
4373
+ }
4374
+ async placeOrderTx(orderParams, subAccountId, txOptions = {}) {
4375
+ const glamSigner = txOptions.signer || this.base.signer;
4376
+ const ix = await this.placeOrderIx(orderParams, subAccountId, glamSigner);
4377
+ const tx = this.build([ix], txOptions);
4378
+ return await this.base.intoVersionedTransaction(tx, txOptions);
4379
+ }
4380
+ async modifyOrderIx(modifyOrderParams, orderId, marketIndex, marketType, subAccountId, glamSigner) {
4381
+ const remainingAccounts = await this.drift.composeRemainingAccounts(subAccountId, marketType, marketIndex);
4382
+ const { user } = this.drift.getDriftUserPdas(subAccountId);
4383
+ return await this.base.extDriftProgram.methods
4384
+ .modifyOrder(orderId, modifyOrderParams)
4385
+ .accounts({
4386
+ glamState: this.base.statePda,
4387
+ glamSigner,
4388
+ user,
4389
+ state: this.drift.driftStatePda,
4390
+ })
4391
+ .remainingAccounts(remainingAccounts)
4392
+ .instruction();
4393
+ }
4394
+ async modifyOrderTx(modifyOrderParams, orderId, marketIndex, marketType, subAccountId, txOptions = {}) {
4395
+ const glamSigner = txOptions.signer || this.base.signer;
4396
+ const ix = await this.modifyOrderIx(modifyOrderParams, orderId, marketIndex, marketType, subAccountId, glamSigner);
4397
+ const tx = this.build([ix], txOptions);
4398
+ return await this.base.intoVersionedTransaction(tx, txOptions);
4399
+ }
4400
+ async cancelOrdersIx(marketType, marketIndex, direction, subAccountId, glamSigner) {
4401
+ const remainingAccounts = await this.drift.composeRemainingAccounts(subAccountId, marketType, marketIndex);
4402
+ const { user } = this.drift.getDriftUserPdas(subAccountId);
4403
+ return await this.base.extDriftProgram.methods
4404
+ .cancelOrders(marketType, marketIndex, direction)
4405
+ .accounts({
4406
+ glamState: this.base.statePda,
4407
+ glamSigner,
4408
+ user,
4409
+ state: this.drift.driftStatePda,
4410
+ })
4411
+ .remainingAccounts(remainingAccounts)
4412
+ .instruction();
4413
+ }
4414
+ async cancelOrdersTx(marketType, marketIndex, direction, subAccountId = 0, txOptions = {}) {
4415
+ const glamSigner = txOptions.signer || this.base.signer;
4416
+ const ix = await this.cancelOrdersIx(marketType, marketIndex, direction, subAccountId, glamSigner);
4417
+ const tx = this.build([ix], txOptions);
4418
+ return await this.base.intoVersionedTransaction(tx, txOptions);
4419
+ }
4420
+ async cancelOrdersByIdsIx(orderIds, subAccountId, glamSigner) {
4421
+ const remainingAccounts = await this.drift.composeRemainingAccounts(subAccountId);
4422
+ const { user } = this.drift.getDriftUserPdas(subAccountId);
4423
+ return await this.base.extDriftProgram.methods
4424
+ .cancelOrdersByIds(orderIds)
4425
+ .accounts({
4426
+ glamState: this.base.statePda,
4427
+ glamSigner,
4428
+ user,
4429
+ state: this.drift.driftStatePda,
4430
+ })
4431
+ .remainingAccounts(remainingAccounts)
4432
+ .instruction();
4433
+ }
4434
+ async cancelOrdersByIdsTx(orderIds, subAccountId = 0, txOptions = {}) {
4435
+ const glamSigner = txOptions.signer || this.base.signer;
4436
+ const ix = await this.cancelOrdersByIdsIx(orderIds, subAccountId, glamSigner);
4437
+ const tx = this.build([ix], txOptions);
4438
+ return await this.base.intoVersionedTransaction(tx, txOptions);
4439
+ }
4440
+ async settlePnlIx(marketIndex, subAccountId, glamSigner) {
4441
+ const { vault: driftVault } = await this.drift.fetchAndParseSpotMarket(0);
4442
+ const remainingAccounts = await this.drift.composeRemainingAccounts(subAccountId, types_1.MarketType.PERP, marketIndex);
4443
+ const { user } = this.drift.getDriftUserPdas(subAccountId);
4444
+ return await this.base.extDriftProgram.methods
4445
+ .settlePnl(marketIndex)
4446
+ .accounts({
4447
+ glamState: this.base.statePda,
4448
+ glamSigner,
4449
+ user,
4450
+ state: this.drift.driftStatePda,
4451
+ spotMarketVault: driftVault,
4452
+ })
4453
+ .remainingAccounts(remainingAccounts)
4454
+ .instruction();
4455
+ }
4456
+ async settlePnlTx(marketIndex, subAccountId = 0, txOptions = {}) {
4457
+ const glamSigner = txOptions.signer || this.base.signer;
4458
+ const ix = await this.settlePnlIx(marketIndex, subAccountId, glamSigner);
4459
+ const tx = this.build([ix], txOptions);
4460
+ return await this.base.intoVersionedTransaction(tx, txOptions);
4461
+ }
4462
+ }
4463
+ class DriftClient {
4464
+ constructor(base, vault) {
4465
+ this.base = base;
4466
+ this.vault = vault;
4467
+ this.spotMarkets = new Map();
4468
+ this.perpMarkets = new Map();
4469
+ this.marketConfigs = null;
4470
+ /*
4471
+ * Utils
4472
+ */
4473
+ this.getMarketPda = (marketType, marketIndex) => web3_js_1.PublicKey.findProgramAddressSync([
4474
+ Buffer.from(`${marketType === types_1.MarketType.PERP ? "perp" : "spot"}_market`),
4475
+ new anchor.BN(marketIndex).toArrayLike(Buffer, "le", 2),
4476
+ ], constants_1.DRIFT_PROGRAM_ID)[0];
4477
+ this.getUserPda = (authority, subAccountId = 0) => web3_js_1.PublicKey.findProgramAddressSync([
4478
+ Buffer.from("user"),
4479
+ authority.toBuffer(),
4480
+ new anchor.BN(subAccountId).toArrayLike(Buffer, "le", 2),
4481
+ ], constants_1.DRIFT_PROGRAM_ID)[0];
4482
+ this.getUserStatsPda = (authority) => web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("user_stats"), authority.toBuffer()], constants_1.DRIFT_PROGRAM_ID)[0];
4483
+ this.marketTypeEquals = (a, b) => a && Object.keys(a)[0] === Object.keys(b)[0];
4484
+ this.txBuilder = new TxBuilder(base, vault, this);
4485
+ }
4486
+ /*
4487
+ * Client methods
4488
+ */
4489
+ async initialize(subAccountId = 0, txOptions = {}) {
4490
+ const tx = await this.txBuilder.initializeTx(subAccountId, txOptions);
4491
+ return await this.base.sendAndConfirm(tx);
4492
+ }
4493
+ async updateUserCustomMarginRatio(maxLeverage, // 1=1x, 2=2x ... 50=50x leverage
4494
+ subAccountId = 0) {
4495
+ const tx = await this.txBuilder.updateUserCustomMarginRatioTx(maxLeverage, subAccountId);
4496
+ return await this.base.sendAndConfirm(tx);
4497
+ }
4498
+ async updateUserMarginTradingEnabled(marginTradingEnabled, subAccountId = 0, txOptions = {}) {
4499
+ const tx = await this.txBuilder.updateUserMarginTradingEnabledTx(marginTradingEnabled, subAccountId, txOptions);
4500
+ return await this.base.sendAndConfirm(tx);
4501
+ }
4502
+ async updateUserDelegate(delegate, subAccountId = 0) {
4503
+ const tx = await this.txBuilder.updateUserDelegateTx(new web3_js_1.PublicKey(delegate), subAccountId);
4504
+ return await this.base.sendAndConfirm(tx);
4505
+ }
4506
+ async deleteUser(subAccountId = 0, txOptions = {}) {
4507
+ const tx = await this.txBuilder.deleteUserTx(subAccountId, txOptions);
4508
+ return await this.base.sendAndConfirm(tx);
4509
+ }
4510
+ async deposit(amount, marketIndex = 1, subAccountId = 0, txOptions = {}) {
4511
+ const tx = await this.txBuilder.depositTx(amount, marketIndex, subAccountId, txOptions);
4512
+ return await this.base.sendAndConfirm(tx);
4513
+ }
4514
+ async withdraw(amount, marketIndex = 1, subAccountId = 0, txOptions = {}) {
4515
+ const tx = await this.txBuilder.withdrawTx(amount, marketIndex, subAccountId, txOptions);
4516
+ return await this.base.sendAndConfirm(tx);
4517
+ }
4518
+ async placeOrder(orderParams, subAccountId = 0, txOptions = {}) {
4519
+ const tx = await this.txBuilder.placeOrderTx(orderParams, subAccountId, txOptions);
4520
+ return await this.base.sendAndConfirm(tx);
4521
+ }
4522
+ async modifyOrder(modifyOrderParams, orderId, marketIndex, marketType, subAccountId = 0, txOptions = {}) {
4523
+ const tx = await this.txBuilder.modifyOrderTx(modifyOrderParams, orderId, marketIndex, marketType, subAccountId, txOptions);
4524
+ return await this.base.sendAndConfirm(tx);
4525
+ }
4526
+ async cancelOrders(marketType, marketIndex, direction, subAccountId = 0, txOptions = {}) {
4527
+ const tx = await this.txBuilder.cancelOrdersTx(marketType, marketIndex, direction, subAccountId, txOptions);
4528
+ return await this.base.sendAndConfirm(tx);
4529
+ }
4530
+ async cancelOrdersByIds(orderIds, subAccountId = 0, txOptions = {}) {
4531
+ const tx = await this.txBuilder.cancelOrdersByIdsTx(orderIds, subAccountId, txOptions);
4532
+ return await this.base.sendAndConfirm(tx);
4533
+ }
4534
+ async settlePnl(marketIndex, subAccountId = 0, txOptions = {}) {
4535
+ const tx = await this.txBuilder.settlePnlTx(marketIndex, subAccountId, txOptions);
4536
+ return await this.base.sendAndConfirm(tx);
4537
+ }
4538
+ getGlamReferrerPdas() {
4539
+ return {
4540
+ user: this.getUserPda(constants_1.GLAM_REFERRER, 0),
4541
+ userStats: this.getUserStatsPda(constants_1.GLAM_REFERRER),
4542
+ };
4543
+ }
4544
+ parsePerpMarket(address, data) {
4545
+ const perpMarket = driftLayouts_1.DriftPerpMarket.decode(address, data);
4546
+ return {
4547
+ name: perpMarket.nameStr,
4548
+ marketPda: perpMarket.marketPda,
4549
+ marketIndex: perpMarket.marketIndex,
4550
+ oracle: perpMarket.oracle,
4551
+ oracleSource: types_1.OracleSource.get(perpMarket.oracleSource),
4552
+ };
4553
+ }
4554
+ parseSpotMarket(address, data) {
4555
+ const driftSpotMarket = driftLayouts_1.DriftSpotMarket.decode(address, data);
4556
+ return {
4557
+ name: driftSpotMarket.nameStr,
4558
+ marketIndex: driftSpotMarket.marketIndex,
4559
+ poolId: driftSpotMarket.poolId,
4560
+ marketPda: driftSpotMarket.marketPda,
4561
+ oracle: driftSpotMarket.oracle,
4562
+ oracleSource: types_1.OracleSource.get(driftSpotMarket.oracleSource),
4563
+ vault: driftSpotMarket.vault,
4564
+ mint: driftSpotMarket.mint,
4565
+ decimals: driftSpotMarket.decimals,
4566
+ tokenProgram: driftSpotMarket.tokenProgram === 0
4567
+ ? spl_token_1.TOKEN_PROGRAM_ID
4568
+ : spl_token_1.TOKEN_2022_PROGRAM_ID,
4569
+ cumulativeDepositInterest: driftSpotMarket.cumulativeDepositInterest,
4570
+ cumulativeBorrowInterest: driftSpotMarket.cumulativeBorrowInterest,
4571
+ };
4572
+ }
4573
+ calcSpotBalance(scaledBalance, scaledBalanceType, decimals, cumulativeDepositInterest, cumulativeBorrowInterest) {
4215
4574
  const precisionAdjustment = new anchor_1.BN(10 ** (19 - decimals));
4216
4575
  let interest = cumulativeDepositInterest;
4217
4576
  if (scaledBalanceType === types_1.SpotBalanceType.BORROW) {
@@ -4482,375 +4841,20 @@ class DriftClient {
4482
4841
  isSigner: false,
4483
4842
  })));
4484
4843
  }
4485
- getClaimStatus(claimant, distributor) {
4486
- const [claimStatus] = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("ClaimStatus"), claimant.toBuffer(), distributor.toBuffer()], constants_1.DRIFT_DISTRIBUTOR_PROGRAM);
4487
- return claimStatus;
4488
- }
4489
- // public async claim(
4490
- // distributor: PublicKey,
4491
- // amountUnlocked: BN,
4492
- // amountLocked: BN,
4493
- // proof: number[][],
4494
- // txOptions: TxOptions = {},
4495
- // ) {
4496
- // const glamSigner = txOptions.signer || this.base.signer;
4497
- // const vault = this.base.vaultPda;
4498
- // const vaultAta = this.base.getVaultAta(DRIFT);
4499
- // const distributorAta = this.base.getAta(DRIFT, distributor);
4500
- // const preInstructions = [
4501
- // createAssociatedTokenAccountIdempotentInstruction(
4502
- // glamSigner,
4503
- // vaultAta,
4504
- // vault,
4505
- // DRIFT,
4506
- // ),
4507
- // ];
4508
- // const tx = await this.base.extDriftProgram.methods
4509
- // .distributorNewClaim(amountUnlocked, amountLocked, proof)
4510
- // .accounts({
4511
- // glamState: this.base.statePda,
4512
- // glamSigner,
4513
- // distributor,
4514
- // claimStatus: this.getClaimStatus(vault, distributor),
4515
- // from: distributorAta,
4516
- // to: vaultAta,
4517
- // tokenProgram: TOKEN_PROGRAM_ID,
4518
- // })
4519
- // .preInstructions(preInstructions)
4520
- // .transaction();
4521
- // const vTx = await this.base.intoVersionedTransaction(tx, { ...txOptions });
4522
- // return await this.base.sendAndConfirm(vTx);
4523
- // }
4524
- async initializeUserStatsIx(glamSigner) {
4525
- const { userStats } = this.getDriftUserPdas();
4526
- return await this.base.extDriftProgram.methods
4527
- .initializeUserStats()
4528
- .accounts({
4529
- glamState: this.base.statePda,
4530
- glamSigner,
4531
- state: this.driftStatePda,
4532
- userStats,
4533
- })
4534
- .instruction();
4535
- }
4536
- async initializeUserIx(glamSigner, subAccountId) {
4537
- const name = `GLAM *.+ ${subAccountId}`
4538
- .split("")
4539
- .map((char) => char.charCodeAt(0))
4540
- .concat(Array(24).fill(0));
4541
- const { user, userStats } = this.getDriftUserPdas(subAccountId);
4542
- const { user: referrer, userStats: referrerStats } = this.getGlamReferrerPdas();
4543
- const remainingAccounts = [
4544
- { pubkey: referrer, isWritable: true, isSigner: false },
4545
- { pubkey: referrerStats, isWritable: true, isSigner: false },
4546
- ];
4547
- return await this.base.extDriftProgram.methods
4548
- .initializeUser(subAccountId, name)
4549
- .accounts({
4550
- glamState: this.base.statePda,
4551
- user,
4552
- userStats,
4553
- state: this.driftStatePda,
4554
- glamSigner,
4555
- })
4556
- .remainingAccounts(remainingAccounts)
4557
- .instruction();
4558
- }
4559
- async updateUserPoolIdIx(subAccountId, poolId) {
4560
- const { user } = this.getDriftUserPdas(subAccountId);
4561
- return await this.base.extDriftProgram.methods
4562
- .updateUserPoolId(subAccountId, poolId)
4563
- .accounts({
4564
- glamState: this.base.statePda,
4565
- user,
4566
- })
4567
- .instruction();
4844
+ }
4845
+ exports.DriftClient = DriftClient;
4846
+ class DriftVaultsClient {
4847
+ constructor(base, drift) {
4848
+ this.base = base;
4849
+ this.drift = drift;
4568
4850
  }
4569
- async initializeTx(subAccountId = 0, txOptions = {}) {
4570
- const glamSigner = txOptions.signer || this.base.signer;
4571
- const tx = new web3_js_1.Transaction();
4572
- // Create userStats account if it doesn't exist
4573
- const { userStats } = this.getDriftUserPdas();
4574
- const userStatsInfo = await this.base.provider.connection.getAccountInfo(userStats);
4575
- if (!userStatsInfo) {
4576
- tx.add(await this.initializeUserStatsIx(glamSigner));
4851
+ async fetchUserPositions(user) {
4852
+ const accountInfo = await this.base.provider.connection.getAccountInfo(user);
4853
+ if (!accountInfo) {
4854
+ throw new Error(`Drift user ${user} account not found for vault.`);
4577
4855
  }
4578
- // Initialize user (aka sub-account)
4579
- tx.add(await this.initializeUserIx(glamSigner, subAccountId));
4580
- return await this.base.intoVersionedTransaction(tx, txOptions);
4581
- }
4582
- async updateUserCustomMarginRatioIx(maxLeverage, // 1=1x, 2=2x ... 50=50x leverage
4583
- subAccountId = 0, txOptions = {}) {
4584
- const glamSigner = txOptions.signer || this.base.signer;
4585
- const { user } = this.getDriftUserPdas(subAccountId);
4586
- // https://github.com/drift-labs/protocol-v2/blob/babed162b08b1fe34e49a81c5aa3e4ec0a88ecdf/programs/drift/src/math/constants.rs#L183-L184
4587
- // 0 means No Limit
4588
- const marginRatio = maxLeverage === 0 ? 0 : DRIFT_MARGIN_PRECISION / maxLeverage;
4589
- return await this.base.extDriftProgram.methods
4590
- .updateUserCustomMarginRatio(subAccountId, marginRatio)
4591
- .accounts({
4592
- glamState: this.base.statePda,
4593
- glamSigner,
4594
- user,
4595
- })
4596
- .instruction();
4597
- }
4598
- async updateUserCustomMarginRatioTx(maxLeverage, // 1=1x, 2=2x ... 50=50x leverage
4599
- subAccountId = 0, txOptions = {}) {
4600
- const tx = new web3_js_1.Transaction().add(await this.updateUserCustomMarginRatioIx(maxLeverage, subAccountId, txOptions));
4601
- return await this.base.intoVersionedTransaction(tx, txOptions);
4602
- }
4603
- async updateUserMarginTradingEnabledIx(marginTradingEnabled, subAccountId = 0, txOptions = {}) {
4604
- const glamSigner = txOptions.signer || this.base.signer;
4605
- const { user } = this.getDriftUserPdas(subAccountId);
4606
- return await this.base.extDriftProgram.methods
4607
- .updateUserMarginTradingEnabled(subAccountId, marginTradingEnabled)
4608
- .accounts({
4609
- glamState: this.base.statePda,
4610
- glamSigner,
4611
- user,
4612
- })
4613
- .instruction();
4614
- }
4615
- async updateUserMarginTradingEnabledTx(marginTradingEnabled, subAccountId = 0, txOptions = {}) {
4616
- const tx = new web3_js_1.Transaction().add(...(txOptions.preInstructions || []), await this.updateUserMarginTradingEnabledIx(marginTradingEnabled, subAccountId, txOptions));
4617
- return await this.base.intoVersionedTransaction(tx, txOptions);
4618
- }
4619
- async updateUserDelegateIx(delegate, subAccountId = 0, txOptions = {}) {
4620
- const glamSigner = txOptions.signer || this.base.signer;
4621
- const { user } = this.getDriftUserPdas(subAccountId);
4622
- return await this.base.extDriftProgram.methods
4623
- .updateUserDelegate(subAccountId, new web3_js_1.PublicKey(delegate))
4624
- .accounts({
4625
- glamState: this.base.statePda,
4626
- glamSigner,
4627
- user,
4628
- })
4629
- .instruction();
4630
- }
4631
- async updateUserDelegateTx(delegate, subAccountId = 0, txOptions = {}) {
4632
- const tx = new web3_js_1.Transaction().add(await this.updateUserDelegateIx(delegate, subAccountId, txOptions));
4633
- return await this.base.intoVersionedTransaction(tx, txOptions);
4634
- }
4635
- async deleteUserTx(subAccountId = 0, txOptions = {}) {
4636
- const glamSigner = txOptions.signer || this.base.signer;
4637
- const { user, userStats } = this.getDriftUserPdas(subAccountId);
4638
- const tx = await this.base.extDriftProgram.methods
4639
- .deleteUser()
4640
- .accounts({
4641
- glamState: this.base.statePda,
4642
- state: this.driftStatePda,
4643
- user,
4644
- userStats,
4645
- glamSigner,
4646
- })
4647
- .transaction();
4648
- return await this.base.intoVersionedTransaction(tx, txOptions);
4649
- }
4650
- async depositTx(amount, marketIndex = 1, subAccountId = 0, txOptions = {}) {
4651
- const glamSigner = txOptions.signer || this.base.signer;
4652
- const { user, userStats } = this.getDriftUserPdas(subAccountId);
4653
- const { mint, oracle, tokenProgram, marketPda, vault: driftVault, name, } = await this.fetchAndParseSpotMarket(marketIndex);
4654
- console.log(`Spot market ${marketIndex} mint ${mint}, oracle: ${oracle}, marketPda: ${marketPda}, vault: ${driftVault}`);
4655
- const preInstructions = [];
4656
- const postInstructions = [];
4657
- // If drift user doesn't exist, prepend initialization ixs
4658
- if (!(await this.fetchDriftUser(subAccountId))) {
4659
- // Only add ix to initialize user stats if subAccountId is 0
4660
- if (subAccountId === 0) {
4661
- preInstructions.push(await this.initializeUserStatsIx(glamSigner));
4662
- }
4663
- preInstructions.push(await this.initializeUserIx(glamSigner, subAccountId));
4664
- // If market name ends with "-N", it means we're depositing to an isolated pool
4665
- const isolatedPoolMatch = name.match(/-(\d+)$/);
4666
- if (isolatedPoolMatch) {
4667
- const poolId = parseInt(isolatedPoolMatch[1]);
4668
- preInstructions.push(await this.updateUserPoolIdIx(subAccountId, poolId));
4669
- }
4670
- }
4671
- if (mint.equals(constants_1.WSOL)) {
4672
- const wrapSolIxs = await this.vault.maybeWrapSol(amount, glamSigner);
4673
- preInstructions.push(...wrapSolIxs);
4674
- // If we need to wrap SOL, it means the wSOL balance will be drained,
4675
- // and we close the wSOL token account for convenience
4676
- const tokenAccount = this.base.getVaultAta(constants_1.WSOL);
4677
- const closeTokenAccountIx = await this.base.extSplProgram.methods
4678
- .tokenCloseAccount()
4679
- .accounts({
4680
- glamState: this.base.statePda,
4681
- glamSigner,
4682
- tokenAccount,
4683
- cpiProgram: spl_token_1.TOKEN_PROGRAM_ID,
4684
- })
4685
- .instruction();
4686
- postInstructions.push(closeTokenAccountIx);
4687
- }
4688
- const remainingAccounts = [
4689
- { pubkey: new web3_js_1.PublicKey(oracle), isSigner: false, isWritable: false },
4690
- { pubkey: new web3_js_1.PublicKey(marketPda), isSigner: false, isWritable: true },
4691
- ];
4692
- if (tokenProgram.equals(spl_token_1.TOKEN_2022_PROGRAM_ID)) {
4693
- remainingAccounts.push({
4694
- pubkey: mint,
4695
- isSigner: false,
4696
- isWritable: false,
4697
- });
4698
- }
4699
- const tx = await this.base.extDriftProgram.methods
4700
- .deposit(marketIndex, amount, false)
4701
- .accounts({
4702
- glamState: this.base.statePda,
4703
- glamSigner,
4704
- state: this.driftStatePda,
4705
- user,
4706
- userStats,
4707
- spotMarketVault: driftVault,
4708
- userTokenAccount: this.base.getVaultAta(mint, tokenProgram),
4709
- tokenProgram,
4710
- })
4711
- .remainingAccounts(remainingAccounts)
4712
- .preInstructions(preInstructions)
4713
- .postInstructions(postInstructions)
4714
- .transaction();
4715
- return await this.base.intoVersionedTransaction(tx, txOptions);
4716
- }
4717
- async withdrawTx(amount, marketIndex = 1, subAccountId = 0, txOptions = {}) {
4718
- const glamSigner = txOptions.signer || this.base.signer;
4719
- const { user, userStats } = this.getDriftUserPdas(subAccountId);
4720
- const { mint, tokenProgram, vault: driftVault, } = await this.fetchAndParseSpotMarket(marketIndex);
4721
- const glamVault = this.base.vaultPda;
4722
- const glamVaultAta = this.base.getVaultAta(mint, tokenProgram);
4723
- const remainingAccounts = await this.composeRemainingAccounts(subAccountId, types_1.MarketType.SPOT, marketIndex);
4724
- if (tokenProgram.equals(spl_token_1.TOKEN_2022_PROGRAM_ID)) {
4725
- remainingAccounts.push({
4726
- pubkey: mint,
4727
- isSigner: false,
4728
- isWritable: false,
4729
- });
4730
- }
4731
- // Create vault ata in case it doesn't exist
4732
- const preInstructions = [
4733
- (0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(glamSigner, glamVaultAta, glamVault, mint, tokenProgram),
4734
- ];
4735
- const tx = await this.base.extDriftProgram.methods
4736
- .withdraw(marketIndex, amount, false)
4737
- .accounts({
4738
- glamState: this.base.statePda,
4739
- glamSigner,
4740
- state: this.driftStatePda,
4741
- user,
4742
- userStats,
4743
- spotMarketVault: driftVault,
4744
- userTokenAccount: glamVaultAta,
4745
- driftSigner: DRIFT_SIGNER,
4746
- tokenProgram,
4747
- })
4748
- .remainingAccounts(remainingAccounts)
4749
- .preInstructions(preInstructions)
4750
- .transaction();
4751
- return await this.base.intoVersionedTransaction(tx, txOptions);
4752
- }
4753
- async placeOrderTx(orderParams, subAccountId = 0, txOptions = {}) {
4754
- const { marketIndex, marketType } = orderParams;
4755
- const { user: referrer, userStats: referrerStats } = this.getGlamReferrerPdas();
4756
- const remainingAccounts = (await this.composeRemainingAccounts(subAccountId, marketType, marketIndex)).concat([
4757
- { pubkey: referrer, isWritable: true, isSigner: false },
4758
- { pubkey: referrerStats, isWritable: true, isSigner: false },
4759
- ]);
4760
- const glamSigner = txOptions.signer || this.base.signer;
4761
- const { user } = this.getDriftUserPdas(subAccountId);
4762
- const tx = await this.base.extDriftProgram.methods
4763
- .placeOrders([orderParams])
4764
- .accounts({
4765
- glamState: this.base.statePda,
4766
- glamSigner,
4767
- user,
4768
- state: this.driftStatePda,
4769
- })
4770
- .remainingAccounts(remainingAccounts)
4771
- .transaction();
4772
- return await this.base.intoVersionedTransaction(tx, txOptions);
4773
- }
4774
- async modifyOrderTx(modifyOrderParams, orderId, marketIndex, marketType, subAccountId = 0, txOptions = {}) {
4775
- const remainingAccounts = await this.composeRemainingAccounts(subAccountId, marketType, marketIndex);
4776
- const signer = txOptions.signer || this.base.signer;
4777
- const { user } = this.getDriftUserPdas(subAccountId);
4778
- const tx = await this.base.extDriftProgram.methods
4779
- .modifyOrder(orderId, modifyOrderParams)
4780
- .accounts({
4781
- glamState: this.base.statePda,
4782
- glamSigner: signer,
4783
- user,
4784
- state: this.driftStatePda,
4785
- })
4786
- .remainingAccounts(remainingAccounts)
4787
- .transaction();
4788
- return await this.base.intoVersionedTransaction(tx, txOptions);
4789
- }
4790
- async cancelOrdersTx(marketType, marketIndex, direction, subAccountId = 0, txOptions = {}) {
4791
- const glamSigner = txOptions.signer || this.base.signer;
4792
- const { user } = this.getDriftUserPdas(subAccountId);
4793
- const remainingAccounts = await this.composeRemainingAccounts(subAccountId, marketType, marketIndex);
4794
- const tx = await this.base.extDriftProgram.methods
4795
- .cancelOrders(marketType, marketIndex, direction)
4796
- .accounts({
4797
- glamState: this.base.statePda,
4798
- glamSigner,
4799
- user,
4800
- state: this.driftStatePda,
4801
- })
4802
- .remainingAccounts(remainingAccounts)
4803
- .transaction();
4804
- return await this.base.intoVersionedTransaction(tx, txOptions);
4805
- }
4806
- async cancelOrdersByIdsTx(orderIds, subAccountId = 0, txOptions = {}) {
4807
- const glamSigner = txOptions.signer || this.base.signer;
4808
- const { user } = this.getDriftUserPdas(subAccountId);
4809
- const remainingAccounts = await this.composeRemainingAccounts(subAccountId);
4810
- const tx = await this.base.extDriftProgram.methods
4811
- .cancelOrdersByIds(orderIds)
4812
- .accounts({
4813
- glamState: this.base.statePda,
4814
- glamSigner,
4815
- user,
4816
- state: this.driftStatePda,
4817
- })
4818
- .remainingAccounts(remainingAccounts)
4819
- .transaction();
4820
- return await this.base.intoVersionedTransaction(tx, txOptions);
4821
- }
4822
- async settlePnlTx(marketIndex, subAccountId = 0, txOptions = {}) {
4823
- const glamSigner = txOptions.signer || this.base.signer;
4824
- const { user } = this.getDriftUserPdas(subAccountId);
4825
- const { vault: driftVault } = await this.fetchAndParseSpotMarket(0);
4826
- const remainingAccounts = await this.composeRemainingAccounts(subAccountId, types_1.MarketType.PERP, marketIndex);
4827
- const tx = await this.base.extDriftProgram.methods
4828
- .settlePnl(marketIndex)
4829
- .accounts({
4830
- glamState: this.base.statePda,
4831
- glamSigner,
4832
- user,
4833
- state: this.driftStatePda,
4834
- spotMarketVault: driftVault,
4835
- })
4836
- .remainingAccounts(remainingAccounts)
4837
- .transaction();
4838
- return await this.base.intoVersionedTransaction(tx, txOptions);
4839
- }
4840
- }
4841
- exports.DriftClient = DriftClient;
4842
- class DriftVaultsClient {
4843
- constructor(base, drift) {
4844
- this.base = base;
4845
- this.drift = drift;
4846
- }
4847
- async fetchUserPositions(user) {
4848
- const accountInfo = await this.base.provider.connection.getAccountInfo(user);
4849
- if (!accountInfo) {
4850
- throw new Error(`Drift user ${user} account not found for vault.`);
4851
- }
4852
- const { spotPositions, perpPositions } = (0, user_1.decodeUser)(accountInfo.data);
4853
- return { perpPositions, spotPositions };
4856
+ const { spotPositions, perpPositions } = (0, user_1.decodeUser)(accountInfo.data);
4857
+ return { perpPositions, spotPositions };
4854
4858
  }
4855
4859
  getDepositorPda(driftVault) {
4856
4860
  return web3_js_1.PublicKey.findProgramAddressSync([
@@ -6488,7 +6492,7 @@ class TxBuilder extends base_1.BaseTxBuilder {
6488
6492
  }
6489
6493
  async update(params, txOptions) {
6490
6494
  const ix = await this.updateIx(params, txOptions.signer);
6491
- const tx = this.build(ix, txOptions);
6495
+ const tx = this.build([ix], txOptions);
6492
6496
  return await this.base.intoVersionedTransaction(tx, txOptions);
6493
6497
  }
6494
6498
  async updateIx(params, signer) {
@@ -6599,111 +6603,22 @@ exports.KaminoVaultsClient = exports.KaminoFarmClient = exports.KaminoLendingCli
6599
6603
  const tslib_1 = __webpack_require__(2);
6600
6604
  const anchor_1 = __webpack_require__(4);
6601
6605
  const web3_js_1 = __webpack_require__(16);
6606
+ const base_1 = __webpack_require__(52);
6602
6607
  const borsh = tslib_1.__importStar(__webpack_require__(21));
6603
6608
  const accounts_1 = __webpack_require__(24);
6604
6609
  const spl_token_1 = __webpack_require__(17);
6605
6610
  const constants_1 = __webpack_require__(25);
6606
6611
  const kaminoLayouts_1 = __webpack_require__(65);
6607
6612
  const rpc_1 = __webpack_require__(38);
6608
- const decimal_js_1 = tslib_1.__importDefault(__webpack_require__(47));
6609
6613
  const utils_1 = __webpack_require__(23);
6610
- const FractionDecimal = decimal_js_1.default.clone({ precision: 40 });
6611
- const MULTIPLIER = new FractionDecimal(2).pow(60);
6612
6614
  const DEFAULT_OBLIGATION_ARGS = { tag: 0, id: 0 };
6613
6615
  const EVENT_AUTHORITY = new web3_js_1.PublicKey("24tHwQyJJ9akVXxnvkekGfAoeUJXXS7mE6kQNioNySsK");
6614
- class KaminoLendingClient {
6615
- constructor(base, vault) {
6616
+ class TxBuilder extends base_1.BaseTxBuilder {
6617
+ constructor(base, vault, klend) {
6618
+ super(base);
6616
6619
  this.base = base;
6617
6620
  this.vault = vault;
6618
- this.reserves = new utils_1.PkMap();
6619
- this.obligations = new utils_1.PkMap();
6620
- }
6621
- /**
6622
- * Initializes Kamino user metadata
6623
- *
6624
- * @param market Lending market
6625
- * @param referrer Referrer user metadata
6626
- * @param txOptions
6627
- * @returns
6628
- */
6629
- async initUserMetadata(txOptions = {}) {
6630
- const tx = await this.initUserMetadataTx(txOptions);
6631
- return await this.base.sendAndConfirm(tx);
6632
- }
6633
- /**
6634
- * Deposits asset to the lending market.
6635
- *
6636
- * @param market Lending market
6637
- * @param asset Asset mint
6638
- * @param amount Amount to deposit
6639
- * @param txOptions
6640
- * @returns
6641
- */
6642
- async deposit(market, asset, amount, txOptions = {}) {
6643
- const tx = await this.depositTx(new web3_js_1.PublicKey(market), new web3_js_1.PublicKey(asset), new anchor_1.BN(amount), txOptions);
6644
- return await this.base.sendAndConfirm(tx);
6645
- }
6646
- /**
6647
- * Withdraws asset from the lending market.
6648
- *
6649
- * @param market Lending market
6650
- * @param asset Asset mint
6651
- * @param amount Amount to deposit
6652
- * @param txOptions
6653
- * @returns
6654
- */
6655
- async withdraw(market, asset, amount, txOptions = {}) {
6656
- const tx = await this.withdrawTx(new web3_js_1.PublicKey(market), new web3_js_1.PublicKey(asset), new anchor_1.BN(amount), txOptions);
6657
- return await this.base.sendAndConfirm(tx);
6658
- }
6659
- /**
6660
- * Borrows asset from the lending market.
6661
- *
6662
- * @param market Lending market
6663
- * @param asset Asset mint
6664
- * @param amount Amount to borrow
6665
- * @param txOptions
6666
- * @returns
6667
- */
6668
- async borrow(market, asset, amount, txOptions = {}) {
6669
- const tx = await this.borrowTx(new web3_js_1.PublicKey(market), new web3_js_1.PublicKey(asset), new anchor_1.BN(amount), txOptions);
6670
- return await this.base.sendAndConfirm(tx);
6671
- }
6672
- /**
6673
- * Repays asset to the lending market.
6674
- *
6675
- * @param market
6676
- * @param asset
6677
- * @param amount
6678
- * @param txOptions
6679
- * @returns
6680
- */
6681
- async repay(market, asset, amount, txOptions = {}) {
6682
- const tx = await this.repayTx(new web3_js_1.PublicKey(market), new web3_js_1.PublicKey(asset), new anchor_1.BN(amount), txOptions);
6683
- return await this.base.sendAndConfirm(tx);
6684
- }
6685
- getUserMetadataPda(owner) {
6686
- const [userMetadataPda] = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("user_meta"), owner.toBuffer()], constants_1.KAMINO_LENDING_PROGRAM);
6687
- return userMetadataPda;
6688
- }
6689
- getObligationPda(owner, market, args = DEFAULT_OBLIGATION_ARGS) {
6690
- const seed = [
6691
- Buffer.from([args.tag]),
6692
- Buffer.from([args.id]),
6693
- owner.toBuffer(),
6694
- market.toBuffer(),
6695
- web3_js_1.PublicKey.default.toBuffer(),
6696
- web3_js_1.PublicKey.default.toBuffer(),
6697
- ];
6698
- const [obligation, _] = web3_js_1.PublicKey.findProgramAddressSync(seed, constants_1.KAMINO_LENDING_PROGRAM);
6699
- return obligation;
6700
- }
6701
- // seeds = [BASE_SEED_USER_STATE, farm_state.key().as_ref(), delegatee.key().as_ref()],
6702
- // for a delegated farm, the delegatee is the obligation, the owner (of farm user state) is the vault PDA
6703
- // for an un-delegated farm, the delegatee and the owner are the same (vault PDA)
6704
- getFarmUserState(farmUser, farm) {
6705
- const [obligationFarm] = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("user"), farm.toBuffer(), farmUser.toBuffer()], constants_1.KAMINO_FARM_PROGRAM);
6706
- return obligationFarm;
6621
+ this.klend = klend;
6707
6622
  }
6708
6623
  refreshObligationIx(accounts, programId = constants_1.KAMINO_LENDING_PROGRAM) {
6709
6624
  const keys = [
@@ -6828,12 +6743,12 @@ class KaminoLendingClient {
6828
6743
  return [farmCollateral]
6829
6744
  .filter((farm) => !!farm)
6830
6745
  .map((farm) => {
6831
- const obligationFarmUserState = this.getFarmUserState(obligation, farm);
6746
+ const obligationFarmUserState = this.klend.getFarmUserState(obligation, farm);
6832
6747
  return this.refreshObligationFarmsForReserveIx({ mode: 0 }, {
6833
6748
  crank: this.base.signer, // Must be signer
6834
6749
  baseAccounts: {
6835
6750
  obligation,
6836
- lendingMarketAuthority: this.getMarketAuthority(lendingMarket),
6751
+ lendingMarketAuthority: this.klend.getMarketAuthority(lendingMarket),
6837
6752
  reserve: parsedReserve.address,
6838
6753
  reserveFarmState: farm,
6839
6754
  obligationFarmUserState,
@@ -6854,12 +6769,12 @@ class KaminoLendingClient {
6854
6769
  return [farmDebt]
6855
6770
  .filter((farm) => !!farm)
6856
6771
  .map((farm) => {
6857
- const obligationFarmUserState = this.getFarmUserState(obligation, farm);
6772
+ const obligationFarmUserState = this.klend.getFarmUserState(obligation, farm);
6858
6773
  return this.refreshObligationFarmsForReserveIx({ mode: 1 }, {
6859
6774
  crank: this.base.signer, // Must be signer
6860
6775
  baseAccounts: {
6861
6776
  obligation,
6862
- lendingMarketAuthority: this.getMarketAuthority(lendingMarket),
6777
+ lendingMarketAuthority: this.klend.getMarketAuthority(lendingMarket),
6863
6778
  reserve: parsedReserve.address,
6864
6779
  reserveFarmState: farm,
6865
6780
  obligationFarmUserState,
@@ -6873,156 +6788,12 @@ class KaminoLendingClient {
6873
6788
  })
6874
6789
  .flat();
6875
6790
  }
6876
- getMarketAuthority(market) {
6877
- const [authority, _] = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("lma"), market.toBuffer()], constants_1.KAMINO_LENDING_PROGRAM);
6878
- return authority;
6879
- }
6880
- reservePdas(market, mint) {
6881
- const [liquiditySupplyVault] = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("reserve_liq_supply"), market.toBuffer(), mint.toBuffer()], constants_1.KAMINO_LENDING_PROGRAM);
6882
- const [collateralMint] = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("reserve_coll_mint"), market.toBuffer(), mint.toBuffer()], constants_1.KAMINO_LENDING_PROGRAM);
6883
- const [collateralSupplyVault] = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("reserve_coll_supply"), market.toBuffer(), mint.toBuffer()], constants_1.KAMINO_LENDING_PROGRAM);
6884
- const [feeVault] = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("fee_receiver"), market.toBuffer(), mint.toBuffer()], constants_1.KAMINO_LENDING_PROGRAM);
6885
- return {
6886
- liquiditySupplyVault,
6887
- collateralMint,
6888
- collateralSupplyVault,
6889
- feeVault,
6890
- };
6891
- }
6892
- parseObligation(obligation, data) {
6893
- const { lendingMarket, deposits: _deposits, borrows: _borrows, } = kaminoLayouts_1.Obligation.decode(obligation, data);
6894
- // Map decoded deposits to the expected format, filtering out empty deposits
6895
- const deposits = _deposits
6896
- .filter(({ depositReserve }) => !depositReserve.equals(web3_js_1.PublicKey.default))
6897
- .map(({ depositReserve, depositedAmount, marketValueSf }) => {
6898
- return {
6899
- reserve: depositReserve,
6900
- depositedAmount,
6901
- marketValueSf,
6902
- };
6903
- });
6904
- // Map decoded borrows to the expected format, filtering out empty borrows
6905
- const borrows = _borrows
6906
- .filter(({ borrowReserve }) => !borrowReserve.equals(web3_js_1.PublicKey.default))
6907
- .map(({ borrowReserve, borrowedAmountSf, marketValueSf, cumulativeBorrowRateBsf, }) => {
6908
- return {
6909
- reserve: borrowReserve,
6910
- borrowedAmountSf,
6911
- marketValueSf,
6912
- cumulativeBorrowRateBsf,
6913
- };
6914
- });
6915
- return {
6916
- address: obligation,
6917
- lendingMarket,
6918
- deposits,
6919
- borrows,
6920
- };
6921
- }
6922
- /**
6923
- * Fetches and parses an obligation account
6924
- */
6925
- async fetchAndParseObligation(obligation) {
6926
- const cached = this.obligations.get(obligation);
6927
- if (cached) {
6928
- return cached;
6929
- }
6930
- const obligationAccount = await this.base.provider.connection.getAccountInfo(obligation);
6931
- if (!obligationAccount) {
6932
- throw new Error("Obligation account not found");
6933
- }
6934
- const parsedObligation = this.parseObligation(obligation, obligationAccount.data);
6935
- this.obligations.set(obligation, parsedObligation);
6936
- return parsedObligation;
6937
- }
6938
- parseReserve(pubkey, data) {
6939
- const { lendingMarket, farmCollateral, farmDebt, liquidity: { mintPubkey, mintDecimals }, config: { tokenInfo: { scopeConfiguration: { priceFeed }, }, }, collateralExchangeRate, cumulativeBorrowRate, } = kaminoLayouts_1.Reserve.decode(pubkey, data);
6940
- return {
6941
- address: pubkey,
6942
- market: lendingMarket,
6943
- farmCollateral: farmCollateral.equals(web3_js_1.PublicKey.default)
6944
- ? null
6945
- : farmCollateral,
6946
- farmDebt: farmDebt.equals(web3_js_1.PublicKey.default) ? null : farmDebt,
6947
- liquidityMint: mintPubkey,
6948
- liquidityMintDecimals: mintDecimals.toNumber(),
6949
- scopePriceFeed: priceFeed,
6950
- ...this.reservePdas(lendingMarket, mintPubkey),
6951
- collateralExchangeRate,
6952
- cumulativeBorrowRate,
6953
- };
6954
- }
6955
- async fetchAndParseReserves(reserves) {
6956
- const requestReservesSet = new utils_1.PkSet(reserves);
6957
- const cachedReservesSet = new utils_1.PkSet(Array.from(this.reserves.pkKeys()));
6958
- // If all requested reserves are cached, return data from cache
6959
- if (cachedReservesSet.includes(requestReservesSet)) {
6960
- return Array.from(this.reserves.values()).filter(({ address }) => requestReservesSet.has(address));
6961
- }
6962
- // Only fetch reserves that are not cached
6963
- const reservesToFetch = Array.from(requestReservesSet).filter((r) => !cachedReservesSet.has(r));
6964
- if (process.env.NODE_ENV !== "production") {
6965
- console.log("Fetching reserves:", reservesToFetch.map((r) => r.toBase58()));
6966
- }
6967
- const reserveAccounts = await this.base.provider.connection.getMultipleAccountsInfo(reservesToFetch);
6968
- if (reserveAccounts.some((a) => !a)) {
6969
- throw new Error("Not all reserves can be found");
6970
- }
6971
- reserveAccounts.forEach((account, i) => {
6972
- const parsedReserve = this.parseReserve(reservesToFetch[i], account.data);
6973
- this.reserves.set(reservesToFetch[i], parsedReserve);
6974
- });
6975
- // Return requested reserves
6976
- return Array.from(this.reserves.values()).filter(({ address }) => requestReservesSet.has(address));
6977
- }
6978
- /**
6979
- * Finds and parses a reserve account for a given market and asset
6980
- *
6981
- * @param market The lending market public key
6982
- * @param asset The asset public key
6983
- * @returns The parsed reserve account
6984
- */
6985
- async findAndParseReserve(market, asset) {
6986
- const accounts = await this.base.provider.connection.getProgramAccounts(constants_1.KAMINO_LENDING_PROGRAM, {
6987
- filters: [
6988
- { dataSize: constants_1.KAMINO_RESERVE_SIZE },
6989
- { memcmp: { offset: 32, bytes: market.toBase58() } },
6990
- { memcmp: { offset: 128, bytes: asset.toBase58() } },
6991
- ],
6992
- });
6993
- if (accounts.length === 0) {
6994
- throw new Error("Reserve not found");
6995
- }
6996
- const parsedReserve = this.parseReserve(accounts[0].pubkey, accounts[0].account.data);
6997
- this.reserves.set(accounts[0].pubkey, parsedReserve);
6998
- return parsedReserve;
6999
- }
7000
- /**
7001
- * Finds and parses Kamino obligations for a given owner and market (optional)
7002
- */
7003
- async findAndParseObligations(owner, market) {
7004
- const accounts = await this.base.provider.connection.getProgramAccounts(constants_1.KAMINO_LENDING_PROGRAM, {
7005
- filters: [
7006
- { dataSize: constants_1.KAMINO_OBTRIGATION_SIZE },
7007
- { memcmp: { offset: 64, bytes: owner.toBase58() } },
7008
- ...(market
7009
- ? [{ memcmp: { offset: 32, bytes: market.toBase58() } }]
7010
- : []),
7011
- ],
7012
- });
7013
- // Parse obligations and cache them
7014
- return accounts.map((a) => {
7015
- const parsedObligation = this.parseObligation(a.pubkey, a.account.data);
7016
- this.obligations.set(a.pubkey, parsedObligation);
7017
- return parsedObligation;
7018
- });
7019
- }
7020
6791
  /**
7021
6792
  * Returns two instructions that refresh reserves in batch and refresh obligation
7022
6793
  */
7023
6794
  async refreshReservesAndObligationIxs(obligation, targetReserve) {
7024
6795
  // Get a set of reserves to refresh
7025
- const { deposits, borrows, lendingMarket } = await this.fetchAndParseObligation(obligation);
6796
+ const { deposits, borrows, lendingMarket } = await this.klend.fetchAndParseObligation(obligation);
7026
6797
  const reservesInUse = deposits
7027
6798
  .map(({ reserve }) => reserve)
7028
6799
  .concat(borrows.map(({ reserve }) => reserve));
@@ -7030,7 +6801,7 @@ class KaminoLendingClient {
7030
6801
  const reservesSet = new utils_1.PkSet();
7031
6802
  reservesInUse.forEach((reserve) => reservesSet.add(reserve));
7032
6803
  reservesSet.add(targetReserve.address);
7033
- const parsedReserves = await this.fetchAndParseReserves(Array.from(reservesSet));
6804
+ const parsedReserves = await this.klend.fetchAndParseReserves(Array.from(reservesSet));
7034
6805
  const refreshReservesIx = this.refreshReservesBatchIx(parsedReserves, false);
7035
6806
  // Refresh obligation with reserves in use (exclude target reserve)
7036
6807
  const refreshObligationIx = this.refreshObligationIx({
@@ -7050,7 +6821,7 @@ class KaminoLendingClient {
7050
6821
  if (!farmState) {
7051
6822
  return { farmUser: null, initIx: null };
7052
6823
  }
7053
- const farmUser = this.getFarmUserState(obligation, farmState);
6824
+ const farmUser = this.klend.getFarmUserState(obligation, farmState);
7054
6825
  const farmUserAccount = await this.base.provider.connection.getAccountInfo(farmUser);
7055
6826
  const initIx = farmUserAccount
7056
6827
  ? null
@@ -7060,7 +6831,7 @@ class KaminoLendingClient {
7060
6831
  glamState: this.base.statePda,
7061
6832
  glamSigner: signer || this.base.signer,
7062
6833
  obligation,
7063
- lendingMarketAuthority: this.getMarketAuthority(market),
6834
+ lendingMarketAuthority: this.klend.getMarketAuthority(market),
7064
6835
  reserve: address,
7065
6836
  reserveFarmState: farmState,
7066
6837
  obligationFarm: farmUser,
@@ -7073,7 +6844,7 @@ class KaminoLendingClient {
7073
6844
  async initUserMetadataTx(txOptions = {}) {
7074
6845
  const glamSigner = txOptions.signer || this.base.signer;
7075
6846
  const vault = this.base.vaultPda;
7076
- const userMetadata = this.getUserMetadataPda(vault);
6847
+ const userMetadata = this.klend.getUserMetadataPda(vault);
7077
6848
  const lookupTable = new web3_js_1.PublicKey(0); // FIXME: create lookup table
7078
6849
  const tx = await this.base.extKaminoProgram.methods
7079
6850
  .lendingInitUserMetadata(lookupTable)
@@ -7084,16 +6855,14 @@ class KaminoLendingClient {
7084
6855
  referrerUserMetadata: null,
7085
6856
  })
7086
6857
  .transaction();
7087
- const vTx = await this.base.intoVersionedTransaction(tx, txOptions);
7088
- return vTx;
6858
+ return await this.base.intoVersionedTransaction(tx, txOptions);
7089
6859
  }
7090
- async depositTx(market, asset, amount, txOptions) {
7091
- const glamSigner = txOptions.signer || this.base.signer;
6860
+ async depositIxs(market, asset, amount, glamSigner) {
7092
6861
  const vault = this.base.vaultPda;
7093
- const userMetadata = this.getUserMetadataPda(vault);
7094
- const obligation = this.getObligationPda(vault, market);
7095
- const preInstructions = txOptions.preInstructions || [];
7096
- const postInstructions = txOptions.postInstructions || [];
6862
+ const userMetadata = this.klend.getUserMetadataPda(vault);
6863
+ const obligation = this.klend.getObligationPda(vault, market);
6864
+ const preInstructions = [];
6865
+ const postInstructions = [];
7097
6866
  const [userMetadataAccount, obligationAccount] = await this.base.provider.connection.getMultipleAccountsInfo([
7098
6867
  userMetadata,
7099
6868
  obligation,
@@ -7125,7 +6894,7 @@ class KaminoLendingClient {
7125
6894
  })
7126
6895
  .instruction());
7127
6896
  }
7128
- const depositReserve = await this.findAndParseReserve(market, asset);
6897
+ const depositReserve = await this.klend.findAndParseReserve(market, asset);
7129
6898
  const { farmUser: obligationFarmUser, initIx } = await this.initObligationFarmUserForReserveIx(obligation, depositReserve, 0, // collateral farm
7130
6899
  glamSigner);
7131
6900
  if (initIx) {
@@ -7170,14 +6939,14 @@ class KaminoLendingClient {
7170
6939
  // postInstructions.push(closeIx);
7171
6940
  // }
7172
6941
  }
7173
- const tx = await this.base.extKaminoProgram.methods
6942
+ const ix = await this.base.extKaminoProgram.methods
7174
6943
  .lendingDepositReserveLiquidityAndObligationCollateralV2(amount)
7175
6944
  .accounts({
7176
6945
  glamState: this.base.statePda,
7177
6946
  glamSigner,
7178
6947
  obligation,
7179
6948
  lendingMarket: market,
7180
- lendingMarketAuthority: this.getMarketAuthority(market),
6949
+ lendingMarketAuthority: this.klend.getMarketAuthority(market),
7181
6950
  reserve: depositReserve.address,
7182
6951
  reserveLiquidityMint: asset,
7183
6952
  reserveLiquiditySupply: depositReserve.liquiditySupplyVault,
@@ -7192,175 +6961,416 @@ class KaminoLendingClient {
7192
6961
  reserveFarmState: depositReserve.farmCollateral,
7193
6962
  farmsProgram: constants_1.KAMINO_FARM_PROGRAM,
7194
6963
  })
7195
- .preInstructions(preInstructions)
7196
- .postInstructions(postInstructions)
7197
- .transaction();
7198
- const vTx = await this.base.intoVersionedTransaction(tx, txOptions);
7199
- return vTx;
6964
+ .instruction();
6965
+ return [...preInstructions, ix, ...postInstructions];
7200
6966
  }
7201
- async withdrawTx(market, asset, amount, txOptions) {
6967
+ async depositTx(market, asset, amount, txOptions = {}) {
7202
6968
  const glamSigner = txOptions.signer || this.base.signer;
6969
+ const ixs = await this.depositIxs(market, asset, amount, glamSigner);
6970
+ const tx = this.build(ixs, txOptions);
6971
+ return await this.base.intoVersionedTransaction(tx, txOptions);
6972
+ }
6973
+ async withdrawIxs(market, asset, amount, glamSigner) {
7203
6974
  const vault = this.base.vaultPda;
7204
- const obligation = this.getObligationPda(vault, market);
6975
+ const obligation = this.klend.getObligationPda(vault, market);
7205
6976
  const preInstructions = [];
7206
6977
  const postInstructions = [];
7207
- const withdrawReserve = await this.findAndParseReserve(market, asset);
6978
+ const withdrawReserve = await this.klend.findAndParseReserve(market, asset);
7208
6979
  const { farmUser: obligationFarmUser, initIx } = await this.initObligationFarmUserForReserveIx(obligation, withdrawReserve, 0, // collateral farm
7209
6980
  glamSigner);
7210
6981
  if (initIx) {
7211
6982
  preInstructions.push(initIx);
7212
6983
  }
7213
- const ixs = await this.refreshReservesAndObligationIxs(obligation, withdrawReserve);
7214
- preInstructions.push(...ixs);
7215
- if (withdrawReserve.farmCollateral) {
7216
- const ixs = this.refreshObligationCollateralFarmsForReservesIxs(obligation, market, [withdrawReserve]);
7217
- preInstructions.push(...ixs);
7218
- postInstructions.push(...ixs); // farms must be refreshed after withdraw
6984
+ const ixs = await this.refreshReservesAndObligationIxs(obligation, withdrawReserve);
6985
+ preInstructions.push(...ixs);
6986
+ if (withdrawReserve.farmCollateral) {
6987
+ const ixs = this.refreshObligationCollateralFarmsForReservesIxs(obligation, market, [withdrawReserve]);
6988
+ preInstructions.push(...ixs);
6989
+ postInstructions.push(...ixs); // farms must be refreshed after withdraw
6990
+ }
6991
+ // Create asset ATA in case it doesn't exist. Add it to the beginning of preInstructions
6992
+ const { tokenProgram } = await (0, accounts_1.fetchMintAndTokenProgram)(this.base.provider.connection, asset);
6993
+ const userDestinationLiquidity = this.base.getVaultAta(asset, tokenProgram);
6994
+ const createAtaIx = (0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(glamSigner, userDestinationLiquidity, vault, asset, tokenProgram);
6995
+ preInstructions.unshift(createAtaIx);
6996
+ // When all assets are being withdrawn from a market, the klend program attempts to close the
6997
+ // obligation account, which requires the system program. We always pass the system program
6998
+ // account as a remaining account just in case.
6999
+ const withdrawIx = await this.base.extKaminoProgram.methods
7000
+ .lendingWithdrawObligationCollateralAndRedeemReserveCollateralV2(amount)
7001
+ .accounts({
7002
+ glamState: this.base.statePda,
7003
+ glamSigner,
7004
+ obligation,
7005
+ lendingMarket: market,
7006
+ lendingMarketAuthority: this.klend.getMarketAuthority(market),
7007
+ withdrawReserve: withdrawReserve.address,
7008
+ reserveLiquidityMint: asset,
7009
+ reserveSourceCollateral: withdrawReserve.collateralSupplyVault,
7010
+ reserveCollateralMint: withdrawReserve.collateralMint,
7011
+ reserveLiquiditySupply: withdrawReserve.liquiditySupplyVault,
7012
+ userDestinationLiquidity,
7013
+ placeholderUserDestinationCollateral: null,
7014
+ collateralTokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
7015
+ liquidityTokenProgram: tokenProgram,
7016
+ instructionSysvarAccount: web3_js_1.SYSVAR_INSTRUCTIONS_PUBKEY,
7017
+ obligationFarmUserState: obligationFarmUser,
7018
+ reserveFarmState: withdrawReserve.farmCollateral,
7019
+ farmsProgram: constants_1.KAMINO_FARM_PROGRAM,
7020
+ })
7021
+ .remainingAccounts([
7022
+ {
7023
+ pubkey: web3_js_1.SystemProgram.programId,
7024
+ isSigner: false,
7025
+ isWritable: false,
7026
+ },
7027
+ ])
7028
+ .instruction();
7029
+ // The final instructions in the tx:
7030
+ // - refreshReserve * N
7031
+ // - refreshObligation
7032
+ // - refreshObligationFarmsForReserve (if farm exists)
7033
+ // - withdrawIx
7034
+ // - refreshObligationFarmsForReserve (if farm exists)
7035
+ return [...preInstructions, withdrawIx, ...postInstructions];
7036
+ }
7037
+ async withdrawTx(market, asset, amount, txOptions = {}) {
7038
+ const glamSigner = txOptions.signer || this.base.signer;
7039
+ const ixs = await this.withdrawIxs(market, asset, amount, glamSigner);
7040
+ const tx = this.build(ixs, txOptions);
7041
+ return await this.base.intoVersionedTransaction(tx, txOptions);
7042
+ }
7043
+ async borrowIxs(market, asset, amount, glamSigner) {
7044
+ const vault = this.base.vaultPda;
7045
+ const obligation = this.klend.getObligationPda(vault, market);
7046
+ const preInstructions = [];
7047
+ const postInstructions = [];
7048
+ const borrowReserve = await this.klend.findAndParseReserve(market, asset);
7049
+ const { farmUser: obligationFarmUser, initIx } = await this.initObligationFarmUserForReserveIx(obligation, borrowReserve, 1, // debt farm
7050
+ glamSigner);
7051
+ if (initIx) {
7052
+ preInstructions.push(initIx);
7053
+ }
7054
+ const ixs = await this.refreshReservesAndObligationIxs(obligation, borrowReserve);
7055
+ preInstructions.push(...ixs);
7056
+ if (borrowReserve.farmDebt) {
7057
+ const ixs = this.refreshObligationDebtFarmsForReservesIxs(obligation, market, [borrowReserve]);
7058
+ preInstructions.push(...ixs);
7059
+ postInstructions.push(...ixs); // farms must be refreshed after borrow
7060
+ }
7061
+ // Create asset ATA in case it doesn't exist. Add it to the beginning of preInstructions
7062
+ const { tokenProgram } = await (0, accounts_1.fetchMintAndTokenProgram)(this.base.provider.connection, asset);
7063
+ const userDestinationLiquidity = this.base.getVaultAta(asset, tokenProgram);
7064
+ const createAtaIx = (0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(glamSigner, userDestinationLiquidity, vault, asset, tokenProgram);
7065
+ preInstructions.unshift(createAtaIx);
7066
+ const borrowIx = await this.base.extKaminoProgram.methods
7067
+ .lendingBorrowObligationLiquidityV2(amount)
7068
+ .accounts({
7069
+ glamState: this.base.statePda,
7070
+ glamSigner,
7071
+ obligation,
7072
+ lendingMarket: market,
7073
+ lendingMarketAuthority: this.klend.getMarketAuthority(market),
7074
+ borrowReserve: borrowReserve.address,
7075
+ borrowReserveLiquidityMint: asset,
7076
+ reserveSourceLiquidity: borrowReserve.liquiditySupplyVault,
7077
+ borrowReserveLiquidityFeeReceiver: borrowReserve.feeVault,
7078
+ userDestinationLiquidity,
7079
+ referrerTokenState: null,
7080
+ instructionSysvarAccount: web3_js_1.SYSVAR_INSTRUCTIONS_PUBKEY,
7081
+ tokenProgram,
7082
+ obligationFarmUserState: obligationFarmUser,
7083
+ reserveFarmState: borrowReserve.farmDebt,
7084
+ farmsProgram: constants_1.KAMINO_FARM_PROGRAM,
7085
+ })
7086
+ .instruction();
7087
+ return [...preInstructions, borrowIx];
7088
+ }
7089
+ async borrowTx(market, asset, amount, txOptions = {}) {
7090
+ const glamSigner = txOptions.signer || this.base.signer;
7091
+ const ixs = await this.borrowIxs(market, asset, amount, glamSigner);
7092
+ const tx = this.build(ixs, txOptions);
7093
+ return await this.base.intoVersionedTransaction(tx, txOptions);
7094
+ }
7095
+ async repayIxs(market, asset, amount, glamSigner) {
7096
+ const vault = this.base.vaultPda;
7097
+ const obligation = this.klend.getObligationPda(vault, market);
7098
+ const preInstructions = [];
7099
+ const repayReserve = await this.klend.findAndParseReserve(market, asset);
7100
+ const { farmUser: obligationFarmUser, initIx } = await this.initObligationFarmUserForReserveIx(obligation, repayReserve, 1, // debt farm
7101
+ glamSigner);
7102
+ if (initIx) {
7103
+ preInstructions.push(initIx);
7104
+ }
7105
+ const ixs = await this.refreshReservesAndObligationIxs(obligation, repayReserve);
7106
+ preInstructions.push(...ixs);
7107
+ const { tokenProgram } = await (0, accounts_1.fetchMintAndTokenProgram)(this.base.provider.connection, asset);
7108
+ const repayIx = await this.base.extKaminoProgram.methods
7109
+ .lendingRepayObligationLiquidityV2(amount)
7110
+ .accounts({
7111
+ glamState: this.base.statePda,
7112
+ glamSigner,
7113
+ obligation,
7114
+ lendingMarket: market,
7115
+ lendingMarketAuthority: this.klend.getMarketAuthority(market),
7116
+ repayReserve: repayReserve.address,
7117
+ reserveLiquidityMint: asset,
7118
+ reserveDestinationLiquidity: repayReserve.liquiditySupplyVault,
7119
+ userSourceLiquidity: this.base.getVaultAta(asset, tokenProgram),
7120
+ instructionSysvarAccount: web3_js_1.SYSVAR_INSTRUCTIONS_PUBKEY,
7121
+ tokenProgram,
7122
+ obligationFarmUserState: obligationFarmUser,
7123
+ reserveFarmState: repayReserve.farmDebt,
7124
+ farmsProgram: constants_1.KAMINO_FARM_PROGRAM,
7125
+ })
7126
+ .instruction();
7127
+ return [...preInstructions, repayIx];
7128
+ }
7129
+ async repayTx(market, asset, amount, txOptions = {}) {
7130
+ const glamSigner = txOptions.signer || this.base.signer;
7131
+ const ixs = await this.repayIxs(market, asset, amount, glamSigner);
7132
+ const tx = this.build(ixs, txOptions);
7133
+ return await this.base.intoVersionedTransaction(tx, txOptions);
7134
+ }
7135
+ }
7136
+ class KaminoLendingClient {
7137
+ constructor(base, vault) {
7138
+ this.base = base;
7139
+ this.vault = vault;
7140
+ this.reserves = new utils_1.PkMap();
7141
+ this.obligations = new utils_1.PkMap();
7142
+ this.txBuilder = new TxBuilder(base, vault, this);
7143
+ }
7144
+ /**
7145
+ * Initializes Kamino user metadata
7146
+ *
7147
+ * @param market Lending market
7148
+ * @param referrer Referrer user metadata
7149
+ * @param txOptions
7150
+ * @returns
7151
+ */
7152
+ async initUserMetadata(txOptions = {}) {
7153
+ const tx = await this.txBuilder.initUserMetadataTx(txOptions);
7154
+ return await this.base.sendAndConfirm(tx);
7155
+ }
7156
+ /**
7157
+ * Deposits asset to the lending market.
7158
+ *
7159
+ * @param market Lending market
7160
+ * @param asset Asset mint
7161
+ * @param amount Amount to deposit
7162
+ * @param txOptions
7163
+ * @returns
7164
+ */
7165
+ async deposit(market, asset, amount, txOptions = {}) {
7166
+ const tx = await this.txBuilder.depositTx(new web3_js_1.PublicKey(market), new web3_js_1.PublicKey(asset), new anchor_1.BN(amount), txOptions);
7167
+ return await this.base.sendAndConfirm(tx);
7168
+ }
7169
+ /**
7170
+ * Withdraws asset from the lending market.
7171
+ *
7172
+ * @param market Lending market
7173
+ * @param asset Asset mint
7174
+ * @param amount Amount to deposit
7175
+ * @param txOptions
7176
+ * @returns
7177
+ */
7178
+ async withdraw(market, asset, amount, txOptions = {}) {
7179
+ const tx = await this.txBuilder.withdrawTx(new web3_js_1.PublicKey(market), new web3_js_1.PublicKey(asset), new anchor_1.BN(amount), txOptions);
7180
+ return await this.base.sendAndConfirm(tx);
7181
+ }
7182
+ /**
7183
+ * Borrows asset from the lending market.
7184
+ *
7185
+ * @param market Lending market
7186
+ * @param asset Asset mint
7187
+ * @param amount Amount to borrow
7188
+ * @param txOptions
7189
+ * @returns
7190
+ */
7191
+ async borrow(market, asset, amount, txOptions = {}) {
7192
+ const tx = await this.txBuilder.borrowTx(new web3_js_1.PublicKey(market), new web3_js_1.PublicKey(asset), new anchor_1.BN(amount), txOptions);
7193
+ return await this.base.sendAndConfirm(tx);
7194
+ }
7195
+ /**
7196
+ * Repays asset to the lending market.
7197
+ *
7198
+ * @param market
7199
+ * @param asset
7200
+ * @param amount
7201
+ * @param txOptions
7202
+ * @returns
7203
+ */
7204
+ async repay(market, asset, amount, txOptions = {}) {
7205
+ const tx = await this.txBuilder.repayTx(new web3_js_1.PublicKey(market), new web3_js_1.PublicKey(asset), new anchor_1.BN(amount), txOptions);
7206
+ return await this.base.sendAndConfirm(tx);
7207
+ }
7208
+ getUserMetadataPda(owner) {
7209
+ const [userMetadataPda] = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("user_meta"), owner.toBuffer()], constants_1.KAMINO_LENDING_PROGRAM);
7210
+ return userMetadataPda;
7211
+ }
7212
+ getObligationPda(owner, market, args = DEFAULT_OBLIGATION_ARGS) {
7213
+ const seed = [
7214
+ Buffer.from([args.tag]),
7215
+ Buffer.from([args.id]),
7216
+ owner.toBuffer(),
7217
+ market.toBuffer(),
7218
+ web3_js_1.PublicKey.default.toBuffer(),
7219
+ web3_js_1.PublicKey.default.toBuffer(),
7220
+ ];
7221
+ const [obligation, _] = web3_js_1.PublicKey.findProgramAddressSync(seed, constants_1.KAMINO_LENDING_PROGRAM);
7222
+ return obligation;
7223
+ }
7224
+ // seeds = [BASE_SEED_USER_STATE, farm_state.key().as_ref(), delegatee.key().as_ref()],
7225
+ // for a delegated farm, the delegatee is the obligation, the owner (of farm user state) is the vault PDA
7226
+ // for an un-delegated farm, the delegatee and the owner are the same (vault PDA)
7227
+ getFarmUserState(farmUser, farm) {
7228
+ const [obligationFarm] = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("user"), farm.toBuffer(), farmUser.toBuffer()], constants_1.KAMINO_FARM_PROGRAM);
7229
+ return obligationFarm;
7230
+ }
7231
+ getMarketAuthority(market) {
7232
+ const [authority, _] = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("lma"), market.toBuffer()], constants_1.KAMINO_LENDING_PROGRAM);
7233
+ return authority;
7234
+ }
7235
+ reservePdas(market, mint) {
7236
+ const [liquiditySupplyVault] = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("reserve_liq_supply"), market.toBuffer(), mint.toBuffer()], constants_1.KAMINO_LENDING_PROGRAM);
7237
+ const [collateralMint] = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("reserve_coll_mint"), market.toBuffer(), mint.toBuffer()], constants_1.KAMINO_LENDING_PROGRAM);
7238
+ const [collateralSupplyVault] = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("reserve_coll_supply"), market.toBuffer(), mint.toBuffer()], constants_1.KAMINO_LENDING_PROGRAM);
7239
+ const [feeVault] = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("fee_receiver"), market.toBuffer(), mint.toBuffer()], constants_1.KAMINO_LENDING_PROGRAM);
7240
+ return {
7241
+ liquiditySupplyVault,
7242
+ collateralMint,
7243
+ collateralSupplyVault,
7244
+ feeVault,
7245
+ };
7246
+ }
7247
+ parseObligation(obligation, data) {
7248
+ const { lendingMarket, deposits: _deposits, borrows: _borrows, } = kaminoLayouts_1.Obligation.decode(obligation, data);
7249
+ // Map decoded deposits to the expected format, filtering out empty deposits
7250
+ const deposits = _deposits
7251
+ .filter(({ depositReserve }) => !depositReserve.equals(web3_js_1.PublicKey.default))
7252
+ .map(({ depositReserve, depositedAmount, marketValueSf }) => {
7253
+ return {
7254
+ reserve: depositReserve,
7255
+ depositedAmount,
7256
+ marketValueSf,
7257
+ };
7258
+ });
7259
+ // Map decoded borrows to the expected format, filtering out empty borrows
7260
+ const borrows = _borrows
7261
+ .filter(({ borrowReserve }) => !borrowReserve.equals(web3_js_1.PublicKey.default))
7262
+ .map(({ borrowReserve, borrowedAmountSf, marketValueSf, cumulativeBorrowRateBsf, }) => {
7263
+ return {
7264
+ reserve: borrowReserve,
7265
+ borrowedAmountSf,
7266
+ marketValueSf,
7267
+ cumulativeBorrowRateBsf,
7268
+ };
7269
+ });
7270
+ return {
7271
+ address: obligation,
7272
+ lendingMarket,
7273
+ deposits,
7274
+ borrows,
7275
+ };
7276
+ }
7277
+ /**
7278
+ * Fetches and parses an obligation account
7279
+ */
7280
+ async fetchAndParseObligation(obligation) {
7281
+ const cached = this.obligations.get(obligation);
7282
+ if (cached) {
7283
+ return cached;
7284
+ }
7285
+ const obligationAccount = await this.base.provider.connection.getAccountInfo(obligation);
7286
+ if (!obligationAccount) {
7287
+ throw new Error("Obligation account not found");
7219
7288
  }
7220
- // Create asset ATA in case it doesn't exist. Add it to the beginning of preInstructions
7221
- const { tokenProgram } = await (0, accounts_1.fetchMintAndTokenProgram)(this.base.provider.connection, asset);
7222
- const userDestinationLiquidity = this.base.getVaultAta(asset, tokenProgram);
7223
- const createAtaIx = (0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(glamSigner, userDestinationLiquidity, vault, asset, tokenProgram);
7224
- preInstructions.unshift(createAtaIx);
7225
- // When all assets are being withdrawn from a market, the klend program attempts to close the
7226
- // obligation account, which requires the system program. We always pass the system program
7227
- // account as a remaining account just in case.
7228
- const withdrawIx = await this.base.extKaminoProgram.methods
7229
- .lendingWithdrawObligationCollateralAndRedeemReserveCollateralV2(amount)
7230
- .accounts({
7231
- glamState: this.base.statePda,
7232
- glamSigner,
7233
- obligation,
7234
- lendingMarket: market,
7235
- lendingMarketAuthority: this.getMarketAuthority(market),
7236
- withdrawReserve: withdrawReserve.address,
7237
- reserveLiquidityMint: asset,
7238
- reserveSourceCollateral: withdrawReserve.collateralSupplyVault,
7239
- reserveCollateralMint: withdrawReserve.collateralMint,
7240
- reserveLiquiditySupply: withdrawReserve.liquiditySupplyVault,
7241
- userDestinationLiquidity,
7242
- placeholderUserDestinationCollateral: null,
7243
- collateralTokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
7244
- liquidityTokenProgram: tokenProgram,
7245
- instructionSysvarAccount: web3_js_1.SYSVAR_INSTRUCTIONS_PUBKEY,
7246
- obligationFarmUserState: obligationFarmUser,
7247
- reserveFarmState: withdrawReserve.farmCollateral,
7248
- farmsProgram: constants_1.KAMINO_FARM_PROGRAM,
7249
- })
7250
- .remainingAccounts([
7251
- {
7252
- pubkey: web3_js_1.SystemProgram.programId,
7253
- isSigner: false,
7254
- isWritable: false,
7255
- },
7256
- ])
7257
- .instruction();
7258
- // The final instructions in the tx:
7259
- // - refreshReserve * N
7260
- // - refreshObligation
7261
- // - refreshObligationFarmsForReserve (if farm exists)
7262
- // - withdrawIx
7263
- // - refreshObligationFarmsForReserve (if farm exists)
7264
- const tx = new web3_js_1.Transaction();
7265
- tx.add(...preInstructions, withdrawIx, ...postInstructions);
7266
- const vTx = await this.base.intoVersionedTransaction(tx, txOptions);
7267
- return vTx;
7289
+ const parsedObligation = this.parseObligation(obligation, obligationAccount.data);
7290
+ this.obligations.set(obligation, parsedObligation);
7291
+ return parsedObligation;
7268
7292
  }
7269
- async borrowTx(market, asset, amount, txOptions) {
7270
- const glamSigner = txOptions.signer || this.base.signer;
7271
- const vault = this.base.vaultPda;
7272
- const obligation = this.getObligationPda(vault, market);
7273
- const preInstructions = [];
7274
- const postInstructions = [];
7275
- const borrowReserve = await this.findAndParseReserve(market, asset);
7276
- const { farmUser: obligationFarmUser, initIx } = await this.initObligationFarmUserForReserveIx(obligation, borrowReserve, 1, // debt farm
7277
- glamSigner);
7278
- if (initIx) {
7279
- preInstructions.push(initIx);
7293
+ parseReserve(pubkey, data) {
7294
+ const { lendingMarket, farmCollateral, farmDebt, liquidity: { mintPubkey, mintDecimals }, config: { tokenInfo: { scopeConfiguration: { priceFeed }, }, }, collateralExchangeRate, cumulativeBorrowRate, } = kaminoLayouts_1.Reserve.decode(pubkey, data);
7295
+ return {
7296
+ address: pubkey,
7297
+ market: lendingMarket,
7298
+ farmCollateral: farmCollateral.equals(web3_js_1.PublicKey.default)
7299
+ ? null
7300
+ : farmCollateral,
7301
+ farmDebt: farmDebt.equals(web3_js_1.PublicKey.default) ? null : farmDebt,
7302
+ liquidityMint: mintPubkey,
7303
+ liquidityMintDecimals: mintDecimals.toNumber(),
7304
+ scopePriceFeed: priceFeed,
7305
+ ...this.reservePdas(lendingMarket, mintPubkey),
7306
+ collateralExchangeRate,
7307
+ cumulativeBorrowRate,
7308
+ };
7309
+ }
7310
+ async fetchAndParseReserves(reserves) {
7311
+ const requestReservesSet = new utils_1.PkSet(reserves);
7312
+ const cachedReservesSet = new utils_1.PkSet(Array.from(this.reserves.pkKeys()));
7313
+ // If all requested reserves are cached, return data from cache
7314
+ if (cachedReservesSet.includes(requestReservesSet)) {
7315
+ return Array.from(this.reserves.values()).filter(({ address }) => requestReservesSet.has(address));
7280
7316
  }
7281
- const ixs = await this.refreshReservesAndObligationIxs(obligation, borrowReserve);
7282
- preInstructions.push(...ixs);
7283
- if (borrowReserve.farmDebt) {
7284
- const ixs = this.refreshObligationDebtFarmsForReservesIxs(obligation, market, [borrowReserve]);
7285
- preInstructions.push(...ixs);
7286
- postInstructions.push(...ixs); // farms must be refreshed after borrow
7317
+ // Only fetch reserves that are not cached
7318
+ const reservesToFetch = Array.from(requestReservesSet).filter((r) => !cachedReservesSet.has(r));
7319
+ if (process.env.NODE_ENV !== "production") {
7320
+ console.log("Fetching reserves:", reservesToFetch.map((r) => r.toBase58()));
7287
7321
  }
7288
- // Create asset ATA in case it doesn't exist. Add it to the beginning of preInstructions
7289
- const { tokenProgram } = await (0, accounts_1.fetchMintAndTokenProgram)(this.base.provider.connection, asset);
7290
- const userDestinationLiquidity = this.base.getVaultAta(asset, tokenProgram);
7291
- const createAtaIx = (0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(glamSigner, userDestinationLiquidity, vault, asset, tokenProgram);
7292
- preInstructions.unshift(createAtaIx);
7293
- const borrowIx = await this.base.extKaminoProgram.methods
7294
- .lendingBorrowObligationLiquidityV2(amount)
7295
- .accounts({
7296
- glamState: this.base.statePda,
7297
- glamSigner,
7298
- obligation,
7299
- lendingMarket: market,
7300
- lendingMarketAuthority: this.getMarketAuthority(market),
7301
- borrowReserve: borrowReserve.address,
7302
- borrowReserveLiquidityMint: asset,
7303
- reserveSourceLiquidity: borrowReserve.liquiditySupplyVault,
7304
- borrowReserveLiquidityFeeReceiver: borrowReserve.feeVault,
7305
- userDestinationLiquidity,
7306
- referrerTokenState: null,
7307
- instructionSysvarAccount: web3_js_1.SYSVAR_INSTRUCTIONS_PUBKEY,
7308
- tokenProgram,
7309
- obligationFarmUserState: obligationFarmUser,
7310
- reserveFarmState: borrowReserve.farmDebt,
7311
- farmsProgram: constants_1.KAMINO_FARM_PROGRAM,
7312
- })
7313
- .instruction();
7314
- // The final instructions in the tx:
7315
- // - refreshReserve * N
7316
- // - refreshObligation
7317
- // - borrowObligationLiquidityV2
7318
- const tx = new web3_js_1.Transaction();
7319
- tx.add(...preInstructions, borrowIx);
7320
- const vTx = await this.base.intoVersionedTransaction(tx, txOptions);
7321
- return vTx;
7322
+ const reserveAccounts = await this.base.provider.connection.getMultipleAccountsInfo(reservesToFetch);
7323
+ if (reserveAccounts.some((a) => !a)) {
7324
+ throw new Error("Not all reserves can be found");
7325
+ }
7326
+ reserveAccounts.forEach((account, i) => {
7327
+ const parsedReserve = this.parseReserve(reservesToFetch[i], account.data);
7328
+ this.reserves.set(reservesToFetch[i], parsedReserve);
7329
+ });
7330
+ // Return requested reserves
7331
+ return Array.from(this.reserves.values()).filter(({ address }) => requestReservesSet.has(address));
7322
7332
  }
7323
- async repayTx(market, asset, amount, txOptions = {}) {
7324
- const glamSigner = txOptions.signer || this.base.signer;
7325
- const vault = this.base.vaultPda;
7326
- const obligation = this.getObligationPda(vault, market);
7327
- const preInstructions = [];
7328
- const repayReserve = await this.findAndParseReserve(market, asset);
7329
- const { farmUser: obligationFarmUser, initIx } = await this.initObligationFarmUserForReserveIx(obligation, repayReserve, 1, // debt farm
7330
- glamSigner);
7331
- if (initIx) {
7332
- preInstructions.push(initIx);
7333
+ /**
7334
+ * Finds and parses a reserve account for a given market and asset
7335
+ *
7336
+ * @param market The lending market public key
7337
+ * @param asset The asset public key
7338
+ * @returns The parsed reserve account
7339
+ */
7340
+ async findAndParseReserve(market, asset) {
7341
+ const accounts = await this.base.provider.connection.getProgramAccounts(constants_1.KAMINO_LENDING_PROGRAM, {
7342
+ filters: [
7343
+ { dataSize: constants_1.KAMINO_RESERVE_SIZE },
7344
+ { memcmp: { offset: 32, bytes: market.toBase58() } },
7345
+ { memcmp: { offset: 128, bytes: asset.toBase58() } },
7346
+ ],
7347
+ });
7348
+ if (accounts.length === 0) {
7349
+ throw new Error("Reserve not found");
7333
7350
  }
7334
- const ixs = await this.refreshReservesAndObligationIxs(obligation, repayReserve);
7335
- preInstructions.push(...ixs);
7336
- const { tokenProgram } = await (0, accounts_1.fetchMintAndTokenProgram)(this.base.provider.connection, asset);
7337
- const repayIx = await this.base.extKaminoProgram.methods
7338
- .lendingRepayObligationLiquidityV2(amount)
7339
- .accounts({
7340
- glamState: this.base.statePda,
7341
- glamSigner,
7342
- obligation,
7343
- lendingMarket: market,
7344
- lendingMarketAuthority: this.getMarketAuthority(market),
7345
- repayReserve: repayReserve.address,
7346
- reserveLiquidityMint: asset,
7347
- reserveDestinationLiquidity: repayReserve.liquiditySupplyVault,
7348
- userSourceLiquidity: this.base.getVaultAta(asset, tokenProgram),
7349
- instructionSysvarAccount: web3_js_1.SYSVAR_INSTRUCTIONS_PUBKEY,
7350
- tokenProgram,
7351
- obligationFarmUserState: obligationFarmUser,
7352
- reserveFarmState: repayReserve.farmDebt,
7353
- farmsProgram: constants_1.KAMINO_FARM_PROGRAM,
7354
- })
7355
- .instruction();
7356
- // The final instructions in the tx:
7357
- // - refreshReserve * N
7358
- // - refreshObligation
7359
- // - repayObligationLiquidityV2
7360
- const tx = new web3_js_1.Transaction();
7361
- tx.add(...preInstructions, repayIx);
7362
- const vTx = await this.base.intoVersionedTransaction(tx, txOptions);
7363
- return vTx;
7351
+ const parsedReserve = this.parseReserve(accounts[0].pubkey, accounts[0].account.data);
7352
+ this.reserves.set(accounts[0].pubkey, parsedReserve);
7353
+ return parsedReserve;
7354
+ }
7355
+ /**
7356
+ * Finds and parses Kamino obligations for a given owner and market (optional)
7357
+ */
7358
+ async findAndParseObligations(owner, market) {
7359
+ const accounts = await this.base.provider.connection.getProgramAccounts(constants_1.KAMINO_LENDING_PROGRAM, {
7360
+ filters: [
7361
+ { dataSize: constants_1.KAMINO_OBTRIGATION_SIZE },
7362
+ { memcmp: { offset: 64, bytes: owner.toBase58() } },
7363
+ ...(market
7364
+ ? [{ memcmp: { offset: 32, bytes: market.toBase58() } }]
7365
+ : []),
7366
+ ],
7367
+ });
7368
+ // Parse obligations and cache them
7369
+ return accounts.map((a) => {
7370
+ const parsedObligation = this.parseObligation(a.pubkey, a.account.data);
7371
+ this.obligations.set(a.pubkey, parsedObligation);
7372
+ return parsedObligation;
7373
+ });
7364
7374
  }
7365
7375
  }
7366
7376
  exports.KaminoLendingClient = KaminoLendingClient;
@@ -8690,10 +8700,10 @@ class PriceClient {
8690
8700
  });
8691
8701
  // Refresh reserves in batch
8692
8702
  const parsedReserves = await this.klend.fetchAndParseReserves(Array.from(reservesSet));
8693
- ixs.push(this.klend.refreshReservesBatchIx(parsedReserves, false));
8703
+ ixs.push(this.klend.txBuilder.refreshReservesBatchIx(parsedReserves, false));
8694
8704
  // Refresh obligations
8695
8705
  parsedObligations.forEach(({ address: obligation, lendingMarket }) => {
8696
- ixs.push(this.klend.refreshObligationIx({
8706
+ ixs.push(this.klend.txBuilder.refreshObligationIx({
8697
8707
  obligation,
8698
8708
  lendingMarket,
8699
8709
  reserves: Array.from(obligationReservesMap.get(obligation) || []),
@@ -8778,7 +8788,7 @@ class PriceClient {
8778
8788
  }
8779
8789
  }
8780
8790
  const parsedReserves = await this.klend.fetchAndParseReserves(reserves);
8781
- const refreshReservesIx = this.klend.refreshReservesBatchIx(parsedReserves, false);
8791
+ const refreshReservesIx = this.klend.txBuilder.refreshReservesBatchIx(parsedReserves, false);
8782
8792
  const preInstructions = [refreshReservesIx];
8783
8793
  const priceIx = await this.base.mintProgram.methods
8784
8794
  .priceKaminoVaultShares(shareAtas.length)
@@ -8911,33 +8921,26 @@ class PriceClient {
8911
8921
  * Returns an instruction that prices stake accounts.
8912
8922
  * If there are no stake accounts, returns null.
8913
8923
  */
8914
- /*
8915
- async priceStakeAccountsIx(): Promise<TransactionInstruction | null> {
8916
- const stakes = await findStakeAccounts(
8917
- this.base.provider.connection,
8918
- this.base.vaultPda,
8919
- );
8920
- if (stakes.length === 0) {
8921
- return null;
8922
- }
8923
- const priceStakesIx = await this.base.mintProgram.methods
8924
- .priceStakeAccounts()
8925
- .accounts({
8926
- glamState: this.base.statePda,
8927
- solUsdOracle: SOL_ORACLE,
8928
- baseAssetOracle: await this.getbaseAssetOracle(),
8924
+ async priceStakeAccountsIx() {
8925
+ const stakes = await (0, utils_1.findStakeAccounts)(this.base.connection, this.base.vaultPda);
8926
+ if (stakes.length === 0) {
8927
+ return null;
8928
+ }
8929
+ const priceStakesIx = await this.base.mintProgram.methods
8930
+ .priceStakeAccounts()
8931
+ .accounts({
8932
+ glamState: this.base.statePda,
8933
+ solUsdOracle: assets_1.SOL_ORACLE,
8934
+ baseAssetOracle: await this.getbaseAssetOracle(),
8929
8935
  })
8930
- .remainingAccounts(
8931
- stakes.map((pubkey) => ({
8936
+ .remainingAccounts(stakes.map((pubkey) => ({
8932
8937
  pubkey,
8933
8938
  isSigner: false,
8934
8939
  isWritable: false,
8935
- })),
8936
- )
8937
- .instruction();
8938
- return priceStakesIx;
8940
+ })))
8941
+ .instruction();
8942
+ return priceStakesIx;
8939
8943
  }
8940
- */
8941
8944
  /**
8942
8945
  * Returns an instruction that prices Meteora positions.
8943
8946
  * If there are no Meteora positions, returns null.
@@ -9000,6 +9003,15 @@ class PriceClient {
9000
9003
  pricingIxs.push(...ixs);
9001
9004
  }
9002
9005
  }
9006
+ const nativeIntegrationAcl = integrationAcls.find((acl) => acl.integrationProgram.equals(this.base.protocolProgram.programId));
9007
+ if (nativeIntegrationAcl) {
9008
+ // stake program
9009
+ if (nativeIntegrationAcl.protocolsBitmask & 0b10) {
9010
+ const ix = await this.priceStakeAccountsIx();
9011
+ if (ix)
9012
+ pricingIxs.push(ix);
9013
+ }
9014
+ }
9003
9015
  return pricingIxs.filter(Boolean);
9004
9016
  }
9005
9017
  async validateAumIx() {
@@ -9571,7 +9583,7 @@ class TxBuilder extends base_1.BaseTxBuilder {
9571
9583
  }
9572
9584
  async closeMint(txOptions = {}) {
9573
9585
  const ix = await this.closeMintIx(txOptions.signer);
9574
- const tx = this.build(ix, txOptions);
9586
+ const tx = this.build([ix], txOptions);
9575
9587
  return await this.base.intoVersionedTransaction(tx, txOptions);
9576
9588
  }
9577
9589
  }
@@ -9717,7 +9729,7 @@ const models_1 = __webpack_require__(14);
9717
9729
  class TxBuilder extends base_1.BaseTxBuilder {
9718
9730
  async emergencyAccessUpdate(args, txOptions = {}) {
9719
9731
  const ix = await this.emergencyAccessUpdateIx(args, txOptions.signer);
9720
- const tx = this.build(ix, txOptions);
9732
+ const tx = this.build([ix], txOptions);
9721
9733
  return await this.base.intoVersionedTransaction(tx, txOptions);
9722
9734
  }
9723
9735
  async emergencyAccessUpdateIx(args, signer) {
@@ -9997,10 +10009,9 @@ class StakingClient {
9997
10009
  const txSig = await this.base.sendAndConfirm(tx);
9998
10010
  return { newStake, txSig };
9999
10011
  }
10000
- async redelegate(existingStake, vote, txOptions = {}) {
10001
- const { newStake, tx } = await this.redelegateStakeTx(existingStake, vote, txOptions);
10002
- const txSig = await this.base.sendAndConfirm(tx);
10003
- return { newStake, txSig };
10012
+ async move(sourceStake, destinationStake, amount, txOptions = {}) {
10013
+ const tx = await this.moveStakeTx(sourceStake, destinationStake, amount, txOptions);
10014
+ return await this.base.sendAndConfirm(tx);
10004
10015
  }
10005
10016
  /*
10006
10017
  * Utils
@@ -10135,7 +10146,6 @@ class StakingClient {
10135
10146
  stakePoolWithdrawAuthority: withdrawAuthority,
10136
10147
  reserveStake,
10137
10148
  feeAccount,
10138
- referrerPoolTokensAccount: poolTokensTo,
10139
10149
  poolTokensTo,
10140
10150
  poolMint,
10141
10151
  tokenProgram,
@@ -10148,7 +10158,7 @@ class StakingClient {
10148
10158
  }
10149
10159
  async stakePoolDepositStakeTx(stakePool, stakeAccount, txOptions = {}) {
10150
10160
  const glamSigner = txOptions.signer || this.base.signer;
10151
- const { programId: stakePoolProgram, poolMint, withdrawAuthority, feeAccount, validatorList, tokenProgramId: tokenProgram, reserveStake, } = await this.getStakePoolAccountData(stakePool);
10161
+ const { programId: stakePoolProgram, poolMint, depositAuthority, withdrawAuthority, feeAccount, validatorList, tokenProgramId: tokenProgram, reserveStake, } = await this.getStakePoolAccountData(stakePool);
10152
10162
  const glamVault = this.base.vaultPda;
10153
10163
  const poolTokensTo = this.base.getVaultAta(poolMint, tokenProgram);
10154
10164
  // All stake accounts owned by the stake pool withdraw authority
@@ -10170,6 +10180,7 @@ class StakingClient {
10170
10180
  glamState: this.base.statePda,
10171
10181
  cpiProgram: stakePoolProgram,
10172
10182
  stakePool,
10183
+ stakePoolDepositAuthority: depositAuthority,
10173
10184
  stakePoolWithdrawAuthority: withdrawAuthority,
10174
10185
  validatorList,
10175
10186
  validatorStakeAccount,
@@ -10178,7 +10189,6 @@ class StakingClient {
10178
10189
  poolTokensTo,
10179
10190
  poolMint,
10180
10191
  feeAccount,
10181
- referrerPoolTokensAccount: poolTokensTo,
10182
10192
  tokenProgram,
10183
10193
  })
10184
10194
  .preInstructions([
@@ -10201,7 +10211,6 @@ class StakingClient {
10201
10211
  const postInstructions = deactivate
10202
10212
  ? [
10203
10213
  await this.base.protocolProgram.methods
10204
- // @ts-ignore
10205
10214
  .stakeDeactivate()
10206
10215
  .accounts({
10207
10216
  glamSigner,
@@ -10236,7 +10245,6 @@ class StakingClient {
10236
10245
  const glamSigner = txOptions.signer || this.base.signer;
10237
10246
  const [stakeAccount, createStakeAccountIx] = await this.createStakeAccount(glamSigner);
10238
10247
  const initStakeIx = await this.base.protocolProgram.methods
10239
- // @ts-ignore
10240
10248
  .stakeInitialize()
10241
10249
  .accounts({
10242
10250
  glamState: this.base.statePda,
@@ -10253,7 +10261,6 @@ class StakingClient {
10253
10261
  })
10254
10262
  .instruction();
10255
10263
  const tx = await this.base.protocolProgram.methods
10256
- // @ts-ignore
10257
10264
  .stakeDelegateStake()
10258
10265
  .accounts({
10259
10266
  glamState: this.base.statePda,
@@ -10272,7 +10279,6 @@ class StakingClient {
10272
10279
  }
10273
10280
  const glamSigner = txOptions.signer || this.base.signer;
10274
10281
  const tx = await this.base.protocolProgram.methods
10275
- // @ts-ignore
10276
10282
  .stakeDeactivate()
10277
10283
  .accounts({
10278
10284
  glamState: this.base.statePda,
@@ -10298,7 +10304,6 @@ class StakingClient {
10298
10304
  }
10299
10305
  const glamSigner = txOptions.signer || this.base.signer;
10300
10306
  const tx = await this.base.protocolProgram.methods
10301
- // @ts-ignore
10302
10307
  .stakeWithdraw(lamports)
10303
10308
  .accounts({
10304
10309
  glamSigner,
@@ -10316,7 +10321,6 @@ class StakingClient {
10316
10321
  async mergeStakeTx(destinationStake, sourceStake, txOptions = {}) {
10317
10322
  const glamSigner = txOptions.signer || this.base.signer;
10318
10323
  const tx = await this.base.protocolProgram.methods
10319
- // @ts-ignore
10320
10324
  .stakeMerge()
10321
10325
  .accounts({
10322
10326
  glamSigner,
@@ -10331,7 +10335,6 @@ class StakingClient {
10331
10335
  const glamSigner = txOptions.signer || this.base.signer;
10332
10336
  const [newStake, createStakeAccountIx] = await this.createStakeAccount(glamSigner);
10333
10337
  const tx = await this.base.protocolProgram.methods
10334
- // @ts-ignore
10335
10338
  .stakeSplit(lamports)
10336
10339
  .accounts({
10337
10340
  glamSigner,
@@ -10344,24 +10347,18 @@ class StakingClient {
10344
10347
  const vTx = await this.base.intoVersionedTransaction(tx, txOptions);
10345
10348
  return { tx: vTx, newStake };
10346
10349
  }
10347
- async redelegateStakeTx(existingStake, vote, txOptions = {}) {
10350
+ async moveStakeTx(sourceStake, destinationStake, amount, txOptions = {}) {
10348
10351
  const glamSigner = txOptions.signer || this.base.signer;
10349
- const [newStake, createStakeAccountIx] = await this.createStakeAccount(glamSigner);
10350
10352
  const tx = await this.base.protocolProgram.methods
10351
- // @ts-ignore
10352
- .stakeRedelegate()
10353
+ .stakeMove(true, amount)
10353
10354
  .accounts({
10354
10355
  glamSigner,
10355
10356
  glamState: this.base.statePda,
10356
- vote,
10357
- stake: existingStake,
10358
- newStake,
10359
- stakeConfig: web3_js_1.STAKE_CONFIG_ID,
10357
+ sourceStake,
10358
+ destinationStake,
10360
10359
  })
10361
- .preInstructions([createStakeAccountIx])
10362
10360
  .transaction();
10363
- const vTx = await this.base.intoVersionedTransaction(tx, txOptions);
10364
- return { tx: vTx, newStake };
10361
+ return await this.base.intoVersionedTransaction(tx, txOptions);
10365
10362
  }
10366
10363
  }
10367
10364
  exports.StakingClient = StakingClient;
@@ -11532,7 +11529,7 @@ function installDriftProtocolCommands(drift, context) {
11532
11529
  .description("Update a drift user's pool ID")
11533
11530
  .action(async (subAccountId, poolId) => {
11534
11531
  try {
11535
- const tx = new web3_js_1.Transaction().add(await context.glamClient.drift.updateUserPoolIdIx(subAccountId, poolId));
11532
+ const tx = new web3_js_1.Transaction().add(await context.glamClient.drift.txBuilder.updateUserPoolIdIx(subAccountId, poolId));
11536
11533
  const vTx = await context.glamClient.intoVersionedTransaction(tx, context.txOptions);
11537
11534
  const txSig = await context.glamClient.sendAndConfirm(vTx);
11538
11535
  console.log(`Updated drift user's pool ID: ${txSig}`);
@@ -14168,7 +14165,7 @@ program
14168
14165
  initialize(config, skipSimulation);
14169
14166
  await (0, idl_1.idlCheck)(context.glamClient);
14170
14167
  })
14171
- .version("1.0.3-alpha.6");
14168
+ .version("1.0.3");
14172
14169
  program
14173
14170
  .command("env")
14174
14171
  .description("Display current environment setup")