@glamsystems/glam-cli 0.1.2 → 0.1.4

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 +1539 -778
  2. package/package.json +2 -2
package/main.js CHANGED
@@ -25,11 +25,11 @@ tslib_1.__exportStar(__webpack_require__(4), exports);
25
25
  tslib_1.__exportStar(__webpack_require__(7), exports);
26
26
  tslib_1.__exportStar(__webpack_require__(11), exports);
27
27
  tslib_1.__exportStar(__webpack_require__(12), exports);
28
- tslib_1.__exportStar(__webpack_require__(22), exports);
28
+ tslib_1.__exportStar(__webpack_require__(21), exports);
29
29
  tslib_1.__exportStar(__webpack_require__(19), exports);
30
30
  tslib_1.__exportStar(__webpack_require__(13), exports);
31
31
  tslib_1.__exportStar(__webpack_require__(14), exports);
32
- tslib_1.__exportStar(__webpack_require__(34), exports);
32
+ tslib_1.__exportStar(__webpack_require__(35), exports);
33
33
  tslib_1.__exportStar(__webpack_require__(10), exports);
34
34
  tslib_1.__exportStar(__webpack_require__(16), exports);
35
35
 
@@ -40,16 +40,16 @@ tslib_1.__exportStar(__webpack_require__(16), exports);
40
40
 
41
41
 
42
42
  Object.defineProperty(exports, "__esModule", ({ value: true }));
43
- exports.GlamIDLJson = exports.GlamIDL = void 0;
43
+ exports.GlamProtocolIdlJson = exports.GlamIdl = void 0;
44
44
  exports.getGlamProgramId = getGlamProgramId;
45
45
  exports.getGlamProgram = getGlamProgram;
46
46
  const tslib_1 = __webpack_require__(1);
47
47
  const anchor_1 = __webpack_require__(2);
48
48
  const web3_js_1 = __webpack_require__(5);
49
- const glam_json_1 = tslib_1.__importDefault(__webpack_require__(6));
50
- exports.GlamIDLJson = glam_json_1.default;
51
- const GlamIDL = glam_json_1.default;
52
- exports.GlamIDL = GlamIDL;
49
+ const glam_protocol_json_1 = tslib_1.__importDefault(__webpack_require__(6));
50
+ exports.GlamProtocolIdlJson = glam_protocol_json_1.default;
51
+ const GlamIdl = glam_protocol_json_1.default;
52
+ exports.GlamIdl = GlamIdl;
53
53
  function getGlamProgramId(cluster) {
54
54
  switch (cluster) {
55
55
  case "mainnet-beta":
@@ -61,9 +61,9 @@ function getGlamProgramId(cluster) {
61
61
  function getGlamProgram(cluster, provider) {
62
62
  switch (cluster) {
63
63
  case "mainnet-beta":
64
- return new anchor_1.Program(GlamIDL, provider);
64
+ return new anchor_1.Program(GlamIdl, provider);
65
65
  default:
66
- const idl = { ...glam_json_1.default };
66
+ const idl = { ...glam_protocol_json_1.default };
67
67
  idl.address = getGlamProgramId(cluster).toBase58();
68
68
  return new anchor_1.Program(idl, provider);
69
69
  }
@@ -80,7 +80,7 @@ module.exports = require("@solana/web3.js");
80
80
  /* 6 */
81
81
  /***/ ((module) => {
82
82
 
83
- module.exports = /*#__PURE__*/JSON.parse('{"address":"GLAMbTqav9N9witRjswJ8enwp9vv5G8bsSJ2kPJ4rcyc","metadata":{"name":"glam","version":"0.4.6","spec":"0.1.0","description":"Glam Protocol"},"instructions":[{"name":"add_mint","docs":["Adds a new mint.","","# Parameters","- `ctx`: The context for the instruction.","- `mint_model`: An instance of `MintModel` containing the metadata for the new mint.","","# Permission required","- Owner only, delegates not allowed"],"discriminator":[171,222,111,37,60,166,208,108],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_signer","writable":true,"signer":true},{"name":"new_mint","writable":true},{"name":"extra_account_meta_list","writable":true,"pda":{"seeds":[{"kind":"const","value":[101,120,116,114,97,45,97,99,99,111,117,110,116,45,109,101,116,97,115]},{"kind":"account","path":"new_mint"}]}},{"name":"openfunds_metadata","writable":true,"optional":true,"pda":{"seeds":[{"kind":"const","value":[109,101,116,97,100,97,116,97]},{"kind":"account","path":"glam_state"}]}},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"token_2022_program","address":"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"}],"args":[{"name":"mint_model","type":{"defined":{"name":"MintModel"}}}]},{"name":"burn_tokens","docs":["Burns a specified amount of tokens for the given mint.","","# Parameters","- `ctx`: The context for the instruction.","- `mint_id`: The id of the mint to burn tokens for.","- `amount`: The amount of tokens to burn.","","# Permission required","- Permission::BurnTokens","","# Integration required","- Integration::Mint"],"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_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"from"},{"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":"token_2022_program","address":"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"}],"args":[{"name":"mint_id","type":"u8"},{"name":"amount","type":"u64"}]},{"name":"close_mint","docs":["Closes a mint and releases its resources.","","# Parameters","- `ctx`: The context for the instruction.","- `mint_id`: The id of the mint to be closed.","","# Permission required","- Owner only, delegates not allowed"],"discriminator":[149,251,157,212,65,181,235,129],"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":"glam_mint","writable":true},{"name":"extra_account_meta_list","writable":true,"pda":{"seeds":[{"kind":"const","value":[101,120,116,114,97,45,97,99,99,111,117,110,116,45,109,101,116,97,115]},{"kind":"account","path":"glam_mint"}]}},{"name":"metadata","writable":true,"pda":{"seeds":[{"kind":"const","value":[109,101,116,97,100,97,116,97]},{"kind":"account","path":"glam_state"}]}},{"name":"token_2022_program","address":"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"}],"args":[{"name":"mint_id","type":"u8"}]},{"name":"close_state","docs":["Closes a state account and releases its resources.","","# Parameters","- `ctx`: The context for the instruction.","","# Permission required","- Owner only, delegates not allowed"],"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":"metadata","writable":true,"pda":{"seeds":[{"kind":"const","value":[109,101,116,97,100,97,116,97]},{"kind":"account","path":"glam_state"}]}},{"name":"system_program","address":"11111111111111111111111111111111"}],"args":[]},{"name":"close_token_accounts","docs":["Closes token accounts owned by the vault.","","# Parameters","- `ctx`: The context for the instruction.","","# Permission required","- Owner only, delegates not allowed"],"discriminator":[199,170,37,55,63,183,235,143],"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":"token_program","address":"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{"name":"token_2022_program","address":"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"}],"args":[]},{"name":"deactivate_stake_accounts","docs":["Deactivates stake accounts.","","# Parameters","- `ctx`: The context for the instruction.","","# Permission required","- Permission::Unstake","","# Integration required","- Integration::NativeStaking"],"discriminator":[58,18,6,22,226,216,161,193],"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":"clock","address":"SysvarC1ock11111111111111111111111111111111"},{"name":"stake_program","address":"Stake11111111111111111111111111111111111111"}],"args":[]},{"name":"drift_cancel_orders","docs":["Cancels drift orders.","","# Parameters","- `ctx`: The context for the instruction.","- `market_type`: The type of market (spot or perp) to cancel orders for.","- `market_index`: The index of the market to cancel orders for.","- `direction`: The direction of orders to cancel (long or short).","","# Permission required","- Permission::DriftCancelOrders","","# Integration required","- Integration::Drift"],"discriminator":[98,107,48,79,97,60,99,58],"accounts":[{"name":"glam_state"},{"name":"glam_vault","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":"dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH"},{"name":"state"},{"name":"user","writable":true}],"args":[{"name":"market_type","type":{"option":{"defined":{"name":"MarketType"}}}},{"name":"market_index","type":{"option":"u16"}},{"name":"direction","type":{"option":{"defined":{"name":"PositionDirection"}}}}]},{"name":"drift_cancel_orders_by_ids","docs":["Cancels drift orders by order IDs.","","# Parameters","- `ctx`: The context for the instruction.","- `order_ids`: A list of order IDs.","","# Permission required","- Permission::DriftCancelOrders","","# Integration required","- Integration::Drift"],"discriminator":[172,99,108,14,81,89,228,183],"accounts":[{"name":"glam_state"},{"name":"glam_vault","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":"dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH"},{"name":"state"},{"name":"user","writable":true}],"args":[{"name":"order_ids","type":{"vec":"u32"}}]},{"name":"drift_delete_user","docs":["Deletes a drift user (sub account).","","# Parameters","- `ctx`: The context for the instruction.","","# Permission required","- Permission::DriftDeleteUser","","# Integration required","- Integration::Drift"],"discriminator":[179,118,20,212,145,146,49,130],"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":"dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH"},{"name":"user","writable":true},{"name":"user_stats","writable":true},{"name":"state","writable":true}],"args":[]},{"name":"drift_deposit","docs":["Deposits to drift.","","# Parameters","- `ctx`: The context for the instruction.","- `market_index`: Index of the drift spot market.","- `amount`: Amount of asset to deposit.","","# Permission required","- Permission::DriftDeposit","","# Integration required","- Integration::Drift"],"discriminator":[252,63,250,201,98,55,130,12],"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":"dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH"},{"name":"state"},{"name":"user","writable":true},{"name":"user_stats","writable":true},{"name":"spot_market_vault","writable":true},{"name":"user_token_account","writable":true},{"name":"token_program"}],"args":[{"name":"market_index","type":"u16"},{"name":"amount","type":"u64"},{"name":"reduce_only","type":"bool"}]},{"name":"drift_initialize_user","discriminator":[107,244,158,15,225,239,98,245],"accounts":[{"name":"glam_state"},{"name":"glam_vault","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":"dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH"},{"name":"user","writable":true},{"name":"user_stats","writable":true},{"name":"state","writable":true},{"name":"payer","writable":true,"signer":true},{"name":"rent","address":"SysvarRent111111111111111111111111111111111"},{"name":"system_program","address":"11111111111111111111111111111111"}],"args":[{"name":"sub_account_id","type":"u16"},{"name":"name","type":{"array":["u8",32]}}]},{"name":"drift_initialize_user_stats","docs":["Initializes a drift account owned by vault and creates a subaccount.","","# Parameters","- `ctx`: The context for the instruction.","","# Permission required","- Permission::DriftInitialize","","# Integration required","- Integration::Drift"],"discriminator":[133,185,103,162,90,161,78,143],"accounts":[{"name":"glam_state"},{"name":"glam_vault","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":"dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH"},{"name":"user_stats","writable":true},{"name":"state","writable":true},{"name":"payer","writable":true,"signer":true},{"name":"rent","address":"SysvarRent111111111111111111111111111111111"},{"name":"system_program","address":"11111111111111111111111111111111"}],"args":[]},{"name":"drift_modify_order","docs":["Modifies an existing drift order.","","# Parameters","- `ctx`: The context for the instruction.","- `order_id`: The ID of the order to modify.","- `modify_order_params`: The parameters to modify the order with.","","# Permission required","- Permission::DriftModifyOrder","","# Integration required","- Integration::Drift"],"discriminator":[235,245,222,58,245,128,19,202],"accounts":[{"name":"glam_state"},{"name":"glam_vault","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":"dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH"},{"name":"state"},{"name":"user","writable":true}],"args":[{"name":"order_id","type":{"option":"u32"}},{"name":"modify_order_params","type":{"defined":{"name":"ModifyOrderParams"}}}]},{"name":"drift_place_orders","docs":["Places orders on drift.","","# Parameters","- `ctx`: The context for the instruction.","- `params`: A list of orders.","","# Permissions required","- Permission::DriftPlaceOrders","- Additional permission Permission::DriftSpotMarket or Permission::DriftPerpMarket is required depending on market type.","","# Integration required","- Integration::Drift"],"discriminator":[117,18,210,6,238,174,135,167],"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":"dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH"},{"name":"state"},{"name":"user","writable":true}],"args":[{"name":"params","type":{"vec":{"defined":{"name":"OrderParams"}}}}]},{"name":"drift_update_user_custom_margin_ratio","docs":["Updates custom margin ratio.","","# Parameters","- `ctx`: The context for the instruction.","- `sub_account_id`: Sub account.","- `margin_ratio`: Margin ratio.","","# Permission required","- Permission::DriftUpdateUser","","# Integration required","- Integration::Drift"],"discriminator":[4,47,193,177,128,62,228,14],"accounts":[{"name":"glam_state"},{"name":"glam_vault","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":"dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH"},{"name":"user","writable":true}],"args":[{"name":"sub_account_id","type":"u16"},{"name":"margin_ratio","type":"u32"}]},{"name":"drift_update_user_delegate","docs":["Sets a delegate on the specified sub account.","","# Parameters","- `ctx`: The context for the instruction.","- `sub_account_id`: Sub account.","- `delegate`: Delegate\'s wallet address.","","# Permission required","- Permission::DriftUpdateUser","","# Integration required","- Integration::Drift"],"discriminator":[36,181,34,31,22,77,36,154],"accounts":[{"name":"glam_state"},{"name":"glam_vault","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":"dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH"},{"name":"user","writable":true}],"args":[{"name":"sub_account_id","type":"u16"},{"name":"delegate","type":"pubkey"}]},{"name":"drift_update_user_margin_trading_enabled","docs":["Enables/Disables margin trading.","","# Parameters","- `ctx`: The context for the instruction.","- `sub_account_id`: Sub account.","- `margin_trading_enabled`: Whether to enable or disable margin trading.","","# Permission required","- Permission::DriftUpdateUser","","# Integration required","- Integration::Drift"],"discriminator":[157,175,12,19,202,114,17,36],"accounts":[{"name":"glam_state"},{"name":"glam_vault","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":"dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH"},{"name":"user","writable":true}],"args":[{"name":"sub_account_id","type":"u16"},{"name":"margin_trading_enabled","type":"bool"}]},{"name":"drift_withdraw","docs":["Withdraws from drift.","","# Parameters","- `ctx`: The context for the instruction.","- `market_index`: Index of the drift spot market.","- `amount`: Amount to withdraw.","","# Permission required","- Permission::DriftWithdraw","","# Integration required","- Integration::Drift"],"discriminator":[86,59,186,123,183,181,234,137],"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":"dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH"},{"name":"state"},{"name":"user","writable":true},{"name":"user_stats","writable":true},{"name":"spot_market_vault","writable":true},{"name":"drift_signer"},{"name":"user_token_account","writable":true},{"name":"token_program"}],"args":[{"name":"market_index","type":"u16"},{"name":"amount","type":"u64"},{"name":"reduce_only","type":"bool"}]},{"name":"force_transfer_tokens","docs":["Forcefully transfers a specified amount of tokens from one account to another.","","# Parameters","- `ctx`: The context for the instruction.","- `mint_id`: The id of the mint to transfer tokens for.","- `amount`: The amount of tokens to transfer.","","# Permission required","- Permission::ForceTransferTokens","","# Integration required","- Integration::Mint"],"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_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"from"},{"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":"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":"token_2022_program","address":"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"}],"args":[{"name":"mint_id","type":"u8"},{"name":"amount","type":"u64"}]},{"name":"initialize_and_delegate_stake","docs":["Initializes a stake account and delegates it to a validator.","","# Parameters","- `ctx`: The context for the instruction.","- `lamports`: The amount of SOL to initialize the stake account with.","","# Permission required","- Permission::Stake","","# Integration required","- Integration::NativeStaking"],"discriminator":[71,101,230,157,50,23,47,1],"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":"vault_stake_account","writable":true},{"name":"vote"},{"name":"stake_config"},{"name":"clock","address":"SysvarC1ock11111111111111111111111111111111"},{"name":"rent","address":"SysvarRent111111111111111111111111111111111"},{"name":"stake_history","address":"SysvarStakeHistory1111111111111111111111111"},{"name":"stake_program","address":"Stake11111111111111111111111111111111111111"},{"name":"system_program","address":"11111111111111111111111111111111"}],"args":[{"name":"lamports","type":"u64"}]},{"name":"initialize_state","docs":["Initializes a state account from the provided StateModel instance.","","# Parameters","- `ctx`: The context for the instruction.","- `state`: An instance of `StateModel` containing the details of the state to be initialized.","","# Permission required","- Owner only, delegates not allowed"],"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_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":"openfunds_metadata","writable":true,"optional":true,"pda":{"seeds":[{"kind":"const","value":[109,101,116,97,100,97,116,97]},{"kind":"account","path":"glam_state"}]}},{"name":"system_program","address":"11111111111111111111111111111111"}],"args":[{"name":"state","type":{"defined":{"name":"StateModel"}}}]},{"name":"jupiter_gov_new_vote","docs":["Creates a new vote.","","# Parameters","- `ctx`: The context for the instruction.","","# Permission required","- Permission::VoteOnProposal","","# Integration required","- Integration::JupiterVote"],"discriminator":[235,179,170,64,64,57,17,69],"accounts":[{"name":"glam_state"},{"name":"glam_vault","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":"GovaE4iu227srtG2s3tZzB4RmWBzw8sTwrCLZz7kN7rY"},{"name":"proposal"},{"name":"vote","writable":true},{"name":"payer","writable":true,"signer":true},{"name":"system_program","address":"11111111111111111111111111111111"}],"args":[{"name":"voter","type":"pubkey"}]},{"name":"jupiter_set_max_swap_slippage","docs":["Sets the max swap slippage.","","# Parameters","- `ctx`: The context for the instruction.","- `slippage`: The maximum allowed slippage in basis points.","","# Permission required","- Owner only, delegates not allowed"],"discriminator":[110,79,13,71,208,111,56,66],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_signer","writable":true,"signer":true}],"args":[{"name":"slippage","type":"u64"}]},{"name":"jupiter_swap","docs":["Swaps assets using Jupiter.","","# Parameters","- `ctx`: The context for the instruction.","- `amount`: The amount of input asset to swap.","- `data`: The serialized Jupiter route data containing swap instructions and parameters.","","# Permission required","- Any of","- Permission::JupiterSwapAny: no restrictions.","- Permission::JupiterSwapAllowlisted: input and output are in the assets allowlist.","- Permission::JupiterSwapLst: input and output assets are both LST.","","# Integration required","- Integration::JupiterSwap"],"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":"amount","type":"u64"},{"name":"data","type":"bytes"}]},{"name":"jupiter_vote_cast_vote","docs":["Casts a vote.","","# Parameters","- `ctx`: The context for the instruction.","- `side`: The side to vote for.","","# Permission required","- Permission::VoteOnProposal","","# Integration required","- Integration::JupiterVote"],"discriminator":[11,197,234,57,164,74,181,239],"accounts":[{"name":"glam_state"},{"name":"glam_vault","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":"voTpe3tHQ7AjQHMapgSue2HJFAh2cGsdokqN3XqmVSj"},{"name":"locker"},{"name":"escrow"},{"name":"proposal","writable":true},{"name":"vote","writable":true},{"name":"governor"},{"name":"govern_program"}],"args":[{"name":"side","type":"u8"}]},{"name":"jupiter_vote_cast_vote_checked","docs":["Casts a vote, only if expected_side is already recorded.","","# Parameters","- `ctx`: The context for the instruction.","- `side`: The side to vote for.","- `expected_side`: The expected side to check in the Vote account.","","# Permission required","- Permission::VoteOnProposal","","# Integration required","- Integration::JupiterVote"],"discriminator":[247,3,146,233,35,189,192,187],"accounts":[{"name":"glam_state"},{"name":"glam_vault","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":"voTpe3tHQ7AjQHMapgSue2HJFAh2cGsdokqN3XqmVSj"},{"name":"locker"},{"name":"escrow"},{"name":"proposal","writable":true},{"name":"vote","writable":true},{"name":"governor"},{"name":"govern_program"}],"args":[{"name":"side","type":"u8"},{"name":"expected_side","type":"u8"}]},{"name":"jupiter_vote_increase_locked_amount","docs":["Increases the locked amount (aka stakes JUP).","","# Parameters","- `ctx`: The context for the instruction.","- `amount`: The amount of JUP to stake.","","# Permission required","- Permission::StakeJup","","# Integration required","- Integration::JupiterVote"],"discriminator":[225,38,201,123,148,23,47,128],"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":"voTpe3tHQ7AjQHMapgSue2HJFAh2cGsdokqN3XqmVSj"},{"name":"locker","writable":true},{"name":"escrow","writable":true},{"name":"escrow_tokens","writable":true},{"name":"source_tokens","writable":true},{"name":"token_program"}],"args":[{"name":"amount","type":"u64"}]},{"name":"jupiter_vote_merge_partial_unstaking","docs":["Merges partial unstaking.","","# Parameters","- `ctx`: The context for the instruction.","","# Permission required","- Permission::UnstakeJup","","# Integration required","- Integration::JupiterVote"],"discriminator":[93,226,122,120,130,35,189,208],"accounts":[{"name":"glam_state"},{"name":"glam_vault","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":"voTpe3tHQ7AjQHMapgSue2HJFAh2cGsdokqN3XqmVSj"},{"name":"locker","writable":true},{"name":"escrow","writable":true},{"name":"partial_unstake","writable":true}],"args":[]},{"name":"jupiter_vote_new_escrow","docs":["Initializes a locked voter escrow.","","# Parameters","- `ctx`: The context for the instruction.","","# Permission required","- Permission::StakeJup","","# Integration required","- Integration::JupiterVote"],"discriminator":[255,87,157,219,61,178,144,159],"accounts":[{"name":"glam_state"},{"name":"glam_vault","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":"voTpe3tHQ7AjQHMapgSue2HJFAh2cGsdokqN3XqmVSj"},{"name":"locker","writable":true},{"name":"escrow","writable":true},{"name":"payer","writable":true,"signer":true},{"name":"system_program","address":"11111111111111111111111111111111"}],"args":[]},{"name":"jupiter_vote_open_partial_unstaking","docs":["Partially unstakes JUP.","","# Parameters","- `ctx`: The context for the instruction.","- `amount`: The amount of JUP to partially unstake.","- `memo`: The memo for the partial unstaking.","","# Permission required","- Permission::UnstakeJup","","# Integration required","- Integration::JupiterVote"],"discriminator":[84,7,113,220,212,63,237,218],"accounts":[{"name":"glam_state"},{"name":"glam_vault","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":"voTpe3tHQ7AjQHMapgSue2HJFAh2cGsdokqN3XqmVSj"},{"name":"locker","writable":true},{"name":"escrow","writable":true},{"name":"partial_unstake","writable":true,"signer":true},{"name":"system_program","address":"11111111111111111111111111111111"}],"args":[{"name":"amount","type":"u64"},{"name":"memo","type":"string"}]},{"name":"jupiter_vote_toggle_max_lock","docs":["Toggles max lock.","","# Parameters","- `ctx`: The context for the instruction.","- `is_max_lock`: true to allow staking, false to initiate full unstaking.","","# Permission required","- Permission::StakeJup (if is_max_lock == true)","- Permission::UnstakeJup (if is_max_lock == false)","","# Integration required","- Integration::JupiterVote"],"discriminator":[204,158,192,21,219,25,154,87],"accounts":[{"name":"glam_state"},{"name":"glam_vault","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":"voTpe3tHQ7AjQHMapgSue2HJFAh2cGsdokqN3XqmVSj"},{"name":"locker"},{"name":"escrow","writable":true}],"args":[{"name":"is_max_lock","type":"bool"}]},{"name":"jupiter_vote_withdraw","docs":["Withdraws all unstaked JUP.","","# Parameters","- `ctx`: The context for the instruction.","","# Permission required","- Permission::UnstakeJup","","# Integration required","- Integration::JupiterVote"],"discriminator":[195,172,184,195,23,178,145,191],"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":"voTpe3tHQ7AjQHMapgSue2HJFAh2cGsdokqN3XqmVSj"},{"name":"locker","writable":true},{"name":"escrow","writable":true},{"name":"escrow_tokens","writable":true},{"name":"destination_tokens","writable":true},{"name":"token_program"}],"args":[]},{"name":"jupiter_vote_withdraw_partial_unstaking","docs":["Withdraws JUP from partial unstaking.","","# Parameters","- `ctx`: The context for the instruction.","","# Permission required","- Permission::UnstakeJup","","# Integration required","- Integration::JupiterVote"],"discriminator":[109,98,65,252,184,0,216,240],"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":"voTpe3tHQ7AjQHMapgSue2HJFAh2cGsdokqN3XqmVSj"},{"name":"locker","writable":true},{"name":"escrow","writable":true},{"name":"partial_unstake","writable":true},{"name":"escrow_tokens","writable":true},{"name":"destination_tokens","writable":true},{"name":"token_program"}],"args":[]},{"name":"kamino_lending_deposit_reserve_liquidity_and_obligation_collateral","discriminator":[31,162,4,146,60,225,15,0],"accounts":[{"name":"glam_state"},{"name":"glam_vault","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":"owner","writable":true},{"name":"obligation","writable":true},{"name":"lending_market"},{"name":"lending_market_authority"},{"name":"reserve","writable":true},{"name":"reserve_liquidity_mint","writable":true},{"name":"reserve_liquidity_supply","writable":true},{"name":"reserve_collateral_mint","writable":true},{"name":"reserve_destination_deposit_collateral","writable":true},{"name":"user_source_liquidity","writable":true},{"name":"placeholder_user_destination_collateral"},{"name":"collateral_token_program"},{"name":"liquidity_token_program"},{"name":"instruction_sysvar_account"}],"args":[{"name":"liquidity_amount","type":"u64"}]},{"name":"kamino_lending_init_obligation","discriminator":[219,210,134,64,155,49,137,174],"accounts":[{"name":"glam_state"},{"name":"glam_vault","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":"obligation_owner"},{"name":"fee_payer","writable":true,"signer":true},{"name":"obligation","writable":true},{"name":"lending_market"},{"name":"seed1_account"},{"name":"seed2_account"},{"name":"owner_user_metadata"},{"name":"rent","address":"SysvarRent111111111111111111111111111111111"},{"name":"system_program","address":"11111111111111111111111111111111"}],"args":[{"name":"args","type":{"defined":{"name":"InitObligationArgs"}}}]},{"name":"kamino_lending_init_obligation_farms_for_reserve","discriminator":[227,61,130,2,117,226,78,1],"accounts":[{"name":"glam_state"},{"name":"glam_vault","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":"payer","writable":true,"signer":true},{"name":"owner"},{"name":"obligation","writable":true},{"name":"lending_market_authority","writable":true},{"name":"reserve","writable":true},{"name":"reserve_farm_state","writable":true},{"name":"obligation_farm","writable":true},{"name":"lending_market"},{"name":"farms_program"},{"name":"rent","address":"SysvarRent111111111111111111111111111111111"},{"name":"system_program","address":"11111111111111111111111111111111"}],"args":[{"name":"mode","type":"u8"}]},{"name":"kamino_lending_init_user_metadata","discriminator":[200,95,140,132,190,65,17,161],"accounts":[{"name":"glam_state"},{"name":"glam_vault","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":"owner"},{"name":"fee_payer","writable":true,"signer":true},{"name":"user_metadata","writable":true},{"name":"referrer_user_metadata"},{"name":"rent","address":"SysvarRent111111111111111111111111111111111"},{"name":"system_program","address":"11111111111111111111111111111111"}],"args":[{"name":"user_lookup_table","type":"pubkey"}]},{"name":"marinade_claim","docs":["Claims tickets that were unstaked in the previous epoch to get SOL.","","# Parameters","- `ctx`: The context containing the required accounts.","","# Permission required","- Permission::Unstake","","# Integration required","- Integration::Marinade"],"discriminator":[54,44,48,204,218,141,36,5],"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":"MarBmsSgKXdrN1egZf5sqe1TMai9K1rChYNDJgjq7aD"},{"name":"state","writable":true},{"name":"reserve_pda","writable":true},{"name":"ticket_account","writable":true},{"name":"clock"},{"name":"system_program","address":"11111111111111111111111111111111"}],"args":[]},{"name":"marinade_deposit","docs":["Deposits SOL to get mSOL.","","# Parameters","- `ctx`: The context containing the required accounts.","- `lamports`: The amount of SOL (in lamports) to deposit.","","# Permission required","- Permission::Stake","","# Integration required","- Integration::Marinade"],"discriminator":[62,236,248,28,222,232,182,73],"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":"MarBmsSgKXdrN1egZf5sqe1TMai9K1rChYNDJgjq7aD"},{"name":"state","writable":true},{"name":"msol_mint","writable":true},{"name":"liq_pool_sol_leg_pda","writable":true},{"name":"liq_pool_msol_leg","writable":true},{"name":"liq_pool_msol_leg_authority"},{"name":"reserve_pda","writable":true},{"name":"mint_to","writable":true},{"name":"msol_mint_authority"},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"token_program"}],"args":[{"name":"lamports","type":"u64"}]},{"name":"marinade_deposit_stake_account","docs":["Deposits a stake account to get mSOL.","","# Parameters","- `ctx`: The context containing the required accounts.","- `validator_idx`: Validator index in Marinade\'s validator list.","","# Permission required","- Permission::Stake","","# Integration required","- Integration::Marinade"],"discriminator":[141,230,58,103,56,205,159,138],"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":"MarBmsSgKXdrN1egZf5sqe1TMai9K1rChYNDJgjq7aD"},{"name":"state","writable":true},{"name":"validator_list","writable":true},{"name":"stake_list","writable":true},{"name":"stake_account","writable":true},{"name":"duplication_flag","writable":true},{"name":"msol_mint","writable":true},{"name":"mint_to","writable":true},{"name":"msol_mint_authority"},{"name":"clock"},{"name":"rent","address":"SysvarRent111111111111111111111111111111111"},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"token_program"},{"name":"stake_program"}],"args":[{"name":"validator_idx","type":"u32"}]},{"name":"marinade_liquid_unstake","docs":["Unstakes mSOL to get SOL immediately with a small fee.","","# Parameters","- `ctx`: The context containing the required accounts.","- `msol_amount`: Amount of mSOL to unstake.","","# Permission required","- Permission::Unstake","","# Integration required","- Integration::Marinade"],"discriminator":[29,146,34,21,26,68,141,161],"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":"MarBmsSgKXdrN1egZf5sqe1TMai9K1rChYNDJgjq7aD"},{"name":"state","writable":true},{"name":"msol_mint","writable":true},{"name":"liq_pool_sol_leg_pda","writable":true},{"name":"liq_pool_msol_leg","writable":true},{"name":"treasury_msol_account","writable":true},{"name":"get_msol_from","writable":true},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"token_program"}],"args":[{"name":"msol_amount","type":"u64"}]},{"name":"marinade_order_unstake","docs":["Unstakes mSOL to get a ticket that can be claimed at the next epoch.","","# Parameters","- `ctx`: The context containing the required accounts.","- `msol_amount`: Amount of mSOL to unstake.","","# Permission required","- Permission::Unstake","","# Integration required","- Integration::Marinade"],"discriminator":[202,3,33,27,183,156,57,231],"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":"MarBmsSgKXdrN1egZf5sqe1TMai9K1rChYNDJgjq7aD"},{"name":"state","writable":true},{"name":"msol_mint","writable":true},{"name":"burn_msol_from","writable":true},{"name":"new_ticket_account","writable":true},{"name":"clock"},{"name":"rent","address":"SysvarRent111111111111111111111111111111111"},{"name":"token_program"}],"args":[{"name":"msol_amount","type":"u64"}]},{"name":"merge_stake_accounts","docs":["Merges two stake accounts.","","# Parameters","- `ctx`: The context for the instruction.","","# Permission required","- Permission::Stake","","# Integration required","- Integration::NativeStaking"],"discriminator":[173,206,10,246,109,50,244,110],"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":"to_stake","writable":true},{"name":"from_stake","writable":true},{"name":"clock","address":"SysvarC1ock11111111111111111111111111111111"},{"name":"stake_history","address":"SysvarStakeHistory1111111111111111111111111"},{"name":"stake_program","address":"Stake11111111111111111111111111111111111111"},{"name":"system_program","address":"11111111111111111111111111111111"}],"args":[]},{"name":"meteora_dlmm_add_liquidity_by_strategy","discriminator":[81,139,59,146,176,196,240,216],"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":"LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo"},{"name":"position","writable":true},{"name":"lb_pair","writable":true},{"name":"bin_array_bitmap_extension","writable":true},{"name":"user_token_x","writable":true},{"name":"user_token_y","writable":true},{"name":"reserve_x","writable":true},{"name":"reserve_y","writable":true},{"name":"token_x_mint"},{"name":"token_y_mint"},{"name":"bin_array_lower","writable":true},{"name":"bin_array_upper","writable":true},{"name":"token_x_program"},{"name":"token_y_program"},{"name":"event_authority"},{"name":"program"}],"args":[{"name":"params","type":{"defined":{"name":"LiquidityParameterByStrategy"}}}]},{"name":"meteora_dlmm_claim_fee","discriminator":[78,116,98,78,50,82,72,37],"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":"LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo"},{"name":"lb_pair","writable":true},{"name":"position","writable":true},{"name":"bin_array_lower","writable":true},{"name":"bin_array_upper","writable":true},{"name":"reserve_x","writable":true},{"name":"reserve_y","writable":true},{"name":"user_token_x","writable":true},{"name":"user_token_y","writable":true},{"name":"token_x_mint"},{"name":"token_y_mint"},{"name":"token_program"},{"name":"event_authority"},{"name":"program"}],"args":[]},{"name":"meteora_dlmm_close_position","discriminator":[186,117,42,24,221,194,34,143],"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":"LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo"},{"name":"position","writable":true},{"name":"lb_pair","writable":true},{"name":"bin_array_lower","writable":true},{"name":"bin_array_upper","writable":true},{"name":"event_authority"},{"name":"program"}],"args":[]},{"name":"meteora_dlmm_initialize_position","discriminator":[223,94,215,96,175,181,195,204],"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":"LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo"},{"name":"payer","writable":true,"signer":true},{"name":"position","writable":true,"signer":true},{"name":"lb_pair"},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"rent","address":"SysvarRent111111111111111111111111111111111"},{"name":"event_authority"},{"name":"program"}],"args":[{"name":"lower_bin_id","type":"i32"},{"name":"width","type":"i32"}]},{"name":"meteora_dlmm_remove_liquidity_by_range","discriminator":[223,12,177,181,96,109,60,124],"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":"LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo"},{"name":"position","writable":true},{"name":"lb_pair","writable":true},{"name":"bin_array_bitmap_extension","writable":true},{"name":"user_token_x","writable":true},{"name":"user_token_y","writable":true},{"name":"reserve_x","writable":true},{"name":"reserve_y","writable":true},{"name":"token_x_mint"},{"name":"token_y_mint"},{"name":"bin_array_lower","writable":true},{"name":"bin_array_upper","writable":true},{"name":"token_x_program"},{"name":"token_y_program"},{"name":"event_authority"},{"name":"program"}],"args":[{"name":"from_bin_id","type":"i32"},{"name":"to_bin_id","type":"i32"},{"name":"bps_to_remove","type":"u16"}]},{"name":"meteora_dlmm_swap","discriminator":[127,64,37,138,173,243,207,84],"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":"LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo"},{"name":"lb_pair","writable":true},{"name":"bin_array_bitmap_extension"},{"name":"reserve_x","writable":true},{"name":"reserve_y","writable":true},{"name":"user_token_in","writable":true},{"name":"user_token_out","writable":true},{"name":"token_x_mint"},{"name":"token_y_mint"},{"name":"oracle","writable":true},{"name":"host_fee_in","writable":true},{"name":"token_x_program"},{"name":"token_y_program"},{"name":"event_authority"},{"name":"program"}],"args":[{"name":"amount_in","type":"u64"},{"name":"min_amount_out","type":"u64"}]},{"name":"mint_tokens","docs":["Mints a specified amount of tokens for the given mint.","","# Parameters","- `ctx`: The context for the instruction.","- `mint_id`: The id of the mint to mint tokens for.","- `amount`: The amount of tokens to mint.","","# Permission required","- Permission::MintTokens","","# Integration required","- Integration::Mint"],"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"},{"name":"token_2022_program","address":"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"}],"args":[{"name":"mint_id","type":"u8"},{"name":"amount","type":"u64"}]},{"name":"redeem","docs":["Redeems a specified amount of shares.","","# Parameters","- `ctx`: The context for the instruction.","- `amount`: The amount of shares to redeem.","- `in_kind`: Whether to redeem in kind.","- `skip_state`: Should always be true (state check to be implemented)."],"discriminator":[184,12,86,149,70,196,97,225],"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":"signer","writable":true,"signer":true},{"name":"signer_share_ata","writable":true},{"name":"signer_policy","writable":true,"optional":true,"pda":{"seeds":[{"kind":"const","value":[97,99,99,111,117,110,116,45,112,111,108,105,99,121]},{"kind":"account","path":"signer_share_ata"}]}},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"token_program","address":"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{"name":"token_2022_program","address":"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"}],"args":[{"name":"amount","type":"u64"},{"name":"in_kind","type":"bool"},{"name":"skip_state","type":"bool"}]},{"name":"redelegate_stake","docs":["Redelegates an existing stake account to a new validator (a new stake account will be created).","","# Parameters","- `ctx`: The context for the instruction.","","# Permission required","- Permission::Unstake","","# Integration required","- Integration::NativeStaking"],"discriminator":[240,90,140,104,96,8,134,31],"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":"existing_stake","writable":true},{"name":"new_stake","writable":true},{"name":"vote"},{"name":"stake_config"},{"name":"clock","address":"SysvarC1ock11111111111111111111111111111111"},{"name":"stake_program","address":"Stake11111111111111111111111111111111111111"},{"name":"system_program","address":"11111111111111111111111111111111"}],"args":[]},{"name":"set_subscribe_redeem_enabled","docs":["Enables or disables the subscribe and redeem functionality.","","This allows the owner to pause/unpause subscription and redemption of a fund.","","# Parameters","- `ctx`: The context for the instruction.","- `enabled`: A boolean indicating whether to enable or disable the subscribe and redeem functionality.","","# Permission required","- Owner only, delegates not allowed"],"discriminator":[189,56,205,172,201,185,34,92],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_signer","writable":true,"signer":true}],"args":[{"name":"enabled","type":"bool"}]},{"name":"set_token_accounts_states","docs":["Sets the frozen state of the token accounts for the specified mint.","","# Parameters","- `ctx`: The context for the instruction.","- `mint_id`: The id of the mint to set the frozen state for.","- `frozen`: The new frozen state.","","# Permission required","- Permission::SetTokenAccountState","","# Integration required","- Integration::Mint"],"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":"mint_id","type":"u8"},{"name":"frozen","type":"bool"}]},{"name":"split_stake_account","docs":["Splits from an existing stake account to get a new stake account.","","# Parameters","- `ctx`: The context for the instruction.","- `lamports`: The amount of SOL to split.","","# Permission required","- Permission::Unstake","","# Integration required","- Integration::NativeStaking"],"discriminator":[130,42,33,89,117,77,105,194],"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":"existing_stake","writable":true},{"name":"new_stake","writable":true},{"name":"clock","address":"SysvarC1ock11111111111111111111111111111111"},{"name":"stake_program","address":"Stake11111111111111111111111111111111111111"},{"name":"system_program","address":"11111111111111111111111111111111"}],"args":[{"name":"lamports","type":"u64"}]},{"name":"stake_pool_deposit_sol","docs":["Deposits SOL to a stake pool to get pool token.","","# Parameters","- `ctx`: The context for the instruction.","- `lamports`: The amount of SOL to deposit.","","# Permission required","- Permission::Stake","","# Integration required","- Integration::SplStakePool or Integration::SanctumStakePool, depending on the stake pool program used."],"discriminator":[147,187,91,151,158,187,247,79],"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":"stake_pool","writable":true},{"name":"withdraw_authority"},{"name":"reserve_stake","writable":true},{"name":"pool_mint","writable":true},{"name":"fee_account","writable":true},{"name":"mint_to","writable":true,"pda":{"seeds":[{"kind":"account","path":"glam_vault"},{"kind":"const","value":[6,221,246,225,215,101,161,147,217,203,225,70,206,235,121,172,28,180,133,237,95,91,55,145,58,140,245,133,126,255,0,169]},{"kind":"account","path":"pool_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":"stake_pool_program"},{"name":"associated_token_program","address":"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"token_program"}],"args":[{"name":"lamports","type":"u64"}]},{"name":"stake_pool_deposit_stake","docs":["Deposits a stake account to a stake pool to get pool token.","","# Parameters","- `ctx`: The context for the instruction.","","# Permission required","- Permission::Stake","","# Integration required","- Integration::SplStakePool or Integration::SanctumStakePool, depending on the stake pool program used."],"discriminator":[212,158,195,174,179,105,9,97],"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":"vault_stake_account","writable":true},{"name":"mint_to","writable":true,"pda":{"seeds":[{"kind":"account","path":"glam_vault"},{"kind":"const","value":[6,221,246,225,215,101,161,147,217,203,225,70,206,235,121,172,28,180,133,237,95,91,55,145,58,140,245,133,126,255,0,169]},{"kind":"account","path":"pool_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":"pool_mint","writable":true},{"name":"fee_account","writable":true},{"name":"stake_pool","writable":true},{"name":"deposit_authority"},{"name":"withdraw_authority"},{"name":"validator_list","writable":true},{"name":"validator_stake_account","writable":true},{"name":"reserve_stake_account","writable":true},{"name":"clock","address":"SysvarC1ock11111111111111111111111111111111"},{"name":"stake_history","address":"SysvarStakeHistory1111111111111111111111111"},{"name":"stake_pool_program"},{"name":"associated_token_program","address":"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"token_program"},{"name":"stake_program","address":"Stake11111111111111111111111111111111111111"}],"args":[]},{"name":"stake_pool_withdraw_sol","docs":["Unstakes from pool token to get SOL immediately.","","# Parameters","- `ctx`: The context for the instruction.","- `pool_token_amount`: Amount of pool token to unstake.","","# Permission required","- Permission::LiquidUnstake","","# Integration required","- Integration::SplStakePool or Integration::SanctumStakePool, depending on the stake pool program used."],"discriminator":[179,100,204,0,192,46,233,181],"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":"stake_pool","writable":true},{"name":"withdraw_authority"},{"name":"reserve_stake","writable":true},{"name":"pool_mint","writable":true},{"name":"fee_account","writable":true},{"name":"pool_token_ata","writable":true},{"name":"clock","address":"SysvarC1ock11111111111111111111111111111111"},{"name":"stake_history","address":"SysvarStakeHistory1111111111111111111111111"},{"name":"stake_pool_program"},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"token_program"},{"name":"stake_program","address":"Stake11111111111111111111111111111111111111"}],"args":[{"name":"pool_token_amount","type":"u64"}]},{"name":"stake_pool_withdraw_stake","docs":["Unstakes from pool token into a stake account.","","# Parameters","- `ctx`: The context for the instruction.","- `pool_token_amount`: Amount of pool token to unstake.","","# Permission required","- Permission::Unstake","","# Integration required","- Integration::SplStakePool or Integration::SanctumStakePool, depending on the stake pool program used."],"discriminator":[7,70,250,22,49,1,143,1],"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":"vault_stake_account","writable":true},{"name":"pool_mint","writable":true},{"name":"fee_account","writable":true},{"name":"stake_pool","writable":true},{"name":"withdraw_authority"},{"name":"validator_list","writable":true},{"name":"validator_stake_account","writable":true},{"name":"pool_token_ata","writable":true},{"name":"clock","address":"SysvarC1ock11111111111111111111111111111111"},{"name":"stake_pool_program"},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"token_program"},{"name":"stake_program","address":"Stake11111111111111111111111111111111111111"}],"args":[{"name":"pool_token_amount","type":"u64"}]},{"name":"subscribe","docs":["Subscribes to a specified amount of shares.","","# Parameters","- `ctx`: The context for the instruction.","- `amount`: The amount of shares to subscribe.","- `skip_state`: Should always be true (state check to be implemented)."],"discriminator":[254,28,191,138,156,179,183,53],"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":"signer_share_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":"asset"},{"name":"vault_ata","writable":true},{"name":"signer_asset_ata","writable":true},{"name":"signer_policy","writable":true,"optional":true,"pda":{"seeds":[{"kind":"const","value":[97,99,99,111,117,110,116,45,112,111,108,105,99,121]},{"kind":"account","path":"signer_share_ata"}]}},{"name":"signer","writable":true,"signer":true},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"associated_token_program","address":"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"},{"name":"token_program","address":"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{"name":"token_2022_program","address":"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"}],"args":[{"name":"mint_id","type":"u8"},{"name":"amount","type":"u64"},{"name":"skip_state","type":"bool"}]},{"name":"transfer_hook","discriminator":[105,37,101,197,75,251,102,26],"accounts":[{"name":"src_account"},{"name":"mint"},{"name":"dst_account"},{"name":"owner"},{"name":"extra_account_meta_list","pda":{"seeds":[{"kind":"const","value":[101,120,116,114,97,45,97,99,99,111,117,110,116,45,109,101,116,97,115]},{"kind":"account","path":"mint"}]}},{"name":"state"},{"name":"src_account_policy","pda":{"seeds":[{"kind":"const","value":[97,99,99,111,117,110,116,45,112,111,108,105,99,121]},{"kind":"account","path":"src_account"}]}},{"name":"dst_account_policy","pda":{"seeds":[{"kind":"const","value":[97,99,99,111,117,110,116,45,112,111,108,105,99,121]},{"kind":"account","path":"dst_account"}]}}],"args":[{"name":"amount","type":"u64"}]},{"name":"transfer_sol_to_wsol","docs":["Transfer vault SOL to wSOL token account.","","# Parameters","- `ctx`: The context for the instruction.","- `lamports`: The amount of SOL to transfer.","","# Permission required","- Permission::WSolWrap"],"discriminator":[42,189,85,229,150,198,3,195],"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":"to","writable":true,"pda":{"seeds":[{"kind":"account","path":"glam_vault"},{"kind":"const","value":[6,221,246,225,215,101,161,147,217,203,225,70,206,235,121,172,28,180,133,237,95,91,55,145,58,140,245,133,126,255,0,169]},{"kind":"const","value":[6,155,136,87,254,171,129,132,251,104,127,99,70,24,192,53,218,196,57,220,26,235,59,85,152,160,240,0,0,0,0,1]}],"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_program","address":"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{"name":"associated_token_program","address":"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"}],"args":[{"name":"lamports","type":"u64"}]},{"name":"update_mint","docs":["Updates an existing mint with new metadata.","","# Parameters","- `ctx`: The context for the instruction.","- `mint_id`: The id of the mint to be updated.","- `mint_model`: An instance of `MintModel` containing the updated metadata for the new mint.","","# Permission required","- Owner only, delegates not allowed"],"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":"token_2022_program","address":"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"}],"args":[{"name":"mint_id","type":"u8"},{"name":"mint_model","type":{"defined":{"name":"MintModel"}}}]},{"name":"update_state","docs":["Updates an existing state account with new parameters.","","# Parameters","- `ctx`: The context for the instruction.","- `state`: An instance of `StateModel` containing the updated details of the state.","","# Permission required","- Owner only, delegates not allowed"],"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":"withdraw","docs":["Withdraw asset from vault into owner\'s wallet.","","# Parameters","- `ctx`: The context for the instruction.","- `amount`: The amount to withdraw.","","# Permission required","- Owner only, delegates not allowed"],"discriminator":[183,18,70,156,148,109,161,34],"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":"asset"},{"name":"vault_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"glam_vault"},{"kind":"account","path":"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":"signer_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"glam_signer"},{"kind":"account","path":"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":"token_program"}],"args":[{"name":"amount","type":"u64"}]},{"name":"withdraw_from_stake_accounts","docs":["Withdraws SOL from stake accounts.","","# Parameters","- `ctx`: The context for the instruction.","","# Permission required","- Permission::Unstake","","# Integration required","- Integration::NativeStaking"],"discriminator":[93,209,100,231,169,160,192,197],"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":"clock","address":"SysvarC1ock11111111111111111111111111111111"},{"name":"stake_history","address":"SysvarStakeHistory1111111111111111111111111"},{"name":"stake_program","address":"Stake11111111111111111111111111111111111111"}],"args":[]},{"name":"wsol_unwrap","docs":["Unwraps all wSOL to get SOL.","","# Parameters","- `ctx`: The context for the instruction.","","# Permission required","- Permission::WSolUnwrap"],"discriminator":[123,189,16,96,233,186,54,215],"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":"vault_wsol_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"glam_vault"},{"kind":"const","value":[6,221,246,225,215,101,161,147,217,203,225,70,206,235,121,172,28,180,133,237,95,91,55,145,58,140,245,133,126,255,0,169]},{"kind":"const","value":[6,155,136,87,254,171,129,132,251,104,127,99,70,24,192,53,218,196,57,220,26,235,59,85,152,160,240,0,0,0,0,1]}],"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":"token_program","address":"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"}],"args":[]},{"name":"wsol_wrap","docs":["Wraps SOL to get wSOL.","","# Parameters","- `ctx`: The context for the instruction.","- `lamports`: The amount of SOL to wrap.","","# Permission required","- Permission::WSolWrap"],"discriminator":[26,2,139,159,239,195,193,9],"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":"vault_wsol_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"glam_vault"},{"kind":"const","value":[6,221,246,225,215,101,161,147,217,203,225,70,206,235,121,172,28,180,133,237,95,91,55,145,58,140,245,133,126,255,0,169]},{"kind":"account","path":"wsol_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":"wsol_mint"},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"token_program","address":"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{"name":"associated_token_program","address":"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"}],"args":[{"name":"lamports","type":"u64"}]}],"accounts":[{"name":"OpenfundsMetadataAccount","discriminator":[5,89,20,76,255,158,209,219]},{"name":"PolicyAccount","discriminator":[218,201,183,164,156,127,81,175]},{"name":"StateAccount","discriminator":[142,247,54,95,85,133,249,103]}],"errors":[{"code":48000,"name":"NotAuthorized","msg":"Signer is not authorized"},{"code":48001,"name":"IntegrationDisabled","msg":"Integration is disabled"},{"code":48002,"name":"StateAccountDisabled","msg":"State account is disabled"},{"code":48003,"name":"InvalidSignerAccount","msg":"Invalid signer ata"},{"code":49000,"name":"InvalidAccountType","msg":"Invalid account type"},{"code":49001,"name":"InvalidName","msg":"Name too long: max 64 chars"},{"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":"CloseNotEmptyError","msg":"Error closing state account: not empty"},{"code":49006,"name":"NoShareClass","msg":"No share class found"},{"code":49007,"name":"ShareClassesNotClosed","msg":"Glam state account can\'t be closed. Close share classes first"},{"code":49008,"name":"InvalidShareClass","msg":"Share class not allowed to subscribe"},{"code":49009,"name":"InvalidAssetSubscribe","msg":"Asset not allowed to subscribe"},{"code":49010,"name":"InvalidPricingOracle","msg":"Invalid oracle for asset price"},{"code":49011,"name":"InvalidRemainingAccounts","msg":"Invalid accounts: the transaction is malformed"},{"code":49012,"name":"InvalidVaultTokenAccount","msg":"Invalid vault ata"},{"code":49013,"name":"ShareClassNotEmpty","msg":"Share class mint supply not zero"},{"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":"InvalidSwap","msg":"Swap failed"},{"code":50003,"name":"InvalidTokenAccount","msg":"Invalid token account"},{"code":50004,"name":"InvalidVoteSide","msg":"Invalid vote side"},{"code":51000,"name":"InvalidAssetPrice","msg":"Invalid asset price"},{"code":51001,"name":"InvalidStableCoinPriceForSubscribe","msg":"Subscription not allowed: invalid stable coin price"},{"code":51002,"name":"SubscribeRedeemDisable","msg":"Subscription and redemption disabled"},{"code":51003,"name":"InvalidPolicyAccount","msg":"Policy account is mandatory"},{"code":51004,"name":"PriceTooOld","msg":"Price is too old"},{"code":52000,"name":"TransfersDisabled","msg":"Policy violation: transfers disabled"},{"code":52001,"name":"AmountTooBig","msg":"Policy violation: amount too big"},{"code":52002,"name":"LockUp","msg":"Policy violation: lock-up period"}],"types":[{"name":"AccountType","type":{"kind":"enum","variants":[{"name":"Vault"},{"name":"Mint"},{"name":"Fund"}]}},{"name":"CompanyField","type":{"kind":"struct","fields":[{"name":"name","type":{"defined":{"name":"CompanyFieldName"}}},{"name":"value","type":"string"}]}},{"name":"CompanyFieldName","type":{"kind":"enum","variants":[{"name":"FundGroupName"},{"name":"ManCo"},{"name":"DomicileOfManCo"},{"name":"BICOfCustodian"},{"name":"CollateralManagerName"},{"name":"CustodianBankName"},{"name":"DomicileOfCustodianBank"},{"name":"FundAdministratorName"},{"name":"FundAdvisorName"},{"name":"FundPromoterName"},{"name":"IsSelfManagedInvestmentCompany"},{"name":"LEIOfCustodianBank"},{"name":"LEIOfManCo"},{"name":"PortfolioManagingCompanyName"},{"name":"SecuritiesLendingCounterpartyName"},{"name":"SwapCounterpartyName"},{"name":"AddressofManCo"},{"name":"AuditorName"},{"name":"CityofManCo"},{"name":"EmailAddressOfManCo"},{"name":"FundWebsiteOfManCo"},{"name":"IsUNPRISignatory"},{"name":"PhoneCountryCodeofManCo"},{"name":"PhoneNumberofManCo"},{"name":"SubInvestmentAdvisorName"},{"name":"ZIPCodeofManCo"},{"name":"DomicileOfUmbrella"},{"name":"HasUmbrella"},{"name":"LEIOfUmbrella"},{"name":"Umbrella"},{"name":"GlobalIntermediaryIdentificationNumberOfUmbrella"}]}},{"name":"CompanyModel","type":{"kind":"struct","fields":[{"name":"fund_group_name","type":{"option":"string"}},{"name":"man_co","type":{"option":"string"}},{"name":"domicile_of_man_co","type":{"option":"string"}},{"name":"email_address_of_man_co","type":{"option":"string"}},{"name":"fund_website_of_man_co","type":{"option":"string"}}]}},{"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":"permissions","type":{"vec":{"defined":{"name":"Permission"}}}},{"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":"Allowlist"},{"name":"Blocklist"},{"name":"ExternalVaultAccounts"},{"name":"LockUp"},{"name":"DriftMarketIndexesPerp"},{"name":"DriftMarketIndexesSpot"},{"name":"DriftOrderTypes"},{"name":"MaxSwapSlippageBps"}]}},{"name":"EngineFieldValue","type":{"kind":"enum","variants":[{"name":"Boolean","fields":[{"name":"val","type":"bool"}]},{"name":"Date","fields":[{"name":"val","type":"string"}]},{"name":"Double","fields":[{"name":"val","type":"i64"}]},{"name":"Integer","fields":[{"name":"val","type":"i32"}]},{"name":"String","fields":[{"name":"val","type":"string"}]},{"name":"Time","fields":[{"name":"val","type":"string"}]},{"name":"U8","fields":[{"name":"val","type":"u8"}]},{"name":"U64","fields":[{"name":"val","type":"u64"}]},{"name":"Pubkey","fields":[{"name":"val","type":"pubkey"}]},{"name":"Percentage","fields":[{"name":"val","type":"u32"}]},{"name":"URI","fields":[{"name":"val","type":"string"}]},{"name":"Timestamp","fields":[{"name":"val","type":"i64"}]},{"name":"VecPubkey","fields":[{"name":"val","type":{"vec":"pubkey"}}]},{"name":"VecU32","fields":[{"name":"val","type":{"vec":"u32"}}]}]}},{"name":"FundField","type":{"kind":"struct","fields":[{"name":"name","type":{"defined":{"name":"FundFieldName"}}},{"name":"value","type":"string"}]}},{"name":"FundFieldName","type":{"kind":"enum","variants":[{"name":"FundDomicileAlpha2"},{"name":"FundDomicileAlpha3"},{"name":"LegalFundNameIncludingUmbrella"},{"name":"FiscalYearEnd"},{"name":"FundCurrency"},{"name":"FundLaunchDate"},{"name":"InvestmentObjective"},{"name":"IsETC"},{"name":"IsEUDirectiveRelevant"},{"name":"IsFundOfFunds"},{"name":"IsPassiveFund"},{"name":"IsREIT"},{"name":"LegalForm"},{"name":"LegalFundNameOnly"},{"name":"OpenEndedOrClosedEndedFundStructure"},{"name":"TypeOfEUDirective"},{"name":"UCITSVersion"},{"name":"CurrencyHedgePortfolio"},{"name":"DepositoryName"},{"name":"FundValuationPoint"},{"name":"FundValuationPointTimeZone"},{"name":"FundValuationPointTimeZoneUsingTZDatabase"},{"name":"HasCollateralManager"},{"name":"HasEmbeddedDerivatives"},{"name":"HasSecuritiesLending"},{"name":"HasSwap"},{"name":"IsLeveraged"},{"name":"IsShariaCompliant"},{"name":"IsShort"},{"name":"LEIofDepositoryBank"},{"name":"LEIOfFund"},{"name":"LocationOfBearerShare"},{"name":"LocationOfShareRegister"},{"name":"MaximumLeverageInFund"},{"name":"MiFIDSecuritiesClassification"},{"name":"MoneyMarketTypeOfFund"},{"name":"TrusteeName"},{"name":"AuMFund"},{"name":"AuMFundDate"},{"name":"NoSFund"},{"name":"NoSFundDate"}]}},{"name":"FundManagerField","type":{"kind":"struct","fields":[{"name":"name","type":{"defined":{"name":"FundManagerFieldName"}}},{"name":"value","type":"string"}]}},{"name":"FundManagerFieldName","type":{"kind":"enum","variants":[{"name":"PortfolioManagerForename"},{"name":"PortfolioManagerName"},{"name":"PortfolioManagerYearOfBirth"},{"name":"PortfolioManagerYearOfExperienceStart"},{"name":"PortfolioManagerBriefBiography"},{"name":"PortfolioManagerType"},{"name":"PortfolioManagerRoleStartingDate"},{"name":"PortfolioManagerRoleEndDate"}]}},{"name":"FundOpenfundsModel","type":{"kind":"struct","fields":[{"name":"fund_domicile_alpha_2","type":{"option":"string"}},{"name":"legal_fund_name_including_umbrella","type":{"option":"string"}},{"name":"fiscal_year_end","type":{"option":"string"}},{"name":"fund_currency","type":{"option":"string"}},{"name":"fund_launch_date","type":{"option":"string"}},{"name":"investment_objective","type":{"option":"string"}},{"name":"is_etc","type":{"option":"bool"}},{"name":"is_eu_directive_relevant","type":{"option":"bool"}},{"name":"is_fund_of_funds","type":{"option":"bool"}},{"name":"is_passive_fund","type":{"option":"bool"}},{"name":"is_reit","type":{"option":"bool"}},{"name":"legal_form","type":{"option":"string"}},{"name":"legal_fund_name_only","type":{"option":"string"}},{"name":"open_ended_or_closed_ended_fund_structure","type":{"option":"string"}},{"name":"type_of_eu_directive","type":{"option":"string"}},{"name":"ucits_version","type":{"option":"string"}}]}},{"name":"InitObligationArgs","type":{"kind":"struct","fields":[{"name":"tag","type":"u8"},{"name":"id","type":"u8"}]}},{"name":"Integration","type":{"kind":"enum","variants":[{"name":"Drift"},{"name":"SplStakePool"},{"name":"SanctumStakePool"},{"name":"NativeStaking"},{"name":"Marinade"},{"name":"JupiterSwap"},{"name":"JupiterVote"},{"name":"KaminoLending"},{"name":"MeteoraDlmm"}]}},{"name":"LiquidityParameterByStrategy","type":{"kind":"struct","fields":[{"name":"amount_x","type":"u64"},{"name":"amount_y","type":"u64"},{"name":"active_id","type":"i32"},{"name":"max_active_bin_slippage","type":"i32"},{"name":"strategy_parameters","type":{"defined":{"name":"StrategyParameters"}}}]}},{"name":"ManagerKind","type":{"kind":"enum","variants":[{"name":"Wallet"},{"name":"Squads"}]}},{"name":"ManagerModel","type":{"kind":"struct","fields":[{"name":"portfolio_manager_name","type":{"option":"string"}},{"name":"pubkey","type":{"option":"pubkey"}},{"name":"kind","type":{"option":{"defined":{"name":"ManagerKind"}}}}]}},{"name":"MarketType","type":{"kind":"enum","variants":[{"name":"Spot"},{"name":"Perp"}]}},{"name":"Metadata","type":{"kind":"struct","fields":[{"name":"template","type":{"defined":{"name":"MetadataTemplate"}}},{"name":"pubkey","type":"pubkey"},{"name":"uri","type":"string"}]}},{"name":"MetadataTemplate","type":{"kind":"enum","variants":[{"name":"Openfunds"}]}},{"name":"MintModel","type":{"kind":"struct","fields":[{"name":"symbol","type":{"option":"string"}},{"name":"name","type":{"option":"string"}},{"name":"uri","type":{"option":"string"}},{"name":"state_pubkey","type":{"option":"pubkey"}},{"name":"asset","type":{"option":"pubkey"}},{"name":"image_uri","type":{"option":"string"}},{"name":"allowlist","type":{"option":{"vec":"pubkey"}}},{"name":"blocklist","type":{"option":{"vec":"pubkey"}}},{"name":"lock_up_period_in_seconds","type":{"option":"i32"}},{"name":"permanent_delegate","type":{"option":"pubkey"}},{"name":"default_account_state_frozen","type":{"option":"bool"}},{"name":"is_raw_openfunds","type":{"option":"bool"}},{"name":"raw_openfunds","type":{"option":{"defined":{"name":"MintOpenfundsModel"}}}}]}},{"name":"MintOpenfundsModel","type":{"kind":"struct","fields":[{"name":"isin","type":{"option":"string"}},{"name":"share_class_currency","type":{"option":"string"}},{"name":"currency_of_minimal_subscription","type":{"option":"string"}},{"name":"full_share_class_name","type":{"option":"string"}},{"name":"investment_status","type":{"option":"string"}},{"name":"minimal_initial_subscription_category","type":{"option":"string"}},{"name":"minimal_initial_subscription_in_amount","type":{"option":"string"}},{"name":"minimal_initial_subscription_in_shares","type":{"option":"string"}},{"name":"share_class_distribution_policy","type":{"option":"string"}},{"name":"share_class_extension","type":{"option":"string"}},{"name":"share_class_launch_date","type":{"option":"string"}},{"name":"share_class_lifecycle","type":{"option":"string"}},{"name":"launch_price","type":{"option":"string"}},{"name":"launch_price_currency","type":{"option":"string"}},{"name":"launch_price_date","type":{"option":"string"}},{"name":"currency_of_minimal_or_maximum_redemption","type":{"option":"string"}},{"name":"has_lock_up_for_redemption","type":{"option":"bool"}},{"name":"is_valid_isin","type":{"option":"bool"}},{"name":"lock_up_comment","type":{"option":"string"}},{"name":"lock_up_period_in_days","type":{"option":"string"}},{"name":"maximum_initial_redemption_in_amount","type":{"option":"string"}},{"name":"maximum_initial_redemption_in_shares","type":{"option":"string"}},{"name":"minimal_initial_redemption_in_amount","type":{"option":"string"}},{"name":"minimal_initial_redemption_in_shares","type":{"option":"string"}},{"name":"minimal_redemption_category","type":{"option":"string"}},{"name":"share_class_dividend_type","type":{"option":"string"}},{"name":"cusip","type":{"option":"string"}},{"name":"valor","type":{"option":"string"}}]}},{"name":"ModifyOrderParams","type":{"kind":"struct","fields":[{"name":"direction","type":{"option":{"defined":{"name":"PositionDirection"}}}},{"name":"base_asset_amount","type":{"option":"u64"}},{"name":"price","type":{"option":"u64"}},{"name":"reduce_only","type":{"option":"bool"}},{"name":"post_only","type":{"option":{"defined":{"name":"PostOnlyParam"}}}},{"name":"immediate_or_cancel","type":{"option":"bool"}},{"name":"max_ts","type":{"option":"i64"}},{"name":"trigger_price","type":{"option":"u64"}},{"name":"trigger_condition","type":{"option":{"defined":{"name":"OrderTriggerCondition"}}}},{"name":"oracle_price_offset","type":{"option":"i32"}},{"name":"auction_duration","type":{"option":"u8"}},{"name":"auction_start_price","type":{"option":"i64"}},{"name":"auction_end_price","type":{"option":"i64"}},{"name":"policy","type":{"option":"u8"}}]}},{"name":"OpenfundsMetadataAccount","type":{"kind":"struct","fields":[{"name":"fund_id","type":"pubkey"},{"name":"company","type":{"vec":{"defined":{"name":"CompanyField"}}}},{"name":"fund","type":{"vec":{"defined":{"name":"FundField"}}}},{"name":"share_classes","type":{"vec":{"vec":{"defined":{"name":"ShareClassField"}}}}},{"name":"fund_managers","type":{"vec":{"vec":{"defined":{"name":"FundManagerField"}}}}}]}},{"name":"OrderParams","type":{"kind":"struct","fields":[{"name":"order_type","type":{"defined":{"name":"OrderType"}}},{"name":"market_type","type":{"defined":{"name":"MarketType"}}},{"name":"direction","type":{"defined":{"name":"PositionDirection"}}},{"name":"user_order_id","type":"u8"},{"name":"base_asset_amount","type":"u64"},{"name":"price","type":"u64"},{"name":"market_index","type":"u16"},{"name":"reduce_only","type":"bool"},{"name":"post_only","type":{"defined":{"name":"PostOnlyParam"}}},{"name":"immediate_or_cancel","type":"bool"},{"name":"max_ts","type":{"option":"i64"}},{"name":"trigger_price","type":{"option":"u64"}},{"name":"trigger_condition","type":{"defined":{"name":"OrderTriggerCondition"}}},{"name":"oracle_price_offset","type":{"option":"i32"}},{"name":"auction_duration","type":{"option":"u8"}},{"name":"auction_start_price","type":{"option":"i64"}},{"name":"auction_end_price","type":{"option":"i64"}}]}},{"name":"OrderTriggerCondition","type":{"kind":"enum","variants":[{"name":"Above"},{"name":"Below"},{"name":"TriggeredAbove"},{"name":"TriggeredBelow"}]}},{"name":"OrderType","type":{"kind":"enum","variants":[{"name":"Market"},{"name":"Limit"},{"name":"TriggerMarket"},{"name":"TriggerLimit"},{"name":"Oracle"}]}},{"name":"Permission","docs":["* Delegate ACL"],"type":{"kind":"enum","variants":[{"name":"DriftInitialize"},{"name":"DriftUpdateUser"},{"name":"DriftDeleteUser"},{"name":"DriftDeposit"},{"name":"DriftWithdraw"},{"name":"DriftPlaceOrders"},{"name":"DriftCancelOrders"},{"name":"DriftPerpMarket"},{"name":"DriftSpotMarket"},{"name":"Stake"},{"name":"Unstake"},{"name":"LiquidUnstake"},{"name":"JupiterSwapAllowlisted"},{"name":"JupiterSwapAny"},{"name":"WSolWrap"},{"name":"WSolUnwrap"},{"name":"MintTokens"},{"name":"BurnTokens"},{"name":"ForceTransferTokens"},{"name":"SetTokenAccountState"},{"name":"StakeJup"},{"name":"VoteOnProposal"},{"name":"UnstakeJup"},{"name":"JupiterSwapLst"},{"name":"KaminoInit"},{"name":"KaminoDeposit"},{"name":"DriftModifyOrders"},{"name":"MeteoraDlmmInitPosition"},{"name":"MeteoraDlmmClosePosition"},{"name":"MeteoraDlmmLiquidity"},{"name":"MeteoraDlmmSwap"}]}},{"name":"PolicyAccount","type":{"kind":"struct","fields":[{"name":"locked_until_ts","type":"i64"}]}},{"name":"PositionDirection","type":{"kind":"enum","variants":[{"name":"Long"},{"name":"Short"}]}},{"name":"PostOnlyParam","type":{"kind":"enum","variants":[{"name":"None"},{"name":"MustPostOnly"},{"name":"TryPostOnly"},{"name":"Slide"}]}},{"name":"ShareClassField","type":{"kind":"struct","fields":[{"name":"name","type":{"defined":{"name":"ShareClassFieldName"}}},{"name":"value","type":"string"}]}},{"name":"ShareClassFieldName","type":{"kind":"enum","variants":[{"name":"ISIN"},{"name":"ShareClassCurrency"},{"name":"AppliedSubscriptionFeeInFavourOfDistributor"},{"name":"AppliedSubscriptionFeeInFavourOfDistributorReferenceDate"},{"name":"CurrencyOfMinimalSubscription"},{"name":"FullShareClassName"},{"name":"HasPerformanceFee"},{"name":"HasSubscriptionFeeInFavourOfDistributor"},{"name":"InvestmentStatus"},{"name":"ManagementFeeApplied"},{"name":"ManagementFeeAppliedReferenceDate"},{"name":"ManagementFeeMaximum"},{"name":"MaximumSubscriptionFeeInFavourOfDistributor"},{"name":"MinimalInitialSubscriptionCategory"},{"name":"MinimalInitialSubscriptionInAmount"},{"name":"MinimalInitialSubscriptionInShares"},{"name":"MinimalSubsequentSubscriptionCategory"},{"name":"MinimalSubsequentSubscriptionInAmount"},{"name":"MinimalSubsequentSubscriptionInShares"},{"name":"MinimumSubscriptionFeeInFavourOfDistributor"},{"name":"ShareClassDistributionPolicy"},{"name":"ShareClassExtension"},{"name":"ShareClassLaunchDate"},{"name":"ShareClassLifecycle"},{"name":"SRRI"},{"name":"LaunchPrice"},{"name":"LaunchPriceCurrency"},{"name":"LaunchPriceDate"},{"name":"HasAppliedSubscriptionFeeInFavourOfFund"},{"name":"AppliedSubscriptionFeeInFavourOfFund"},{"name":"AppliedSubscriptionFeeInFavourOfFundReferenceDate"},{"name":"MaximumSubscriptionFeeInFavourOfFund"},{"name":"HasAppliedRedemptionFeeInFavourOfFund"},{"name":"AppliedRedemptionFeeInFavourOfFund"},{"name":"AppliedRedemptionFeeInFavourOfFundReferenceDate"},{"name":"MaximumRedemptionFeeInFavourOfFund"},{"name":"AppliedRedemptionFeeInFavourOfDistributor"},{"name":"AppliedRedemptionFeeInFavourOfDistributorReferenceDate"},{"name":"CurrencyOfMinimalOrMaximumRedemption"},{"name":"CutOffDateOffsetForRedemption"},{"name":"CutOffDateOffsetForSubscription"},{"name":"CutOffTimeForRedemption"},{"name":"CutOffTimeForSubscription"},{"name":"HasLockUpForRedemption"},{"name":"HasRedemptionFeeInFavourOfDistributor"},{"name":"IsValidISIN"},{"name":"LockUpComment"},{"name":"LockUpPeriodInDays"},{"name":"ManagementFeeMinimum"},{"name":"MaximalNumberOfPossibleDecimalsAmount"},{"name":"MaximalNumberOfPossibleDecimalsNAV"},{"name":"MaximalNumberOfPossibleDecimalsShares"},{"name":"MaximumInitialRedemptionInAmount"},{"name":"MaximumInitialRedemptionInShares"},{"name":"MaximumRedemptionFeeInFavourOfDistributor"},{"name":"MaximumSubsequentRedemptionInAmount"},{"name":"MaximumSubsequentRedemptionInShares"},{"name":"MinimalInitialRedemptionInAmount"},{"name":"MinimalInitialRedemptionInShares"},{"name":"MinimalRedemptionCategory"},{"name":"MinimalSubsequentRedemptionInAmount"},{"name":"MinimalSubsequentRedemptionInShares"},{"name":"MinimumRedemptionFeeInFavourOfDistributor"},{"name":"MinimumRedemptionFeeInFavourOfFund"},{"name":"MinimumSubscriptionFeeInFavourOfFund"},{"name":"PerformanceFeeMinimum"},{"name":"RoundingMethodForPrices"},{"name":"RoundingMethodForRedemptionInAmount"},{"name":"RoundingMethodForRedemptionInShares"},{"name":"RoundingMethodForSubscriptionInAmount"},{"name":"RoundingMethodForSubscriptionInShares"},{"name":"ShareClassDividendType"},{"name":"CUSIP"},{"name":"Valor"},{"name":"FundId"},{"name":"ImageUri"}]}},{"name":"StateAccount","type":{"kind":"struct","fields":[{"name":"account_type","type":{"defined":{"name":"AccountType"}}},{"name":"owner","type":"pubkey"},{"name":"vault","type":"pubkey"},{"name":"enabled","type":"bool"},{"name":"created","type":{"defined":{"name":"CreatedModel"}}},{"name":"engine","type":"pubkey"},{"name":"mints","type":{"vec":"pubkey"}},{"name":"metadata","type":{"option":{"defined":{"name":"Metadata"}}}},{"name":"name","type":"string"},{"name":"uri","type":"string"},{"name":"assets","type":{"vec":"pubkey"}},{"name":"delegate_acls","type":{"vec":{"defined":{"name":"DelegateAcl"}}}},{"name":"integrations","type":{"vec":{"defined":{"name":"Integration"}}}},{"name":"params","type":{"vec":{"vec":{"defined":{"name":"EngineField"}}}}}]}},{"name":"StateModel","type":{"kind":"struct","fields":[{"name":"id","type":{"option":"pubkey"}},{"name":"account_type","type":{"option":{"defined":{"name":"AccountType"}}}},{"name":"name","type":{"option":"string"}},{"name":"uri","type":{"option":"string"}},{"name":"enabled","type":{"option":"bool"}},{"name":"assets","type":{"option":{"vec":"pubkey"}}},{"name":"external_vault_accounts","type":{"option":{"vec":"pubkey"}}},{"name":"mints","type":{"option":{"vec":{"defined":{"name":"MintModel"}}}}},{"name":"company","type":{"option":{"defined":{"name":"CompanyModel"}}}},{"name":"owner","type":{"option":{"defined":{"name":"ManagerModel"}}}},{"name":"created","type":{"option":{"defined":{"name":"CreatedModel"}}}},{"name":"delegate_acls","type":{"option":{"vec":{"defined":{"name":"DelegateAcl"}}}}},{"name":"integrations","type":{"option":{"vec":{"defined":{"name":"Integration"}}}}},{"name":"drift_market_indexes_perp","type":{"option":{"vec":"u32"}}},{"name":"drift_market_indexes_spot","type":{"option":{"vec":"u32"}}},{"name":"drift_order_types","type":{"option":{"vec":"u32"}}},{"name":"metadata","type":{"option":{"defined":{"name":"Metadata"}}}},{"name":"raw_openfunds","type":{"option":{"defined":{"name":"FundOpenfundsModel"}}}}]}},{"name":"StrategyParameters","type":{"kind":"struct","fields":[{"name":"min_bin_id","type":"i32"},{"name":"max_bin_id","type":"i32"},{"name":"strategy_type","type":{"defined":{"name":"StrategyType"}}},{"name":"parameteres","type":{"array":["u8",64]}}]}},{"name":"StrategyType","type":{"kind":"enum","variants":[{"name":"SpotOneSide"},{"name":"CurveOneSide"},{"name":"BidAskOneSide"},{"name":"SpotBalanced"},{"name":"CurveBalanced"},{"name":"BidAskBalanced"},{"name":"SpotImBalanced"},{"name":"CurveImBalanced"},{"name":"BidAskImBalanced"}]}}],"constants":[{"name":"SEED_METADATA","type":"string","value":"\\"metadata\\""},{"name":"SEED_MINT","type":"string","value":"\\"mint\\""},{"name":"SEED_STATE","type":"string","value":"\\"state\\""},{"name":"SEED_VAULT","type":"string","value":"\\"vault\\""}]}');
83
+ module.exports = /*#__PURE__*/JSON.parse('{"address":"GLAMbTqav9N9witRjswJ8enwp9vv5G8bsSJ2kPJ4rcyc","metadata":{"name":"glam_protocol","version":"0.4.13","spec":"0.1.0","description":"Glam Protocol"},"instructions":[{"name":"add_mint","discriminator":[171,222,111,37,60,166,208,108],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_signer","writable":true,"signer":true},{"name":"new_mint","writable":true},{"name":"extra_metas_account","writable":true,"optional":true},{"name":"openfunds_metadata","writable":true,"optional":true,"pda":{"seeds":[{"kind":"const","value":[109,101,116,97,100,97,116,97]},{"kind":"account","path":"glam_state"}]}},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"token_2022_program","address":"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"},{"name":"policies_program","address":"po1iCYakK3gHCLbuju4wGzFowTMpAJxkqK1iwUqMonY"}],"args":[{"name":"mint_model","type":{"defined":{"name":"MintModel"}}}]},{"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_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"from"},{"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":"token_2022_program","address":"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"}],"args":[{"name":"mint_id","type":"u8"},{"name":"amount","type":"u64"}]},{"name":"claim","discriminator":[62,198,214,193,213,159,108,210],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_escrow","pda":{"seeds":[{"kind":"const","value":[101,115,99,114,111,119]},{"kind":"account","path":"glam_state"}]}},{"name":"signer","writable":true,"signer":true},{"name":"token_mint"},{"name":"signer_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"signer"},{"kind":"account","path":"token_program"},{"kind":"account","path":"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":"token_program"},{"kind":"account","path":"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":"token_program"}],"args":[{"name":"mint_id","type":"u8"}]},{"name":"close_mint","discriminator":[149,251,157,212,65,181,235,129],"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":"glam_mint","writable":true},{"name":"extra_metas_account","writable":true,"optional":true},{"name":"metadata","writable":true,"pda":{"seeds":[{"kind":"const","value":[109,101,116,97,100,97,116,97]},{"kind":"account","path":"glam_state"}]}},{"name":"policies_program","address":"po1iCYakK3gHCLbuju4wGzFowTMpAJxkqK1iwUqMonY"},{"name":"token_2022_program","address":"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"},{"name":"system_program","address":"11111111111111111111111111111111"}],"args":[{"name":"mint_id","type":"u8"}]},{"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":"metadata","writable":true,"pda":{"seeds":[{"kind":"const","value":[109,101,116,97,100,97,116,97]},{"kind":"account","path":"glam_state"}]}},{"name":"system_program","address":"11111111111111111111111111111111"}],"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_state"}]}},{"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":"token_2022_program","address":"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"}],"args":[{"name":"mint_id","type":"u8"}]},{"name":"drift_cancel_orders","discriminator":[98,107,48,79,97,60,99,58],"accounts":[{"name":"glam_state"},{"name":"glam_vault","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":"dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH"},{"name":"state"},{"name":"user","writable":true}],"args":[{"name":"market_type","type":{"option":{"defined":{"name":"MarketType"}}}},{"name":"market_index","type":{"option":"u16"}},{"name":"direction","type":{"option":{"defined":{"name":"PositionDirection"}}}}]},{"name":"drift_cancel_orders_by_ids","discriminator":[172,99,108,14,81,89,228,183],"accounts":[{"name":"glam_state"},{"name":"glam_vault","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":"dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH"},{"name":"state"},{"name":"user","writable":true}],"args":[{"name":"order_ids","type":{"vec":"u32"}}]},{"name":"drift_delete_user","discriminator":[179,118,20,212,145,146,49,130],"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":"dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH"},{"name":"user","writable":true},{"name":"user_stats","writable":true},{"name":"state","writable":true}],"args":[]},{"name":"drift_deposit","discriminator":[252,63,250,201,98,55,130,12],"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":"dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH"},{"name":"state"},{"name":"user","writable":true},{"name":"user_stats","writable":true},{"name":"spot_market_vault","writable":true},{"name":"user_token_account","writable":true},{"name":"token_program"}],"args":[{"name":"market_index","type":"u16"},{"name":"amount","type":"u64"},{"name":"reduce_only","type":"bool"}]},{"name":"drift_initialize_user","discriminator":[107,244,158,15,225,239,98,245],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_vault","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":"dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH"},{"name":"user","writable":true},{"name":"user_stats","writable":true},{"name":"state","writable":true},{"name":"payer","writable":true,"signer":true},{"name":"rent","address":"SysvarRent111111111111111111111111111111111"},{"name":"system_program","address":"11111111111111111111111111111111"}],"args":[{"name":"sub_account_id","type":"u16"},{"name":"name","type":{"array":["u8",32]}}]},{"name":"drift_initialize_user_stats","discriminator":[133,185,103,162,90,161,78,143],"accounts":[{"name":"glam_state"},{"name":"glam_vault","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":"dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH"},{"name":"user_stats","writable":true},{"name":"state","writable":true},{"name":"payer","writable":true,"signer":true},{"name":"rent","address":"SysvarRent111111111111111111111111111111111"},{"name":"system_program","address":"11111111111111111111111111111111"}],"args":[]},{"name":"drift_modify_order","discriminator":[235,245,222,58,245,128,19,202],"accounts":[{"name":"glam_state"},{"name":"glam_vault","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":"dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH"},{"name":"state"},{"name":"user","writable":true}],"args":[{"name":"order_id","type":{"option":"u32"}},{"name":"modify_order_params","type":{"defined":{"name":"ModifyOrderParams"}}}]},{"name":"drift_place_orders","discriminator":[117,18,210,6,238,174,135,167],"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":"dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH"},{"name":"state"},{"name":"user","writable":true}],"args":[{"name":"params","type":{"vec":{"defined":{"name":"OrderParams"}}}}]},{"name":"drift_update_user_custom_margin_ratio","discriminator":[4,47,193,177,128,62,228,14],"accounts":[{"name":"glam_state"},{"name":"glam_vault","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":"dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH"},{"name":"user","writable":true}],"args":[{"name":"sub_account_id","type":"u16"},{"name":"margin_ratio","type":"u32"}]},{"name":"drift_update_user_delegate","discriminator":[36,181,34,31,22,77,36,154],"accounts":[{"name":"glam_state"},{"name":"glam_vault","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":"dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH"},{"name":"user","writable":true}],"args":[{"name":"sub_account_id","type":"u16"},{"name":"delegate","type":"pubkey"}]},{"name":"drift_update_user_margin_trading_enabled","discriminator":[157,175,12,19,202,114,17,36],"accounts":[{"name":"glam_state"},{"name":"glam_vault","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":"dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH"},{"name":"user","writable":true}],"args":[{"name":"sub_account_id","type":"u16"},{"name":"margin_trading_enabled","type":"bool"}]},{"name":"drift_withdraw","discriminator":[86,59,186,123,183,181,234,137],"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":"dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH"},{"name":"state"},{"name":"user","writable":true},{"name":"user_stats","writable":true},{"name":"spot_market_vault","writable":true},{"name":"drift_signer"},{"name":"user_token_account","writable":true},{"name":"token_program"}],"args":[{"name":"market_index","type":"u16"},{"name":"amount","type":"u64"},{"name":"reduce_only","type":"bool"}]},{"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_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"from"},{"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":"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":"mint_id","type":"u8"},{"name":"amount","type":"u64"}]},{"name":"fulfill","discriminator":[143,2,52,206,174,164,247,72],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_vault","pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"glam_state"}]}},{"name":"glam_escrow","pda":{"seeds":[{"kind":"const","value":[101,115,99,114,111,119]},{"kind":"account","path":"glam_state"}]}},{"name":"glam_mint","writable":true},{"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":"const","value":[6,221,246,225,215,101,161,147,217,203,225,70,206,235,121,172,28,180,133,237,95,91,55,145,58,140,245,133,126,255,0,169]},{"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":"const","value":[6,221,246,225,215,101,161,147,217,203,225,70,206,235,121,172,28,180,133,237,95,91,55,145,58,140,245,133,126,255,0,169]},{"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":"token_program","address":"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{"name":"token_2022_program","address":"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"},{"name":"associated_token_program","address":"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"}],"args":[{"name":"mint_id","type":"u8"}]},{"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_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":"openfunds_metadata","writable":true,"optional":true,"pda":{"seeds":[{"kind":"const","value":[109,101,116,97,100,97,116,97]},{"kind":"account","path":"glam_state"}]}},{"name":"system_program","address":"11111111111111111111111111111111"}],"args":[{"name":"state","type":{"defined":{"name":"StateModel"}}}]},{"name":"jupiter_gov_new_vote","discriminator":[235,179,170,64,64,57,17,69],"accounts":[{"name":"glam_state"},{"name":"glam_vault","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":"GovaE4iu227srtG2s3tZzB4RmWBzw8sTwrCLZz7kN7rY"},{"name":"proposal"},{"name":"vote","writable":true},{"name":"payer","writable":true,"signer":true},{"name":"system_program","address":"11111111111111111111111111111111"}],"args":[{"name":"voter","type":"pubkey"}]},{"name":"jupiter_set_max_swap_slippage","discriminator":[110,79,13,71,208,111,56,66],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_signer","writable":true,"signer":true}],"args":[{"name":"slippage","type":"u64"}]},{"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":"jupiter_vote_cast_vote","discriminator":[11,197,234,57,164,74,181,239],"accounts":[{"name":"glam_state"},{"name":"glam_vault","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":"voTpe3tHQ7AjQHMapgSue2HJFAh2cGsdokqN3XqmVSj"},{"name":"locker"},{"name":"escrow"},{"name":"proposal","writable":true},{"name":"vote","writable":true},{"name":"governor"},{"name":"govern_program"}],"args":[{"name":"side","type":"u8"}]},{"name":"jupiter_vote_cast_vote_checked","discriminator":[247,3,146,233,35,189,192,187],"accounts":[{"name":"glam_state"},{"name":"glam_vault","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":"voTpe3tHQ7AjQHMapgSue2HJFAh2cGsdokqN3XqmVSj"},{"name":"locker"},{"name":"escrow"},{"name":"proposal","writable":true},{"name":"vote","writable":true},{"name":"governor"},{"name":"govern_program"}],"args":[{"name":"side","type":"u8"},{"name":"expected_side","type":"u8"}]},{"name":"jupiter_vote_increase_locked_amount","discriminator":[225,38,201,123,148,23,47,128],"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":"voTpe3tHQ7AjQHMapgSue2HJFAh2cGsdokqN3XqmVSj"},{"name":"locker","writable":true},{"name":"escrow","writable":true},{"name":"escrow_tokens","writable":true},{"name":"source_tokens","writable":true},{"name":"token_program"}],"args":[{"name":"amount","type":"u64"}]},{"name":"jupiter_vote_merge_partial_unstaking","discriminator":[93,226,122,120,130,35,189,208],"accounts":[{"name":"glam_state"},{"name":"glam_vault","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":"voTpe3tHQ7AjQHMapgSue2HJFAh2cGsdokqN3XqmVSj"},{"name":"locker","writable":true},{"name":"escrow","writable":true},{"name":"partial_unstake","writable":true}],"args":[]},{"name":"jupiter_vote_new_escrow","discriminator":[255,87,157,219,61,178,144,159],"accounts":[{"name":"glam_state"},{"name":"glam_vault","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":"voTpe3tHQ7AjQHMapgSue2HJFAh2cGsdokqN3XqmVSj"},{"name":"locker","writable":true},{"name":"escrow","writable":true},{"name":"payer","writable":true,"signer":true},{"name":"system_program","address":"11111111111111111111111111111111"}],"args":[]},{"name":"jupiter_vote_open_partial_unstaking","discriminator":[84,7,113,220,212,63,237,218],"accounts":[{"name":"glam_state"},{"name":"glam_vault","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":"voTpe3tHQ7AjQHMapgSue2HJFAh2cGsdokqN3XqmVSj"},{"name":"locker","writable":true},{"name":"escrow","writable":true},{"name":"partial_unstake","writable":true,"signer":true},{"name":"system_program","address":"11111111111111111111111111111111"}],"args":[{"name":"amount","type":"u64"},{"name":"memo","type":"string"}]},{"name":"jupiter_vote_toggle_max_lock","discriminator":[204,158,192,21,219,25,154,87],"accounts":[{"name":"glam_state"},{"name":"glam_vault","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":"voTpe3tHQ7AjQHMapgSue2HJFAh2cGsdokqN3XqmVSj"},{"name":"locker"},{"name":"escrow","writable":true}],"args":[{"name":"is_max_lock","type":"bool"}]},{"name":"jupiter_vote_withdraw","discriminator":[195,172,184,195,23,178,145,191],"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":"voTpe3tHQ7AjQHMapgSue2HJFAh2cGsdokqN3XqmVSj"},{"name":"locker","writable":true},{"name":"escrow","writable":true},{"name":"escrow_tokens","writable":true},{"name":"destination_tokens","writable":true},{"name":"token_program"}],"args":[]},{"name":"jupiter_vote_withdraw_partial_unstaking","discriminator":[109,98,65,252,184,0,216,240],"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":"voTpe3tHQ7AjQHMapgSue2HJFAh2cGsdokqN3XqmVSj"},{"name":"locker","writable":true},{"name":"escrow","writable":true},{"name":"partial_unstake","writable":true},{"name":"escrow_tokens","writable":true},{"name":"destination_tokens","writable":true},{"name":"token_program"}],"args":[]},{"name":"kamino_lending_borrow_obligation_liquidity_v2","discriminator":[175,198,39,162,103,76,51,121],"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":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD"},{"name":"obligation","writable":true},{"name":"lending_market"},{"name":"lending_market_authority"},{"name":"borrow_reserve","writable":true},{"name":"borrow_reserve_liquidity_mint"},{"name":"reserve_source_liquidity","writable":true},{"name":"borrow_reserve_liquidity_fee_receiver","writable":true},{"name":"user_destination_liquidity","writable":true},{"name":"referrer_token_state","writable":true},{"name":"token_program"},{"name":"instruction_sysvar_account"},{"name":"obligation_farm_user_state","writable":true},{"name":"reserve_farm_state","writable":true},{"name":"farms_program"}],"args":[{"name":"liquidity_amount","type":"u64"}]},{"name":"kamino_lending_deposit_reserve_liquidity_and_obligation_collateral_v2","discriminator":[93,120,106,112,40,45,84,32],"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":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD"},{"name":"obligation","writable":true},{"name":"lending_market"},{"name":"lending_market_authority"},{"name":"reserve","writable":true},{"name":"reserve_liquidity_mint"},{"name":"reserve_liquidity_supply","writable":true},{"name":"reserve_collateral_mint","writable":true},{"name":"reserve_destination_deposit_collateral","writable":true},{"name":"user_source_liquidity","writable":true},{"name":"placeholder_user_destination_collateral"},{"name":"collateral_token_program"},{"name":"liquidity_token_program"},{"name":"instruction_sysvar_account"},{"name":"obligation_farm_user_state","writable":true},{"name":"reserve_farm_state","writable":true},{"name":"farms_program"}],"args":[{"name":"liquidity_amount","type":"u64"}]},{"name":"kamino_lending_init_obligation","discriminator":[219,210,134,64,155,49,137,174],"accounts":[{"name":"glam_state"},{"name":"glam_vault","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":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD"},{"name":"fee_payer","writable":true,"signer":true},{"name":"obligation","writable":true},{"name":"lending_market"},{"name":"seed1_account"},{"name":"seed2_account"},{"name":"owner_user_metadata"},{"name":"rent","address":"SysvarRent111111111111111111111111111111111"},{"name":"system_program","address":"11111111111111111111111111111111"}],"args":[{"name":"args","type":{"defined":{"name":"InitObligationArgs"}}}]},{"name":"kamino_lending_init_obligation_farms_for_reserve","discriminator":[227,61,130,2,117,226,78,1],"accounts":[{"name":"glam_state"},{"name":"glam_vault","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":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD"},{"name":"payer","writable":true,"signer":true},{"name":"obligation","writable":true},{"name":"lending_market_authority"},{"name":"reserve","writable":true},{"name":"reserve_farm_state","writable":true},{"name":"obligation_farm","writable":true},{"name":"lending_market"},{"name":"farms_program"},{"name":"rent","address":"SysvarRent111111111111111111111111111111111"},{"name":"system_program","address":"11111111111111111111111111111111"}],"args":[{"name":"mode","type":"u8"}]},{"name":"kamino_lending_init_user_metadata","discriminator":[200,95,140,132,190,65,17,161],"accounts":[{"name":"glam_state"},{"name":"glam_vault","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":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD"},{"name":"fee_payer","writable":true,"signer":true},{"name":"user_metadata","writable":true},{"name":"referrer_user_metadata"},{"name":"rent","address":"SysvarRent111111111111111111111111111111111"},{"name":"system_program","address":"11111111111111111111111111111111"}],"args":[{"name":"user_lookup_table","type":"pubkey"}]},{"name":"kamino_lending_repay_obligation_liquidity_v2","discriminator":[135,57,236,69,153,77,15,88],"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":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD"},{"name":"obligation","writable":true},{"name":"lending_market"},{"name":"repay_reserve","writable":true},{"name":"reserve_liquidity_mint"},{"name":"reserve_destination_liquidity","writable":true},{"name":"user_source_liquidity","writable":true},{"name":"token_program"},{"name":"instruction_sysvar_account"},{"name":"obligation_farm_user_state","writable":true},{"name":"reserve_farm_state","writable":true},{"name":"lending_market_authority"},{"name":"farms_program"}],"args":[{"name":"liquidity_amount","type":"u64"}]},{"name":"kamino_lending_withdraw_obligation_collateral_and_redeem_reserve_collateral_v2","discriminator":[249,60,252,239,136,53,181,3],"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":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD"},{"name":"obligation","writable":true},{"name":"lending_market"},{"name":"lending_market_authority"},{"name":"withdraw_reserve","writable":true},{"name":"reserve_liquidity_mint"},{"name":"reserve_source_collateral","writable":true},{"name":"reserve_collateral_mint","writable":true},{"name":"reserve_liquidity_supply","writable":true},{"name":"user_destination_liquidity","writable":true},{"name":"placeholder_user_destination_collateral"},{"name":"collateral_token_program"},{"name":"liquidity_token_program"},{"name":"instruction_sysvar_account"},{"name":"obligation_farm_user_state","writable":true},{"name":"reserve_farm_state","writable":true},{"name":"farms_program"}],"args":[{"name":"collateral_amount","type":"u64"}]},{"name":"marinade_claim","discriminator":[54,44,48,204,218,141,36,5],"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":"MarBmsSgKXdrN1egZf5sqe1TMai9K1rChYNDJgjq7aD"},{"name":"state","writable":true},{"name":"reserve_pda","writable":true},{"name":"ticket_account","writable":true},{"name":"clock"},{"name":"system_program","address":"11111111111111111111111111111111"}],"args":[]},{"name":"marinade_deposit","discriminator":[62,236,248,28,222,232,182,73],"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":"MarBmsSgKXdrN1egZf5sqe1TMai9K1rChYNDJgjq7aD"},{"name":"state","writable":true},{"name":"msol_mint","writable":true},{"name":"liq_pool_sol_leg_pda","writable":true},{"name":"liq_pool_msol_leg","writable":true},{"name":"liq_pool_msol_leg_authority"},{"name":"reserve_pda","writable":true},{"name":"mint_to","writable":true},{"name":"msol_mint_authority"},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"token_program"}],"args":[{"name":"lamports","type":"u64"}]},{"name":"marinade_deposit_stake_account","discriminator":[141,230,58,103,56,205,159,138],"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":"MarBmsSgKXdrN1egZf5sqe1TMai9K1rChYNDJgjq7aD"},{"name":"state","writable":true},{"name":"validator_list","writable":true},{"name":"stake_list","writable":true},{"name":"stake_account","writable":true},{"name":"duplication_flag","writable":true},{"name":"msol_mint","writable":true},{"name":"mint_to","writable":true},{"name":"msol_mint_authority"},{"name":"clock"},{"name":"rent","address":"SysvarRent111111111111111111111111111111111"},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"token_program"},{"name":"stake_program"}],"args":[{"name":"validator_idx","type":"u32"}]},{"name":"marinade_order_unstake","discriminator":[202,3,33,27,183,156,57,231],"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":"MarBmsSgKXdrN1egZf5sqe1TMai9K1rChYNDJgjq7aD"},{"name":"state","writable":true},{"name":"msol_mint","writable":true},{"name":"burn_msol_from","writable":true},{"name":"new_ticket_account","writable":true},{"name":"clock"},{"name":"rent","address":"SysvarRent111111111111111111111111111111111"},{"name":"token_program"}],"args":[{"name":"msol_amount","type":"u64"}]},{"name":"merkle_distributor_new_claim_and_stake","discriminator":[203,167,65,87,208,161,91,207],"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":"DiS3nNjFVMieMgmiQFm6wgJL7nevk4NrhXKLbtEH1Z2R"},{"name":"distributor","writable":true},{"name":"claim_status","writable":true},{"name":"from","writable":true},{"name":"token_program"},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"voter_program"},{"name":"locker","writable":true},{"name":"escrow","writable":true},{"name":"escrow_tokens","writable":true}],"args":[{"name":"amount_unlocked","type":"u64"},{"name":"amount_locked","type":"u64"},{"name":"proof","type":{"vec":{"array":["u8",32]}}}]},{"name":"meteora_dlmm_add_liquidity2","discriminator":[248,123,81,94,137,10,79,81],"accounts":[{"name":"glam_state"},{"name":"glam_vault","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":"LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo"},{"name":"position","writable":true},{"name":"lb_pair","writable":true},{"name":"bin_array_bitmap_extension","writable":true},{"name":"user_token_x","writable":true},{"name":"user_token_y","writable":true},{"name":"reserve_x","writable":true},{"name":"reserve_y","writable":true},{"name":"token_x_mint"},{"name":"token_y_mint"},{"name":"token_x_program"},{"name":"token_y_program"},{"name":"event_authority"},{"name":"program"}],"args":[{"name":"liquidity_parameter","type":{"defined":{"name":"LiquidityParameter"}}},{"name":"remaining_accounts_info","type":{"defined":{"name":"RemainingAccountsInfo"}}}]},{"name":"meteora_dlmm_add_liquidity_by_strategy2","discriminator":[219,171,159,202,167,192,209,25],"accounts":[{"name":"glam_state"},{"name":"glam_vault","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":"LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo"},{"name":"position","writable":true},{"name":"lb_pair","writable":true},{"name":"bin_array_bitmap_extension","writable":true},{"name":"user_token_x","writable":true},{"name":"user_token_y","writable":true},{"name":"reserve_x","writable":true},{"name":"reserve_y","writable":true},{"name":"token_x_mint"},{"name":"token_y_mint"},{"name":"token_x_program"},{"name":"token_y_program"},{"name":"event_authority"},{"name":"program"}],"args":[{"name":"liquidity_parameter","type":{"defined":{"name":"LiquidityParameterByStrategy"}}},{"name":"remaining_accounts_info","type":{"defined":{"name":"RemainingAccountsInfo"}}}]},{"name":"meteora_dlmm_add_liquidity_one_side_precise2","discriminator":[60,137,107,235,107,209,19,106],"accounts":[{"name":"glam_state"},{"name":"glam_vault","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":"LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo"},{"name":"position","writable":true},{"name":"lb_pair","writable":true},{"name":"bin_array_bitmap_extension","writable":true},{"name":"user_token","writable":true},{"name":"reserve","writable":true},{"name":"token_mint"},{"name":"token_program"},{"name":"event_authority"},{"name":"program"}],"args":[{"name":"parameter","type":{"defined":{"name":"AddLiquiditySingleSidePreciseParameter2"}}},{"name":"remaining_accounts_info","type":{"defined":{"name":"RemainingAccountsInfo"}}}]},{"name":"meteora_dlmm_claim_fee2","discriminator":[152,214,221,166,191,34,17,189],"accounts":[{"name":"glam_state"},{"name":"glam_vault","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":"LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo"},{"name":"lb_pair","writable":true},{"name":"position","writable":true},{"name":"reserve_x","writable":true},{"name":"reserve_y","writable":true},{"name":"user_token_x","writable":true},{"name":"user_token_y","writable":true},{"name":"token_x_mint"},{"name":"token_y_mint"},{"name":"token_program_x"},{"name":"token_program_y"},{"name":"memo_program"},{"name":"event_authority"},{"name":"program"}],"args":[{"name":"min_bin_id","type":"i32"},{"name":"max_bin_id","type":"i32"},{"name":"remaining_accounts_info","type":{"defined":{"name":"RemainingAccountsInfo"}}}]},{"name":"meteora_dlmm_claim_reward2","discriminator":[73,232,244,62,123,103,114,39],"accounts":[{"name":"glam_state"},{"name":"glam_vault","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":"LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo"},{"name":"lb_pair","writable":true},{"name":"position","writable":true},{"name":"reward_vault","writable":true},{"name":"reward_mint"},{"name":"user_token_account","writable":true},{"name":"token_program"},{"name":"memo_program"},{"name":"event_authority"},{"name":"program"}],"args":[{"name":"reward_index","type":"u64"},{"name":"min_bin_id","type":"i32"},{"name":"max_bin_id","type":"i32"},{"name":"remaining_accounts_info","type":{"defined":{"name":"RemainingAccountsInfo"}}}]},{"name":"meteora_dlmm_close_position","discriminator":[186,117,42,24,221,194,34,143],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_vault","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":"LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo"},{"name":"position","writable":true},{"name":"lb_pair","writable":true},{"name":"bin_array_lower","writable":true},{"name":"bin_array_upper","writable":true},{"name":"rent_receiver","writable":true},{"name":"event_authority"},{"name":"program"}],"args":[]},{"name":"meteora_dlmm_initialize_position","discriminator":[223,94,215,96,175,181,195,204],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_vault","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":"LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo"},{"name":"payer","writable":true,"signer":true},{"name":"position","writable":true,"signer":true},{"name":"lb_pair"},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"rent","address":"SysvarRent111111111111111111111111111111111"},{"name":"event_authority"},{"name":"program"}],"args":[{"name":"lower_bin_id","type":"i32"},{"name":"width","type":"i32"}]},{"name":"meteora_dlmm_initialize_position_pda","discriminator":[206,130,13,156,170,45,96,115],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_vault","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":"LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo"},{"name":"payer","writable":true,"signer":true},{"name":"position","writable":true},{"name":"lb_pair"},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"rent","address":"SysvarRent111111111111111111111111111111111"},{"name":"event_authority"},{"name":"program"}],"args":[{"name":"lower_bin_id","type":"i32"},{"name":"width","type":"i32"}]},{"name":"meteora_dlmm_remove_liquidity2","discriminator":[118,111,170,14,224,187,21,119],"accounts":[{"name":"glam_state"},{"name":"glam_vault","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":"LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo"},{"name":"position","writable":true},{"name":"lb_pair","writable":true},{"name":"bin_array_bitmap_extension","writable":true},{"name":"user_token_x","writable":true},{"name":"user_token_y","writable":true},{"name":"reserve_x","writable":true},{"name":"reserve_y","writable":true},{"name":"token_x_mint"},{"name":"token_y_mint"},{"name":"token_x_program"},{"name":"token_y_program"},{"name":"memo_program"},{"name":"event_authority"},{"name":"program"}],"args":[{"name":"bin_liquidity_removal","type":{"vec":{"defined":{"name":"BinLiquidityReduction"}}}},{"name":"remaining_accounts_info","type":{"defined":{"name":"RemainingAccountsInfo"}}}]},{"name":"meteora_dlmm_remove_liquidity_by_range2","discriminator":[157,54,138,77,16,239,100,16],"accounts":[{"name":"glam_state"},{"name":"glam_vault","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":"LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo"},{"name":"position","writable":true},{"name":"lb_pair","writable":true},{"name":"bin_array_bitmap_extension","writable":true},{"name":"user_token_x","writable":true},{"name":"user_token_y","writable":true},{"name":"reserve_x","writable":true},{"name":"reserve_y","writable":true},{"name":"token_x_mint"},{"name":"token_y_mint"},{"name":"token_x_program"},{"name":"token_y_program"},{"name":"memo_program"},{"name":"event_authority"},{"name":"program"}],"args":[{"name":"from_bin_id","type":"i32"},{"name":"to_bin_id","type":"i32"},{"name":"bps_to_remove","type":"u16"},{"name":"remaining_accounts_info","type":{"defined":{"name":"RemainingAccountsInfo"}}}]},{"name":"meteora_dlmm_swap2","discriminator":[95,183,135,4,4,165,65,133],"accounts":[{"name":"glam_state"},{"name":"glam_vault","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":"LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo"},{"name":"lb_pair","writable":true},{"name":"bin_array_bitmap_extension"},{"name":"reserve_x","writable":true},{"name":"reserve_y","writable":true},{"name":"user_token_in","writable":true},{"name":"user_token_out","writable":true},{"name":"token_x_mint"},{"name":"token_y_mint"},{"name":"oracle","writable":true},{"name":"host_fee_in","writable":true},{"name":"token_x_program"},{"name":"token_y_program"},{"name":"memo_program"},{"name":"event_authority"},{"name":"program"}],"args":[{"name":"amount_in","type":"u64"},{"name":"min_amount_out","type":"u64"},{"name":"remaining_accounts_info","type":{"defined":{"name":"RemainingAccountsInfo"}}}]},{"name":"meteora_dlmm_swap_with_price_impact2","discriminator":[219,33,50,237,37,101,146,101],"accounts":[{"name":"glam_state"},{"name":"glam_vault","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":"LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo"},{"name":"lb_pair","writable":true},{"name":"bin_array_bitmap_extension"},{"name":"reserve_x","writable":true},{"name":"reserve_y","writable":true},{"name":"user_token_in","writable":true},{"name":"user_token_out","writable":true},{"name":"token_x_mint"},{"name":"token_y_mint"},{"name":"oracle","writable":true},{"name":"host_fee_in","writable":true},{"name":"token_x_program"},{"name":"token_y_program"},{"name":"memo_program"},{"name":"event_authority"},{"name":"program"}],"args":[{"name":"amount_in","type":"u64"},{"name":"active_id","type":{"option":"i32"}},{"name":"max_price_impact_bps","type":"u16"},{"name":"remaining_accounts_info","type":{"defined":{"name":"RemainingAccountsInfo"}}}]},{"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":"mint_id","type":"u8"},{"name":"amount","type":"u64"}]},{"name":"price_drift","discriminator":[240,91,209,89,155,0,97,133],"accounts":[{"name":"glam_state"},{"name":"glam_vault"},{"name":"signer","writable":true,"signer":true},{"name":"state"},{"name":"user"},{"name":"user_stats"}],"args":[]},{"name":"price_meteora","discriminator":[166,250,203,148,67,60,207,51],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_vault","pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"glam_state"}]}},{"name":"glam_signer","writable":true,"signer":true}],"args":[]},{"name":"price_stakes","discriminator":[0,60,60,103,201,94,72,223],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_vault","pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"glam_state"}]}},{"name":"glam_signer","writable":true,"signer":true}],"args":[]},{"name":"price_tickets","discriminator":[253,18,224,98,226,43,65,76],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_vault","pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"glam_state"}]}},{"name":"glam_signer","writable":true,"signer":true}],"args":[]},{"name":"price_vault","discriminator":[47,213,36,17,183,5,141,45],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_vault","pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"glam_state"}]}},{"name":"glam_signer","writable":true,"signer":true}],"args":[]},{"name":"queued_redeem","discriminator":[82,242,202,93,170,196,215,113],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_escrow","pda":{"seeds":[{"kind":"const","value":[101,115,99,114,111,119]},{"kind":"account","path":"glam_state"}]}},{"name":"glam_mint","writable":true},{"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":"mint_id","type":"u8"},{"name":"shares_in","type":"u64"}]},{"name":"queued_subscribe","discriminator":[107,180,212,63,146,0,159,255],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_escrow","pda":{"seeds":[{"kind":"const","value":[101,115,99,114,111,119]},{"kind":"account","path":"glam_state"}]}},{"name":"signer","writable":true,"signer":true},{"name":"deposit_asset"},{"name":"escrow_deposit_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"glam_escrow"},{"kind":"const","value":[6,221,246,225,215,101,161,147,217,203,225,70,206,235,121,172,28,180,133,237,95,91,55,145,58,140,245,133,126,255,0,169]},{"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":"const","value":[6,221,246,225,215,101,161,147,217,203,225,70,206,235,121,172,28,180,133,237,95,91,55,145,58,140,245,133,126,255,0,169]},{"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":"token_program","address":"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{"name":"associated_token_program","address":"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"}],"args":[{"name":"mint_id","type":"u8"},{"name":"amount_in","type":"u64"}]},{"name":"set_redemption_paused","discriminator":[226,152,104,42,1,53,196,240],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_mint"},{"name":"glam_signer","writable":true,"signer":true}],"args":[{"name":"mint_id","type":"u8"},{"name":"paused","type":"bool"}]},{"name":"set_subscription_paused","discriminator":[220,144,129,4,136,251,85,234],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_mint"},{"name":"glam_signer","writable":true,"signer":true}],"args":[{"name":"mint_id","type":"u8"},{"name":"paused","type":"bool"}]},{"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":"mint_id","type":"u8"},{"name":"frozen","type":"bool"}]},{"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_with_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_lamports","discriminator":[21,85,218,122,182,189,82,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"}]}},{"name":"glam_signer","writable":true,"signer":true},{"name":"cpi_program","address":"Stake11111111111111111111111111111111111111"},{"name":"source_stake","writable":true},{"name":"destination_stake","writable":true}],"args":[{"name":"lamports","type":"u64"}]},{"name":"stake_move_stake","discriminator":[9,190,67,62,46,251,144,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":"lamports","type":"u64"}]},{"name":"stake_pool_deposit_sol","discriminator":[147,187,91,151,158,187,247,79],"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":"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_in","type":"u64"}]},{"name":"stake_pool_deposit_sol_with_slippage","discriminator":[57,21,43,19,86,36,25,172],"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":"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_in","type":"u64"},{"name":"minimum_pool_tokens_out","type":"u64"}]},{"name":"stake_pool_deposit_stake","discriminator":[212,158,195,174,179,105,9,97],"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":"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":"stake_pool_deposit_stake_with_slippage","discriminator":[185,104,64,97,108,243,239,165],"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":"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":"minimum_pool_tokens_out","type":"u64"}]},{"name":"stake_pool_withdraw_sol","discriminator":[179,100,204,0,192,46,233,181],"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"},{"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_in","type":"u64"}]},{"name":"stake_pool_withdraw_sol_with_slippage","discriminator":[210,92,86,93,123,17,117,89],"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"},{"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_in","type":"u64"},{"name":"minimum_lamports_out","type":"u64"}]},{"name":"stake_pool_withdraw_stake","discriminator":[7,70,250,22,49,1,143,1],"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":"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_in","type":"u64"}]},{"name":"stake_pool_withdraw_stake_with_slippage","discriminator":[74,83,151,22,32,149,154,141],"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":"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_in","type":"u64"},{"name":"minimum_lamports_out","type":"u64"}]},{"name":"stake_redelegate","discriminator":[134,227,164,247,120,0,225,174],"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":"new_stake","writable":true},{"name":"vote"},{"name":"stake_config"}],"args":[]},{"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"}],"args":[{"name":"lamports","type":"u64"}]},{"name":"subscribe","discriminator":[254,28,191,138,156,179,183,53],"accounts":[{"name":"glam_state","writable":true},{"name":"glam_escrow","pda":{"seeds":[{"kind":"const","value":[101,115,99,114,111,119]},{"kind":"account","path":"glam_state"}]}},{"name":"glam_vault","pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"glam_state"}]}},{"name":"glam_mint","writable":true},{"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":"const","value":[6,221,246,225,215,101,161,147,217,203,225,70,206,235,121,172,28,180,133,237,95,91,55,145,58,140,245,133,126,255,0,169]},{"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":"const","value":[6,221,246,225,215,101,161,147,217,203,225,70,206,235,121,172,28,180,133,237,95,91,55,145,58,140,245,133,126,255,0,169]},{"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":"token_program","address":"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{"name":"token_2022_program","address":"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"},{"name":"associated_token_program","address":"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"},{"name":"policies_program","address":"po1iCYakK3gHCLbuju4wGzFowTMpAJxkqK1iwUqMonY"}],"args":[{"name":"mint_id","type":"u8"},{"name":"amount_in","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_close_account","discriminator":[240,32,179,154,96,110,43,79],"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"},{"name":"system_program","address":"11111111111111111111111111111111"},{"name":"token_account","writable":true}],"args":[]},{"name":"token_transfer","discriminator":[210,16,52,5,247,164,59,18],"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"},{"name":"from","writable":true},{"name":"to","writable":true}],"args":[{"name":"lamports","type":"u64"}]},{"name":"token_transfer_checked","discriminator":[169,178,117,156,169,191,199,116],"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"},{"name":"from","writable":true},{"name":"mint"},{"name":"to","writable":true}],"args":[{"name":"lamports","type":"u64"},{"name":"decimals","type":"u8"}]},{"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":"token_2022_program","address":"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"}],"args":[{"name":"mint_id","type":"u8"},{"name":"mint_model","type":{"defined":{"name":"MintModel"}}}]},{"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":"withdraw","discriminator":[183,18,70,156,148,109,161,34],"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":"asset"},{"name":"vault_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"glam_vault"},{"kind":"account","path":"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":"signer_ata","writable":true,"pda":{"seeds":[{"kind":"account","path":"glam_signer"},{"kind":"account","path":"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":"token_program"}],"args":[{"name":"amount","type":"u64"}]}],"accounts":[{"name":"OpenfundsMetadataAccount","discriminator":[5,89,20,76,255,158,209,219]},{"name":"StateAccount","discriminator":[142,247,54,95,85,133,249,103]}],"errors":[{"code":48000,"name":"NotAuthorized","msg":"Signer is not authorized"},{"code":48001,"name":"IntegrationDisabled","msg":"Integration is disabled"},{"code":48002,"name":"StateAccountDisabled","msg":"State account is disabled"},{"code":48003,"name":"InvalidSignerAccount","msg":"Invalid signer token account"},{"code":49000,"name":"InvalidAccountType","msg":"Invalid account type"},{"code":49001,"name":"InvalidName","msg":"Name too long: max 64 chars"},{"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":"GlamMintNotFound","msg":"Glam mint not found"},{"code":49006,"name":"CannotCloseState","msg":"Glam state cannot be closed, all mints must be closed first"},{"code":49007,"name":"InvalidMintId","msg":"Invalid mint id"},{"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":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":"InvalidTokenAccount","msg":"Invalid token account"},{"code":50005,"name":"InvalidVoteSide","msg":"Invalid vote side"},{"code":50006,"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":51002,"name":"ActionPaused","msg":"Requested action is paused"},{"code":51003,"name":"InvalidAsset","msg":"Asset not allowed to subscribe"},{"code":51004,"name":"LedgerNotFound","msg":"Ledger not found"},{"code":51005,"name":"InvalidLedgerEntry","msg":"Invalid ledger entry"},{"code":51006,"name":"InvalidAmount","msg":"Invalid amount for subscription or redemption"},{"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":"UnpricedExternalAccounts","msg":"Not all external vault accounts are priced"},{"code":51104,"name":"VaultNotPriced","msg":"No priced assets found"},{"code":51105,"name":"PositiveAumRequired","msg":"AUM must be positive"},{"code":51106,"name":"MathError","msg":"Math error"},{"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":"Mint"},{"name":"Fund"}]}},{"name":"AccountsType","type":{"kind":"enum","variants":[{"name":"TransferHookX"},{"name":"TransferHookY"},{"name":"TransferHookReward"}]}},{"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":"AddLiquiditySingleSidePreciseParameter2","type":{"kind":"struct","fields":[{"name":"bins","type":{"vec":{"defined":{"name":"CompressedBinDepositAmount"}}}},{"name":"decompress_multiplier","type":"u64"},{"name":"max_amount","type":"u64"}]}},{"name":"BinLiquidityDistribution","type":{"kind":"struct","fields":[{"name":"bin_id","type":"i32"},{"name":"distribution_x","type":"u16"},{"name":"distribution_y","type":"u16"}]}},{"name":"BinLiquidityReduction","type":{"kind":"struct","fields":[{"name":"bin_id","type":"i32"},{"name":"bps_to_remove","type":"u16"}]}},{"name":"CompanyField","type":{"kind":"struct","fields":[{"name":"name","type":{"defined":{"name":"CompanyFieldName"}}},{"name":"value","type":"string"}]}},{"name":"CompanyFieldName","type":{"kind":"enum","variants":[{"name":"FundGroupName"},{"name":"ManCo"},{"name":"DomicileOfManCo"},{"name":"BICOfCustodian"},{"name":"CollateralManagerName"},{"name":"CustodianBankName"},{"name":"DomicileOfCustodianBank"},{"name":"FundAdministratorName"},{"name":"FundAdvisorName"},{"name":"FundPromoterName"},{"name":"IsSelfManagedInvestmentCompany"},{"name":"LEIOfCustodianBank"},{"name":"LEIOfManCo"},{"name":"PortfolioManagingCompanyName"},{"name":"SecuritiesLendingCounterpartyName"},{"name":"SwapCounterpartyName"},{"name":"AddressofManCo"},{"name":"AuditorName"},{"name":"CityofManCo"},{"name":"EmailAddressOfManCo"},{"name":"FundWebsiteOfManCo"},{"name":"IsUNPRISignatory"},{"name":"PhoneCountryCodeofManCo"},{"name":"PhoneNumberofManCo"},{"name":"SubInvestmentAdvisorName"},{"name":"ZIPCodeofManCo"},{"name":"DomicileOfUmbrella"},{"name":"HasUmbrella"},{"name":"LEIOfUmbrella"},{"name":"Umbrella"},{"name":"GlobalIntermediaryIdentificationNumberOfUmbrella"}]}},{"name":"CompanyModel","type":{"kind":"struct","fields":[{"name":"fund_group_name","type":{"option":"string"}},{"name":"man_co","type":{"option":"string"}},{"name":"domicile_of_man_co","type":{"option":"string"}},{"name":"email_address_of_man_co","type":{"option":"string"}},{"name":"fund_website_of_man_co","type":{"option":"string"}}]}},{"name":"CompressedBinDepositAmount","type":{"kind":"struct","fields":[{"name":"bin_id","type":"i32"},{"name":"amount","type":"u32"}]}},{"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":"permissions","type":{"vec":{"defined":{"name":"Permission"}}}},{"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":"Allowlist"},{"name":"Blocklist"},{"name":"ExternalVaultAccounts"},{"name":"LockUp"},{"name":"DriftMarketIndexesPerp"},{"name":"DriftMarketIndexesSpot"},{"name":"DriftOrderTypes"},{"name":"MaxSwapSlippageBps"},{"name":"TransferToAllowlist"},{"name":"PricedAssets"},{"name":"BaseAsset"},{"name":"MaxCap"},{"name":"MinSubscription"},{"name":"MinRedemption"},{"name":"Valuation"},{"name":"Ledger"},{"name":"FeeStructure"},{"name":"FeeParams"},{"name":"ClaimableFees"},{"name":"ClaimedFees"},{"name":"SubscriptionPaused"},{"name":"RedemptionPaused"}]}},{"name":"EngineFieldValue","type":{"kind":"enum","variants":[{"name":"Boolean","fields":[{"name":"val","type":"bool"}]},{"name":"Date","fields":[{"name":"val","type":"string"}]},{"name":"Double","fields":[{"name":"val","type":"i64"}]},{"name":"Integer","fields":[{"name":"val","type":"i32"}]},{"name":"String","fields":[{"name":"val","type":"string"}]},{"name":"Time","fields":[{"name":"val","type":"string"}]},{"name":"U8","fields":[{"name":"val","type":"u8"}]},{"name":"U64","fields":[{"name":"val","type":"u64"}]},{"name":"Pubkey","fields":[{"name":"val","type":"pubkey"}]},{"name":"Percentage","fields":[{"name":"val","type":"u32"}]},{"name":"URI","fields":[{"name":"val","type":"string"}]},{"name":"Timestamp","fields":[{"name":"val","type":"i64"}]},{"name":"VecPubkey","fields":[{"name":"val","type":{"vec":"pubkey"}}]},{"name":"VecU32","fields":[{"name":"val","type":{"vec":"u32"}}]},{"name":"VecPricedAssets","fields":[{"name":"val","type":{"vec":{"defined":{"name":"PricedAssets"}}}}]},{"name":"Ledger","fields":[{"name":"val","type":{"vec":{"defined":{"name":"LedgerEntry"}}}}]},{"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":"Valuation","fields":[{"name":"val","type":{"defined":{"name":"Valuation"}}}]}]}},{"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":"FundField","type":{"kind":"struct","fields":[{"name":"name","type":{"defined":{"name":"FundFieldName"}}},{"name":"value","type":"string"}]}},{"name":"FundFieldName","type":{"kind":"enum","variants":[{"name":"FundDomicileAlpha2"},{"name":"FundDomicileAlpha3"},{"name":"LegalFundNameIncludingUmbrella"},{"name":"FiscalYearEnd"},{"name":"FundCurrency"},{"name":"FundLaunchDate"},{"name":"InvestmentObjective"},{"name":"IsETC"},{"name":"IsEUDirectiveRelevant"},{"name":"IsFundOfFunds"},{"name":"IsPassiveFund"},{"name":"IsREIT"},{"name":"LegalForm"},{"name":"LegalFundNameOnly"},{"name":"OpenEndedOrClosedEndedFundStructure"},{"name":"TypeOfEUDirective"},{"name":"UCITSVersion"},{"name":"CurrencyHedgePortfolio"},{"name":"DepositoryName"},{"name":"FundValuationPoint"},{"name":"FundValuationPointTimeZone"},{"name":"FundValuationPointTimeZoneUsingTZDatabase"},{"name":"HasCollateralManager"},{"name":"HasEmbeddedDerivatives"},{"name":"HasSecuritiesLending"},{"name":"HasSwap"},{"name":"IsLeveraged"},{"name":"IsShariaCompliant"},{"name":"IsShort"},{"name":"LEIofDepositoryBank"},{"name":"LEIOfFund"},{"name":"LocationOfBearerShare"},{"name":"LocationOfShareRegister"},{"name":"MaximumLeverageInFund"},{"name":"MiFIDSecuritiesClassification"},{"name":"MoneyMarketTypeOfFund"},{"name":"TrusteeName"},{"name":"AuMFund"},{"name":"AuMFundDate"},{"name":"NoSFund"},{"name":"NoSFundDate"}]}},{"name":"FundManagerField","type":{"kind":"struct","fields":[{"name":"name","type":{"defined":{"name":"FundManagerFieldName"}}},{"name":"value","type":"string"}]}},{"name":"FundManagerFieldName","type":{"kind":"enum","variants":[{"name":"PortfolioManagerForename"},{"name":"PortfolioManagerName"},{"name":"PortfolioManagerYearOfBirth"},{"name":"PortfolioManagerYearOfExperienceStart"},{"name":"PortfolioManagerBriefBiography"},{"name":"PortfolioManagerType"},{"name":"PortfolioManagerRoleStartingDate"},{"name":"PortfolioManagerRoleEndDate"}]}},{"name":"FundOpenfundsModel","type":{"kind":"struct","fields":[{"name":"fund_domicile_alpha_2","type":{"option":"string"}},{"name":"legal_fund_name_including_umbrella","type":{"option":"string"}},{"name":"fiscal_year_end","type":{"option":"string"}},{"name":"fund_currency","type":{"option":"string"}},{"name":"fund_launch_date","type":{"option":"string"}},{"name":"investment_objective","type":{"option":"string"}},{"name":"is_etc","type":{"option":"bool"}},{"name":"is_eu_directive_relevant","type":{"option":"bool"}},{"name":"is_fund_of_funds","type":{"option":"bool"}},{"name":"is_passive_fund","type":{"option":"bool"}},{"name":"is_reit","type":{"option":"bool"}},{"name":"legal_form","type":{"option":"string"}},{"name":"legal_fund_name_only","type":{"option":"string"}},{"name":"open_ended_or_closed_ended_fund_structure","type":{"option":"string"}},{"name":"type_of_eu_directive","type":{"option":"string"}},{"name":"ucits_version","type":{"option":"string"}}]}},{"name":"HurdleType","type":{"kind":"enum","variants":[{"name":"Hard"},{"name":"Soft"}]}},{"name":"InitObligationArgs","type":{"kind":"struct","fields":[{"name":"tag","type":"u8"},{"name":"id","type":"u8"}]}},{"name":"Integration","type":{"kind":"enum","variants":[{"name":"Drift"},{"name":"SplStakePool"},{"name":"SanctumStakePool"},{"name":"NativeStaking"},{"name":"Marinade"},{"name":"JupiterSwap"},{"name":"JupiterVote"},{"name":"KaminoLending"},{"name":"MeteoraDlmm"}]}},{"name":"LedgerEntry","type":{"kind":"struct","fields":[{"name":"user","type":"pubkey"},{"name":"created_at","type":"u64"},{"name":"fulfilled_at","type":"u64"},{"name":"time_unit","type":{"defined":{"name":"TimeUnit"}}},{"name":"kind","type":{"defined":{"name":"LedgerEntryKind"}}},{"name":"incoming","type":{"defined":{"name":"PubkeyAmount"}}},{"name":"value","type":"u64"},{"name":"outgoing","type":{"option":{"defined":{"name":"PubkeyAmount"}}}}]}},{"name":"LedgerEntryKind","type":{"kind":"enum","variants":[{"name":"Subscription"},{"name":"Redemption"}]}},{"name":"LiquidityParameter","type":{"kind":"struct","fields":[{"name":"amount_x","type":"u64"},{"name":"amount_y","type":"u64"},{"name":"bin_liquidity_dist","type":{"vec":{"defined":{"name":"BinLiquidityDistribution"}}}}]}},{"name":"LiquidityParameterByStrategy","type":{"kind":"struct","fields":[{"name":"amount_x","type":"u64"},{"name":"amount_y","type":"u64"},{"name":"active_id","type":"i32"},{"name":"max_active_bin_slippage","type":"i32"},{"name":"strategy_parameters","type":{"defined":{"name":"StrategyParameters"}}}]}},{"name":"ManagementFee","type":{"kind":"struct","fields":[{"name":"fee_bps","type":"u16"}]}},{"name":"ManagerKind","type":{"kind":"enum","variants":[{"name":"Wallet"},{"name":"Squads"}]}},{"name":"ManagerModel","type":{"kind":"struct","fields":[{"name":"portfolio_manager_name","type":{"option":"string"}},{"name":"pubkey","type":{"option":"pubkey"}},{"name":"kind","type":{"option":{"defined":{"name":"ManagerKind"}}}}]}},{"name":"MarketType","type":{"kind":"enum","variants":[{"name":"Spot"},{"name":"Perp"}]}},{"name":"Metadata","type":{"kind":"struct","fields":[{"name":"template","type":{"defined":{"name":"MetadataTemplate"}}},{"name":"pubkey","type":"pubkey"},{"name":"uri","type":"string"}]}},{"name":"MetadataTemplate","type":{"kind":"enum","variants":[{"name":"Openfunds"}]}},{"name":"MintModel","type":{"kind":"struct","fields":[{"name":"symbol","type":{"option":"string"}},{"name":"name","type":{"option":"string"}},{"name":"uri","type":{"option":"string"}},{"name":"state_pubkey","type":{"option":"pubkey"}},{"name":"asset","type":{"option":"pubkey"}},{"name":"image_uri","type":{"option":"string"}},{"name":"allowlist","type":{"option":{"vec":"pubkey"}}},{"name":"blocklist","type":{"option":{"vec":"pubkey"}}},{"name":"lock_up_period_in_seconds","type":{"option":"i32"}},{"name":"permanent_delegate","type":{"option":"pubkey"}},{"name":"default_account_state_frozen","type":{"option":"bool"}},{"name":"fee_structure","type":{"option":{"defined":{"name":"FeeStructure"}}}},{"name":"fee_params","type":{"option":{"defined":{"name":"FeeParams"}}}},{"name":"valuation","type":{"option":{"defined":{"name":"Valuation"}}}},{"name":"min_subscription","type":{"option":"u64"}},{"name":"min_redemption","type":{"option":"u64"}},{"name":"is_raw_openfunds","type":{"option":"bool"}},{"name":"raw_openfunds","type":{"option":{"defined":{"name":"MintOpenfundsModel"}}}}]}},{"name":"MintOpenfundsModel","type":{"kind":"struct","fields":[{"name":"isin","type":{"option":"string"}},{"name":"share_class_currency","type":{"option":"string"}},{"name":"full_share_class_name","type":{"option":"string"}},{"name":"has_performance_fee","type":{"option":"bool"}},{"name":"investment_status","type":{"option":"string"}},{"name":"minimal_initial_subscription_in_amount","type":{"option":"string"}},{"name":"minimal_initial_subscription_in_shares","type":{"option":"string"}},{"name":"minimal_subsequent_subscription_in_amount","type":{"option":"string"}},{"name":"minimal_subsequent_subscription_in_shares","type":{"option":"string"}},{"name":"share_class_launch_date","type":{"option":"string"}},{"name":"share_class_lifecycle","type":{"option":"string"}},{"name":"launch_price","type":{"option":"string"}},{"name":"launch_price_currency","type":{"option":"string"}},{"name":"launch_price_date","type":{"option":"string"}},{"name":"has_lock_up_for_redemption","type":{"option":"bool"}},{"name":"lock_up_comment","type":{"option":"string"}},{"name":"lock_up_period_in_days","type":{"option":"string"}},{"name":"minimal_initial_redemption_in_amount","type":{"option":"string"}},{"name":"minimal_initial_redemption_in_shares","type":{"option":"string"}},{"name":"minimal_subsequent_redemption_in_amount","type":{"option":"string"}},{"name":"minimal_subsequent_redemption_in_shares","type":{"option":"string"}},{"name":"rounding_method_for_prices","type":{"option":"string"}},{"name":"cusip","type":{"option":"string"}},{"name":"valor","type":{"option":"string"}}]}},{"name":"ModifyOrderParams","type":{"kind":"struct","fields":[{"name":"direction","type":{"option":{"defined":{"name":"PositionDirection"}}}},{"name":"base_asset_amount","type":{"option":"u64"}},{"name":"price","type":{"option":"u64"}},{"name":"reduce_only","type":{"option":"bool"}},{"name":"post_only","type":{"option":{"defined":{"name":"PostOnlyParam"}}}},{"name":"immediate_or_cancel","type":{"option":"bool"}},{"name":"max_ts","type":{"option":"i64"}},{"name":"trigger_price","type":{"option":"u64"}},{"name":"trigger_condition","type":{"option":{"defined":{"name":"OrderTriggerCondition"}}}},{"name":"oracle_price_offset","type":{"option":"i32"}},{"name":"auction_duration","type":{"option":"u8"}},{"name":"auction_start_price","type":{"option":"i64"}},{"name":"auction_end_price","type":{"option":"i64"}},{"name":"policy","type":{"option":"u8"}}]}},{"name":"NoticePeriodType","type":{"kind":"enum","variants":[{"name":"Hard"},{"name":"Soft"}]}},{"name":"OpenfundsMetadataAccount","type":{"kind":"struct","fields":[{"name":"fund_id","type":"pubkey"},{"name":"company","type":{"vec":{"defined":{"name":"CompanyField"}}}},{"name":"fund","type":{"vec":{"defined":{"name":"FundField"}}}},{"name":"share_classes","type":{"vec":{"vec":{"defined":{"name":"ShareClassField"}}}}},{"name":"fund_managers","type":{"vec":{"vec":{"defined":{"name":"FundManagerField"}}}}}]}},{"name":"OrderParams","type":{"kind":"struct","fields":[{"name":"order_type","type":{"defined":{"name":"OrderType"}}},{"name":"market_type","type":{"defined":{"name":"MarketType"}}},{"name":"direction","type":{"defined":{"name":"PositionDirection"}}},{"name":"user_order_id","type":"u8"},{"name":"base_asset_amount","type":"u64"},{"name":"price","type":"u64"},{"name":"market_index","type":"u16"},{"name":"reduce_only","type":"bool"},{"name":"post_only","type":{"defined":{"name":"PostOnlyParam"}}},{"name":"immediate_or_cancel","type":"bool"},{"name":"max_ts","type":{"option":"i64"}},{"name":"trigger_price","type":{"option":"u64"}},{"name":"trigger_condition","type":{"defined":{"name":"OrderTriggerCondition"}}},{"name":"oracle_price_offset","type":{"option":"i32"}},{"name":"auction_duration","type":{"option":"u8"}},{"name":"auction_start_price","type":{"option":"i64"}},{"name":"auction_end_price","type":{"option":"i64"}}]}},{"name":"OrderTriggerCondition","type":{"kind":"enum","variants":[{"name":"Above"},{"name":"Below"},{"name":"TriggeredAbove"},{"name":"TriggeredBelow"}]}},{"name":"OrderType","type":{"kind":"enum","variants":[{"name":"Market"},{"name":"Limit"},{"name":"TriggerMarket"},{"name":"TriggerLimit"},{"name":"Oracle"}]}},{"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":"Permission","docs":["* Delegate ACL"],"type":{"kind":"enum","variants":[{"name":"DriftInit"},{"name":"DriftUpdateUser"},{"name":"DriftDeleteUser"},{"name":"DriftDeposit"},{"name":"DriftWithdraw"},{"name":"DriftOrders"},{"name":"DriftBorrow"},{"name":"DriftPerpMarket"},{"name":"DriftSpotMarket"},{"name":"Stake"},{"name":"Unstake"},{"name":"__DeprecatedLiquidUnstake"},{"name":"JupiterSwapAllowlisted"},{"name":"JupiterSwapAny"},{"name":"WSol"},{"name":"__DeprecatedWSolUnwrap"},{"name":"MintMintTokens"},{"name":"MintBurnTokens"},{"name":"MintForceTransferTokens"},{"name":"MintSetTokenAccountState"},{"name":"JupiterGovStake"},{"name":"JupiterGovVoteOnProposal"},{"name":"JupiterGovUnstake"},{"name":"JupiterSwapLst"},{"name":"JupiterSwapPriceable"},{"name":"KaminoInit"},{"name":"KaminoDeposit"},{"name":"KaminoBorrow"},{"name":"KaminoWithdraw"},{"name":"MeteoraDlmmPosition"},{"name":"MeteoraDlmmLiquidity"},{"name":"MeteoraDlmmClaim"},{"name":"MeteoraDlmmSwap"},{"name":"TransferToAllowlisted"},{"name":"JupiterGovWithdraw"},{"name":"JupiterGovClaim"}]}},{"name":"PositionDirection","type":{"kind":"enum","variants":[{"name":"Long"},{"name":"Short"}]}},{"name":"PostOnlyParam","type":{"kind":"enum","variants":[{"name":"None"},{"name":"MustPostOnly"},{"name":"TryPostOnly"},{"name":"Slide"}]}},{"name":"PriceDenom","type":{"kind":"enum","variants":[{"name":"SOL"},{"name":"USD"}]}},{"name":"PricedAssets","type":{"kind":"struct","fields":[{"name":"denom","type":{"defined":{"name":"PriceDenom"}}},{"name":"accounts","type":{"vec":"pubkey"}},{"name":"rent","type":"u64"},{"name":"amount","type":"i128"},{"name":"decimals","type":"u8"},{"name":"last_updated_slot","type":"u64"},{"name":"integration","type":{"option":{"defined":{"name":"Integration"}}}}]}},{"name":"ProtocolFees","type":{"kind":"struct","fields":[{"name":"base_fee_bps","type":"u16"},{"name":"flow_fee_bps","type":"u16"}]}},{"name":"PubkeyAmount","type":{"kind":"struct","fields":[{"name":"pubkey","type":"pubkey"},{"name":"amount","type":"u64"},{"name":"decimals","type":"u8"}]}},{"name":"RemainingAccountsInfo","type":{"kind":"struct","fields":[{"name":"slices","type":{"vec":{"defined":{"name":"RemainingAccountsSlice"}}}}]}},{"name":"RemainingAccountsSlice","type":{"kind":"struct","fields":[{"name":"accounts_type","type":{"defined":{"name":"AccountsType"}}},{"name":"length","type":"u8"}]}},{"name":"ShareClassField","type":{"kind":"struct","fields":[{"name":"name","type":{"defined":{"name":"ShareClassFieldName"}}},{"name":"value","type":"string"}]}},{"name":"ShareClassFieldName","type":{"kind":"enum","variants":[{"name":"ISIN"},{"name":"ShareClassCurrency"},{"name":"AppliedSubscriptionFeeInFavourOfDistributor"},{"name":"AppliedSubscriptionFeeInFavourOfDistributorReferenceDate"},{"name":"CurrencyOfMinimalSubscription"},{"name":"FullShareClassName"},{"name":"HasPerformanceFee"},{"name":"HasSubscriptionFeeInFavourOfDistributor"},{"name":"InvestmentStatus"},{"name":"ManagementFeeApplied"},{"name":"ManagementFeeAppliedReferenceDate"},{"name":"ManagementFeeMaximum"},{"name":"MaximumSubscriptionFeeInFavourOfDistributor"},{"name":"MinimalInitialSubscriptionCategory"},{"name":"MinimalInitialSubscriptionInAmount"},{"name":"MinimalInitialSubscriptionInShares"},{"name":"MinimalSubsequentSubscriptionCategory"},{"name":"MinimalSubsequentSubscriptionInAmount"},{"name":"MinimalSubsequentSubscriptionInShares"},{"name":"MinimumSubscriptionFeeInFavourOfDistributor"},{"name":"ShareClassDistributionPolicy"},{"name":"ShareClassExtension"},{"name":"ShareClassLaunchDate"},{"name":"ShareClassLifecycle"},{"name":"SRRI"},{"name":"LaunchPrice"},{"name":"LaunchPriceCurrency"},{"name":"LaunchPriceDate"},{"name":"HasAppliedSubscriptionFeeInFavourOfFund"},{"name":"AppliedSubscriptionFeeInFavourOfFund"},{"name":"AppliedSubscriptionFeeInFavourOfFundReferenceDate"},{"name":"MaximumSubscriptionFeeInFavourOfFund"},{"name":"HasAppliedRedemptionFeeInFavourOfFund"},{"name":"AppliedRedemptionFeeInFavourOfFund"},{"name":"AppliedRedemptionFeeInFavourOfFundReferenceDate"},{"name":"MaximumRedemptionFeeInFavourOfFund"},{"name":"AppliedRedemptionFeeInFavourOfDistributor"},{"name":"AppliedRedemptionFeeInFavourOfDistributorReferenceDate"},{"name":"CurrencyOfMinimalOrMaximumRedemption"},{"name":"CutOffDateOffsetForRedemption"},{"name":"CutOffDateOffsetForSubscription"},{"name":"CutOffTimeForRedemption"},{"name":"CutOffTimeForSubscription"},{"name":"HasLockUpForRedemption"},{"name":"HasRedemptionFeeInFavourOfDistributor"},{"name":"IsValidISIN"},{"name":"LockUpComment"},{"name":"LockUpPeriodInDays"},{"name":"ManagementFeeMinimum"},{"name":"MaximalNumberOfPossibleDecimalsAmount"},{"name":"MaximalNumberOfPossibleDecimalsNAV"},{"name":"MaximalNumberOfPossibleDecimalsShares"},{"name":"MaximumInitialRedemptionInAmount"},{"name":"MaximumInitialRedemptionInShares"},{"name":"MaximumRedemptionFeeInFavourOfDistributor"},{"name":"MaximumSubsequentRedemptionInAmount"},{"name":"MaximumSubsequentRedemptionInShares"},{"name":"MinimalInitialRedemptionInAmount"},{"name":"MinimalInitialRedemptionInShares"},{"name":"MinimalRedemptionCategory"},{"name":"MinimalSubsequentRedemptionInAmount"},{"name":"MinimalSubsequentRedemptionInShares"},{"name":"MinimumRedemptionFeeInFavourOfDistributor"},{"name":"MinimumRedemptionFeeInFavourOfFund"},{"name":"MinimumSubscriptionFeeInFavourOfFund"},{"name":"PerformanceFeeMinimum"},{"name":"RoundingMethodForPrices"},{"name":"RoundingMethodForRedemptionInAmount"},{"name":"RoundingMethodForRedemptionInShares"},{"name":"RoundingMethodForSubscriptionInAmount"},{"name":"RoundingMethodForSubscriptionInShares"},{"name":"ShareClassDividendType"},{"name":"CUSIP"},{"name":"Valor"},{"name":"FundId"},{"name":"ImageUri"}]}},{"name":"StateAccount","type":{"kind":"struct","fields":[{"name":"account_type","type":{"defined":{"name":"AccountType"}}},{"name":"owner","type":"pubkey"},{"name":"vault","type":"pubkey"},{"name":"enabled","type":"bool"},{"name":"created","type":{"defined":{"name":"CreatedModel"}}},{"name":"engine","type":"pubkey"},{"name":"mints","type":{"vec":"pubkey"}},{"name":"metadata","type":{"option":{"defined":{"name":"Metadata"}}}},{"name":"name","type":"string"},{"name":"uri","type":"string"},{"name":"assets","type":{"vec":"pubkey"}},{"name":"delegate_acls","type":{"vec":{"defined":{"name":"DelegateAcl"}}}},{"name":"integrations","type":{"vec":{"defined":{"name":"Integration"}}}},{"name":"params","type":{"vec":{"vec":{"defined":{"name":"EngineField"}}}}}]}},{"name":"StateModel","type":{"kind":"struct","fields":[{"name":"id","type":{"option":"pubkey"}},{"name":"account_type","type":{"option":{"defined":{"name":"AccountType"}}}},{"name":"name","type":{"option":"string"}},{"name":"uri","type":{"option":"string"}},{"name":"enabled","type":{"option":"bool"}},{"name":"assets","type":{"option":{"vec":"pubkey"}}},{"name":"external_vault_accounts","type":{"option":{"vec":"pubkey"}}},{"name":"mints","type":{"option":{"vec":{"defined":{"name":"MintModel"}}}}},{"name":"company","type":{"option":{"defined":{"name":"CompanyModel"}}}},{"name":"owner","type":{"option":{"defined":{"name":"ManagerModel"}}}},{"name":"created","type":{"option":{"defined":{"name":"CreatedModel"}}}},{"name":"delegate_acls","type":{"option":{"vec":{"defined":{"name":"DelegateAcl"}}}}},{"name":"integrations","type":{"option":{"vec":{"defined":{"name":"Integration"}}}}},{"name":"drift_market_indexes_perp","type":{"option":{"vec":"u32"}}},{"name":"drift_market_indexes_spot","type":{"option":{"vec":"u32"}}},{"name":"drift_order_types","type":{"option":{"vec":"u32"}}},{"name":"base_asset","type":{"option":"pubkey"}},{"name":"max_cap","type":{"option":"u64"}},{"name":"metadata","type":{"option":{"defined":{"name":"Metadata"}}}},{"name":"raw_openfunds","type":{"option":{"defined":{"name":"FundOpenfundsModel"}}}}]}},{"name":"StrategyParameters","type":{"kind":"struct","fields":[{"name":"min_bin_id","type":"i32"},{"name":"max_bin_id","type":"i32"},{"name":"strategy_type","type":{"defined":{"name":"StrategyType"}}},{"name":"parameteres","type":{"array":["u8",64]}}]}},{"name":"StrategyType","type":{"kind":"enum","variants":[{"name":"SpotOneSide"},{"name":"CurveOneSide"},{"name":"BidAskOneSide"},{"name":"SpotBalanced"},{"name":"CurveBalanced"},{"name":"BidAskBalanced"},{"name":"SpotImBalanced"},{"name":"CurveImBalanced"},{"name":"BidAskImBalanced"}]}},{"name":"TimeUnit","type":{"kind":"enum","variants":[{"name":"Slot"},{"name":"Second"}]}},{"name":"Valuation","type":{"kind":"struct","fields":[{"name":"model","type":{"defined":{"name":"ValuationModel"}}},{"name":"notice_period","type":"u64"},{"name":"notice_period_type","type":{"defined":{"name":"NoticePeriodType"}}},{"name":"permissionless_fulfillment","type":"bool"},{"name":"settlement_period","type":"u64"},{"name":"cancellation_window","type":"u64"},{"name":"time_unit","type":{"defined":{"name":"TimeUnit"}}}]}},{"name":"ValuationModel","type":{"kind":"enum","variants":[{"name":"Continuous"},{"name":"Periodic"}]}}],"constants":[{"name":"SEED_ACCOUNT_POLICY","type":"string","value":"\\"account-policy\\""},{"name":"SEED_ESCROW","type":"string","value":"\\"escrow\\""},{"name":"SEED_METADATA","type":"string","value":"\\"metadata\\""},{"name":"SEED_MINT","type":"string","value":"\\"mint\\""},{"name":"SEED_STATE","type":"string","value":"\\"state\\""},{"name":"SEED_VAULT","type":"string","value":"\\"vault\\""}]}');
84
84
 
85
85
  /***/ }),
86
86
  /* 7 */
@@ -95,13 +95,13 @@ const spl_token_1 = __webpack_require__(8);
95
95
  const spl_token_metadata_1 = __webpack_require__(9);
96
96
  const anchor_1 = __webpack_require__(2);
97
97
  const constants_1 = __webpack_require__(10);
98
- exports.GlamIntegrations = glamExports_1.GlamIDLJson?.types
98
+ exports.GlamIntegrations = glamExports_1.GlamProtocolIdlJson?.types
99
99
  ?.find((t) => t.name === "Integration")
100
100
  ?.type?.variants?.map((v) => v.name) ?? [];
101
- exports.GlamPermissions = glamExports_1.GlamIDLJson?.types
101
+ exports.GlamPermissions = glamExports_1.GlamProtocolIdlJson?.types
102
102
  ?.find((t) => t.name === "Permission")
103
103
  ?.type?.variants?.map((v) => v.name) ?? [];
104
- const GLAM_PROGRAM_ID_DEFAULT = new web3_js_1.PublicKey(glamExports_1.GlamIDLJson.address);
104
+ const GLAM_PROGRAM_ID_DEFAULT = new web3_js_1.PublicKey(glamExports_1.GlamProtocolIdlJson.address);
105
105
  class StateIdlModel {
106
106
  constructor(data) {
107
107
  this.id = data.id ?? null;
@@ -122,6 +122,8 @@ class StateIdlModel {
122
122
  this.driftOrderTypes = data.driftOrderTypes ?? null;
123
123
  this.metadata = data.metadata ?? null;
124
124
  this.rawOpenfunds = data.rawOpenfunds ?? null;
125
+ this.baseAsset = data.baseAsset ?? null;
126
+ this.maxCap = data.maxCap ?? null;
125
127
  }
126
128
  }
127
129
  exports.StateIdlModel = StateIdlModel;
@@ -193,6 +195,7 @@ class StateModel extends StateIdlModel {
193
195
  mints: [],
194
196
  };
195
197
  // All fields in fund params[0] should be available on the StateModel
198
+ // @ts-ignore
196
199
  stateAccount.params[0].forEach((param) => {
197
200
  const name = Object.keys(param.name)[0];
198
201
  // @ts-ignore
@@ -214,6 +217,15 @@ class StateModel extends StateIdlModel {
214
217
  fundOpenfundsFields[name] = value;
215
218
  });
216
219
  stateModel.rawOpenfunds = new FundOpenfundsModel(fundOpenfundsFields);
220
+ // Build stateModel.company from openfunds account
221
+ const company = {};
222
+ openfundsMetadataAccount?.company.forEach((param) => {
223
+ const name = Object.keys(param.name)[0];
224
+ const value = param.value;
225
+ // @ts-ignore
226
+ company[name] = value;
227
+ });
228
+ stateModel.company = new CompanyModel(company);
217
229
  // Build the array of ShareClassModel
218
230
  stateAccount.mints.forEach((_, i) => {
219
231
  const mintIdlModel = {};
@@ -252,6 +264,13 @@ class StateModel extends StateIdlModel {
252
264
  const permanentDelegate = new web3_js_1.PublicKey(extPermDelegate);
253
265
  mintIdlModel["permanentDelegate"] = permanentDelegate;
254
266
  }
267
+ // default account state
268
+ const extDefaultState = (0, spl_token_1.getExtensionData)(spl_token_1.ExtensionType.DefaultAccountState, glamMint.tlvData);
269
+ if (extDefaultState) {
270
+ // @ts-ignore
271
+ mintIdlModel["defaultAccountStateFrozen"] =
272
+ extDefaultState.readUInt8() === 2;
273
+ }
255
274
  }
256
275
  // stateModel.shareClasses should never be null
257
276
  // non-null assertion is safe and is needed to suppress type error
@@ -261,6 +280,7 @@ class StateModel extends StateIdlModel {
261
280
  stateModel.name ||
262
281
  stateModel.rawOpenfunds?.legalFundNameIncludingUmbrella ||
263
282
  (stateModel.mints && stateModel.mints[0]?.name);
283
+ // @ts-ignore
264
284
  return new StateModel(stateModel, glamProgramId);
265
285
  }
266
286
  }
@@ -303,6 +323,11 @@ class MintIdlModel {
303
323
  this.lockUpPeriodInSeconds = data.lockUpPeriodInSeconds ?? null;
304
324
  this.permanentDelegate = data.permanentDelegate ?? null;
305
325
  this.defaultAccountStateFrozen = data.defaultAccountStateFrozen ?? null;
326
+ this.feeStructure = data.feeStructure ?? null;
327
+ this.feeParams = data.feeParams ?? null;
328
+ this.valuation = data.valuation ?? null;
329
+ this.minSubscription = data.minSubscription ?? null;
330
+ this.minRedemption = data.minRedemption ?? null;
306
331
  }
307
332
  }
308
333
  exports.MintIdlModel = MintIdlModel;
@@ -324,40 +349,34 @@ class MintOpenfundsModel {
324
349
  constructor(obj) {
325
350
  this.isin = obj.isin ?? null;
326
351
  this.shareClassCurrency = obj.shareClassCurrency ?? null;
327
- this.currencyOfMinimalSubscription =
328
- obj.currencyOfMinimalSubscription ?? null;
329
352
  this.fullShareClassName = obj.fullShareClassName ?? null;
353
+ this.hasPerformanceFee = obj.hasPerformanceFee ?? null;
330
354
  this.investmentStatus = obj.investmentStatus ?? null;
331
- this.minimalInitialSubscriptionCategory =
332
- obj.minimalInitialSubscriptionCategory ?? null;
333
355
  this.minimalInitialSubscriptionInAmount =
334
356
  obj.minimalInitialSubscriptionInAmount ?? null;
335
357
  this.minimalInitialSubscriptionInShares =
336
358
  obj.minimalInitialSubscriptionInShares ?? null;
337
- this.shareClassDistributionPolicy =
338
- obj.shareClassDistributionPolicy ?? null;
339
- this.shareClassExtension = obj.shareClassExtension ?? null;
359
+ this.minimalSubsequentSubscriptionInAmount =
360
+ obj.minimalSubsequentSubscriptionInAmount ?? null;
361
+ this.minimalSubsequentSubscriptionInShares =
362
+ obj.minimalSubsequentSubscriptionInShares ?? null;
340
363
  this.shareClassLaunchDate = obj.shareClassLaunchDate ?? null;
341
364
  this.shareClassLifecycle = obj.shareClassLifecycle ?? null;
342
365
  this.launchPrice = obj.launchPrice ?? null;
343
366
  this.launchPriceCurrency = obj.launchPriceCurrency ?? null;
344
367
  this.launchPriceDate = obj.launchPriceDate ?? null;
345
- this.currencyOfMinimalOrMaximumRedemption =
346
- obj.currencyOfMinimalOrMaximumRedemption ?? null;
347
368
  this.hasLockUpForRedemption = obj.hasLockUpForRedemption ?? null;
348
- this.isValidIsin = obj.isValidIsin ?? null;
349
369
  this.lockUpComment = obj.lockUpComment ?? null;
350
370
  this.lockUpPeriodInDays = obj.lockUpPeriodInDays ?? null;
351
- this.maximumInitialRedemptionInAmount =
352
- obj.maximumInitialRedemptionInAmount ?? null;
353
- this.maximumInitialRedemptionInShares =
354
- obj.maximumInitialRedemptionInShares ?? null;
355
371
  this.minimalInitialRedemptionInAmount =
356
372
  obj.minimalInitialRedemptionInAmount ?? null;
357
373
  this.minimalInitialRedemptionInShares =
358
374
  obj.minimalInitialRedemptionInShares ?? null;
359
- this.minimalRedemptionCategory = obj.minimalRedemptionCategory ?? null;
360
- this.shareClassDividendType = obj.shareClassDividendType ?? null;
375
+ this.minimalSubsequentRedemptionInAmount =
376
+ obj.minimalSubsequentRedemptionInAmount ?? null;
377
+ this.minimalSubsequentRedemptionInShares =
378
+ obj.minimalSubsequentRedemptionInShares ?? null;
379
+ this.roundingMethodForPrices = obj.roundingMethodForPrices ?? null;
361
380
  this.cusip = obj.cusip ?? null;
362
381
  this.valor = obj.valor ?? null;
363
382
  }
@@ -425,13 +444,21 @@ module.exports = require("@solana/spl-token-metadata");
425
444
 
426
445
 
427
446
  Object.defineProperty(exports, "__esModule", ({ value: true }));
428
- exports.JUPSOL_STAKE_POOL = exports.JITO_STAKE_POOL = exports.JUP_VOTE_PROGRAM = exports.GOVERNANCE_PROGRAM_ID = exports.SANCTUM_STAKE_POOL_PROGRAM_ID = exports.JUPITER_PROGRAM_ID = exports.DRIFT_PROGRAM_ID = exports.MARINADE_PROGRAM_ID = exports.JUP = exports.WBTC = exports.WETH = exports.USDC = exports.JITOSOL = exports.MSOL = exports.WSOL = exports.SEED_VAULT = exports.SEED_STATE = exports.SEED_MINT = exports.SEED_METADATA = void 0;
447
+ exports.JUPSOL_STAKE_POOL = exports.JITO_STAKE_POOL = 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_PROGRAM_ID = exports.MARINADE_PROGRAM_ID = exports.JUP = exports.WBTC = exports.WETH = exports.USDC = exports.JITOSOL = exports.MSOL = exports.WSOL = exports.JITO_TIP_DEFAULT = exports.STAKE_ACCOUNT_SIZE = exports.MARINADE_TICKET_SIZE = exports.SEED_ESCROW = exports.SEED_VAULT = exports.SEED_STATE = exports.SEED_MINT = exports.SEED_METADATA = void 0;
429
448
  const web3_js_1 = __webpack_require__(5);
430
449
  const glamExports_1 = __webpack_require__(4);
431
- exports.SEED_METADATA = (glamExports_1.GlamIDLJson.constants.find((x) => x.name === "SEED_METADATA")?.value || "").replace(/"/g, "");
432
- exports.SEED_MINT = (glamExports_1.GlamIDLJson.constants.find((x) => x.name === "SEED_MINT")?.value || "").replace(/"/g, "");
433
- exports.SEED_STATE = (glamExports_1.GlamIDLJson.constants.find((x) => x.name === "SEED_STATE")?.value || "").replace(/"/g, "");
434
- exports.SEED_VAULT = (glamExports_1.GlamIDLJson.constants.find((x) => x.name === "SEED_VAULT")?.value || "").replace(/"/g, "");
450
+ exports.SEED_METADATA = (glamExports_1.GlamProtocolIdlJson.constants.find((x) => x.name === "SEED_METADATA")
451
+ ?.value || "").replace(/"/g, "");
452
+ exports.SEED_MINT = (glamExports_1.GlamProtocolIdlJson.constants.find((x) => x.name === "SEED_MINT")?.value || "").replace(/"/g, "");
453
+ exports.SEED_STATE = (glamExports_1.GlamProtocolIdlJson.constants.find((x) => x.name === "SEED_STATE")?.value ||
454
+ "").replace(/"/g, "");
455
+ exports.SEED_VAULT = (glamExports_1.GlamProtocolIdlJson.constants.find((x) => x.name === "SEED_VAULT")?.value ||
456
+ "").replace(/"/g, "");
457
+ exports.SEED_ESCROW = (glamExports_1.GlamProtocolIdlJson.constants.find((x) => x.name === "SEED_ESCROW")?.value ||
458
+ "").replace(/"/g, "");
459
+ exports.MARINADE_TICKET_SIZE = 88;
460
+ exports.STAKE_ACCOUNT_SIZE = 200;
461
+ exports.JITO_TIP_DEFAULT = new web3_js_1.PublicKey("96gYZGLnJYVFmbjzopPSU6QiEV5fGqZNyN9nmNhvrZU5");
435
462
  /**
436
463
  * Token mints. If no devnet version is defined, assume mainnet and devnet addresses are the same.
437
464
  *
@@ -457,6 +484,8 @@ exports.JUPITER_PROGRAM_ID = new web3_js_1.PublicKey("JUP6LkbZbjS1jKKwapdHNy74zc
457
484
  exports.SANCTUM_STAKE_POOL_PROGRAM_ID = new web3_js_1.PublicKey("SP12tWFxD9oJsVWNavTTBZvMbA6gkAmxtVgxdqvyvhY");
458
485
  exports.GOVERNANCE_PROGRAM_ID = new web3_js_1.PublicKey("GovaE4iu227srtG2s3tZzB4RmWBzw8sTwrCLZz7kN7rY");
459
486
  exports.JUP_VOTE_PROGRAM = new web3_js_1.PublicKey("voTpe3tHQ7AjQHMapgSue2HJFAh2cGsdokqN3XqmVSj");
487
+ exports.MERKLE_DISTRIBUTOR_PROGRAM = new web3_js_1.PublicKey("DiS3nNjFVMieMgmiQFm6wgJL7nevk4NrhXKLbtEH1Z2R");
488
+ exports.TRANSFER_HOOK_PROGRAM = new web3_js_1.PublicKey("po1iCYakK3gHCLbuju4wGzFowTMpAJxkqK1iwUqMonY");
460
489
  /**
461
490
  * Stake pools
462
491
  */
@@ -489,16 +518,17 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
489
518
  exports.GlamClient = exports.JUPITER_API_DEFAULT = void 0;
490
519
  const base_1 = __webpack_require__(13);
491
520
  const drift_1 = __webpack_require__(19);
492
- const investor_1 = __webpack_require__(21);
493
- const jupiter_1 = __webpack_require__(22);
494
- const jupiter_2 = __webpack_require__(22);
495
- const marinade_1 = __webpack_require__(23);
496
- const wsol_1 = __webpack_require__(25);
497
- const staking_1 = __webpack_require__(26);
498
- const state_1 = __webpack_require__(28);
499
- const mint_1 = __webpack_require__(29);
500
- const kamino_1 = __webpack_require__(30);
501
- const meteora_1 = __webpack_require__(32);
521
+ const jupiter_1 = __webpack_require__(21);
522
+ const jupiter_2 = __webpack_require__(21);
523
+ const marinade_1 = __webpack_require__(22);
524
+ const wsol_1 = __webpack_require__(24);
525
+ const staking_1 = __webpack_require__(25);
526
+ const state_1 = __webpack_require__(27);
527
+ const mint_1 = __webpack_require__(28);
528
+ const kamino_1 = __webpack_require__(29);
529
+ const meteora_1 = __webpack_require__(31);
530
+ const investor_1 = __webpack_require__(33);
531
+ const price_1 = __webpack_require__(34);
502
532
  var base_2 = __webpack_require__(13);
503
533
  Object.defineProperty(exports, "JUPITER_API_DEFAULT", ({ enumerable: true, get: function () { return base_2.JUPITER_API_DEFAULT; } }));
504
534
  /**
@@ -552,6 +582,12 @@ class GlamClient extends base_1.BaseClient {
552
582
  }
553
583
  return this._staking;
554
584
  }
585
+ get price() {
586
+ if (!this._price) {
587
+ this._price = new price_1.PriceClient(this);
588
+ }
589
+ return this._price;
590
+ }
555
591
  get state() {
556
592
  if (!this._state) {
557
593
  this._state = new state_1.StateClient(this);
@@ -586,9 +622,10 @@ exports.GlamClient = GlamClient;
586
622
 
587
623
 
588
624
  Object.defineProperty(exports, "__esModule", ({ value: true }));
589
- exports.BaseClient = exports.isBrowser = exports.JITO_TIP_DEFAULT = exports.JUPITER_API_DEFAULT = void 0;
625
+ exports.BaseClient = exports.isBrowser = exports.JUPITER_API_DEFAULT = void 0;
590
626
  const tslib_1 = __webpack_require__(1);
591
627
  const anchor = tslib_1.__importStar(__webpack_require__(2));
628
+ const anchor_1 = __webpack_require__(2);
592
629
  const web3_js_1 = __webpack_require__(5);
593
630
  const helpers_1 = __webpack_require__(14);
594
631
  const spl_token_1 = __webpack_require__(8);
@@ -600,8 +637,7 @@ const assets_1 = __webpack_require__(15);
600
637
  const error_1 = __webpack_require__(16);
601
638
  const bytes_1 = __webpack_require__(17);
602
639
  const blockhash_1 = __webpack_require__(18);
603
- exports.JUPITER_API_DEFAULT = "https://quote-api.jup.ag/v6";
604
- exports.JITO_TIP_DEFAULT = new web3_js_1.PublicKey("96gYZGLnJYVFmbjzopPSU6QiEV5fGqZNyN9nmNhvrZU5");
640
+ exports.JUPITER_API_DEFAULT = "https://lite-api.jup.ag";
605
641
  const DEFAULT_PRIORITY_FEE = 10000; // microLamports
606
642
  exports.isBrowser = process.env.ANCHOR_BROWSER ||
607
643
  (typeof window !== "undefined" && !window.process?.hasOwnProperty("type"));
@@ -689,7 +725,9 @@ class BaseClient {
689
725
  }
690
726
  catch (e) { }
691
727
  }
692
- console.log(`Final priority fee to use: ${priorityFeeMicroLamports} microLamports`);
728
+ if (process.env.NODE_ENV === "development") {
729
+ console.log(`Final priority fee to use: ${priorityFeeMicroLamports} microLamports`);
730
+ }
693
731
  return [
694
732
  web3_js_1.ComputeBudgetProgram.setComputeUnitPrice({
695
733
  microLamports: priorityFeeMicroLamports,
@@ -704,7 +742,7 @@ class BaseClient {
704
742
  if (jitoTipLamports) {
705
743
  instructions.unshift(web3_js_1.SystemProgram.transfer({
706
744
  fromPubkey: signer,
707
- toPubkey: exports.JITO_TIP_DEFAULT,
745
+ toPubkey: constants_1.JITO_TIP_DEFAULT,
708
746
  lamports: jitoTipLamports,
709
747
  }));
710
748
  }
@@ -720,7 +758,7 @@ class BaseClient {
720
758
  if (simulate) {
721
759
  tx.recentBlockhash = recentBlockhash;
722
760
  tx.feePayer = signer;
723
- console.log("Tx payload:", tx.serialize({ verifySignatures: false }).toString("base64"));
761
+ console.log("Tx (base64):", tx.serialize({ verifySignatures: false }).toString("base64"));
724
762
  console.error("Simulation failed.");
725
763
  throw e;
726
764
  }
@@ -773,8 +811,9 @@ class BaseClient {
773
811
  // the tx fails on chain execution.
774
812
  skipPreflight: true,
775
813
  });
776
- // await confirmation
777
- console.log("Confirming tx:", txSig);
814
+ if (process.env.NODE_ENV === "development") {
815
+ console.log("Confirming tx:", txSig);
816
+ }
778
817
  const latestBlockhash = await this.blockhashWithCache.get();
779
818
  const res = await connection.confirmTransaction({
780
819
  ...latestBlockhash,
@@ -839,6 +878,10 @@ class BaseClient {
839
878
  const [pda, _bump] = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from(constants_1.SEED_VAULT), statePda.toBuffer()], this.program.programId);
840
879
  return pda;
841
880
  }
881
+ getEscrowPda(statePda) {
882
+ const [pda, _bump] = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from(constants_1.SEED_ESCROW), statePda.toBuffer()], this.program.programId);
883
+ return pda;
884
+ }
842
885
  getVaultAta(glamState, mint, programId) {
843
886
  return this.getAta(mint, this.getVaultPda(glamState), programId);
844
887
  }
@@ -918,6 +961,14 @@ class BaseClient {
918
961
  getMintAta(user, mintPda) {
919
962
  return this.getAta(mintPda, user, spl_token_1.TOKEN_2022_PROGRAM_ID);
920
963
  }
964
+ getExtraMetasPda(glamState, mintIdx = 0) {
965
+ const mintPda = this.getMintPda(glamState, mintIdx);
966
+ return web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("extra-account-metas"), mintPda.toBuffer()], constants_1.TRANSFER_HOOK_PROGRAM)[0];
967
+ }
968
+ getAccountPolicyPda(glamState, subject, mintIdx = 0) {
969
+ const ata = this.getMintAta(subject, this.getMintPda(glamState, mintIdx));
970
+ return web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("account-policy"), ata.toBuffer()], constants_1.TRANSFER_HOOK_PROGRAM)[0];
971
+ }
921
972
  getName(stateModel) {
922
973
  const name = stateModel.name ||
923
974
  (stateModel.mints && stateModel.mints[0]?.name) ||
@@ -927,6 +978,22 @@ class BaseClient {
927
978
  }
928
979
  return name;
929
980
  }
981
+ async isLockupEnabled(statePda, mintIdx = 0) {
982
+ // @ts-ignore
983
+ const state = await this.fetchStateAccount(statePda);
984
+ if (state.params.length <= 1 + mintIdx) {
985
+ throw new Error("Invalid mint index");
986
+ }
987
+ for (const param of state.params[1 + mintIdx]) {
988
+ const name = Object.keys(param.name)[0];
989
+ // @ts-ignore
990
+ const value = Object.values(param.value)[0].val;
991
+ if (name === "lockUp") {
992
+ return new anchor_1.BN(value).toNumber() >= 0;
993
+ }
994
+ }
995
+ return false;
996
+ }
930
997
  async fetchStateAccount(statePda) {
931
998
  return await this.program.account.stateAccount.fetch(statePda);
932
999
  }
@@ -942,34 +1009,37 @@ class BaseClient {
942
1009
  * Generates instructions to wrap SOL into wSOL if the vault doesn't have enough wSOL
943
1010
  *
944
1011
  * @param lamports Desired amount of wSOL
945
- * @returns
1012
+ * @returns Array of instructions, null if no instructions are needed
946
1013
  */
947
- async maybeWrapSol(glamState, amount, signer) {
1014
+ async maybeWrapSol(glamState, lamports, signer) {
1015
+ const glamSigner = signer || this.getSigner();
948
1016
  const glamVault = this.getVaultPda(glamState);
949
- const vaultWsolAta = this.getVaultAta(glamState, constants_1.WSOL);
950
- let wsolBalance = new anchor.BN(0);
1017
+ const vaultWsolAta = this.getAta(constants_1.WSOL, glamVault);
1018
+ let wsolBalance = new anchor_1.BN(0);
951
1019
  try {
952
- wsolBalance = new anchor.BN((await this.provider.connection.getTokenAccountBalance(vaultWsolAta)).value.amount);
1020
+ wsolBalance = new anchor_1.BN((await this.provider.connection.getTokenAccountBalance(vaultWsolAta)).value.amount);
953
1021
  }
954
1022
  catch (err) { }
955
- const solBalance = new anchor.BN(await this.provider.connection.getBalance(glamVault));
956
- const delta = new anchor.BN(amount).sub(wsolBalance); // wSOL amount needed
1023
+ const solBalance = new anchor_1.BN(await this.provider.connection.getBalance(glamVault));
1024
+ const delta = new anchor_1.BN(lamports).sub(wsolBalance); // wSOL amount needed
957
1025
  if (solBalance.lt(delta)) {
958
1026
  throw new Error("Insufficient funds in vault to complete the transaction");
959
1027
  }
960
- if (delta.gt(new anchor.BN(0)) && solBalance.gte(delta)) {
961
- return await this.program.methods
962
- .wsolWrap(delta)
963
- .accountsPartial({
964
- glamState,
965
- glamVault,
966
- glamSigner: signer || this.getSigner(),
967
- vaultWsolAta,
968
- wsolMint: constants_1.WSOL,
969
- })
970
- .instruction();
1028
+ if (delta.gt(new anchor_1.BN(0)) && solBalance.gte(delta)) {
1029
+ return [
1030
+ (0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(glamSigner, vaultWsolAta, glamVault, constants_1.WSOL),
1031
+ await this.program.methods
1032
+ .systemTransfer(delta)
1033
+ .accounts({
1034
+ glamState,
1035
+ glamSigner,
1036
+ to: vaultWsolAta,
1037
+ })
1038
+ .instruction(),
1039
+ (0, spl_token_1.createSyncNativeInstruction)(vaultWsolAta),
1040
+ ];
971
1041
  }
972
- return null;
1042
+ return [];
973
1043
  }
974
1044
  getAssetIdFromCurrency(currency) {
975
1045
  switch (currency.toUpperCase()) {
@@ -1053,8 +1123,43 @@ exports.BaseClient = BaseClient;
1053
1123
 
1054
1124
 
1055
1125
  Object.defineProperty(exports, "__esModule", ({ value: true }));
1056
- exports.getSimulationComputeUnits = void 0;
1126
+ exports.getSimulationComputeUnits = exports.fetchMarinadeTicketAccounts = exports.fetchStakeAccounts = void 0;
1057
1127
  const web3_js_1 = __webpack_require__(5);
1128
+ const constants_1 = __webpack_require__(10);
1129
+ const fetchStakeAccounts = async (connection, withdrawAuthority) => {
1130
+ const accounts = await connection.getParsedProgramAccounts(web3_js_1.StakeProgram.programId, {
1131
+ filters: [
1132
+ {
1133
+ dataSize: constants_1.STAKE_ACCOUNT_SIZE,
1134
+ },
1135
+ {
1136
+ memcmp: {
1137
+ offset: 12,
1138
+ bytes: withdrawAuthority.toBase58(),
1139
+ },
1140
+ },
1141
+ ],
1142
+ });
1143
+ // order by lamports desc
1144
+ return accounts
1145
+ .sort((a, b) => b.account.lamports - a.account.lamports)
1146
+ .map((a) => a.pubkey);
1147
+ };
1148
+ exports.fetchStakeAccounts = fetchStakeAccounts;
1149
+ const fetchMarinadeTicketAccounts = async (connection, beneficiary) => await connection.getParsedProgramAccounts(constants_1.MARINADE_PROGRAM_ID, {
1150
+ filters: [
1151
+ {
1152
+ dataSize: constants_1.MARINADE_TICKET_SIZE,
1153
+ },
1154
+ {
1155
+ memcmp: {
1156
+ offset: 40,
1157
+ bytes: beneficiary.toBase58(),
1158
+ },
1159
+ },
1160
+ ],
1161
+ });
1162
+ exports.fetchMarinadeTicketAccounts = fetchMarinadeTicketAccounts;
1058
1163
  const getSimulationComputeUnits = async (connection, instructions, payer, lookupTables) => {
1059
1164
  const testInstructions = [
1060
1165
  // Set an arbitrarily high number in simulation
@@ -1239,13 +1344,15 @@ exports.ASSETS_MAINNET = new Map([
1239
1344
  stateAccount: new web3_js_1.PublicKey("8VpRhuxa7sUUepdY3kQiTmX9rS5vx4WgaXiAnXq4KCtr"),
1240
1345
  },
1241
1346
  ],
1242
- [
1243
- // juicingJupSOL - Juicing Jupiter SOL
1244
- "BgYgFYq4A9a2o5S1QbWkmYVFBh7LBQL8YvugdhieFg38",
1245
- {
1246
- stateAccount: new web3_js_1.PublicKey("4mBwcXKJN2vz6MJikNTgVBSY5vYnyjZk7txd8j3K46Ei"),
1247
- },
1248
- ],
1347
+ // jjupSOL - Juicing Jupiter SOL
1348
+ // [
1349
+ // "BgYgFYq4A9a2o5S1QbWkmYVFBh7LBQL8YvugdhieFg38",
1350
+ // {
1351
+ // stateAccount: new PublicKey(
1352
+ // "4mBwcXKJN2vz6MJikNTgVBSY5vYnyjZk7txd8j3K46Ei", // state
1353
+ // ),
1354
+ // },
1355
+ // ],
1249
1356
  [
1250
1357
  // phaseSOL - Phase Labs SOL
1251
1358
  "phaseZSfPxTDBpiVb96H4XFSD8xHeHxZre5HerehBJG",
@@ -1766,16 +1873,13 @@ const DRIFT_MARGIN_PRECISION = 10000;
1766
1873
  class DriftClient {
1767
1874
  constructor(base) {
1768
1875
  this.base = base;
1769
- /*
1770
- * Utils
1771
- */
1772
- this.DRIFT_PROGRAM = new web3_js_1.PublicKey(sdk_1.DRIFT_PROGRAM_ID);
1876
+ this.marketTypeEquals = (a, b) => a && Object.keys(a)[0] === Object.keys(b)[0];
1773
1877
  }
1774
1878
  /*
1775
1879
  * Client methods
1776
1880
  */
1777
- async initialize(statePda) {
1778
- const tx = await this.initializeTx(statePda);
1881
+ async initialize(statePda, subAccountId = 0, txOptions = {}) {
1882
+ const tx = await this.initializeTx(statePda, subAccountId, txOptions);
1779
1883
  return await this.base.sendAndConfirm(tx);
1780
1884
  }
1781
1885
  async updateUserCustomMarginRatio(statePda, maxLeverage, // 1=1x, 2=2x ... 50=50x leverage
@@ -1796,41 +1900,62 @@ class DriftClient {
1796
1900
  return await this.base.sendAndConfirm(tx);
1797
1901
  }
1798
1902
  async deposit(statePda, amount, marketIndex = 1, subAccountId = 0, marketConfigs, txOptions = {}) {
1799
- const tx = await this.depositTx(statePda, amount, marketIndex, subAccountId, marketConfigs, txOptions);
1903
+ const tx = await this.depositTx(new web3_js_1.PublicKey(statePda), amount, marketIndex, subAccountId, marketConfigs, txOptions);
1800
1904
  return await this.base.sendAndConfirm(tx);
1801
1905
  }
1802
1906
  async withdraw(statePda, amount, marketIndex = 1, subAccountId = 0, marketConfigs, txOptions = {}) {
1803
- const tx = await this.withdrawTx(statePda, amount, marketIndex, subAccountId, marketConfigs, txOptions);
1907
+ const tx = await this.withdrawTx(new web3_js_1.PublicKey(statePda), amount, marketIndex, subAccountId, marketConfigs, txOptions);
1804
1908
  return await this.base.sendAndConfirm(tx);
1805
1909
  }
1806
1910
  async placeOrder(statePda, orderParams, subAccountId = 0, marketConfigs, txOptions = {}) {
1807
- const tx = await this.placeOrderTx(statePda, orderParams, subAccountId, marketConfigs, txOptions);
1911
+ const tx = await this.placeOrderTx(new web3_js_1.PublicKey(statePda), orderParams, subAccountId, marketConfigs, txOptions);
1808
1912
  return await this.base.sendAndConfirm(tx);
1809
1913
  }
1810
1914
  async modifyOrder(statePda, modifyOrderParams, subAccountId = 0, marketConfigs, txOptions = {}) {
1811
- const tx = await this.modifyOrderTx(statePda, modifyOrderParams, subAccountId, marketConfigs, txOptions);
1915
+ const tx = await this.modifyOrderTx(new web3_js_1.PublicKey(statePda), modifyOrderParams, subAccountId, marketConfigs, txOptions);
1812
1916
  return await this.base.sendAndConfirm(tx);
1813
1917
  }
1814
1918
  async cancelOrders(statePda, marketType, marketIndex, direction, subAccountId = 0, marketConfigs, txOptions = {}) {
1815
- const tx = await this.cancelOrdersTx(statePda, marketType, marketIndex, direction, subAccountId, marketConfigs, txOptions);
1919
+ const tx = await this.cancelOrdersTx(new web3_js_1.PublicKey(statePda), marketType, marketIndex, direction, subAccountId, marketConfigs, txOptions);
1816
1920
  return await this.base.sendAndConfirm(tx);
1817
1921
  }
1818
1922
  async cancelOrdersByIds(statePda, orderIds, subAccountId = 0, marketConfigs, txOptions = {}) {
1819
- const tx = await this.cancelOrdersByIdsTx(statePda, orderIds, subAccountId, marketConfigs, txOptions);
1923
+ const tx = await this.cancelOrdersByIdsTx(new web3_js_1.PublicKey(statePda), orderIds, subAccountId, marketConfigs, txOptions);
1924
+ return await this.base.sendAndConfirm(tx);
1925
+ }
1926
+ async priceDrift(statePda, marketConfigs, txOptions = {}) {
1927
+ const tx = await this.priceDriftTx(new web3_js_1.PublicKey(statePda), marketConfigs, txOptions);
1820
1928
  return await this.base.sendAndConfirm(tx);
1821
1929
  }
1930
+ /*
1931
+ * Utils
1932
+ */
1822
1933
  getUser(statePda, subAccountId = 0) {
1823
- const vault = this.base.getVaultPda(statePda);
1934
+ const vault = this.base.getVaultPda(new web3_js_1.PublicKey(statePda));
1824
1935
  return [
1825
- (0, sdk_1.getUserAccountPublicKeySync)(this.DRIFT_PROGRAM, vault, subAccountId),
1826
- (0, sdk_1.getUserStatsAccountPublicKey)(this.DRIFT_PROGRAM, vault),
1936
+ (0, sdk_1.getUserAccountPublicKeySync)(constants_1.DRIFT_PROGRAM_ID, vault, subAccountId),
1937
+ (0, sdk_1.getUserStatsAccountPublicKey)(constants_1.DRIFT_PROGRAM_ID, vault),
1827
1938
  ];
1828
1939
  }
1829
- async getPositions(statePda, subAccountId = 0) {
1830
- const vault = this.base.getVaultPda(statePda);
1940
+ async fetchMarketConfigs() {
1941
+ const response = await fetch("https://api.glam.systems/v0/drift/market_configs/");
1942
+ if (!response.ok) {
1943
+ throw new Error(`Failed to fetch market configs: ${response.status}`);
1944
+ }
1945
+ const data = await response.json();
1946
+ return data;
1947
+ }
1948
+ async fetchGlamDriftUser(glamState, subAccountId = 0) {
1949
+ const vault = this.base.getVaultPda(new web3_js_1.PublicKey(glamState));
1831
1950
  const response = await fetch(`https://api.glam.systems/v0/drift/user?authority=${vault.toBase58()}&accountId=${subAccountId}`);
1832
1951
  const data = await response.json();
1833
- const { spotPositions, perpPositions } = data;
1952
+ if (!data) {
1953
+ throw new Error("Failed to fetch drift user.");
1954
+ }
1955
+ return data;
1956
+ }
1957
+ async getPositions(statePda, subAccountId = 0) {
1958
+ const { spotPositions, perpPositions } = await this.fetchGlamDriftUser(new web3_js_1.PublicKey(statePda), subAccountId);
1834
1959
  return { spotPositions, perpPositions };
1835
1960
  }
1836
1961
  async fetchPolicyConfig(glamState) {
@@ -1864,25 +1989,31 @@ class DriftClient {
1864
1989
  const spotMarketIndexes = spotPositions.map((p) => p.marketIndex);
1865
1990
  const perpMarketIndexes = perpPositions.map((p) => p.marketIndex);
1866
1991
  // Note that marketIndex is could be 0, need to explicitly check undefined
1867
- if (marketType === sdk_1.MarketType.SPOT &&
1992
+ if (this.marketTypeEquals(marketType, sdk_1.MarketType.SPOT) &&
1868
1993
  marketIndex !== undefined &&
1869
1994
  !spotMarketIndexes.includes(marketIndex)) {
1870
1995
  spotMarketIndexes.push(marketIndex);
1871
1996
  }
1872
- else if (marketType === sdk_1.MarketType.PERP &&
1997
+ else if (this.marketTypeEquals(marketType, sdk_1.MarketType.PERP) &&
1873
1998
  marketIndex !== undefined &&
1874
1999
  !perpMarketIndexes.includes(marketIndex)) {
1875
2000
  perpMarketIndexes.push(marketIndex);
1876
2001
  }
2002
+ // Also include USDC spot market if we're composing remaining accounts for spot or perp orders
2003
+ if (this.marketTypeEquals(marketType, sdk_1.MarketType.PERP) ||
2004
+ this.marketTypeEquals(marketType, sdk_1.MarketType.SPOT)) {
2005
+ if (!spotMarketIndexes.includes(0)) {
2006
+ spotMarketIndexes.push(0);
2007
+ }
2008
+ }
1877
2009
  const oracles = spotMarketIndexes
1878
2010
  .map((i) => marketConfigs.spot[i].oracle)
1879
2011
  .concat(perpMarketIndexes.map((i) => marketConfigs.perp[i].oracle));
1880
2012
  const markets = spotMarketIndexes
1881
2013
  .map((i) => marketConfigs.spot[i].marketPDA)
1882
2014
  .concat(perpMarketIndexes.map((i) => marketConfigs.perp[i].marketPDA));
1883
- console.log("composeRemainingAccounts for:", marketType, marketIndex);
1884
- console.log("markets:", markets);
1885
- console.log("oracles:", oracles);
2015
+ console.log("[composeRemainingAccounts] markets:", markets);
2016
+ console.log("[composeRemainingAccounts] oracles:", oracles);
1886
2017
  return oracles
1887
2018
  .map((o) => ({
1888
2019
  pubkey: new web3_js_1.PublicKey(o),
@@ -1895,21 +2026,29 @@ class DriftClient {
1895
2026
  isSigner: false,
1896
2027
  })));
1897
2028
  }
1898
- /*
1899
- * API methods
1900
- */
1901
- async initializeTx(glamState, txOptions = {}) {
1902
- const glamSigner = txOptions.signer || this.base.getSigner();
1903
- const glamVault = this.base.getVaultPda(glamState);
1904
- const [user, userStats] = this.getUser(glamState);
1905
- const state = await (0, sdk_1.getDriftStateAccountPublicKey)(this.DRIFT_PROGRAM);
1906
- const GLAM_NAME = "GLAM *.+"
2029
+ async initializeUserStatsIx(glamState, glamSigner) {
2030
+ const [_, userStats] = this.getUser(glamState);
2031
+ const state = await (0, sdk_1.getDriftStateAccountPublicKey)(constants_1.DRIFT_PROGRAM_ID);
2032
+ // @ts-ignore
2033
+ return await this.base.program.methods
2034
+ .driftInitializeUserStats()
2035
+ .accounts({
2036
+ glamState,
2037
+ glamSigner,
2038
+ state,
2039
+ userStats,
2040
+ })
2041
+ .instruction();
2042
+ }
2043
+ async initializeUserIx(glamState, glamSigner, subAccountId) {
2044
+ const name = `GLAM *.+ ${subAccountId}`
1907
2045
  .split("")
1908
2046
  .map((char) => char.charCodeAt(0))
1909
2047
  .concat(Array(24).fill(0));
1910
- const initializeUserIx = await this.base.program.methods
1911
- //@ts-ignore
1912
- .driftInitializeUser(0, GLAM_NAME)
2048
+ const [user, userStats] = this.getUser(glamState, subAccountId);
2049
+ const state = await (0, sdk_1.getDriftStateAccountPublicKey)(constants_1.DRIFT_PROGRAM_ID);
2050
+ return await this.base.program.methods
2051
+ .driftInitializeUser(subAccountId, name)
1913
2052
  .accounts({
1914
2053
  glamState,
1915
2054
  user,
@@ -1917,17 +2056,18 @@ class DriftClient {
1917
2056
  state,
1918
2057
  glamSigner,
1919
2058
  })
2059
+ // .remainingAccounts([]) TODO: set glam referral account
1920
2060
  .instruction();
1921
- const tx = await this.base.program.methods
1922
- .driftInitializeUserStats()
1923
- .accounts({
1924
- glamState,
1925
- state,
1926
- userStats,
1927
- glamSigner,
1928
- })
1929
- .postInstructions([initializeUserIx])
1930
- .transaction();
2061
+ }
2062
+ async initializeTx(glamState, subAccountId = 0, txOptions = {}) {
2063
+ const glamSigner = txOptions.signer || this.base.getSigner();
2064
+ const tx = new web3_js_1.Transaction();
2065
+ // Create userStats account first if subAccountId is 0
2066
+ // If subAccountId > 0, we assume userStats account is already created
2067
+ if (subAccountId === 0) {
2068
+ tx.add(await this.initializeUserStatsIx(glamState, glamSigner));
2069
+ }
2070
+ tx.add(await this.initializeUserIx(glamState, glamSigner, subAccountId));
1931
2071
  return await this.base.intoVersionedTransaction(tx, txOptions);
1932
2072
  }
1933
2073
  async updateUserCustomMarginRatioIx(glamState, maxLeverage, // 1=1x, 2=2x ... 50=50x leverage
@@ -1985,7 +2125,7 @@ class DriftClient {
1985
2125
  async deleteUserTx(glamState, subAccountId = 0, txOptions = {}) {
1986
2126
  const glamSigner = txOptions.signer || this.base.getSigner();
1987
2127
  const [user, userStats] = this.getUser(glamState, subAccountId);
1988
- const state = await (0, sdk_1.getDriftStateAccountPublicKey)(this.DRIFT_PROGRAM);
2128
+ const state = await (0, sdk_1.getDriftStateAccountPublicKey)(constants_1.DRIFT_PROGRAM_ID);
1989
2129
  const tx = await this.base.program.methods
1990
2130
  .driftDeleteUser()
1991
2131
  .accounts({
@@ -2001,49 +2141,39 @@ class DriftClient {
2001
2141
  async depositTx(glamState, amount, marketIndex = 1, subAccountId = 0, marketConfigs, txOptions = {}) {
2002
2142
  const glamSigner = txOptions.signer || this.base.getSigner();
2003
2143
  const [user, userStats] = this.getUser(glamState, subAccountId);
2004
- const state = await (0, sdk_1.getDriftStateAccountPublicKey)(this.DRIFT_PROGRAM);
2144
+ const state = await (0, sdk_1.getDriftStateAccountPublicKey)(constants_1.DRIFT_PROGRAM_ID);
2005
2145
  const { mint, oracle, marketPDA, vaultPDA } = marketConfigs.spot[marketIndex];
2146
+ console.log("mint, oracle, marketPDA, vaultPDA", mint, oracle, marketPDA, vaultPDA);
2006
2147
  const preInstructions = [];
2007
- // If drift user doesn't exist, create it first
2008
- const vault = this.base.getVaultPda(glamState);
2009
- const response = await fetch(`https://api.glam.systems/v0/drift/user?authority=${vault.toBase58()}&accountId=${subAccountId}`);
2010
- const data = await response.json();
2011
- if (!data) {
2012
- const initializeUserStatsIx = await this.base.program.methods
2013
- .driftInitializeUserStats()
2014
- .accounts({
2015
- glamState,
2016
- state,
2017
- userStats,
2018
- glamSigner,
2019
- })
2020
- .instruction();
2021
- const GLAM_NAME = "GLAM *.+"
2022
- .split("")
2023
- .map((char) => char.charCodeAt(0))
2024
- .concat(Array(24).fill(0));
2025
- const initializeUserIx = await this.base.program.methods
2026
- .driftInitializeUser(0, GLAM_NAME)
2148
+ const postInstructions = [];
2149
+ // If drift user doesn't exist, prepend initializeUserStats and initializeUser instructions
2150
+ try {
2151
+ await this.fetchGlamDriftUser(glamState, subAccountId);
2152
+ }
2153
+ catch (_) {
2154
+ preInstructions.push(await this.initializeUserStatsIx(glamState, glamSigner), await this.initializeUserIx(glamState, glamSigner, subAccountId));
2155
+ }
2156
+ if (mint === constants_1.WSOL.toBase58()) {
2157
+ const wrapSolIxs = await this.base.maybeWrapSol(glamState, amount, glamSigner);
2158
+ preInstructions.push(...wrapSolIxs);
2159
+ // If we need to wrap SOL, it means the wSOL balance will be drained,
2160
+ // and we close the wSOL token account for convenience
2161
+ const tokenAccount = this.base.getVaultAta(glamState, constants_1.WSOL);
2162
+ const closeTokenAccountIx = await this.base.program.methods
2163
+ .tokenCloseAccount()
2027
2164
  .accounts({
2028
2165
  glamState,
2029
- user,
2030
- userStats,
2031
- state,
2032
2166
  glamSigner,
2167
+ tokenAccount,
2168
+ cpiProgram: spl_token_1.TOKEN_PROGRAM_ID,
2033
2169
  })
2034
2170
  .instruction();
2035
- preInstructions.push(initializeUserStatsIx, initializeUserIx); // init user stats first
2036
- }
2037
- if (mint === constants_1.WSOL.toBase58()) {
2038
- const wrapSolIx = await this.base.maybeWrapSol(glamState, amount, glamSigner);
2039
- if (wrapSolIx) {
2040
- preInstructions.push(wrapSolIx);
2041
- }
2171
+ postInstructions.push(closeTokenAccountIx);
2042
2172
  }
2043
2173
  const tx = await this.base.program.methods
2044
2174
  .driftDeposit(marketIndex, amount, false)
2045
2175
  .accounts({
2046
- glamState: glamState,
2176
+ glamState,
2047
2177
  state,
2048
2178
  user,
2049
2179
  userStats,
@@ -2057,13 +2187,14 @@ class DriftClient {
2057
2187
  { pubkey: new web3_js_1.PublicKey(marketPDA), isSigner: false, isWritable: true },
2058
2188
  ])
2059
2189
  .preInstructions(preInstructions)
2190
+ .postInstructions(postInstructions)
2060
2191
  .transaction();
2061
2192
  return await this.base.intoVersionedTransaction(tx, txOptions);
2062
2193
  }
2063
2194
  async withdrawTx(statePda, amount, marketIndex = 1, subAccountId = 0, marketConfigs, txOptions = {}) {
2064
2195
  const glamSigner = txOptions.signer || this.base.getSigner();
2065
2196
  const [user, userStats] = this.getUser(statePda, subAccountId);
2066
- const state = await (0, sdk_1.getDriftStateAccountPublicKey)(this.DRIFT_PROGRAM);
2197
+ const state = await (0, sdk_1.getDriftStateAccountPublicKey)(constants_1.DRIFT_PROGRAM_ID);
2067
2198
  const { mint: m, vaultPDA: d } = marketConfigs.spot[marketIndex];
2068
2199
  const mint = new web3_js_1.PublicKey(m);
2069
2200
  const driftAta = new web3_js_1.PublicKey(d); // drift vault ata
@@ -2098,7 +2229,7 @@ class DriftClient {
2098
2229
  const remainingAccounts = await this.composeRemainingAccounts(glamState, subAccountId, marketConfigs, marketType, marketIndex);
2099
2230
  const glamSigner = txOptions.signer || this.base.getSigner();
2100
2231
  const [user] = this.getUser(glamState, subAccountId);
2101
- const state = await (0, sdk_1.getDriftStateAccountPublicKey)(this.DRIFT_PROGRAM);
2232
+ const state = await (0, sdk_1.getDriftStateAccountPublicKey)(constants_1.DRIFT_PROGRAM_ID);
2102
2233
  const tx = await this.base.program.methods
2103
2234
  // @ts-ignore
2104
2235
  .driftPlaceOrders([orderParams])
@@ -2123,7 +2254,7 @@ class DriftClient {
2123
2254
  // );
2124
2255
  const signer = txOptions.signer || this.base.getSigner();
2125
2256
  const [user] = this.getUser(statePda, subAccountId);
2126
- const driftState = await (0, sdk_1.getDriftStateAccountPublicKey)(this.DRIFT_PROGRAM);
2257
+ const driftState = await (0, sdk_1.getDriftStateAccountPublicKey)(constants_1.DRIFT_PROGRAM_ID);
2127
2258
  const tx = await this.base.program.methods
2128
2259
  // @ts-ignore
2129
2260
  .driftModifyOrder(1, modifyOrderParams)
@@ -2139,9 +2270,8 @@ class DriftClient {
2139
2270
  }
2140
2271
  async cancelOrdersTx(glamState, marketType, marketIndex, direction, subAccountId = 0, marketConfigs, txOptions = {}) {
2141
2272
  const glamSigner = txOptions.signer || this.base.getSigner();
2142
- const glamVault = this.base.getVaultPda(glamState);
2143
2273
  const [user] = this.getUser(glamState, subAccountId);
2144
- const driftState = await (0, sdk_1.getDriftStateAccountPublicKey)(this.DRIFT_PROGRAM);
2274
+ const driftState = await (0, sdk_1.getDriftStateAccountPublicKey)(constants_1.DRIFT_PROGRAM_ID);
2145
2275
  const remainingAccounts = await this.composeRemainingAccounts(glamState, subAccountId, marketConfigs, marketType, marketIndex);
2146
2276
  const tx = await this.base.program.methods
2147
2277
  // @ts-ignore
@@ -2159,7 +2289,7 @@ class DriftClient {
2159
2289
  async cancelOrdersByIdsTx(glamState, orderIds, subAccountId = 0, marketConfigs, txOptions = {}) {
2160
2290
  const glamSigner = txOptions.signer || this.base.getSigner();
2161
2291
  const [user] = this.getUser(glamState, subAccountId);
2162
- const driftState = await (0, sdk_1.getDriftStateAccountPublicKey)(this.DRIFT_PROGRAM);
2292
+ const driftState = await (0, sdk_1.getDriftStateAccountPublicKey)(constants_1.DRIFT_PROGRAM_ID);
2163
2293
  const remainingAccounts = await this.composeRemainingAccounts(glamState, subAccountId, marketConfigs);
2164
2294
  const tx = await this.base.program.methods
2165
2295
  .driftCancelOrdersByIds(orderIds)
@@ -2173,187 +2303,38 @@ class DriftClient {
2173
2303
  .transaction();
2174
2304
  return await this.base.intoVersionedTransaction(tx, txOptions);
2175
2305
  }
2176
- }
2177
- exports.DriftClient = DriftClient;
2178
-
2179
-
2180
- /***/ }),
2181
- /* 20 */
2182
- /***/ ((module) => {
2183
-
2184
- module.exports = require("@drift-labs/sdk");
2185
-
2186
- /***/ }),
2187
- /* 21 */
2188
- /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
2189
-
2190
-
2191
- Object.defineProperty(exports, "__esModule", ({ value: true }));
2192
- exports.InvestorClient = void 0;
2193
- const anchor_1 = __webpack_require__(2);
2194
- const web3_js_1 = __webpack_require__(5);
2195
- const spl_token_1 = __webpack_require__(8);
2196
- const constants_1 = __webpack_require__(10);
2197
- class InvestorClient {
2198
- constructor(base) {
2199
- this.base = base;
2200
- }
2201
- /*
2202
- * Client methods
2203
- */
2204
- async subscribe(statePda, asset, amount, stateModel, mintId = 0, skipState = true, txOptions = {}) {
2205
- const tx = await this.subscribeTx(statePda, asset, amount, stateModel, mintId, skipState, txOptions);
2206
- return await this.base.sendAndConfirm(tx);
2207
- }
2208
- async redeem(statePda, amount, inKind = false, stateModel, mintId = 0, skipState = true, txOptions = {}) {
2209
- const tx = await this.redeemTx(statePda, amount, inKind, stateModel, mintId, skipState, txOptions);
2210
- return await this.base.sendAndConfirm(tx);
2211
- }
2212
- /*
2213
- * API methods
2214
- */
2215
- async subscribeTx(statePda, asset, amount, stateModel, mintId = 0, skipState = true, txOptions = {}) {
2216
- const signer = txOptions.signer || this.base.getSigner();
2217
- // glam mint token to receive
2218
- const mintPda = this.base.getMintPda(statePda, mintId);
2219
- const signerShareAta = this.base.getMintAta(signer, mintPda);
2220
- // asset token to transfer
2221
- const assetMeta = this.base.getAssetMeta(asset.toBase58());
2222
- const vault = this.base.getVaultPda(statePda);
2223
- const vaultAta = this.base.getAta(asset, vault, assetMeta?.programId);
2224
- const signerAssetAta = this.base.getAta(asset, signer, assetMeta?.programId);
2225
- // remaining accounts may have 3 parts:
2226
- // 1. treasury atas + pricing to compute AUM
2227
- // 2. marinade ticket
2228
- // 3. stake accounts
2229
- if (!stateModel) {
2230
- stateModel = await this.base.fetchState(statePda);
2231
- }
2232
- let remainingAccounts = (stateModel.assets || []).flatMap((asset) => {
2233
- const assetMeta = this.base.getAssetMeta(asset.toBase58());
2234
- const vaultAta = this.base.getVaultAta(statePda, asset, assetMeta?.programId);
2235
- return [
2236
- { pubkey: vaultAta, isSigner: false, isWritable: false },
2237
- {
2238
- // For some LSTs we have both state and pricing accounts
2239
- // The program should always prefer the state account
2240
- pubkey: assetMeta.stateAccount || assetMeta.pricingAccount,
2241
- isSigner: false,
2242
- isWritable: false,
2243
- },
2244
- ];
2245
- });
2246
- remainingAccounts = remainingAccounts.concat((stateModel.externalVaultAccounts || []).map((address) => ({
2247
- pubkey: address,
2248
- isSigner: false,
2249
- isWritable: false,
2250
- })));
2251
- // SOL -> wSOL
2252
- // If the user doesn't have enough wSOL but does have SOL, we auto wrap
2253
- let preInstructions = [
2254
- (0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(signer, signerAssetAta, signer, asset, assetMeta?.programId),
2255
- (0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(signer, vaultAta, vault, asset, assetMeta?.programId),
2256
- (0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(signer, signerShareAta, signer, mintPda, spl_token_1.TOKEN_2022_PROGRAM_ID),
2257
- ];
2258
- if (constants_1.WSOL.equals(asset)) {
2259
- const connection = this.base.provider.connection;
2260
- let wsolBalance = new anchor_1.BN(0);
2261
- try {
2262
- wsolBalance = new anchor_1.BN((await connection.getTokenAccountBalance(signerAssetAta)).value.amount);
2263
- }
2264
- catch (err) {
2265
- // ignore
2266
- }
2267
- const delta = amount.sub(wsolBalance);
2268
- if (delta.gt(new anchor_1.BN(0))) {
2269
- preInstructions = preInstructions.concat([
2270
- web3_js_1.SystemProgram.transfer({
2271
- fromPubkey: signer,
2272
- toPubkey: signerAssetAta,
2273
- lamports: delta.toNumber(),
2274
- }),
2275
- (0, spl_token_1.createSyncNativeInstruction)(signerAssetAta),
2276
- ]);
2277
- }
2278
- }
2279
- const tx = await this.base.program.methods
2280
- .subscribe(0, amount, skipState)
2281
- .accounts({
2282
- glamState: statePda,
2283
- glamMint: mintPda,
2284
- asset,
2285
- vaultAta,
2286
- signerAssetAta,
2287
- //TODO: only add if the fund has lock-up? (just for efficiency)
2288
- // signerAccountPolicy: null,
2289
- signer,
2290
- })
2291
- .remainingAccounts(remainingAccounts)
2292
- .preInstructions(preInstructions)
2293
- .transaction();
2294
- return await this.base.intoVersionedTransaction(tx, txOptions);
2295
- }
2296
- async redeemTx(statePda, amount, inKind = false, stateModel, mintId = 0, skipState = true, txOptions = {}) {
2306
+ async priceDriftTx(glamState, marketConfigs, txOptions = {}) {
2297
2307
  const signer = txOptions.signer || this.base.getSigner();
2298
- // share class token to receive
2299
- const glamMint = this.base.getMintPda(statePda, mintId);
2300
- const signerShareAta = this.base.getMintAta(signer, glamMint);
2301
- // remaining accounts = assets + signer atas + treasury atas + pricing to compute AUM
2302
- if (!stateModel) {
2303
- stateModel = await this.base.fetchState(statePda);
2304
- }
2305
- let remainingAccounts = (stateModel.assets || []).flatMap((asset) => {
2306
- const assetMeta = this.base.getAssetMeta(asset.toBase58());
2307
- const vaultAta = this.base.getVaultAta(statePda, asset, assetMeta?.programId);
2308
- const signerAta = (0, spl_token_1.getAssociatedTokenAddressSync)(asset, signer, true, assetMeta?.programId);
2309
- return [
2310
- { pubkey: vaultAta, isSigner: false, isWritable: true },
2311
- {
2312
- // For some LSTs we have both state and pricing accounts
2313
- // The program should always prefer the state account
2314
- pubkey: assetMeta.stateAccount || assetMeta.pricingAccount,
2315
- isSigner: false,
2316
- isWritable: false,
2317
- },
2318
- { pubkey: asset, isSigner: false, isWritable: false },
2319
- { pubkey: signerAta, isSigner: false, isWritable: true },
2320
- ];
2321
- });
2322
- remainingAccounts = remainingAccounts.concat((stateModel.externalVaultAccounts || []).map((address) => ({
2323
- pubkey: address,
2324
- isSigner: false,
2325
- isWritable: false,
2326
- })));
2327
- const preInstructions = (await Promise.all((stateModel.assets || []).map(async (asset, j) => {
2328
- // not in kind, we only need the base asset ATA
2329
- if (!inKind && j > 0) {
2330
- return null;
2331
- }
2332
- const assetMeta = this.base.getAssetMeta(asset.toBase58());
2333
- const signerAta = (0, spl_token_1.getAssociatedTokenAddressSync)(asset, signer, true, assetMeta?.programId);
2334
- return (0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(signer, signerAta, signer, asset, assetMeta?.programId);
2335
- }))).filter((x) => !!x);
2308
+ const glamVault = this.base.getVaultPda(glamState);
2309
+ const [user, userStats] = this.getUser(glamState);
2310
+ const driftState = await (0, sdk_1.getDriftStateAccountPublicKey)(constants_1.DRIFT_PROGRAM_ID);
2311
+ const remainingAccounts = await this.composeRemainingAccounts(glamState, 0, marketConfigs);
2336
2312
  const tx = await this.base.program.methods
2337
- .redeem(amount, inKind, skipState)
2313
+ .priceDrift()
2338
2314
  .accounts({
2339
- glamState: statePda,
2340
- glamMint,
2341
- signerShareAta,
2342
- //TODO: only add if the fund has lock-up? (just for efficiency)
2343
- // signerAccountPolicy: null,
2315
+ glamState,
2344
2316
  signer,
2317
+ glamVault,
2318
+ user,
2319
+ userStats,
2320
+ state: driftState,
2345
2321
  })
2346
2322
  .remainingAccounts(remainingAccounts)
2347
- .preInstructions(preInstructions)
2348
2323
  .transaction();
2349
2324
  return await this.base.intoVersionedTransaction(tx, txOptions);
2350
2325
  }
2351
2326
  }
2352
- exports.InvestorClient = InvestorClient;
2327
+ exports.DriftClient = DriftClient;
2353
2328
 
2354
2329
 
2355
2330
  /***/ }),
2356
- /* 22 */
2331
+ /* 20 */
2332
+ /***/ ((module) => {
2333
+
2334
+ module.exports = require("@drift-labs/sdk");
2335
+
2336
+ /***/ }),
2337
+ /* 21 */
2357
2338
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
2358
2339
 
2359
2340
 
@@ -2379,10 +2360,8 @@ class JupiterSwapClient {
2379
2360
  ];
2380
2361
  // Transfer SOL to wSOL ATA if needed for the vault
2381
2362
  if (inputMint.equals(constants_1.WSOL)) {
2382
- const wrapSolIx = await this.base.maybeWrapSol(statePda, amount, signer);
2383
- if (wrapSolIx) {
2384
- preInstructions.push(wrapSolIx);
2385
- }
2363
+ const wrapSolIxs = await this.base.maybeWrapSol(statePda, amount, signer);
2364
+ preInstructions.push(...wrapSolIxs);
2386
2365
  }
2387
2366
  return preInstructions;
2388
2367
  };
@@ -2414,44 +2393,73 @@ class JupiterSwapClient {
2414
2393
  /*
2415
2394
  * Client methods
2416
2395
  */
2417
- async swap(glamState, quoteParams, quoteResponse, swapInstructions, txOptions = {}) {
2418
- const tx = await this.swapTx(glamState, quoteParams, quoteResponse, swapInstructions, txOptions);
2396
+ async swap(glamState, options, txOptions = {}) {
2397
+ const tx = await this.swapTx(glamState, options, txOptions);
2419
2398
  return await this.base.sendAndConfirm(tx);
2420
2399
  }
2421
2400
  async setMaxSwapSlippage(statePda, slippageBps, txOptions = {}) {
2422
2401
  const tx = await this.setMaxSwapSlippageTx(statePda, slippageBps, txOptions);
2423
2402
  return await this.base.sendAndConfirm(tx);
2424
2403
  }
2404
+ async fetchProgramLabels() {
2405
+ const res = await fetch(`${this.base.jupiterApi}/swap/v1/program-id-to-label`);
2406
+ const data = await res.json();
2407
+ return data;
2408
+ }
2409
+ async fetchTokenPrices(pubkeys) {
2410
+ const res = await fetch(`${this.base.jupiterApi}/price/v2?ids=${pubkeys.join(",")}`);
2411
+ const data = await res.json();
2412
+ return data;
2413
+ }
2425
2414
  /*
2426
2415
  * API methods
2427
2416
  */
2428
- async swapTx(glamState, quoteParams, quoteResponse, swapInstructions, txOptions = {}) {
2417
+ async swapTx(glamState, options, txOptions = {}) {
2429
2418
  const glamSigner = txOptions.signer || this.base.getSigner();
2430
2419
  const glamVault = this.base.getVaultPda(glamState);
2431
2420
  let swapInstruction;
2432
2421
  let addressLookupTableAddresses;
2433
- const inputMint = new web3_js_1.PublicKey(quoteParams?.inputMint || quoteResponse.inputMint);
2434
- const outputMint = new web3_js_1.PublicKey(quoteParams?.outputMint || quoteResponse.outputMint);
2435
- const amount = new anchor_1.BN(quoteParams?.amount || quoteResponse.inAmount);
2422
+ let inputMint;
2423
+ let outputMint;
2424
+ let amount;
2425
+ const { quoteParams, quoteResponse, swapInstructions } = options;
2436
2426
  if (swapInstructions === undefined) {
2437
- // Fetch quoteResponse if not specified - quoteParams must be specified in this case
2438
- if (quoteResponse === undefined) {
2427
+ let resolvedQuoteResponse = quoteResponse;
2428
+ if (resolvedQuoteResponse === undefined) {
2439
2429
  if (quoteParams === undefined) {
2440
- throw new Error("quoteParams must be specified when quoteResponse and swapInstruction are not specified.");
2430
+ throw new Error("quoteParams must be specified when quoteResponse and swapInstructions are not specified.");
2441
2431
  }
2442
- quoteResponse = await this.getQuoteResponse(quoteParams);
2432
+ resolvedQuoteResponse = await this.getQuoteResponse(quoteParams);
2443
2433
  }
2444
- const ins = await this.getSwapInstructions(quoteResponse, glamVault);
2434
+ inputMint = new web3_js_1.PublicKey(quoteParams?.inputMint || resolvedQuoteResponse.inputMint);
2435
+ outputMint = new web3_js_1.PublicKey(quoteParams?.outputMint || resolvedQuoteResponse.outputMint);
2436
+ amount = new anchor_1.BN(quoteParams?.amount || resolvedQuoteResponse.inAmount);
2437
+ const ins = await this.getSwapInstructions(resolvedQuoteResponse, glamVault);
2445
2438
  swapInstruction = ins.swapInstruction;
2446
2439
  addressLookupTableAddresses = ins.addressLookupTableAddresses;
2447
2440
  }
2448
2441
  else {
2442
+ // If swapInstructions is provided, we need to extract mints and amount from quoteParams or quoteResponse
2443
+ if (quoteParams) {
2444
+ inputMint = new web3_js_1.PublicKey(quoteParams.inputMint);
2445
+ outputMint = new web3_js_1.PublicKey(quoteParams.outputMint);
2446
+ amount = new anchor_1.BN(quoteParams.amount);
2447
+ }
2448
+ else if (quoteResponse) {
2449
+ inputMint = new web3_js_1.PublicKey(quoteResponse.inputMint);
2450
+ outputMint = new web3_js_1.PublicKey(quoteResponse.outputMint);
2451
+ amount = new anchor_1.BN(quoteResponse.inAmount);
2452
+ }
2453
+ else {
2454
+ throw new Error("Either quoteParams or quoteResponse must be specified when using swapInstructions.");
2455
+ }
2449
2456
  swapInstruction = swapInstructions.swapInstruction;
2450
2457
  addressLookupTableAddresses =
2451
2458
  swapInstructions.addressLookupTableAddresses;
2452
2459
  }
2453
2460
  const lookupTables = await this.base.getAdressLookupTableAccounts(addressLookupTableAddresses);
2454
2461
  const swapIx = this.toTransactionInstruction(swapInstruction, glamVault.toBase58());
2462
+ // TODO: Optimize by using batch RPC
2455
2463
  const [inputTokenProgram, outputTokenProgram] = await Promise.all([
2456
2464
  this.getTokenProgram(inputMint),
2457
2465
  this.getTokenProgram(outputMint),
@@ -2459,8 +2467,9 @@ class JupiterSwapClient {
2459
2467
  const inputStakePool = assets_1.ASSETS_MAINNET.get(inputMint.toBase58())?.stateAccount || null;
2460
2468
  const outputStakePool = assets_1.ASSETS_MAINNET.get(outputMint.toBase58())?.stateAccount || null;
2461
2469
  const preInstructions = await this.getPreInstructions(glamState, glamSigner, inputMint, outputMint, amount, inputTokenProgram, outputTokenProgram);
2470
+ // @ts-ignore
2462
2471
  const tx = await this.base.program.methods
2463
- .jupiterSwap(amount, swapIx.data)
2472
+ .jupiterSwap(swapIx.data)
2464
2473
  .accounts({
2465
2474
  glamState,
2466
2475
  glamSigner,
@@ -2501,7 +2510,7 @@ class JupiterSwapClient {
2501
2510
  .instruction();
2502
2511
  }
2503
2512
  async getQuoteResponse(quoteParams) {
2504
- const res = await fetch(`${this.base.jupiterApi}/quote?` +
2513
+ const res = await fetch(`${this.base.jupiterApi}/swap/v1/quote?` +
2505
2514
  new URLSearchParams(Object.entries(quoteParams).map(([key, val]) => [key, String(val)])));
2506
2515
  const data = await res.json();
2507
2516
  if (!res.ok) {
@@ -2510,7 +2519,7 @@ class JupiterSwapClient {
2510
2519
  return data;
2511
2520
  }
2512
2521
  async getSwapInstructions(quoteResponse, from) {
2513
- const res = await fetch(`${this.base.jupiterApi}/swap-instructions`, {
2522
+ const res = await fetch(`${this.base.jupiterApi}/swap/v1/swap-instructions`, {
2514
2523
  method: "POST",
2515
2524
  headers: {
2516
2525
  Accept: "application/json",
@@ -2627,25 +2636,50 @@ class JupiterVoteClient {
2627
2636
  const vTx = await this.base.intoVersionedTransaction(tx, { ...txOptions });
2628
2637
  return await this.base.sendAndConfirm(vTx);
2629
2638
  }
2630
- async cancelUnstake(statePda, txOptions = {}) {
2639
+ async claimAndStake(statePda, distributor, amountUnlocked, amountLocked, proof, txOptions = {}) {
2640
+ const glamSigner = txOptions.signer || this.base.getSigner();
2631
2641
  const vault = this.base.getVaultPda(statePda);
2632
2642
  const escrow = this.getEscrowPda(vault);
2643
+ const escrowJupAta = this.base.getAta(constants_1.JUP, escrow);
2644
+ const distributorJupAta = this.base.getAta(constants_1.JUP, distributor);
2645
+ // @ts-ignore
2633
2646
  const tx = await this.base.program.methods
2634
- .jupiterVoteToggleMaxLock(true)
2647
+ .merkleDistributorNewClaimAndStake(amountUnlocked, amountLocked, proof)
2635
2648
  .accounts({
2636
2649
  glamState: statePda,
2650
+ glamSigner,
2651
+ distributor,
2652
+ from: distributorJupAta,
2653
+ claimStatus: this.getClaimStatus(vault, distributor),
2654
+ voterProgram: constants_1.JUP_VOTE_PROGRAM,
2637
2655
  locker: this.stakeLocker,
2656
+ tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
2638
2657
  escrow,
2658
+ escrowTokens: escrowJupAta,
2639
2659
  })
2640
2660
  .transaction();
2641
2661
  const vTx = await this.base.intoVersionedTransaction(tx, { ...txOptions });
2642
2662
  return await this.base.sendAndConfirm(vTx);
2643
2663
  }
2644
- /**
2645
- * Vote on a proposal. The vote account will be created if it doesn't exist.
2646
- *
2647
- * @param statePda
2648
- * @param proposal
2664
+ async cancelUnstake(statePda, txOptions = {}) {
2665
+ const vault = this.base.getVaultPda(statePda);
2666
+ const escrow = this.getEscrowPda(vault);
2667
+ const tx = await this.base.program.methods
2668
+ .jupiterVoteToggleMaxLock(true)
2669
+ .accounts({
2670
+ glamState: statePda,
2671
+ locker: this.stakeLocker,
2672
+ escrow,
2673
+ })
2674
+ .transaction();
2675
+ const vTx = await this.base.intoVersionedTransaction(tx, { ...txOptions });
2676
+ return await this.base.sendAndConfirm(vTx);
2677
+ }
2678
+ /**
2679
+ * Vote on a proposal. The vote account will be created if it doesn't exist.
2680
+ *
2681
+ * @param statePda
2682
+ * @param proposal
2649
2683
  * @param side
2650
2684
  * @param txOptions
2651
2685
  * @returns
@@ -2710,6 +2744,10 @@ class JupiterVoteClient {
2710
2744
  const [locker] = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("Locker"), BASE.toBuffer()], constants_1.JUP_VOTE_PROGRAM);
2711
2745
  return locker;
2712
2746
  }
2747
+ getClaimStatus(claimant, distributor) {
2748
+ const [claimStatus] = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("ClaimStatus"), claimant.toBuffer(), distributor.toBuffer()], constants_1.MERKLE_DISTRIBUTOR_PROGRAM);
2749
+ return claimStatus;
2750
+ }
2713
2751
  getEscrowPda(owner) {
2714
2752
  const [escrow] = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("Escrow"), this.stakeLocker.toBuffer(), owner.toBuffer()], constants_1.JUP_VOTE_PROGRAM);
2715
2753
  return escrow;
@@ -2727,7 +2765,7 @@ exports.JupiterVoteClient = JupiterVoteClient;
2727
2765
 
2728
2766
 
2729
2767
  /***/ }),
2730
- /* 23 */
2768
+ /* 22 */
2731
2769
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
2732
2770
 
2733
2771
 
@@ -2735,44 +2773,24 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
2735
2773
  exports.MarinadeClient = void 0;
2736
2774
  const web3_js_1 = __webpack_require__(5);
2737
2775
  const spl_token_1 = __webpack_require__(8);
2738
- const marinade_ts_sdk_1 = __webpack_require__(24);
2776
+ const marinade_ts_sdk_1 = __webpack_require__(23);
2739
2777
  const constants_1 = __webpack_require__(10);
2740
- const TICKET_SIZE = 88;
2778
+ const helpers_1 = __webpack_require__(14);
2741
2779
  class MarinadeClient {
2742
2780
  constructor(base) {
2743
2781
  this.base = base;
2744
- /*
2745
- * Utils
2746
- */
2747
- this._getTicketsAccounts = async (state) => await this.base.provider.connection.getParsedProgramAccounts(constants_1.MARINADE_PROGRAM_ID, {
2748
- filters: [
2749
- {
2750
- dataSize: TICKET_SIZE,
2751
- },
2752
- {
2753
- memcmp: {
2754
- offset: 40,
2755
- bytes: this.base.getVaultPda(state).toBase58(),
2756
- },
2757
- },
2758
- ],
2759
- });
2760
2782
  }
2761
2783
  /*
2762
2784
  * Client methods
2763
2785
  */
2764
- async deposit(statePda, amount) {
2765
- const tx = await this.depositTx(statePda, amount, {});
2786
+ async deposit(statePda, amount, txOptions = {}) {
2787
+ const tx = await this.depositTx(statePda, amount, txOptions);
2766
2788
  return await this.base.sendAndConfirm(tx);
2767
2789
  }
2768
2790
  async depositStakeAccount(statePda, stakeAccount) {
2769
2791
  const tx = await this.depositStakeAccountTx(statePda, stakeAccount, {});
2770
2792
  return await this.base.sendAndConfirm(tx);
2771
2793
  }
2772
- async liquidUnstake(statePda, amount) {
2773
- const tx = await this.liquidUnstakeTx(statePda, amount, {});
2774
- return await this.base.sendAndConfirm(tx);
2775
- }
2776
2794
  async orderUnstake(statePda, amount, txOptions = {}) {
2777
2795
  const tx = await this.orderUnstakeTx(statePda, amount, txOptions);
2778
2796
  return await this.base.sendAndConfirm(tx);
@@ -2781,12 +2799,17 @@ class MarinadeClient {
2781
2799
  const tx = await this.claimTx(statePda, tickets, txOptions);
2782
2800
  return await this.base.sendAndConfirm(tx);
2783
2801
  }
2802
+ /*
2803
+ * Utils
2804
+ */
2784
2805
  async getTickets(state) {
2785
- const accounts = await this._getTicketsAccounts(state);
2806
+ const vault = this.base.getVaultPda(state);
2807
+ const accounts = await (0, helpers_1.fetchMarinadeTicketAccounts)(this.base.provider.connection, vault);
2786
2808
  return accounts.map((a) => a.pubkey);
2787
2809
  }
2788
2810
  async getParsedTickets(state) {
2789
- const accounts = await this._getTicketsAccounts(state);
2811
+ const vault = this.base.getVaultPda(state);
2812
+ const accounts = await (0, helpers_1.fetchMarinadeTicketAccounts)(this.base.provider.connection, vault);
2790
2813
  const currentEpoch = await this.base.provider.connection.getEpochInfo();
2791
2814
  return accounts.map((a) => {
2792
2815
  const lamports = Number(a.account.data.readBigInt64LE(72));
@@ -2845,6 +2868,7 @@ class MarinadeClient {
2845
2868
  const marinadeState = this.getMarinadeState();
2846
2869
  const vaultMsolAta = this.base.getAta(marinadeState.msolMintAddress, vault);
2847
2870
  const createMsolAtaIx = (0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(glamSigner, vaultMsolAta, vault, marinadeState.msolMintAddress);
2871
+ // @ts-ignore
2848
2872
  const tx = await this.base.program.methods
2849
2873
  .marinadeDeposit(amount)
2850
2874
  .accounts({
@@ -2901,14 +2925,14 @@ class MarinadeClient {
2901
2925
  const vaultMsolAta = this.base.getVaultAta(glamState, marinadeState.msolMintAddress);
2902
2926
  const ticketSeed = Date.now().toString();
2903
2927
  const ticket = await web3_js_1.PublicKey.createWithSeed(glamSigner, ticketSeed, constants_1.MARINADE_PROGRAM_ID);
2904
- const lamports = await this.base.provider.connection.getMinimumBalanceForRentExemption(TICKET_SIZE);
2928
+ const lamports = await this.base.provider.connection.getMinimumBalanceForRentExemption(constants_1.MARINADE_TICKET_SIZE);
2905
2929
  const createTicketIx = web3_js_1.SystemProgram.createAccountWithSeed({
2906
2930
  fromPubkey: glamSigner,
2907
2931
  newAccountPubkey: ticket,
2908
2932
  basePubkey: glamSigner,
2909
2933
  seed: ticketSeed,
2910
2934
  lamports,
2911
- space: TICKET_SIZE,
2935
+ space: constants_1.MARINADE_TICKET_SIZE,
2912
2936
  programId: constants_1.MARINADE_PROGRAM_ID,
2913
2937
  });
2914
2938
  const tx = await this.base.program.methods
@@ -2933,41 +2957,19 @@ class MarinadeClient {
2933
2957
  }
2934
2958
  const glamSigner = txOptions.signer || this.base.getSigner();
2935
2959
  const marinadeState = this.getMarinadeState();
2936
- const tx = await this.base.program.methods
2960
+ const instructions = await Promise.all(tickets.map((ticket) => this.base.program.methods
2937
2961
  .marinadeClaim()
2938
2962
  .accounts({
2939
2963
  glamState,
2940
2964
  glamSigner,
2941
- ticketAccount: tickets[0],
2965
+ ticketAccount: ticket,
2942
2966
  state: marinadeState.marinadeStateAddress,
2943
2967
  reservePda: marinadeState.reserveAddress,
2944
2968
  clock: web3_js_1.SYSVAR_CLOCK_PUBKEY,
2945
2969
  })
2946
- .remainingAccounts(tickets
2947
- .slice(1)
2948
- .map((t) => ({ pubkey: t, isSigner: false, isWritable: true })))
2949
- .transaction();
2950
- return await this.base.intoVersionedTransaction(tx, txOptions);
2951
- }
2952
- async liquidUnstakeTx(glamState, amount, txOptions) {
2953
- const glamSigner = txOptions.signer || this.base.getSigner();
2954
- const vault = this.base.getVaultPda(glamState);
2955
- const marinadeState = this.getMarinadeState();
2956
- const vaultMsolAta = this.base.getAta(marinadeState.msolMintAddress, vault);
2957
- const tx = await this.base.program.methods
2958
- .marinadeLiquidUnstake(amount)
2959
- .accounts({
2960
- glamState,
2961
- glamSigner,
2962
- state: marinadeState.marinadeStateAddress,
2963
- msolMint: marinadeState.msolMintAddress,
2964
- liqPoolSolLegPda: marinadeState.solLeg,
2965
- liqPoolMsolLeg: marinadeState.msolLeg,
2966
- getMsolFrom: vaultMsolAta,
2967
- treasuryMsolAccount: marinadeState.treasuryMsolAccount,
2968
- tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
2969
- })
2970
- .transaction();
2970
+ .instruction()));
2971
+ const tx = new web3_js_1.Transaction();
2972
+ tx.add(...instructions);
2971
2973
  return await this.base.intoVersionedTransaction(tx, txOptions);
2972
2974
  }
2973
2975
  }
@@ -2975,19 +2977,20 @@ exports.MarinadeClient = MarinadeClient;
2975
2977
 
2976
2978
 
2977
2979
  /***/ }),
2978
- /* 24 */
2980
+ /* 23 */
2979
2981
  /***/ ((module) => {
2980
2982
 
2981
2983
  module.exports = require("@marinade.finance/marinade-ts-sdk");
2982
2984
 
2983
2985
  /***/ }),
2984
- /* 25 */
2986
+ /* 24 */
2985
2987
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
2986
2988
 
2987
2989
 
2988
2990
  Object.defineProperty(exports, "__esModule", ({ value: true }));
2989
2991
  exports.WSolClient = void 0;
2990
2992
  const constants_1 = __webpack_require__(10);
2993
+ const spl_token_1 = __webpack_require__(8);
2991
2994
  class WSolClient {
2992
2995
  constructor(base) {
2993
2996
  this.base = base;
@@ -3008,18 +3011,34 @@ class WSolClient {
3008
3011
  */
3009
3012
  async wrapTx(glamState, amount, txOptions) {
3010
3013
  const glamSigner = txOptions.signer || this.base.getSigner();
3011
- const vaultWsolAta = this.base.getVaultAta(glamState, constants_1.WSOL);
3014
+ const vault = this.base.getVaultPda(glamState);
3015
+ const to = this.base.getAta(constants_1.WSOL, vault);
3016
+ // @ts-ignore
3012
3017
  const tx = await this.base.program.methods
3013
- .wsolWrap(amount)
3014
- .accountsPartial({ glamState, glamSigner, vaultWsolAta, wsolMint: constants_1.WSOL })
3018
+ .systemTransfer(amount)
3019
+ .accounts({
3020
+ glamState,
3021
+ glamSigner,
3022
+ to,
3023
+ })
3024
+ .preInstructions([
3025
+ (0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(glamSigner, to, vault, constants_1.WSOL),
3026
+ ])
3027
+ .postInstructions([(0, spl_token_1.createSyncNativeInstruction)(to)])
3015
3028
  .transaction();
3016
3029
  return await this.base.intoVersionedTransaction(tx, txOptions);
3017
3030
  }
3018
3031
  async unwrapTx(glamState, txOptions) {
3019
3032
  const glamSigner = txOptions.signer || this.base.getSigner();
3033
+ const tokenAccount = this.base.getVaultAta(glamState, constants_1.WSOL);
3020
3034
  const tx = await this.base.program.methods
3021
- .wsolUnwrap()
3022
- .accounts({ glamState, glamSigner })
3035
+ .tokenCloseAccount()
3036
+ .accounts({
3037
+ glamState,
3038
+ glamSigner,
3039
+ tokenAccount,
3040
+ cpiProgram: spl_token_1.TOKEN_PROGRAM_ID,
3041
+ })
3023
3042
  .transaction();
3024
3043
  return await this.base.intoVersionedTransaction(tx, txOptions);
3025
3044
  }
@@ -3028,7 +3047,7 @@ exports.WSolClient = WSolClient;
3028
3047
 
3029
3048
 
3030
3049
  /***/ }),
3031
- /* 26 */
3050
+ /* 25 */
3032
3051
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
3033
3052
 
3034
3053
 
@@ -3037,71 +3056,66 @@ exports.StakingClient = void 0;
3037
3056
  const anchor_1 = __webpack_require__(2);
3038
3057
  const web3_js_1 = __webpack_require__(5);
3039
3058
  const constants_1 = __webpack_require__(10);
3040
- const spl_stake_pool_1 = __webpack_require__(27);
3041
- const STAKE_ACCOUNT_SIZE = 200;
3059
+ const spl_stake_pool_1 = __webpack_require__(26);
3060
+ const spl_token_1 = __webpack_require__(8);
3042
3061
  class StakingClient {
3043
3062
  constructor(base, marinade) {
3044
3063
  this.base = base;
3045
3064
  this.marinade = marinade;
3046
3065
  }
3047
3066
  /*
3048
- * High-level API methods
3067
+ * Client methods
3049
3068
  */
3050
3069
  async unstake(glamState, asset, amount, txOptions = {}) {
3051
3070
  const assetStr = asset.toBase58();
3052
- let tx;
3071
+ // mSOL
3053
3072
  if (assetStr === constants_1.MSOL.toBase58()) {
3054
- // Marinade
3055
- tx = await this.marinade.orderUnstakeTx(glamState, new anchor_1.BN(amount), txOptions);
3073
+ const tx = await this.marinade.orderUnstakeTx(glamState, new anchor_1.BN(amount), txOptions);
3074
+ return await this.base.sendAndConfirm(tx);
3056
3075
  }
3057
- else {
3058
- // Other LSTs
3059
- const assetMeta = this.base.getAssetMeta(assetStr);
3060
- if (!assetMeta || !assetMeta.stateAccount) {
3061
- throw new Error("Invalid LST: " + asset);
3062
- }
3063
- tx = await this.stakePoolWithdrawStakeTx(glamState, assetMeta.stateAccount, new anchor_1.BN(amount), true, txOptions);
3076
+ // Other LSTs
3077
+ const assetMeta = this.base.getAssetMeta(assetStr);
3078
+ if (!assetMeta || !assetMeta.stateAccount) {
3079
+ throw new Error("Invalid LST: " + asset);
3064
3080
  }
3081
+ const tx = await this.stakePoolWithdrawStakeTx(glamState, assetMeta.stateAccount, new anchor_1.BN(amount), true, txOptions);
3065
3082
  return await this.base.sendAndConfirm(tx);
3066
3083
  }
3067
- /*
3068
- * Client methods
3069
- */
3070
3084
  async stakePoolDepositSol(glamState, stakePool, amount, txOptions = {}) {
3071
- const tx = await this.stakePoolDepositSolTx(glamState, stakePool, amount);
3085
+ const tx = await this.stakePoolDepositSolTx(glamState, stakePool, amount, txOptions);
3072
3086
  return await this.base.sendAndConfirm(tx);
3073
3087
  }
3074
- async stakePoolDepositStake(glamState, stakePool, stakeAccount) {
3075
- const tx = await this.stakePoolDepositStakeTx(glamState, stakePool, stakeAccount);
3088
+ async stakePoolDepositStake(glamState, stakePool, stakeAccount, txOptions = {}) {
3089
+ const tx = await this.stakePoolDepositStakeTx(glamState, stakePool, stakeAccount, txOptions);
3076
3090
  return await this.base.sendAndConfirm(tx);
3077
3091
  }
3078
- async stakePoolWithdrawStake(glamState, stakePool, amount) {
3079
- const tx = await this.stakePoolWithdrawStakeTx(glamState, stakePool, amount);
3092
+ async stakePoolWithdrawStake(glamState, stakePool, amount, txOptions = {}) {
3093
+ const tx = await this.stakePoolWithdrawStakeTx(glamState, stakePool, amount, false, txOptions);
3080
3094
  return await this.base.sendAndConfirm(tx);
3081
3095
  }
3082
- async initializeAndDelegateStake(glamState, vote, amount) {
3083
- const tx = await this.initializeAndDelegateStakeTx(glamState, vote, amount);
3096
+ async initializeAndDelegateStake(glamState, vote, amount, txOptions = {}) {
3097
+ const tx = await this.initializeAndDelegateStakeTx(glamState, vote, amount, txOptions);
3084
3098
  return await this.base.sendAndConfirm(tx);
3085
3099
  }
3086
- async deactivateStakeAccounts(glamState, stakeAccounts) {
3087
- const tx = await this.deactivateStakeAccountsTx(glamState, stakeAccounts);
3100
+ async deactivate(glamState, stakeAccounts, txOptions = {}) {
3101
+ const tx = await this.deactivateStakeTx(glamState, stakeAccounts, txOptions);
3088
3102
  return await this.base.sendAndConfirm(tx);
3089
3103
  }
3090
- async withdrawFromStakeAccounts(glamState, stakeAccounts) {
3091
- const tx = await this.withdrawFromStakeAccountsTx(glamState, stakeAccounts);
3104
+ async withdraw(glamState, stakeAccounts, txOptions = {}) {
3105
+ const tx = await this.withdrawStakeTx(glamState, stakeAccounts, txOptions);
3092
3106
  return await this.base.sendAndConfirm(tx);
3093
3107
  }
3094
- async mergeStakeAccounts(glamState, toStake, fromStake) {
3095
- const tx = await this.mergeStakeAccountsTx(glamState, toStake, fromStake);
3108
+ async merge(glamState, destinationStake, sourceStake, txOptions = {}) {
3109
+ const tx = await this.mergeStakeTx(glamState, destinationStake, sourceStake, txOptions);
3096
3110
  return await this.base.sendAndConfirm(tx);
3097
3111
  }
3098
- async splitStakeAccount(glamState, existingStake, lamports) {
3099
- const { tx, newStake } = await this.splitStakeAccountTx(glamState, existingStake, lamports);
3112
+ async split(glamState, existingStake, lamports, txOptions = {}) {
3113
+ const { tx, newStake } = await this.splitStakeTx(glamState, existingStake, lamports, txOptions);
3100
3114
  const txSig = await this.base.sendAndConfirm(tx);
3101
3115
  return { newStake, txSig };
3102
3116
  }
3103
- async redelegateStake(glamState, existingStake, vote) {
3104
- const { newStake, tx } = await this.redelegateStakeTx(glamState, existingStake, vote);
3117
+ async redelegate(glamState, existingStake, vote, txOptions = {}) {
3118
+ const { newStake, tx } = await this.redelegateStakeTx(glamState, existingStake, vote, txOptions);
3105
3119
  const txSig = await this.base.sendAndConfirm(tx);
3106
3120
  return { newStake, txSig };
3107
3121
  }
@@ -3119,30 +3133,11 @@ class StakingClient {
3119
3133
  const [publicKey] = web3_js_1.PublicKey.findProgramAddressSync([stakePool.toBuffer(), Buffer.from("deposit")], programId);
3120
3134
  return publicKey;
3121
3135
  }
3122
- async getStakeAccounts(withdrawAuthority) {
3123
- const accounts = await this.base.provider.connection.getParsedProgramAccounts(web3_js_1.StakeProgram.programId, {
3124
- filters: [
3125
- {
3126
- dataSize: STAKE_ACCOUNT_SIZE,
3127
- },
3128
- {
3129
- memcmp: {
3130
- offset: 12,
3131
- bytes: withdrawAuthority.toBase58(),
3132
- },
3133
- },
3134
- ],
3135
- });
3136
- // order by lamports desc
3137
- return accounts
3138
- .sort((a, b) => b.account.lamports - a.account.lamports)
3139
- .map((a) => a.pubkey);
3140
- }
3141
3136
  async getStakeAccountsWithStates(withdrawAuthority) {
3142
3137
  const accounts = await this.base.provider.connection.getParsedProgramAccounts(web3_js_1.StakeProgram.programId, {
3143
3138
  filters: [
3144
3139
  {
3145
- dataSize: STAKE_ACCOUNT_SIZE,
3140
+ dataSize: constants_1.STAKE_ACCOUNT_SIZE,
3146
3141
  },
3147
3142
  {
3148
3143
  memcmp: {
@@ -3225,14 +3220,14 @@ class StakingClient {
3225
3220
  async createStakeAccount(signer) {
3226
3221
  const seed = Date.now().toString();
3227
3222
  const stakeAccount = await web3_js_1.PublicKey.createWithSeed(signer, seed, web3_js_1.StakeProgram.programId);
3228
- const lamports = await this.base.provider.connection.getMinimumBalanceForRentExemption(STAKE_ACCOUNT_SIZE);
3223
+ const lamports = await this.base.provider.connection.getMinimumBalanceForRentExemption(constants_1.STAKE_ACCOUNT_SIZE);
3229
3224
  const createStakeAccountIx = web3_js_1.SystemProgram.createAccountWithSeed({
3230
3225
  fromPubkey: signer,
3231
3226
  newAccountPubkey: stakeAccount,
3232
3227
  basePubkey: signer,
3233
3228
  seed,
3234
3229
  lamports,
3235
- space: STAKE_ACCOUNT_SIZE,
3230
+ space: constants_1.STAKE_ACCOUNT_SIZE,
3236
3231
  programId: web3_js_1.StakeProgram.programId,
3237
3232
  });
3238
3233
  return [stakeAccount, createStakeAccountIx];
@@ -3240,33 +3235,39 @@ class StakingClient {
3240
3235
  /*
3241
3236
  * API methods
3242
3237
  */
3243
- async stakePoolDepositSolTx(glamState, stakePool, amount, txOptions = {}) {
3238
+ async stakePoolDepositSolTx(glamState, stakePool, lamports, txOptions = {}) {
3244
3239
  const glamSigner = txOptions.signer || this.base.getSigner();
3245
- const glamVault = this.base.getVaultPda(glamState);
3246
3240
  const { programId: stakePoolProgram, poolMint, withdrawAuthority, feeAccount, tokenProgramId: tokenProgram, reserveStake, } = await this.getStakePoolAccountData(stakePool);
3241
+ const glamVault = this.base.getVaultPda(glamState);
3242
+ const poolTokensTo = this.base.getAta(poolMint, glamVault, tokenProgram);
3247
3243
  console.log(`stakePool ${stakePool}, programId: ${stakePoolProgram}`);
3244
+ // @ts-ignore
3248
3245
  const tx = await this.base.program.methods
3249
- .stakePoolDepositSol(amount)
3250
- .accountsPartial({
3246
+ .stakePoolDepositSol(lamports)
3247
+ .accounts({
3251
3248
  glamSigner,
3252
3249
  glamState,
3253
- glamVault,
3254
- mintTo: this.base.getVaultAta(glamState, poolMint),
3255
- stakePoolProgram,
3250
+ cpiProgram: stakePoolProgram,
3256
3251
  stakePool,
3257
- poolMint: poolMint,
3252
+ stakePoolWithdrawAuthority: withdrawAuthority,
3258
3253
  reserveStake,
3259
- withdrawAuthority,
3260
3254
  feeAccount,
3261
- tokenProgram, // TODO: glam program instruction currently doesn't support token2022
3255
+ referrerPoolTokensAccount: poolTokensTo,
3256
+ poolTokensTo,
3257
+ poolMint,
3258
+ tokenProgram,
3262
3259
  })
3260
+ .preInstructions([
3261
+ (0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(glamSigner, poolTokensTo, glamVault, poolMint, tokenProgram),
3262
+ ])
3263
3263
  .transaction();
3264
3264
  return await this.base.intoVersionedTransaction(tx, txOptions);
3265
3265
  }
3266
3266
  async stakePoolDepositStakeTx(glamState, stakePool, stakeAccount, txOptions = {}) {
3267
3267
  const glamSigner = txOptions.signer || this.base.getSigner();
3268
- const glamVault = this.base.getVaultPda(glamState);
3269
3268
  const { programId: stakePoolProgram, poolMint, depositAuthority, withdrawAuthority, feeAccount, validatorList, tokenProgramId: tokenProgram, reserveStake, } = await this.getStakePoolAccountData(stakePool);
3269
+ const glamVault = this.base.getVaultPda(glamState);
3270
+ const poolTokensTo = this.base.getAta(poolMint, glamVault, tokenProgram);
3270
3271
  // All stake accounts owned by the stake pool withdraw authority
3271
3272
  const validatorStakeCandidates = await this.getStakeAccountsWithStates(withdrawAuthority);
3272
3273
  // Find a validator stake account to use from the list of candidates.
@@ -3281,33 +3282,33 @@ class StakingClient {
3281
3282
  }
3282
3283
  const tx = await this.base.program.methods
3283
3284
  .stakePoolDepositStake()
3284
- .accountsPartial({
3285
+ .accounts({
3285
3286
  glamSigner,
3286
3287
  glamState,
3287
- glamVault,
3288
- vaultStakeAccount: stakeAccount,
3289
- mintTo: this.base.getVaultAta(glamState, poolMint),
3290
- poolMint,
3291
- feeAccount,
3288
+ cpiProgram: stakePoolProgram,
3292
3289
  stakePool,
3293
- depositAuthority,
3294
- withdrawAuthority,
3290
+ stakePoolWithdrawAuthority: withdrawAuthority,
3295
3291
  validatorList,
3296
3292
  validatorStakeAccount,
3297
3293
  reserveStakeAccount: reserveStake,
3298
- stakePoolProgram,
3299
- clock: web3_js_1.SYSVAR_CLOCK_PUBKEY,
3300
- stakeHistory: web3_js_1.SYSVAR_STAKE_HISTORY_PUBKEY,
3294
+ depositStake: stakeAccount,
3295
+ poolTokensTo,
3296
+ poolMint,
3297
+ feeAccount,
3298
+ referrerPoolTokensAccount: poolTokensTo,
3301
3299
  tokenProgram,
3302
- stakeProgram: web3_js_1.StakeProgram.programId,
3303
3300
  })
3301
+ .preInstructions([
3302
+ (0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(glamSigner, poolTokensTo, glamVault, poolMint, tokenProgram),
3303
+ ])
3304
3304
  .transaction();
3305
3305
  return await this.base.intoVersionedTransaction(tx, txOptions);
3306
3306
  }
3307
3307
  async stakePoolWithdrawStakeTx(glamState, stakePool, amount, deactivate = false, txOptions = {}) {
3308
3308
  const glamSigner = txOptions.signer || this.base.getSigner();
3309
- const glamVault = this.base.getVaultPda(glamState);
3310
3309
  const { programId: stakePoolProgram, poolMint, withdrawAuthority, feeAccount, tokenProgramId: tokenProgram, validatorList, reserveStake, } = await this.getStakePoolAccountData(stakePool);
3310
+ const glamVault = this.base.getVaultPda(glamState);
3311
+ const poolTokensFrom = this.base.getAta(poolMint, glamVault, tokenProgram);
3311
3312
  // The reserve stake account should NOT be used for withdrawals unless we have no other options.
3312
3313
  const validatorStakeCandidates = (await this.getStakeAccountsWithStates(withdrawAuthority)).filter((s) => !s.address.equals(reserveStake));
3313
3314
  console.log("validatorStakeCandidates", validatorStakeCandidates);
@@ -3318,41 +3319,29 @@ class StakingClient {
3318
3319
  const postInstructions = deactivate
3319
3320
  ? [
3320
3321
  await this.base.program.methods
3321
- .deactivateStakeAccounts()
3322
- .accountsPartial({
3322
+ .stakeDeactivate()
3323
+ .accounts({
3323
3324
  glamSigner,
3324
3325
  glamState,
3325
- glamVault,
3326
- clock: web3_js_1.SYSVAR_CLOCK_PUBKEY,
3327
- stakeProgram: web3_js_1.StakeProgram.programId,
3326
+ stake: stakeAccount,
3328
3327
  })
3329
- .remainingAccounts([
3330
- {
3331
- pubkey: stakeAccount,
3332
- isSigner: false,
3333
- isWritable: true,
3334
- },
3335
- ])
3336
3328
  .instruction(),
3337
3329
  ]
3338
3330
  : [];
3339
3331
  const tx = await this.base.program.methods
3340
3332
  .stakePoolWithdrawStake(amount)
3341
- .accountsPartial({
3333
+ .accounts({
3342
3334
  glamSigner,
3343
3335
  glamState,
3344
- glamVault,
3345
- vaultStakeAccount: stakeAccount,
3346
- stakePoolProgram,
3336
+ cpiProgram: stakePoolProgram,
3337
+ stake: stakeAccount,
3347
3338
  stakePool,
3348
3339
  poolMint,
3349
- poolTokenAta: this.base.getVaultAta(glamState, poolMint),
3340
+ poolTokensFrom,
3350
3341
  validatorList,
3351
3342
  validatorStakeAccount,
3352
- withdrawAuthority,
3343
+ stakePoolWithdrawAuthority: withdrawAuthority,
3353
3344
  feeAccount,
3354
- clock: web3_js_1.SYSVAR_CLOCK_PUBKEY,
3355
- stakeProgram: web3_js_1.StakeProgram.programId,
3356
3345
  tokenProgram,
3357
3346
  })
3358
3347
  .preInstructions([createStakeAccountIx])
@@ -3362,37 +3351,49 @@ class StakingClient {
3362
3351
  }
3363
3352
  async initializeAndDelegateStakeTx(glamState, vote, amount, txOptions = {}) {
3364
3353
  const glamSigner = txOptions.signer || this.base.getSigner();
3365
- const glamVault = this.base.getVaultPda(glamState);
3366
3354
  const [stakeAccount, createStakeAccountIx] = await this.createStakeAccount(glamSigner);
3355
+ const initStakeIx = await this.base.program.methods
3356
+ .stakeInitialize()
3357
+ .accounts({
3358
+ glamState,
3359
+ glamSigner,
3360
+ stake: stakeAccount,
3361
+ })
3362
+ .instruction();
3363
+ const fundStakeIx = await this.base.program.methods
3364
+ .systemTransfer(amount)
3365
+ .accounts({
3366
+ glamState,
3367
+ glamSigner,
3368
+ to: stakeAccount,
3369
+ })
3370
+ .instruction();
3367
3371
  const tx = await this.base.program.methods
3368
- .initializeAndDelegateStake(amount)
3369
- .accountsPartial({
3372
+ .stakeDelegateStake()
3373
+ .accounts({
3370
3374
  glamState,
3371
3375
  glamSigner,
3372
- glamVault,
3373
- vaultStakeAccount: stakeAccount,
3376
+ stake: stakeAccount,
3374
3377
  vote,
3375
3378
  stakeConfig: web3_js_1.STAKE_CONFIG_ID,
3376
- stakeHistory: web3_js_1.SYSVAR_STAKE_HISTORY_PUBKEY,
3377
- stakeProgram: web3_js_1.StakeProgram.programId,
3378
3379
  })
3379
- .preInstructions([createStakeAccountIx])
3380
+ .preInstructions([createStakeAccountIx, initStakeIx, fundStakeIx])
3380
3381
  .transaction();
3381
3382
  return await this.base.intoVersionedTransaction(tx, txOptions);
3382
3383
  }
3383
- async deactivateStakeAccountsTx(glamState, stakeAccounts, txOptions = {}) {
3384
+ async deactivateStakeTx(glamState, stakeAccounts, txOptions = {}) {
3385
+ if (stakeAccounts.length < 1) {
3386
+ throw new Error("At least one stake account is required");
3387
+ }
3384
3388
  const glamSigner = txOptions.signer || this.base.getSigner();
3385
- const glamVault = this.base.getVaultPda(glamState);
3386
3389
  const tx = await this.base.program.methods
3387
- .deactivateStakeAccounts()
3388
- .accountsPartial({
3390
+ .stakeDeactivate()
3391
+ .accounts({
3389
3392
  glamState,
3390
3393
  glamSigner,
3391
- glamVault,
3392
- clock: web3_js_1.SYSVAR_CLOCK_PUBKEY,
3393
- stakeProgram: web3_js_1.StakeProgram.programId,
3394
+ stake: stakeAccounts[0],
3394
3395
  })
3395
- .remainingAccounts(stakeAccounts.map((a) => ({
3396
+ .remainingAccounts(stakeAccounts.slice(1).map((a) => ({
3396
3397
  pubkey: a,
3397
3398
  isSigner: false,
3398
3399
  isWritable: true,
@@ -3400,20 +3401,24 @@ class StakingClient {
3400
3401
  .transaction();
3401
3402
  return await this.base.intoVersionedTransaction(tx, txOptions);
3402
3403
  }
3403
- async withdrawFromStakeAccountsTx(glamState, stakeAccounts, txOptions = {}) {
3404
+ async withdrawStakeTx(glamState, stakeAccounts, txOptions = {}) {
3405
+ if (stakeAccounts.length < 1) {
3406
+ throw new Error("At least one stake account is required");
3407
+ }
3408
+ let lamports = new anchor_1.BN(0);
3409
+ if (stakeAccounts.length === 1) {
3410
+ const accontInfo = await this.base.provider.connection.getAccountInfo(stakeAccounts[0]);
3411
+ lamports = accontInfo ? new anchor_1.BN(accontInfo.lamports) : new anchor_1.BN(0);
3412
+ }
3404
3413
  const glamSigner = txOptions.signer || this.base.getSigner();
3405
- const glamVault = this.base.getVaultPda(glamState);
3406
3414
  const tx = await this.base.program.methods
3407
- .withdrawFromStakeAccounts()
3408
- .accountsPartial({
3415
+ .stakeWithdraw(lamports)
3416
+ .accounts({
3409
3417
  glamSigner,
3410
3418
  glamState,
3411
- glamVault,
3412
- clock: web3_js_1.SYSVAR_CLOCK_PUBKEY,
3413
- stakeHistory: web3_js_1.SYSVAR_STAKE_HISTORY_PUBKEY,
3414
- stakeProgram: web3_js_1.StakeProgram.programId,
3419
+ stake: stakeAccounts[0],
3415
3420
  })
3416
- .remainingAccounts(stakeAccounts.map((a) => ({
3421
+ .remainingAccounts(stakeAccounts.slice(1).map((a) => ({
3417
3422
  pubkey: a,
3418
3423
  isSigner: false,
3419
3424
  isWritable: true,
@@ -3421,36 +3426,29 @@ class StakingClient {
3421
3426
  .transaction();
3422
3427
  return await this.base.intoVersionedTransaction(tx, txOptions);
3423
3428
  }
3424
- async mergeStakeAccountsTx(glamState, toStake, fromStake, txOptions = {}) {
3429
+ async mergeStakeTx(glamState, destinationStake, sourceStake, txOptions = {}) {
3425
3430
  const glamSigner = txOptions.signer || this.base.getSigner();
3426
- const glamVault = this.base.getVaultPda(glamState);
3427
3431
  const tx = await this.base.program.methods
3428
- .mergeStakeAccounts()
3429
- .accountsPartial({
3432
+ .stakeMerge()
3433
+ .accounts({
3430
3434
  glamSigner,
3431
3435
  glamState,
3432
- glamVault,
3433
- toStake,
3434
- fromStake,
3435
- stakeProgram: web3_js_1.StakeProgram.programId,
3436
- stakeHistory: web3_js_1.SYSVAR_STAKE_HISTORY_PUBKEY,
3436
+ destinationStake,
3437
+ sourceStake,
3437
3438
  })
3438
3439
  .transaction();
3439
3440
  return await this.base.intoVersionedTransaction(tx, txOptions);
3440
3441
  }
3441
- async splitStakeAccountTx(glamState, existingStake, lamports, txOptions = {}) {
3442
+ async splitStakeTx(glamState, existingStake, lamports, txOptions = {}) {
3442
3443
  const glamSigner = txOptions.signer || this.base.getSigner();
3443
- const glamVault = this.base.getVaultPda(glamState);
3444
3444
  const [newStake, createStakeAccountIx] = await this.createStakeAccount(glamSigner);
3445
3445
  const tx = await this.base.program.methods
3446
- .splitStakeAccount(lamports)
3447
- .accountsPartial({
3446
+ .stakeSplit(lamports)
3447
+ .accounts({
3448
3448
  glamSigner,
3449
3449
  glamState,
3450
- glamVault,
3451
- existingStake,
3452
- newStake,
3453
- stakeProgram: web3_js_1.StakeProgram.programId,
3450
+ stake: existingStake,
3451
+ splitStake: newStake,
3454
3452
  })
3455
3453
  .preInstructions([createStakeAccountIx])
3456
3454
  .transaction();
@@ -3459,18 +3457,15 @@ class StakingClient {
3459
3457
  }
3460
3458
  async redelegateStakeTx(glamState, existingStake, vote, txOptions = {}) {
3461
3459
  const glamSigner = txOptions.signer || this.base.getSigner();
3462
- const glamVault = this.base.getVaultPda(glamState);
3463
3460
  const [newStake, createStakeAccountIx] = await this.createStakeAccount(glamSigner);
3464
3461
  const tx = await this.base.program.methods
3465
- .redelegateStake()
3466
- .accountsPartial({
3462
+ .stakeRedelegate()
3463
+ .accounts({
3467
3464
  glamSigner,
3468
3465
  glamState,
3469
- glamVault,
3470
3466
  vote,
3471
- existingStake,
3467
+ stake: existingStake,
3472
3468
  newStake,
3473
- stakeProgram: web3_js_1.StakeProgram.programId,
3474
3469
  stakeConfig: web3_js_1.STAKE_CONFIG_ID,
3475
3470
  })
3476
3471
  .preInstructions([createStakeAccountIx])
@@ -3483,13 +3478,13 @@ exports.StakingClient = StakingClient;
3483
3478
 
3484
3479
 
3485
3480
  /***/ }),
3486
- /* 27 */
3481
+ /* 26 */
3487
3482
  /***/ ((module) => {
3488
3483
 
3489
3484
  module.exports = require("@solana/spl-stake-pool");
3490
3485
 
3491
3486
  /***/ }),
3492
- /* 28 */
3487
+ /* 27 */
3493
3488
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
3494
3489
 
3495
3490
 
@@ -3512,6 +3507,7 @@ class StateClient {
3512
3507
  async createState(partialStateModel, singleTx = false, txOptions = {}) {
3513
3508
  const glamSigner = txOptions.signer || this.base.getSigner();
3514
3509
  let stateModel = this.enrichStateModel(partialStateModel);
3510
+ // @ts-ignore
3515
3511
  const glamState = this.base.getStatePda(stateModel);
3516
3512
  const glamVault = this.base.getVaultPda(glamState);
3517
3513
  const openfunds = this.base.getOpenfundsPda(glamState);
@@ -3520,35 +3516,45 @@ class StateClient {
3520
3516
  if (mints && mints.length > 1) {
3521
3517
  throw new Error("Multiple mints not supported");
3522
3518
  }
3523
- // No share class, only need to initialize the fund
3519
+ // No share class, only need to initialize the state
3524
3520
  if (mints && mints.length === 0) {
3525
- const txSig = await this.base.program.methods
3521
+ // @ts-ignore
3522
+ const tx = await this.base.program.methods
3526
3523
  .initializeState(stateModel)
3527
3524
  .accountsPartial({ glamState, glamSigner, glamVault })
3528
- .rpc();
3525
+ .transaction();
3526
+ const vTx = await this.base.intoVersionedTransaction(tx, txOptions);
3527
+ const txSig = await this.base.sendAndConfirm(vTx);
3529
3528
  return [txSig, glamState];
3530
3529
  }
3530
+ let extraMetasAccount = mints &&
3531
+ mints[0].lockUpPeriodInSeconds &&
3532
+ mints[0].lockUpPeriodInSeconds > 0
3533
+ ? this.base.getExtraMetasPda(glamState)
3534
+ : null;
3535
+ // Initialize state and add mint in one transaction
3531
3536
  if (mints && mints.length > 0 && singleTx) {
3532
3537
  const initStateIx = await this.base.program.methods
3533
3538
  .initializeState(stateModel)
3534
3539
  .accountsPartial({ glamState, glamSigner, glamVault })
3535
3540
  .instruction();
3536
- // FIXME: setting rawOpenfunds to null is a workarond for
3537
- // Access violation in stack frame 5 at address 0x200005ff8 of size 8
3538
- mints[0].rawOpenfunds = null;
3539
3541
  const newMint = this.base.getMintPda(glamState, 0);
3540
- const txSig = await this.base.program.methods
3542
+ const tx = await this.base.program.methods
3541
3543
  .addMint(mints[0])
3542
3544
  .accounts({
3543
3545
  glamState,
3544
3546
  glamSigner,
3545
3547
  newMint,
3548
+ extraMetasAccount,
3546
3549
  })
3547
3550
  .preInstructions([initStateIx])
3548
- .rpc();
3551
+ .transaction();
3552
+ const vTx = await this.base.intoVersionedTransaction(tx, txOptions);
3553
+ const txSig = await this.base.sendAndConfirm(vTx);
3549
3554
  return [txSig, glamState];
3550
3555
  }
3551
- const txSig = await this.base.program.methods
3556
+ // Initialize state and add mints in separate transactions
3557
+ const tx = await this.base.program.methods
3552
3558
  .initializeState(stateModel)
3553
3559
  .accountsPartial({
3554
3560
  glamState,
@@ -3556,24 +3562,22 @@ class StateClient {
3556
3562
  glamSigner,
3557
3563
  openfundsMetadata: openfunds,
3558
3564
  })
3559
- .rpc();
3565
+ .transaction();
3566
+ const vTx = await this.base.intoVersionedTransaction(tx, txOptions);
3567
+ const txSig = await this.base.sendAndConfirm(vTx);
3560
3568
  const addMintTxs = await Promise.all((mints || []).map(async (mint, j) => {
3561
3569
  const newMint = this.base.getMintPda(glamState, j);
3562
- // FIXME: setting rawOpenfunds to null is a workarond for
3563
- // Access violation in stack frame 5 at address 0x200005ff8 of size 8
3564
- mint.rawOpenfunds = null;
3565
- return await this.base.program.methods
3570
+ const tx = await this.base.program.methods
3566
3571
  .addMint(mint)
3567
3572
  .accounts({
3568
3573
  glamState,
3569
3574
  glamSigner,
3570
3575
  newMint,
3576
+ extraMetasAccount,
3571
3577
  })
3572
- .preInstructions([
3573
- // FIXME: estimate compute units
3574
- web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({ units: 500000 }),
3575
- ])
3576
- .rpc();
3578
+ .transaction();
3579
+ const vTx = await this.base.intoVersionedTransaction(tx, txOptions);
3580
+ return await this.base.sendAndConfirm(vTx);
3577
3581
  }));
3578
3582
  console.log("addMintTxs", addMintTxs);
3579
3583
  return [txSig, glamState];
@@ -3586,7 +3590,7 @@ class StateClient {
3586
3590
  async updateStateTx(glamState, updated, txOptions) {
3587
3591
  const glamSigner = txOptions.signer || this.base.getSigner();
3588
3592
  const tx = await this.base.program.methods
3589
- .updateState(new models_1.StateModel(updated))
3593
+ .updateState(new models_1.StateIdlModel(updated))
3590
3594
  .accounts({
3591
3595
  glamState,
3592
3596
  glamSigner,
@@ -3696,55 +3700,57 @@ class StateClient {
3696
3700
  async upsertDelegateAcls(glamState, delegateAcls, txOptions = {}) {
3697
3701
  return await this.updateState(glamState, { delegateAcls }, txOptions);
3698
3702
  }
3699
- async setSubscribeRedeemEnabled(glamState, enabled, txOptions = {}) {
3700
- const glamSigner = txOptions.signer || this.base.getSigner();
3701
- return await this.base.program.methods
3702
- .setSubscribeRedeemEnabled(enabled)
3703
- .accounts({
3704
- glamState,
3705
- glamSigner,
3706
- })
3707
- .rpc();
3708
- }
3709
3703
  async closeTokenAccounts(glamState, tokenAccounts, txOptions = {}) {
3710
3704
  const tx = await this.closeTokenAccountsTx(glamState, tokenAccounts, txOptions);
3711
3705
  return await this.base.sendAndConfirm(tx);
3712
3706
  }
3713
3707
  /**
3714
- * Close fund treasury's token accounts
3715
- *
3716
- * @param glamState
3717
- * @param tokenAccounts
3718
- * @param txOptions
3719
- * @returns
3708
+ * Close vault's token accounts, all token accounts must use the same token program
3720
3709
  */
3721
- async closeTokenAccountsIx(glamState, tokenAccounts) {
3710
+ async closeTokenAccountIx(glamState, tokenAccounts, tokenProgram = spl_token_1.TOKEN_PROGRAM_ID, txOptions = {}) {
3711
+ const glamSigner = txOptions.signer || this.base.getSigner();
3722
3712
  return await this.base.program.methods
3723
- .closeTokenAccounts()
3713
+ .tokenCloseAccount()
3724
3714
  .accounts({
3725
3715
  glamState,
3716
+ glamSigner,
3717
+ tokenAccount: tokenAccounts[0],
3718
+ cpiProgram: tokenProgram,
3726
3719
  })
3727
- .remainingAccounts(tokenAccounts.map((account) => ({
3720
+ .remainingAccounts(tokenAccounts.slice(1).map((account) => ({
3728
3721
  pubkey: account,
3729
3722
  isSigner: false,
3730
3723
  isWritable: true,
3731
3724
  })))
3732
3725
  .instruction();
3733
3726
  }
3734
- async closeTokenAccountsTx(glamState, tokenAccounts, txOptions) {
3735
- const glamSigner = txOptions.signer || this.base.getSigner();
3736
- const tx = await this.base.program.methods
3737
- .closeTokenAccounts()
3738
- .accounts({
3739
- glamState,
3740
- glamSigner,
3741
- })
3742
- .remainingAccounts(tokenAccounts.map((account) => ({
3743
- pubkey: account,
3744
- isSigner: false,
3745
- isWritable: true,
3746
- })))
3747
- .transaction();
3727
+ async closeTokenAccountsTx(glamState, accounts, txOptions) {
3728
+ const accountsInfo = await this.base.provider.connection.getMultipleAccountsInfo(accounts);
3729
+ if (accounts.length !== accountsInfo.filter((a) => !!a).length) {
3730
+ throw new Error("Some token accounts do not exist");
3731
+ }
3732
+ // split token accounts into 2 arrays by owner program
3733
+ const tokenAccountsByProgram = new Map([
3734
+ [spl_token_1.TOKEN_PROGRAM_ID, []],
3735
+ [spl_token_1.TOKEN_2022_PROGRAM_ID, []],
3736
+ ]);
3737
+ accountsInfo.forEach((accountInfo, i) => {
3738
+ [spl_token_1.TOKEN_PROGRAM_ID, spl_token_1.TOKEN_2022_PROGRAM_ID].forEach((programId) => {
3739
+ if (accountInfo?.owner.equals(programId)) {
3740
+ tokenAccountsByProgram.get(programId)?.push(accounts[i]);
3741
+ }
3742
+ });
3743
+ });
3744
+ const ixs = (await Promise.all(Array.from(tokenAccountsByProgram.entries()).map(async ([programId, accounts]) => {
3745
+ if (accounts.length === 0)
3746
+ return null;
3747
+ return this.closeTokenAccountIx(glamState, accounts, new web3_js_1.PublicKey(programId), txOptions);
3748
+ }))).filter((ix) => ix !== null);
3749
+ if (ixs.length === 0) {
3750
+ throw new Error("No token accounts to close");
3751
+ }
3752
+ const tx = new web3_js_1.Transaction();
3753
+ tx.add(...ixs);
3748
3754
  return await this.base.intoVersionedTransaction(tx, txOptions);
3749
3755
  }
3750
3756
  /* Deposit & Withdraw */
@@ -3815,15 +3821,13 @@ class StateClient {
3815
3821
  ];
3816
3822
  const postInstructions = [];
3817
3823
  if (asset.equals(constants_1.WSOL)) {
3818
- const wrapSolIx = await this.base.maybeWrapSol(glamState, amount, glamSigner);
3819
- if (wrapSolIx) {
3820
- preInstructions.push(wrapSolIx);
3821
- // If we need to wrap SOL, it means the wSOL balance will be drained,
3822
- // and we close the wSOL token account for convenience
3823
- postInstructions.push(await this.closeTokenAccountsIx(glamState, [
3824
- this.base.getVaultAta(glamState, constants_1.WSOL),
3825
- ]));
3826
- }
3824
+ const wrapSolIxs = await this.base.maybeWrapSol(glamState, amount, glamSigner);
3825
+ preInstructions.push(...wrapSolIxs);
3826
+ // If we need to wrap SOL, it means the wSOL balance will be drained,
3827
+ // and we close the wSOL token account for convenience
3828
+ postInstructions.push(await this.closeTokenAccountIx(glamState, [
3829
+ this.base.getVaultAta(glamState, constants_1.WSOL),
3830
+ ]));
3827
3831
  }
3828
3832
  const tx = await this.base.program.methods
3829
3833
  .withdraw(new anchor_1.BN(amount))
@@ -3843,17 +3847,53 @@ exports.StateClient = StateClient;
3843
3847
 
3844
3848
 
3845
3849
  /***/ }),
3846
- /* 29 */
3850
+ /* 28 */
3847
3851
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
3848
3852
 
3849
3853
 
3850
3854
  Object.defineProperty(exports, "__esModule", ({ value: true }));
3851
3855
  exports.MintClient = void 0;
3856
+ const web3_js_1 = __webpack_require__(5);
3852
3857
  const spl_token_1 = __webpack_require__(8);
3858
+ const models_1 = __webpack_require__(7);
3859
+ const constants_1 = __webpack_require__(10);
3853
3860
  class MintClient {
3854
3861
  constructor(base) {
3855
3862
  this.base = base;
3856
3863
  }
3864
+ // `getTokenAccounts` is a helius only RPC endpoint, we have to hardcode the URL here
3865
+ // We cannot use NEXT_PUBLIC_SOLANA_RPC because users may choose to use a non-helius RPC
3866
+ async fetchTokenHolders(state) {
3867
+ const mint = this.base.getMintPda(state, 0);
3868
+ const response = await fetch(`https://${this.base.cluster}.helius-rpc.com/?api-key=${process.env.NEXT_PUBLIC_HELIUS_API_KEY}`, {
3869
+ method: "POST",
3870
+ headers: { "Content-Type": "application/json" },
3871
+ body: JSON.stringify({
3872
+ jsonrpc: "2.0",
3873
+ id: "1",
3874
+ method: "getTokenAccounts",
3875
+ params: {
3876
+ mint: mint.toBase58(),
3877
+ options: { showZeroBalance: true },
3878
+ },
3879
+ }),
3880
+ });
3881
+ const data = await response.json();
3882
+ console.log("Fetched token holders:", data.result);
3883
+ const { token_accounts: tokenAccounts } = data.result;
3884
+ return tokenAccounts.map((ta) => ({
3885
+ owner: new web3_js_1.PublicKey(ta.owner),
3886
+ pubkey: new web3_js_1.PublicKey(ta.address),
3887
+ mint,
3888
+ programId: spl_token_1.TOKEN_2022_PROGRAM_ID,
3889
+ decimals: 9,
3890
+ amount: ta.amount,
3891
+ uiAmount: Number(ta.amount) / 10 ** 9,
3892
+ frozen: ta.frozen,
3893
+ }));
3894
+ }
3895
+ // Much slower than fetchTokenHolders.
3896
+ // Use fetchTokenHolders instead when possible.
3857
3897
  async getHolders(state, mintId = 0) {
3858
3898
  const mintPda = this.base.getMintPda(state, mintId);
3859
3899
  const connection = this.base.provider.connection;
@@ -3865,10 +3905,10 @@ class MintClient {
3865
3905
  return [];
3866
3906
  }
3867
3907
  // Size of a glam mint with perment delegate extension enabled
3868
- const dataSize = 175;
3908
+ // const dataSize = 175;
3869
3909
  const accounts = await connection.getProgramAccounts(spl_token_1.TOKEN_2022_PROGRAM_ID, {
3870
3910
  filters: [
3871
- { dataSize },
3911
+ // { dataSize },
3872
3912
  { memcmp: { offset: 0, bytes: mintPda.toBase58() } },
3873
3913
  ],
3874
3914
  });
@@ -3887,38 +3927,58 @@ class MintClient {
3887
3927
  };
3888
3928
  });
3889
3929
  }
3930
+ async update(glamState, mintId, mintModel) {
3931
+ const glamMint = this.base.getMintPda(glamState, mintId);
3932
+ // @ts-ignore
3933
+ const tx = await this.base.program.methods
3934
+ .updateMint(mintId, new models_1.MintIdlModel(mintModel))
3935
+ .accounts({
3936
+ glamState,
3937
+ glamMint,
3938
+ })
3939
+ .transaction();
3940
+ const vTx = await this.base.intoVersionedTransaction(tx, {});
3941
+ return await this.base.sendAndConfirm(vTx);
3942
+ }
3890
3943
  async closeMintIx(glamState, mintId = 0) {
3891
3944
  const glamMint = this.base.getMintPda(glamState, mintId);
3945
+ const extraMetasAccount = this.base.getExtraMetasPda(glamState, mintId);
3946
+ // @ts-ignore
3892
3947
  return await this.base.program.methods
3893
3948
  .closeMint(mintId)
3894
3949
  .accounts({
3895
3950
  glamState,
3896
3951
  glamMint,
3952
+ extraMetasAccount,
3897
3953
  })
3898
3954
  .instruction();
3899
3955
  }
3900
3956
  async closeMint(glamState, mintId = 0, txOptions = {}) {
3901
3957
  const glamSigner = txOptions.signer || this.base.getSigner();
3902
3958
  const glamMint = this.base.getMintPda(glamState, mintId);
3959
+ const extraMetasAccount = this.base.getExtraMetasPda(glamState, mintId);
3960
+ // @ts-ignore
3903
3961
  const tx = await this.base.program.methods
3904
3962
  .closeMint(mintId)
3905
3963
  .accounts({
3906
3964
  glamState,
3907
3965
  glamSigner,
3908
3966
  glamMint,
3967
+ extraMetasAccount,
3909
3968
  })
3910
3969
  .transaction();
3911
3970
  const vTx = await this.base.intoVersionedTransaction(tx, txOptions);
3912
3971
  return await this.base.sendAndConfirm(vTx);
3913
3972
  }
3914
3973
  /**
3915
- * Create a share class token account for a specific user
3974
+ * Create a glam mint token account for a specific user
3916
3975
  *
3917
3976
  * @param glamState
3918
- * @param owner
3919
- * @param mintId
3977
+ * @param owner Owner of the token account
3978
+ * @param mintId ID of the mint (only 0 is supported)
3979
+ * @param setFrozen If true, the token account will be frozen
3920
3980
  * @param txOptions
3921
- * @returns
3981
+ * @returns Transaction signature
3922
3982
  */
3923
3983
  async createTokenAccount(glamState, owner, mintId = 0, setFrozen = true, txOptions = {}) {
3924
3984
  const glamSigner = txOptions.signer || this.base.getSigner();
@@ -3931,13 +3991,14 @@ class MintClient {
3931
3991
  });
3932
3992
  }
3933
3993
  /**
3934
- * Freeze or thaw token accounts of a share class
3994
+ * Freeze or unfreeze token accounts of a glam mint
3935
3995
  *
3936
3996
  * @param glamState
3937
- * @param mintId
3938
- * @param frozen
3997
+ * @param mintId ID of the mint (only 0 is supported)
3998
+ * @param tokenAccounts List of token accounts to freeze or unfreeze
3999
+ * @param frozen If true, the token accounts will be frozen; otherwise, they will be unfrozen
3939
4000
  * @param txOptions
3940
- * @returns
4001
+ * @returns Transaction signature
3941
4002
  */
3942
4003
  async setTokenAccountsStates(glamState, mintId, tokenAccounts, frozen, txOptions = {}) {
3943
4004
  const glamSigner = txOptions.signer || this.base.getSigner();
@@ -3960,13 +4021,13 @@ class MintClient {
3960
4021
  return await this.base.sendAndConfirm(vTx);
3961
4022
  }
3962
4023
  /**
3963
- * Mint share to recipient
4024
+ * Mint tokens to recipient. Token account will be created if it does not exist.
3964
4025
  *
3965
4026
  * @param glamState
3966
- * @param mintId
3967
- * @param recipient Recipient's wallet address
3968
- * @param amount Amount of shares to mint
3969
- * @param forceThaw If true, force unfreezing token account before minting
4027
+ * @param mintId ID of the mint (only 0 is supported)
4028
+ * @param recipient Recipient public key
4029
+ * @param amount Amount of tokens to mint
4030
+ * @param forceThaw If true, automatically unfreeze the token account before minting
3970
4031
  * @param txOptions
3971
4032
  * @returns Transaction signature
3972
4033
  */
@@ -3977,7 +4038,9 @@ class MintClient {
3977
4038
  const preInstructions = [];
3978
4039
  preInstructions.push((0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(glamSigner, mintTo, recipient, glamMint, spl_token_1.TOKEN_2022_PROGRAM_ID));
3979
4040
  if (forceThaw) {
3980
- preInstructions.push(await this.base.program.methods
4041
+ preInstructions.push(
4042
+ // @ts-ignore
4043
+ await this.base.program.methods
3981
4044
  .setTokenAccountsStates(mintId, false)
3982
4045
  .accounts({
3983
4046
  glamState,
@@ -3989,6 +4052,10 @@ class MintClient {
3989
4052
  ])
3990
4053
  .instruction());
3991
4054
  }
4055
+ let policyAccount = (await this.base.isLockupEnabled(glamState))
4056
+ ? this.base.getAccountPolicyPda(glamState, recipient)
4057
+ : null;
4058
+ // @ts-ignore
3992
4059
  const tx = await this.base.program.methods
3993
4060
  .mintTokens(0, amount)
3994
4061
  .accounts({
@@ -3996,19 +4063,33 @@ class MintClient {
3996
4063
  glamSigner,
3997
4064
  glamMint,
3998
4065
  recipient,
4066
+ policyAccount,
3999
4067
  })
4000
4068
  .preInstructions(preInstructions)
4001
4069
  .transaction();
4002
4070
  const vTx = await this.base.intoVersionedTransaction(tx, txOptions);
4003
4071
  return await this.base.sendAndConfirm(vTx);
4004
4072
  }
4073
+ /**
4074
+ * Burn tokens from a token account
4075
+ *
4076
+ * @param glamState
4077
+ * @param mintId ID of the mint (only 0 is supported)
4078
+ * @param amount Amount of tokens to burn
4079
+ * @param from Owner of the token account
4080
+ * @param forceThaw If true, automatically unfree the token account before burning
4081
+ * @param txOptions
4082
+ * @returns Transaction signature
4083
+ */
4005
4084
  async burn(glamState, mintId, amount, from, forceThaw = false, txOptions = {}) {
4006
4085
  const glamSigner = txOptions.signer || this.base.getSigner();
4007
4086
  const glamMint = this.base.getMintPda(glamState, mintId);
4008
4087
  const ata = this.base.getMintAta(from, glamMint);
4009
4088
  const preInstructions = [];
4010
4089
  if (forceThaw) {
4011
- preInstructions.push(await this.base.program.methods
4090
+ preInstructions.push(
4091
+ // @ts-ignore
4092
+ await this.base.program.methods
4012
4093
  .setTokenAccountsStates(mintId, false)
4013
4094
  .accounts({
4014
4095
  glamState,
@@ -4033,6 +4114,18 @@ class MintClient {
4033
4114
  const vTx = await this.base.intoVersionedTransaction(tx, txOptions);
4034
4115
  return await this.base.sendAndConfirm(vTx);
4035
4116
  }
4117
+ /**
4118
+ * Transfer tokens from one token account to another
4119
+ *
4120
+ * @param glamState
4121
+ * @param mintId ID of the mint (only 0 is supported)
4122
+ * @param amount Amount of tokens to transfer
4123
+ * @param from Owner of the sender token account
4124
+ * @param to Owner of the recipient token account
4125
+ * @param forceThaw If true, automatically unfree the token accounts before transfer
4126
+ * @param txOptions
4127
+ * @returns
4128
+ */
4036
4129
  async forceTransfer(glamState, mintId, amount, from, to, forceThaw = false, txOptions = {}) {
4037
4130
  const glamSigner = txOptions.signer || this.base.getSigner();
4038
4131
  const glamMint = this.base.getMintPda(glamState, mintId);
@@ -4041,7 +4134,9 @@ class MintClient {
4041
4134
  const preInstructions = [];
4042
4135
  preInstructions.push((0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(this.base.getSigner(), toAta, to, glamMint, spl_token_1.TOKEN_2022_PROGRAM_ID));
4043
4136
  if (forceThaw) {
4044
- preInstructions.push(await this.base.program.methods
4137
+ preInstructions.push(
4138
+ // @ts-ignore
4139
+ await this.base.program.methods
4045
4140
  .setTokenAccountsStates(mintId, false)
4046
4141
  .accounts({
4047
4142
  glamState,
@@ -4055,6 +4150,16 @@ class MintClient {
4055
4150
  ])
4056
4151
  .instruction());
4057
4152
  }
4153
+ const remainingAccounts = [];
4154
+ let toPolicyAccount = null;
4155
+ if (await this.base.isLockupEnabled(glamState)) {
4156
+ const extraMetasAccount = this.base.getExtraMetasPda(glamState, mintId);
4157
+ const fromPolicy = this.base.getAccountPolicyPda(glamState, from);
4158
+ const toPolicy = this.base.getAccountPolicyPda(glamState, to);
4159
+ toPolicyAccount = toPolicy;
4160
+ remainingAccounts.push(...[extraMetasAccount, fromPolicy, toPolicy, constants_1.TRANSFER_HOOK_PROGRAM]);
4161
+ }
4162
+ // @ts-ignore
4058
4163
  const tx = await this.base.program.methods
4059
4164
  .forceTransferTokens(mintId, amount)
4060
4165
  .accounts({
@@ -4063,7 +4168,13 @@ class MintClient {
4063
4168
  glamMint,
4064
4169
  from,
4065
4170
  to,
4171
+ toPolicyAccount,
4066
4172
  })
4173
+ .remainingAccounts(remainingAccounts.map((pubkey) => ({
4174
+ pubkey,
4175
+ isSigner: false,
4176
+ isWritable: false,
4177
+ })))
4067
4178
  .preInstructions(preInstructions)
4068
4179
  .transaction();
4069
4180
  const vTx = await this.base.intoVersionedTransaction(tx, txOptions);
@@ -4074,7 +4185,7 @@ exports.MintClient = MintClient;
4074
4185
 
4075
4186
 
4076
4187
  /***/ }),
4077
- /* 30 */
4188
+ /* 29 */
4078
4189
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
4079
4190
 
4080
4191
 
@@ -4084,7 +4195,7 @@ const tslib_1 = __webpack_require__(1);
4084
4195
  const anchor_1 = __webpack_require__(2);
4085
4196
  const web3_js_1 = __webpack_require__(5);
4086
4197
  const constants_1 = __webpack_require__(10);
4087
- const borsh = tslib_1.__importStar(__webpack_require__(31));
4198
+ const borsh = tslib_1.__importStar(__webpack_require__(30));
4088
4199
  const spl_token_1 = __webpack_require__(8);
4089
4200
  // Kamino prod and staging use the same Farms program
4090
4201
  const KaminoFarmsProgramId = new web3_js_1.PublicKey("FarmsPZpWu9i7Kky8tPN37rs2TpmMrAZrC7S7vJa91Hr");
@@ -4216,7 +4327,7 @@ class KaminoLendingClient {
4216
4327
  return await this.base.sendAndConfirm(tx);
4217
4328
  }
4218
4329
  getUserMetadataPda(owner) {
4219
- const [userMetadataPda] = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("user_meta"), owner.toBuffer()], kLendProgramId.staging);
4330
+ const [userMetadataPda] = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("user_meta"), owner.toBuffer()], kLendProgramId.prod);
4220
4331
  return userMetadataPda;
4221
4332
  }
4222
4333
  getObligationPda(owner, args) {
@@ -4224,17 +4335,17 @@ class KaminoLendingClient {
4224
4335
  Buffer.from([args.tag]),
4225
4336
  Buffer.from([args.id]),
4226
4337
  owner.toBuffer(),
4227
- lendingMarketMain.staging.toBuffer(),
4338
+ lendingMarketMain.prod.toBuffer(),
4228
4339
  web3_js_1.PublicKey.default.toBuffer(),
4229
4340
  web3_js_1.PublicKey.default.toBuffer(),
4230
4341
  ];
4231
- const [obligation, _] = web3_js_1.PublicKey.findProgramAddressSync(seed, kLendProgramId.staging);
4342
+ const [obligation, _] = web3_js_1.PublicKey.findProgramAddressSync(seed, kLendProgramId.prod);
4232
4343
  return obligation;
4233
4344
  }
4234
4345
  getObligationFarm(obligation) {
4235
4346
  const [obligationFarm] = web3_js_1.PublicKey.findProgramAddressSync([
4236
4347
  Buffer.from("user"),
4237
- reserveFarmState.staging.toBuffer(),
4348
+ reserveFarmState.prod.toBuffer(),
4238
4349
  obligation.toBuffer(),
4239
4350
  ], KaminoFarmsProgramId);
4240
4351
  return obligationFarm;
@@ -4246,15 +4357,14 @@ class KaminoLendingClient {
4246
4357
  const args = { tag: 0, id: 0 };
4247
4358
  const obligation = this.getObligationPda(vault, args);
4248
4359
  const obligationFarm = this.getObligationFarm(obligation);
4360
+ // @ts-ignore
4249
4361
  const initObligationIx = await this.base.program.methods
4250
4362
  .kaminoLendingInitObligation(args)
4251
4363
  .accounts({
4252
4364
  glamState: statePda,
4253
4365
  glamSigner: signer,
4254
- cpiProgram: kLendProgramId.staging,
4255
- obligationOwner: vault,
4256
4366
  obligation,
4257
- lendingMarket: lendingMarketMain.staging,
4367
+ lendingMarket: lendingMarketMain.prod,
4258
4368
  seed1Account: new web3_js_1.PublicKey(0),
4259
4369
  seed2Account: new web3_js_1.PublicKey(0),
4260
4370
  ownerUserMetadata: userMetadata,
@@ -4265,14 +4375,12 @@ class KaminoLendingClient {
4265
4375
  .accounts({
4266
4376
  glamState: statePda,
4267
4377
  glamSigner: signer,
4268
- cpiProgram: kLendProgramId.staging,
4269
- owner: vault,
4270
4378
  obligation,
4271
- lendingMarketAuthority: lendingMarketAuthority.staging,
4272
- reserve: solReserve.staging,
4273
- reserveFarmState: reserveFarmState.staging,
4379
+ lendingMarketAuthority: lendingMarketAuthority.prod,
4380
+ reserve: solReserve.prod,
4381
+ reserveFarmState: reserveFarmState.prod,
4274
4382
  obligationFarm,
4275
- lendingMarket: lendingMarketMain.staging,
4383
+ lendingMarket: lendingMarketMain.prod,
4276
4384
  farmsProgram: KaminoFarmsProgramId,
4277
4385
  })
4278
4386
  .instruction();
@@ -4281,10 +4389,8 @@ class KaminoLendingClient {
4281
4389
  .accounts({
4282
4390
  glamState: statePda,
4283
4391
  glamSigner: signer,
4284
- cpiProgram: kLendProgramId.staging,
4285
- owner: vault,
4286
4392
  userMetadata,
4287
- referrerUserMetadata: kLendProgramId.staging, // none
4393
+ referrerUserMetadata: kLendProgramId.prod, // none
4288
4394
  })
4289
4395
  .postInstructions([initObligationIx, initObligationFarmIx])
4290
4396
  .transaction();
@@ -4302,52 +4408,53 @@ class KaminoLendingClient {
4302
4408
  const obligationFarm = this.getObligationFarm(obligation);
4303
4409
  const refreshIxs = [
4304
4410
  refreshReserve({
4305
- reserve: solReserve.staging,
4306
- lendingMarket: lendingMarketMain.staging,
4307
- pythOracle: kLendProgramId.staging,
4308
- switchboardPriceOracle: kLendProgramId.staging,
4309
- switchboardTwapOracle: kLendProgramId.staging,
4411
+ reserve: solReserve.prod,
4412
+ lendingMarket: lendingMarketMain.prod,
4413
+ pythOracle: kLendProgramId.prod,
4414
+ switchboardPriceOracle: kLendProgramId.prod,
4415
+ switchboardTwapOracle: kLendProgramId.prod,
4310
4416
  scopePrices,
4311
- }, kLendProgramId.staging),
4417
+ }, kLendProgramId.prod),
4312
4418
  refreshObligation({
4313
- lendingMarket: lendingMarketMain.staging,
4419
+ lendingMarket: lendingMarketMain.prod,
4314
4420
  obligation,
4315
- }, kLendProgramId.staging),
4421
+ }, kLendProgramId.prod),
4316
4422
  refreshObligationFarmsForReserve({ mode: 0 }, {
4317
4423
  crank: this.base.getSigner(),
4318
4424
  baseAccounts: {
4319
4425
  obligation,
4320
- lendingMarketAuthority: lendingMarketAuthority.staging,
4321
- reserve: solReserve.staging,
4322
- reserveFarmState: reserveFarmState.staging,
4426
+ lendingMarketAuthority: lendingMarketAuthority.prod,
4427
+ reserve: solReserve.prod,
4428
+ reserveFarmState: reserveFarmState.prod,
4323
4429
  obligationFarmUserState: obligationFarm,
4324
- lendingMarket: lendingMarketMain.staging,
4430
+ lendingMarket: lendingMarketMain.prod,
4325
4431
  },
4326
4432
  farmsProgram: KaminoFarmsProgramId,
4327
4433
  rent: web3_js_1.SYSVAR_RENT_PUBKEY,
4328
4434
  systemProgram: web3_js_1.SystemProgram.programId,
4329
- }, kLendProgramId.staging),
4435
+ }, kLendProgramId.prod),
4330
4436
  ];
4331
4437
  const tx = await this.base.program.methods
4332
- .kaminoLendingDepositReserveLiquidityAndObligationCollateral(new anchor_1.BN(amount))
4438
+ .kaminoLendingDepositReserveLiquidityAndObligationCollateralV2(new anchor_1.BN(amount))
4333
4439
  .accounts({
4334
4440
  glamState: statePda,
4335
4441
  glamSigner: signer,
4336
- cpiProgram: kLendProgramId.staging,
4337
- owner: vault,
4338
4442
  obligation,
4339
- lendingMarket: lendingMarketMain.staging,
4340
- lendingMarketAuthority: lendingMarketAuthority.staging,
4341
- reserve: solReserve.staging,
4443
+ lendingMarket: lendingMarketMain.prod,
4444
+ lendingMarketAuthority: lendingMarketAuthority.prod,
4445
+ reserve: solReserve.prod,
4342
4446
  reserveLiquidityMint: asset,
4343
- reserveLiquiditySupply: reserveLiquiditySupply.staging,
4344
- reserveCollateralMint: reserveCollateralMint.staging,
4345
- reserveDestinationDepositCollateral: reserveDestinationDepositCollateral.staging,
4447
+ reserveLiquiditySupply: reserveLiquiditySupply.prod,
4448
+ reserveCollateralMint: reserveCollateralMint.prod,
4449
+ reserveDestinationDepositCollateral: reserveDestinationDepositCollateral.prod,
4346
4450
  userSourceLiquidity: this.base.getVaultAta(statePda, asset),
4347
- placeholderUserDestinationCollateral: kLendProgramId.staging,
4451
+ placeholderUserDestinationCollateral: kLendProgramId.prod,
4348
4452
  collateralTokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
4349
4453
  liquidityTokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
4350
4454
  instructionSysvarAccount: web3_js_1.SYSVAR_INSTRUCTIONS_PUBKEY,
4455
+ obligationFarmUserState: obligationFarm,
4456
+ reserveFarmState: reserveFarmState.prod,
4457
+ farmsProgram: KaminoFarmsProgramId,
4351
4458
  })
4352
4459
  .preInstructions(refreshIxs) // 3 refresh ixs
4353
4460
  .postInstructions([refreshIxs[2]]) // 1 refresh ix
@@ -4360,13 +4467,13 @@ exports.KaminoLendingClient = KaminoLendingClient;
4360
4467
 
4361
4468
 
4362
4469
  /***/ }),
4363
- /* 31 */
4470
+ /* 30 */
4364
4471
  /***/ ((module) => {
4365
4472
 
4366
4473
  module.exports = require("@coral-xyz/borsh");
4367
4474
 
4368
4475
  /***/ }),
4369
- /* 32 */
4476
+ /* 31 */
4370
4477
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
4371
4478
 
4372
4479
 
@@ -4375,10 +4482,12 @@ exports.MeteoraDlmmClient = void 0;
4375
4482
  const tslib_1 = __webpack_require__(1);
4376
4483
  const anchor_1 = __webpack_require__(2);
4377
4484
  const web3_js_1 = __webpack_require__(5);
4378
- const dlmm_1 = tslib_1.__importStar(__webpack_require__(33));
4485
+ const dlmm_1 = tslib_1.__importStar(__webpack_require__(32));
4379
4486
  const spl_token_1 = __webpack_require__(8);
4380
4487
  const METEORA_DLMM = new web3_js_1.PublicKey("LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo");
4488
+ const MEMO_PROGRAM_ID = new web3_js_1.PublicKey("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr");
4381
4489
  const SOL_USDC_MARKET = new web3_js_1.PublicKey("5rCf1DM8LjKTw4YqhnoLcngyZYeNnQqztScTogYHAS6");
4490
+ // Pubkey::find_program_address(&[b"__event_authority"], &dlmm_interface::ID)
4382
4491
  const EVENT_AUTHORITY = new web3_js_1.PublicKey("D1ZN9Wj1fRSUQfCjhvnu1hqDMT7hzjzBBpi12nVniYD6");
4383
4492
  const DEFAULT_RANGE_INTERVAL = 34; // 34 bins on each side of the active bin, 69 bins in total
4384
4493
  class MeteoraDlmmClient {
@@ -4404,6 +4513,7 @@ class MeteoraDlmmClient {
4404
4513
  const minBinId = activeBin.binId - DEFAULT_RANGE_INTERVAL;
4405
4514
  const maxBinId = activeBin.binId + DEFAULT_RANGE_INTERVAL;
4406
4515
  const position = web3_js_1.Keypair.generate();
4516
+ // @ts-ignore
4407
4517
  const tx = await this.base.program.methods
4408
4518
  .meteoraDlmmInitializePosition(minBinId, maxBinId - minBinId + 1)
4409
4519
  .accounts({
@@ -4417,16 +4527,40 @@ class MeteoraDlmmClient {
4417
4527
  const vTx = await this.base.intoVersionedTransaction(tx, txOptions);
4418
4528
  return await this.base.sendAndConfirm(vTx, [position]);
4419
4529
  }
4420
- async addLiquidity(statePda, position, amountX, strategyType, txOptions = {}) {
4530
+ async initializePositionPda(statePda, pool, txOptions = {}) {
4531
+ const glamState = new web3_js_1.PublicKey(statePda);
4532
+ const dlmmPool = await this.getDlmmPool(pool);
4533
+ const activeBin = await dlmmPool.getActiveBin();
4534
+ const minBinId = activeBin.binId - DEFAULT_RANGE_INTERVAL;
4535
+ const maxBinId = activeBin.binId + DEFAULT_RANGE_INTERVAL;
4536
+ const width = maxBinId - minBinId + 1;
4537
+ const position = this.getPositionPda(new web3_js_1.PublicKey(pool), this.base.getVaultPda(glamState), minBinId, width);
4538
+ // @ts-ignore
4539
+ const tx = await this.base.program.methods
4540
+ .meteoraDlmmInitializePositionPda(minBinId, width)
4541
+ .accounts({
4542
+ glamState,
4543
+ lbPair: new web3_js_1.PublicKey(pool),
4544
+ position,
4545
+ eventAuthority: EVENT_AUTHORITY,
4546
+ program: METEORA_DLMM,
4547
+ })
4548
+ .transaction();
4549
+ const vTx = await this.base.intoVersionedTransaction(tx, txOptions);
4550
+ return await this.base.sendAndConfirm(vTx);
4551
+ }
4552
+ async addLiquidityByStrategy(statePda, position, amountX, amountY, strategyType, txOptions = {}) {
4553
+ const glamSigner = txOptions.signer || this.base.getSigner();
4421
4554
  const { lbPair, lowerBinId, upperBinId, binArrayLower, binArrayUpper } = await this.parsePosition(new web3_js_1.PublicKey(position));
4422
4555
  const dlmmPool = await this.getDlmmPool(lbPair);
4423
- const { amountY, activeBinId } = await this.getAmounts(dlmmPool, new anchor_1.BN(amountX));
4556
+ const activeBinId = (await dlmmPool.getActiveBin()).binId;
4424
4557
  const glamState = new web3_js_1.PublicKey(statePda);
4425
- const vaultTokenXAta = this.base.getVaultAta(glamState, dlmmPool.tokenX.publicKey);
4426
- const vaultTokenYAta = this.base.getVaultAta(glamState, dlmmPool.tokenY.publicKey);
4427
- const strategy = {
4558
+ const glamVault = this.base.getVaultPda(glamState);
4559
+ const vaultTokenXAta = this.base.getAta(dlmmPool.tokenX.publicKey, glamVault);
4560
+ const vaultTokenYAta = this.base.getAta(dlmmPool.tokenY.publicKey, glamVault);
4561
+ const liquidityParameter = {
4428
4562
  amountX: new anchor_1.BN(amountX),
4429
- amountY,
4563
+ amountY: new anchor_1.BN(amountY),
4430
4564
  activeId: activeBinId,
4431
4565
  maxActiveBinSlippage: 20,
4432
4566
  strategyParameters: {
@@ -4436,8 +4570,18 @@ class MeteoraDlmmClient {
4436
4570
  parameteres: Array(64).fill(0),
4437
4571
  },
4438
4572
  };
4573
+ const preInstructions = [
4574
+ (0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(glamSigner, vaultTokenYAta, glamVault, dlmmPool.tokenY.publicKey),
4575
+ ];
4576
+ const remainingAccounts = [binArrayLower, binArrayUpper].map((pubkey) => ({
4577
+ pubkey,
4578
+ isSigner: false,
4579
+ isWritable: true,
4580
+ }));
4581
+ // TODO: if token X or Y program is token2022 we need to properly constrcut the slides
4582
+ // @ts-ignore
4439
4583
  const tx = await this.base.program.methods
4440
- .meteoraDlmmAddLiquidityByStrategy(strategy)
4584
+ .meteoraDlmmAddLiquidityByStrategy2(liquidityParameter, { slices: [] })
4441
4585
  .accounts({
4442
4586
  glamState,
4443
4587
  position: new web3_js_1.PublicKey(position),
@@ -4451,25 +4595,32 @@ class MeteoraDlmmClient {
4451
4595
  reserveY: dlmmPool.tokenY.reserve,
4452
4596
  tokenXMint: dlmmPool.tokenX.publicKey,
4453
4597
  tokenYMint: dlmmPool.tokenY.publicKey,
4454
- binArrayLower,
4455
- binArrayUpper,
4456
4598
  tokenXProgram: spl_token_1.TOKEN_PROGRAM_ID,
4457
4599
  tokenYProgram: spl_token_1.TOKEN_PROGRAM_ID,
4458
4600
  eventAuthority: EVENT_AUTHORITY,
4459
4601
  program: METEORA_DLMM,
4460
4602
  })
4603
+ .preInstructions(preInstructions)
4604
+ .remainingAccounts(remainingAccounts)
4461
4605
  .transaction();
4462
4606
  const vTx = await this.base.intoVersionedTransaction(tx, txOptions);
4463
4607
  return this.base.sendAndConfirm(vTx);
4464
4608
  }
4465
- async removeLiquidity(statePda, position, bpsToRemove, txOptions = {}) {
4609
+ async removeLiquidityByRange(statePda, position, bpsToRemove, txOptions = {}) {
4466
4610
  const { lbPair, lowerBinId, upperBinId, binArrayLower, binArrayUpper } = await this.parsePosition(new web3_js_1.PublicKey(position));
4467
4611
  const dlmmPool = await this.getDlmmPool(lbPair);
4468
4612
  const glamState = new web3_js_1.PublicKey(statePda);
4469
4613
  const vaultTokenXAta = this.base.getVaultAta(glamState, dlmmPool.tokenX.publicKey);
4470
4614
  const vaultTokenYAta = this.base.getVaultAta(glamState, dlmmPool.tokenY.publicKey);
4615
+ const remainingAccounts = [binArrayLower, binArrayUpper].map((pubkey) => ({
4616
+ pubkey,
4617
+ isSigner: false,
4618
+ isWritable: true,
4619
+ }));
4471
4620
  const tx = await this.base.program.methods
4472
- .meteoraDlmmRemoveLiquidityByRange(lowerBinId, upperBinId, bpsToRemove)
4621
+ .meteoraDlmmRemoveLiquidityByRange2(lowerBinId, upperBinId, bpsToRemove, {
4622
+ slices: [],
4623
+ })
4473
4624
  .accounts({
4474
4625
  glamState,
4475
4626
  position: new web3_js_1.PublicKey(position),
@@ -4483,102 +4634,501 @@ class MeteoraDlmmClient {
4483
4634
  reserveY: dlmmPool.tokenY.reserve,
4484
4635
  tokenXMint: dlmmPool.tokenX.publicKey,
4485
4636
  tokenYMint: dlmmPool.tokenY.publicKey,
4486
- binArrayLower,
4487
- binArrayUpper,
4488
4637
  tokenXProgram: spl_token_1.TOKEN_PROGRAM_ID,
4489
4638
  tokenYProgram: spl_token_1.TOKEN_PROGRAM_ID,
4490
4639
  eventAuthority: EVENT_AUTHORITY,
4640
+ memoProgram: MEMO_PROGRAM_ID,
4491
4641
  program: METEORA_DLMM,
4492
4642
  })
4643
+ .remainingAccounts(remainingAccounts)
4493
4644
  .transaction();
4494
4645
  const vTx = await this.base.intoVersionedTransaction(tx, txOptions);
4495
4646
  return this.base.sendAndConfirm(vTx);
4496
4647
  }
4497
4648
  async claimFee(statePda, position, txOptions = {}) {
4498
- const { lbPair, binArrayLower, binArrayUpper } = await this.parsePosition(new web3_js_1.PublicKey(position));
4649
+ const { lbPair, lowerBinId, upperBinId, binArrayLower, binArrayUpper } = await this.parsePosition(new web3_js_1.PublicKey(position));
4499
4650
  const dlmmPool = await this.getDlmmPool(lbPair);
4500
4651
  const glamState = new web3_js_1.PublicKey(statePda);
4501
4652
  const vaultTokenXAta = this.base.getVaultAta(glamState, dlmmPool.tokenX.publicKey);
4502
4653
  const vaultTokenYAta = this.base.getVaultAta(glamState, dlmmPool.tokenY.publicKey);
4654
+ const remainingAccounts = [binArrayLower, binArrayUpper].map((pubkey) => ({
4655
+ pubkey,
4656
+ isSigner: false,
4657
+ isWritable: true,
4658
+ }));
4503
4659
  const tx = await this.base.program.methods
4504
- .meteoraDlmmClaimFee()
4660
+ .meteoraDlmmClaimFee2(lowerBinId, upperBinId, { slices: [] })
4505
4661
  .accounts({
4506
4662
  glamState,
4507
4663
  position: new web3_js_1.PublicKey(position),
4508
4664
  lbPair,
4509
- binArrayLower,
4510
- binArrayUpper,
4511
4665
  reserveX: dlmmPool.tokenX.reserve,
4512
4666
  reserveY: dlmmPool.tokenY.reserve,
4513
4667
  userTokenX: vaultTokenXAta,
4514
4668
  userTokenY: vaultTokenYAta,
4515
4669
  tokenXMint: dlmmPool.tokenX.publicKey,
4516
4670
  tokenYMint: dlmmPool.tokenY.publicKey,
4671
+ tokenProgramX: spl_token_1.TOKEN_PROGRAM_ID,
4672
+ tokenProgramY: spl_token_1.TOKEN_PROGRAM_ID,
4673
+ memoProgram: MEMO_PROGRAM_ID,
4674
+ eventAuthority: EVENT_AUTHORITY,
4675
+ program: METEORA_DLMM,
4676
+ })
4677
+ .remainingAccounts(remainingAccounts)
4678
+ .transaction();
4679
+ const vTx = await this.base.intoVersionedTransaction(tx, txOptions);
4680
+ return await this.base.sendAndConfirm(vTx);
4681
+ }
4682
+ async closePosition(statePda, position, txOptions = {}) {
4683
+ const { lbPair, binArrayLower, binArrayUpper } = await this.parsePosition(new web3_js_1.PublicKey(position));
4684
+ const glamState = new web3_js_1.PublicKey(statePda);
4685
+ console.log(`close position: ${position}, binArrayLower: ${binArrayLower}, binArrayUpper: ${binArrayUpper}`);
4686
+ const tx = await this.base.program.methods
4687
+ .meteoraDlmmClosePosition()
4688
+ .accounts({
4689
+ glamState,
4690
+ position: new web3_js_1.PublicKey(position),
4691
+ lbPair,
4692
+ binArrayLower,
4693
+ binArrayUpper,
4694
+ rentReceiver: this.base.getSigner(),
4695
+ eventAuthority: EVENT_AUTHORITY,
4696
+ program: METEORA_DLMM,
4697
+ })
4698
+ .transaction();
4699
+ const vTx = await this.base.intoVersionedTransaction(tx, txOptions);
4700
+ return await this.base.sendAndConfirm(vTx);
4701
+ }
4702
+ getPositionPda(lbPair, base, lowerBinId, // i32
4703
+ width) {
4704
+ const lowerBinIdBuffer = new Uint8Array(4);
4705
+ const lowerBinIdView = new DataView(lowerBinIdBuffer.buffer);
4706
+ lowerBinIdView.setInt32(0, lowerBinId, true); // true for little-endian
4707
+ const widthBuffer = new Uint8Array(4);
4708
+ const widthView = new DataView(widthBuffer.buffer);
4709
+ widthView.setInt32(0, width, true); // true for little-endian
4710
+ const [pda, _] = web3_js_1.PublicKey.findProgramAddressSync([
4711
+ Buffer.from("position"),
4712
+ lbPair.toBuffer(),
4713
+ base.toBuffer(),
4714
+ lowerBinIdBuffer,
4715
+ widthBuffer,
4716
+ ], METEORA_DLMM);
4717
+ return pda;
4718
+ }
4719
+ async fetchPositions(owner) {
4720
+ const accounts = await this.base.provider.connection.getParsedProgramAccounts(METEORA_DLMM, {
4721
+ filters: [
4722
+ {
4723
+ dataSize: 8120,
4724
+ },
4725
+ {
4726
+ memcmp: {
4727
+ offset: 40,
4728
+ bytes: owner.toBase58(),
4729
+ },
4730
+ },
4731
+ ],
4732
+ });
4733
+ return accounts.map((a) => a.pubkey);
4734
+ }
4735
+ async parsePosition(position) {
4736
+ const positionAccountInfo = await this.base.provider.connection.getAccountInfo(position);
4737
+ if (!positionAccountInfo) {
4738
+ throw new Error("Position not found");
4739
+ }
4740
+ const positionData = positionAccountInfo.data;
4741
+ const lbPair = new web3_js_1.PublicKey(positionData.subarray(8, 40));
4742
+ const lowerBinId = positionData.subarray(7912, 7916).readInt32LE();
4743
+ const upperBinId = positionData.subarray(7916, 7920).readInt32LE();
4744
+ const lowerBinArrayIndex = (0, dlmm_1.binIdToBinArrayIndex)(new anchor_1.BN(lowerBinId));
4745
+ const [binArrayLower] = (0, dlmm_1.deriveBinArray)(lbPair, lowerBinArrayIndex, METEORA_DLMM);
4746
+ const upperBinArrayIndex = anchor_1.BN.max(lowerBinArrayIndex.add(new anchor_1.BN(1)), (0, dlmm_1.binIdToBinArrayIndex)(new anchor_1.BN(upperBinId)));
4747
+ const [binArrayUpper] = (0, dlmm_1.deriveBinArray)(lbPair, upperBinArrayIndex, METEORA_DLMM);
4748
+ return {
4749
+ lowerBinId,
4750
+ upperBinId,
4751
+ binArrayLower,
4752
+ binArrayUpper,
4753
+ lbPair,
4754
+ };
4755
+ }
4756
+ async autoFillY(dlmmPool, amountX) {
4757
+ const activeBin = await dlmmPool.getActiveBin();
4758
+ const activeBinPricePerToken = dlmmPool.fromPricePerLamport(Number(activeBin.price));
4759
+ const amountY = amountX.mul(new anchor_1.BN(Number(activeBinPricePerToken)));
4760
+ return { amountX, amountY, activeBinId: activeBin.binId };
4761
+ }
4762
+ }
4763
+ exports.MeteoraDlmmClient = MeteoraDlmmClient;
4764
+
4765
+
4766
+ /***/ }),
4767
+ /* 32 */
4768
+ /***/ ((module) => {
4769
+
4770
+ module.exports = require("@meteora-ag/dlmm");
4771
+
4772
+ /***/ }),
4773
+ /* 33 */
4774
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
4775
+
4776
+
4777
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
4778
+ exports.InvestorClient = void 0;
4779
+ const web3_js_1 = __webpack_require__(5);
4780
+ const spl_token_1 = __webpack_require__(8);
4781
+ const constants_1 = __webpack_require__(10);
4782
+ class InvestorClient {
4783
+ constructor(base) {
4784
+ this.base = base;
4785
+ }
4786
+ async subscribe(statePda, asset, amount, mintId = 0, queued = false, txOptions = {}) {
4787
+ const tx = await (queued
4788
+ ? this.queuedSubscribeTx(statePda, asset, amount, mintId, txOptions)
4789
+ : this.subscribeTx(statePda, asset, amount, mintId, txOptions));
4790
+ return await this.base.sendAndConfirm(tx);
4791
+ }
4792
+ async queuedRedeem(statePda, asset, amount, mintId = 0, txOptions = {}) {
4793
+ const tx = await this.queuedRedeemTx(statePda, asset, amount, mintId, txOptions);
4794
+ return await this.base.sendAndConfirm(tx);
4795
+ }
4796
+ async fulfill(statePda, asset, mintId = 0, txOptions = {}) {
4797
+ const tx = await this.fulfillTx(statePda, asset, mintId, txOptions);
4798
+ return await this.base.sendAndConfirm(tx);
4799
+ }
4800
+ async claim(statePda, asset, mintId = 0, txOptions = {}) {
4801
+ // Claim WSOL from redeemed shares
4802
+ if (asset.equals(constants_1.WSOL)) {
4803
+ const tx = await this.claimAssetTx(statePda, asset, mintId, txOptions);
4804
+ return await this.base.sendAndConfirm(tx);
4805
+ }
4806
+ // Claim shares after subscription is fulfilled
4807
+ const glamMint = this.base.getMintPda(statePda, mintId);
4808
+ if (glamMint.equals(asset)) {
4809
+ const tx = await this.claimShareTx(statePda, asset, mintId, txOptions);
4810
+ return await this.base.sendAndConfirm(tx);
4811
+ }
4812
+ throw new Error(`Invalid asset to claim: ${asset.toBase58()}`);
4813
+ }
4814
+ async subscribeTx(glamState, asset, amount, mintId = 0, txOptions = {}) {
4815
+ if (mintId !== 0 || !asset.equals(constants_1.WSOL)) {
4816
+ throw new Error("Only WSOL is supported & mintId must be 0");
4817
+ }
4818
+ const signer = txOptions.signer || this.base.getSigner();
4819
+ // glam mint token to receive
4820
+ const glamMint = this.base.getMintPda(glamState, mintId);
4821
+ const mintTo = this.base.getMintAta(signer, glamMint);
4822
+ // asset token to transfer to vault
4823
+ const vault = this.base.getVaultPda(glamState);
4824
+ const vaultInput = this.base.getAta(asset, vault);
4825
+ const signerInput = this.base.getAta(asset, signer);
4826
+ const wrapSolIxs = asset.equals(constants_1.WSOL)
4827
+ ? [
4828
+ (0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(signer, signerInput, signer, asset),
4829
+ web3_js_1.SystemProgram.transfer({
4830
+ fromPubkey: signer,
4831
+ toPubkey: signerInput,
4832
+ lamports: amount.toNumber(),
4833
+ }),
4834
+ (0, spl_token_1.createSyncNativeInstruction)(signerInput),
4835
+ ]
4836
+ : [];
4837
+ let preInstructions = [
4838
+ (0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(signer, vaultInput, vault, asset),
4839
+ (0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(signer, mintTo, signer, glamMint, spl_token_1.TOKEN_2022_PROGRAM_ID),
4840
+ ...wrapSolIxs,
4841
+ ...(txOptions.preInstructions || []),
4842
+ ];
4843
+ const postInstructions = asset.equals(constants_1.WSOL)
4844
+ ? [(0, spl_token_1.createCloseAccountInstruction)(signerInput, signer, signer)]
4845
+ : [];
4846
+ // Check if lockup is enabled on the fund, if so, add signerPolicy
4847
+ let signerPolicy = null;
4848
+ if (await this.base.isLockupEnabled(glamState)) {
4849
+ signerPolicy = this.base.getAccountPolicyPda(glamState, signer);
4850
+ console.log(`signerPolicy: ${signerPolicy} for signer ${signer} and token account ${mintTo}`);
4851
+ }
4852
+ // @ts-ignore
4853
+ const tx = await this.base.program.methods
4854
+ .subscribe(0, amount)
4855
+ .accounts({
4856
+ glamState,
4857
+ glamMint,
4858
+ signer,
4859
+ depositAsset: asset,
4860
+ signerPolicy,
4861
+ })
4862
+ .preInstructions(preInstructions)
4863
+ .postInstructions(postInstructions)
4864
+ .transaction();
4865
+ return await this.base.intoVersionedTransaction(tx, txOptions);
4866
+ }
4867
+ async queuedSubscribeTx(glamState, asset, amount, mintId = 0, txOptions = {}) {
4868
+ if (mintId !== 0 || !asset.equals(constants_1.WSOL)) {
4869
+ throw new Error("Only WSOL is supported & mintId must be 0");
4870
+ }
4871
+ const signer = txOptions.signer || this.base.getSigner();
4872
+ // asset token to transfer to escrow
4873
+ const escrow = this.base.getEscrowPda(glamState);
4874
+ const escrowAta = this.base.getAta(asset, escrow);
4875
+ const signerAta = this.base.getAta(asset, signer);
4876
+ const wrapSolIxs = asset.equals(constants_1.WSOL)
4877
+ ? [
4878
+ (0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(signer, signerAta, signer, asset),
4879
+ web3_js_1.SystemProgram.transfer({
4880
+ fromPubkey: signer,
4881
+ toPubkey: signerAta,
4882
+ lamports: amount.toNumber(),
4883
+ }),
4884
+ (0, spl_token_1.createSyncNativeInstruction)(signerAta),
4885
+ ]
4886
+ : [];
4887
+ let preInstructions = [
4888
+ (0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(signer, escrowAta, escrow, asset),
4889
+ ...wrapSolIxs,
4890
+ ...(txOptions.preInstructions || []),
4891
+ ];
4892
+ const postInstructions = asset.equals(constants_1.WSOL)
4893
+ ? [(0, spl_token_1.createCloseAccountInstruction)(signerAta, signer, signer)]
4894
+ : [];
4895
+ // @ts-ignore
4896
+ const tx = await this.base.program.methods
4897
+ .queuedSubscribe(0, amount)
4898
+ .accounts({
4899
+ glamState,
4900
+ signer,
4901
+ depositAsset: asset,
4902
+ })
4903
+ .preInstructions(preInstructions)
4904
+ .postInstructions(postInstructions)
4905
+ .transaction();
4906
+ return await this.base.intoVersionedTransaction(tx, txOptions);
4907
+ }
4908
+ async queuedRedeemTx(glamState, asset, amount, mintId = 0, txOptions = {}) {
4909
+ if (mintId !== 0 || !asset.equals(constants_1.WSOL)) {
4910
+ throw new Error("Only WSOL is supported & mintId must be 0");
4911
+ }
4912
+ const signer = txOptions.signer || this.base.getSigner();
4913
+ const glamMint = this.base.getMintPda(glamState, mintId);
4914
+ const preInstructions = [
4915
+ (0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(signer, this.base.getMintAta(signer, glamMint), signer, glamMint, spl_token_1.TOKEN_2022_PROGRAM_ID),
4916
+ ];
4917
+ const remainingAccounts = [];
4918
+ if (await this.base.isLockupEnabled(glamState)) {
4919
+ const extraMetasAccount = this.base.getExtraMetasPda(glamState, mintId);
4920
+ const signerPolicy = this.base.getAccountPolicyPda(glamState, signer);
4921
+ const escrow = this.base.getEscrowPda(glamState);
4922
+ const escrowPolicy = this.base.getAccountPolicyPda(glamState, escrow);
4923
+ remainingAccounts.push(...[
4924
+ extraMetasAccount,
4925
+ glamState,
4926
+ signerPolicy,
4927
+ escrowPolicy,
4928
+ constants_1.TRANSFER_HOOK_PROGRAM,
4929
+ ]);
4930
+ }
4931
+ const tx = await this.base.program.methods
4932
+ .queuedRedeem(0, amount)
4933
+ .accounts({
4934
+ glamState,
4935
+ glamMint,
4936
+ signer,
4937
+ })
4938
+ .preInstructions(preInstructions)
4939
+ .remainingAccounts(remainingAccounts.map((pubkey) => ({
4940
+ pubkey,
4941
+ isSigner: false,
4942
+ isWritable: false,
4943
+ })))
4944
+ .transaction();
4945
+ return await this.base.intoVersionedTransaction(tx, txOptions);
4946
+ }
4947
+ async fulfillTx(glamState, asset, mintId = 0, txOptions = {}) {
4948
+ if (mintId !== 0 || !asset.equals(constants_1.WSOL)) {
4949
+ throw new Error("Only WSOL is supported & mintId must be 0");
4950
+ }
4951
+ const signer = txOptions.signer || this.base.getSigner();
4952
+ const vault = this.base.getVaultPda(glamState);
4953
+ const vaultAssetAta = this.base.getAta(asset, vault);
4954
+ const glamMint = this.base.getMintPda(glamState, mintId);
4955
+ const escrow = this.base.getEscrowPda(glamState);
4956
+ const escrowMintAta = this.base.getMintAta(escrow, glamMint);
4957
+ const escrowAssetAta = this.base.getAta(asset, escrow);
4958
+ let preInstructions = [
4959
+ (0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(signer, escrowMintAta, escrow, glamMint, spl_token_1.TOKEN_2022_PROGRAM_ID),
4960
+ (0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(signer, escrowAssetAta, escrow, asset),
4961
+ (0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(signer, vaultAssetAta, vault, asset),
4962
+ ...(txOptions.preInstructions || []),
4963
+ ];
4964
+ const tx = await this.base.program.methods
4965
+ .fulfill(mintId)
4966
+ .accounts({
4967
+ glamState,
4968
+ glamMint,
4969
+ signer,
4970
+ asset,
4971
+ })
4972
+ .preInstructions(preInstructions)
4973
+ .transaction();
4974
+ return await this.base.intoVersionedTransaction(tx, txOptions);
4975
+ }
4976
+ async claimAssetTx(glamState, asset, mintId = 0, txOptions = {}) {
4977
+ if (mintId !== 0 || !asset.equals(constants_1.WSOL)) {
4978
+ throw new Error("Only WSOL is supported & mintId must be 0");
4979
+ }
4980
+ const signer = txOptions.signer || this.base.getSigner();
4981
+ const glamMint = this.base.getMintPda(glamState, mintId);
4982
+ const signerAta = this.base.getAta(asset, signer);
4983
+ const tx = await this.base.program.methods
4984
+ .claim(0)
4985
+ .accounts({
4986
+ glamState,
4987
+ signer,
4988
+ tokenMint: asset,
4517
4989
  tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
4518
- eventAuthority: EVENT_AUTHORITY,
4519
- program: METEORA_DLMM,
4520
4990
  })
4991
+ .preInstructions([
4992
+ (0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(signer, signerAta, signer, asset),
4993
+ ])
4994
+ .postInstructions([
4995
+ (0, spl_token_1.createCloseAccountInstruction)(signerAta, signer, signer),
4996
+ ])
4521
4997
  .transaction();
4522
- const vTx = await this.base.intoVersionedTransaction(tx, txOptions);
4523
- return await this.base.sendAndConfirm(vTx);
4998
+ return await this.base.intoVersionedTransaction(tx, txOptions);
4524
4999
  }
4525
- async closePosition(statePda, position, txOptions = {}) {
4526
- const { lbPair, binArrayLower, binArrayUpper } = await this.parsePosition(new web3_js_1.PublicKey(position));
4527
- const glamState = new web3_js_1.PublicKey(statePda);
5000
+ async claimShareTx(glamState, asset, mintId = 0, txOptions = {}) {
5001
+ if (mintId !== 0) {
5002
+ throw new Error("mintId must be 0");
5003
+ }
5004
+ const signer = txOptions.signer || this.base.getSigner();
5005
+ const glamMint = this.base.getMintPda(glamState, mintId);
5006
+ const signerAta = this.base.getAta(asset, signer, spl_token_1.TOKEN_2022_PROGRAM_ID);
5007
+ const escrow = this.base.getEscrowPda(glamState);
5008
+ const remainingAccounts = [];
5009
+ if (await this.base.isLockupEnabled(glamState)) {
5010
+ const extraMetasAccount = this.base.getExtraMetasPda(glamState, mintId);
5011
+ const signerPolicy = this.base.getAccountPolicyPda(glamState, signer);
5012
+ const escrowPolicy = this.base.getAccountPolicyPda(glamState, escrow);
5013
+ remainingAccounts.push(...[
5014
+ extraMetasAccount,
5015
+ glamState,
5016
+ escrowPolicy,
5017
+ signerPolicy,
5018
+ constants_1.TRANSFER_HOOK_PROGRAM,
5019
+ ]);
5020
+ }
4528
5021
  const tx = await this.base.program.methods
4529
- .meteoraDlmmClosePosition()
5022
+ .claim(0)
4530
5023
  .accounts({
4531
5024
  glamState,
4532
- position: new web3_js_1.PublicKey(position),
4533
- lbPair,
4534
- binArrayLower,
4535
- binArrayUpper,
4536
- eventAuthority: EVENT_AUTHORITY,
4537
- program: METEORA_DLMM,
5025
+ signer,
5026
+ tokenMint: asset,
5027
+ tokenProgram: spl_token_1.TOKEN_2022_PROGRAM_ID,
4538
5028
  })
5029
+ .preInstructions([
5030
+ (0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(signer, signerAta, signer, asset, spl_token_1.TOKEN_2022_PROGRAM_ID),
5031
+ ])
5032
+ .remainingAccounts(remainingAccounts.map((pubkey) => ({
5033
+ pubkey,
5034
+ isSigner: false,
5035
+ isWritable: false,
5036
+ })))
4539
5037
  .transaction();
4540
- const vTx = await this.base.intoVersionedTransaction(tx, txOptions);
4541
- return await this.base.sendAndConfirm(vTx);
4542
- }
4543
- async parsePosition(position) {
4544
- const positionAccountInfo = await this.base.provider.connection.getAccountInfo(position);
4545
- if (!positionAccountInfo) {
4546
- throw new Error("Position not found");
4547
- }
4548
- const positionData = positionAccountInfo.data;
4549
- const lbPair = new web3_js_1.PublicKey(positionData.subarray(8, 40));
4550
- const lowerBinId = positionData.subarray(7912, 7916).readInt32LE();
4551
- const upperBinId = positionData.subarray(7916, 7920).readInt32LE();
4552
- const lowerBinArrayIndex = (0, dlmm_1.binIdToBinArrayIndex)(new anchor_1.BN(lowerBinId));
4553
- const [binArrayLower] = (0, dlmm_1.deriveBinArray)(lbPair, lowerBinArrayIndex, METEORA_DLMM);
4554
- const upperBinArrayIndex = anchor_1.BN.max(lowerBinArrayIndex.add(new anchor_1.BN(1)), (0, dlmm_1.binIdToBinArrayIndex)(new anchor_1.BN(upperBinId)));
4555
- const [binArrayUpper] = (0, dlmm_1.deriveBinArray)(lbPair, upperBinArrayIndex, METEORA_DLMM);
4556
- return {
4557
- lowerBinId,
4558
- upperBinId,
4559
- binArrayLower,
4560
- binArrayUpper,
4561
- lbPair,
4562
- };
4563
- }
4564
- async getAmounts(dlmmPool, amountX) {
4565
- const activeBin = await dlmmPool.getActiveBin();
4566
- const activeBinPricePerToken = dlmmPool.fromPricePerLamport(Number(activeBin.price));
4567
- const amountY = amountX.mul(new anchor_1.BN(Number(activeBinPricePerToken)));
4568
- return { amountX, amountY, activeBinId: activeBin.binId };
5038
+ return await this.base.intoVersionedTransaction(tx, txOptions);
4569
5039
  }
4570
5040
  }
4571
- exports.MeteoraDlmmClient = MeteoraDlmmClient;
5041
+ exports.InvestorClient = InvestorClient;
4572
5042
 
4573
5043
 
4574
5044
  /***/ }),
4575
- /* 33 */
4576
- /***/ ((module) => {
5045
+ /* 34 */
5046
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
5047
+
5048
+
5049
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
5050
+ exports.PriceClient = void 0;
5051
+ const web3_js_1 = __webpack_require__(5);
5052
+ const anchor_1 = __webpack_require__(2);
5053
+ const assets_1 = __webpack_require__(15);
5054
+ const helpers_1 = __webpack_require__(14);
5055
+ class PriceClient {
5056
+ constructor(base) {
5057
+ this.base = base;
5058
+ this.remainingAccountsForPricing = async (glamState) => {
5059
+ const glamStateAccount = await this.base.fetchStateAccount(glamState);
5060
+ return glamStateAccount.assets
5061
+ .map((asset) => [
5062
+ this.base.getVaultAta(glamState, asset),
5063
+ asset,
5064
+ assets_1.ASSETS_MAINNET.get(asset.toBase58())?.stateAccount || new web3_js_1.PublicKey(0),
5065
+ ])
5066
+ .flat()
5067
+ .map((a) => ({
5068
+ pubkey: a,
5069
+ isSigner: false,
5070
+ isWritable: false,
5071
+ }));
5072
+ };
5073
+ }
5074
+ /**
5075
+ * !! This is a convenience method that calculates the AUM of the vault based on priced assets.
5076
+ * !! It doesn't reflect the actual AUM of the vault. If the vault has not been priced or pricing data is outdated, the number is NOT meaningful.
5077
+ */
5078
+ async getAum(glamState) {
5079
+ // @ts-ignore
5080
+ const glamStateAccount = await this.base.fetchStateAccount(glamState);
5081
+ let pricedAssets = [];
5082
+ glamStateAccount.params[0].forEach((param) => {
5083
+ const name = Object.keys(param.name)[0];
5084
+ if (name === "pricedAssets") {
5085
+ // @ts-ignore
5086
+ pricedAssets = Object.values(param.value)[0].val;
5087
+ }
5088
+ });
5089
+ return pricedAssets.reduce((sum, p) => new anchor_1.BN(p.amount).add(sum), new anchor_1.BN(0));
5090
+ }
5091
+ async priceVaultIxs(glamState) {
5092
+ const vault = this.base.getVaultPda(glamState);
5093
+ const tickets = await (0, helpers_1.fetchMarinadeTicketAccounts)(this.base.provider.connection, vault);
5094
+ const priceTicketsIx = await this.base.program.methods
5095
+ .priceTickets()
5096
+ .accounts({
5097
+ glamState,
5098
+ })
5099
+ .remainingAccounts(tickets.map((t) => ({
5100
+ pubkey: t.pubkey,
5101
+ isSigner: false,
5102
+ isWritable: false,
5103
+ })))
5104
+ .instruction();
5105
+ const stakes = await (0, helpers_1.fetchStakeAccounts)(this.base.provider.connection, vault);
5106
+ const priceStakesIx = await this.base.program.methods
5107
+ .priceStakes()
5108
+ .accounts({
5109
+ glamState,
5110
+ })
5111
+ .remainingAccounts(stakes.map((s) => ({
5112
+ pubkey: s,
5113
+ isSigner: false,
5114
+ isWritable: false,
5115
+ })))
5116
+ .instruction();
5117
+ const priceVaultIx = await this.base.program.methods
5118
+ .priceVault()
5119
+ .accounts({
5120
+ glamState,
5121
+ })
5122
+ .remainingAccounts(await this.remainingAccountsForPricing(glamState))
5123
+ .instruction();
5124
+ return [priceTicketsIx, priceStakesIx, priceVaultIx];
5125
+ }
5126
+ }
5127
+ exports.PriceClient = PriceClient;
4577
5128
 
4578
- module.exports = require("@meteora-ag/dlmm");
4579
5129
 
4580
5130
  /***/ }),
4581
- /* 34 */
5131
+ /* 35 */
4582
5132
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
4583
5133
 
4584
5134
 
@@ -4616,25 +5166,25 @@ exports.getPriorityFeeEstimate = getPriorityFeeEstimate;
4616
5166
 
4617
5167
 
4618
5168
  /***/ }),
4619
- /* 35 */
5169
+ /* 36 */
4620
5170
  /***/ ((module) => {
4621
5171
 
4622
5172
  module.exports = require("commander");
4623
5173
 
4624
5174
  /***/ }),
4625
- /* 36 */
5175
+ /* 37 */
4626
5176
  /***/ ((module) => {
4627
5177
 
4628
5178
  module.exports = require("fs");
4629
5179
 
4630
5180
  /***/ }),
4631
- /* 37 */
5181
+ /* 38 */
4632
5182
  /***/ ((module) => {
4633
5183
 
4634
5184
  module.exports = require("inquirer");
4635
5185
 
4636
5186
  /***/ }),
4637
- /* 38 */
5187
+ /* 39 */
4638
5188
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
4639
5189
 
4640
5190
 
@@ -4643,9 +5193,9 @@ exports.parseTxError = exports.setStateToConfig = exports.loadingConfig = void 0
4643
5193
  const tslib_1 = __webpack_require__(1);
4644
5194
  const anchor_1 = __webpack_require__(2);
4645
5195
  const web3_js_1 = __webpack_require__(5);
4646
- const fs_1 = tslib_1.__importDefault(__webpack_require__(36));
4647
- const os_1 = tslib_1.__importDefault(__webpack_require__(39));
4648
- const path_1 = tslib_1.__importDefault(__webpack_require__(40));
5196
+ const fs_1 = tslib_1.__importDefault(__webpack_require__(37));
5197
+ const os_1 = tslib_1.__importDefault(__webpack_require__(40));
5198
+ const path_1 = tslib_1.__importDefault(__webpack_require__(41));
4649
5199
  const getConfigPath = () => {
4650
5200
  // By default config.json is under ~/.config/glam/
4651
5201
  // If running in docker, config.json is expected to be at /workspace/config.json
@@ -4700,13 +5250,13 @@ exports.parseTxError = parseTxError;
4700
5250
 
4701
5251
 
4702
5252
  /***/ }),
4703
- /* 39 */
5253
+ /* 40 */
4704
5254
  /***/ ((module) => {
4705
5255
 
4706
5256
  module.exports = require("os");
4707
5257
 
4708
5258
  /***/ }),
4709
- /* 40 */
5259
+ /* 41 */
4710
5260
  /***/ ((module) => {
4711
5261
 
4712
5262
  module.exports = require("path");
@@ -4749,10 +5299,10 @@ const tslib_1 = __webpack_require__(1);
4749
5299
  const anchor = tslib_1.__importStar(__webpack_require__(2));
4750
5300
  const glam_sdk_1 = __webpack_require__(3);
4751
5301
  const web3_js_1 = __webpack_require__(5);
4752
- const commander_1 = __webpack_require__(35);
4753
- const fs_1 = tslib_1.__importDefault(__webpack_require__(36));
4754
- const inquirer_1 = tslib_1.__importDefault(__webpack_require__(37));
4755
- const utils_1 = __webpack_require__(38);
5302
+ const commander_1 = __webpack_require__(36);
5303
+ const fs_1 = tslib_1.__importDefault(__webpack_require__(37));
5304
+ const inquirer_1 = tslib_1.__importDefault(__webpack_require__(38));
5305
+ const utils_1 = __webpack_require__(39);
4756
5306
  const cliConfig = (0, utils_1.loadingConfig)();
4757
5307
  const txOptions = {
4758
5308
  getPriorityFeeMicroLamports: async (tx) => {
@@ -5410,7 +5960,7 @@ program
5410
5960
  }
5411
5961
  console.log("Quote params:", quoteParams);
5412
5962
  try {
5413
- const txSig = await glamClient.jupiterSwap.swap(statePda, quoteParams, undefined, undefined, { ...txOptions, simulate: !globalOpts.skipSimulation });
5963
+ const txSig = await glamClient.jupiterSwap.swap(statePda, { quoteParams }, { ...txOptions, simulate: !globalOpts.skipSimulation });
5414
5964
  console.log(`Swapped ${amount} ${from} to ${to}: ${txSig}`);
5415
5965
  }
5416
5966
  catch (e) {
@@ -5553,7 +6103,7 @@ lst
5553
6103
  process.exit(1);
5554
6104
  }
5555
6105
  try {
5556
- const txSig = await glamClient.staking.withdrawFromStakeAccounts(statePda, accounts.map((addr) => new web3_js_1.PublicKey(addr)));
6106
+ const txSig = await glamClient.staking.withdraw(statePda, accounts.map((addr) => new web3_js_1.PublicKey(addr)));
5557
6107
  console.log(`Withdrew from ${accounts}:`, txSig);
5558
6108
  }
5559
6109
  catch (e) {
@@ -5623,15 +6173,15 @@ meteora
5623
6173
  }
5624
6174
  });
5625
6175
  meteora
5626
- .command("add <position> <amount> <strategy>")
6176
+ .command("add <position> <amountX> <amountY> <strategy>")
5627
6177
  .description("Add liquidity to position")
5628
- .action(async (position, amount, strategy) => {
6178
+ .action(async (position, amountX, amountY, strategy) => {
5629
6179
  if (!cliConfig.glam_state) {
5630
6180
  console.error("GLAM state not found in config file");
5631
6181
  process.exit(1);
5632
6182
  }
5633
6183
  try {
5634
- const txSig = await glamClient.meteoraDlmm.addLiquidity(cliConfig.glam_state, position, new anchor.BN(amount), strategy.toString());
6184
+ const txSig = await glamClient.meteoraDlmm.addLiquidityByStrategy(cliConfig.glam_state, position, new anchor.BN(amountX), new anchor.BN(amountY), strategy.toString());
5635
6185
  console.log(`Added liquidity to ${position}:`, txSig);
5636
6186
  }
5637
6187
  catch (e) {
@@ -5648,7 +6198,7 @@ meteora
5648
6198
  process.exit(1);
5649
6199
  }
5650
6200
  try {
5651
- const txSig = await glamClient.meteoraDlmm.removeLiquidity(cliConfig.glam_state, position, bps);
6201
+ const txSig = await glamClient.meteoraDlmm.removeLiquidityByRange(cliConfig.glam_state, position, bps);
5652
6202
  console.log(`Removed liquidity from ${position}:`, txSig);
5653
6203
  }
5654
6204
  catch (e) {
@@ -5690,6 +6240,217 @@ meteora
5690
6240
  process.exit(1);
5691
6241
  }
5692
6242
  });
6243
+ const drift = program.command("drift").description("Drift operations");
6244
+ drift
6245
+ .command("price")
6246
+ .description("Price drift")
6247
+ .action(async () => {
6248
+ if (!cliConfig.glam_state) {
6249
+ console.error("GLAM state not found in config file");
6250
+ process.exit(1);
6251
+ }
6252
+ try {
6253
+ const marketConfigs = await glamClient.drift.fetchMarketConfigs();
6254
+ const txSig = await glamClient.drift.priceDrift(cliConfig.glam_state, marketConfigs);
6255
+ console.log(`Pricing tx: ${txSig}`);
6256
+ }
6257
+ catch (e) {
6258
+ console.error((0, utils_1.parseTxError)(e));
6259
+ process.exit(1);
6260
+ }
6261
+ });
6262
+ const mint = program.command("mint").description("Mint operations");
6263
+ mint
6264
+ .command("holders")
6265
+ .description("List all token holders")
6266
+ .action(async () => {
6267
+ const statePda = cliConfig.glam_state
6268
+ ? new web3_js_1.PublicKey(cliConfig.glam_state)
6269
+ : null;
6270
+ if (!statePda) {
6271
+ console.error("GLAM state not found in config file");
6272
+ process.exit(1);
6273
+ }
6274
+ try {
6275
+ const holders = await glamClient.mint.getHolders(statePda);
6276
+ console.log("Owner ", "\t", "Token Account ", "\t", "Amount", "\t", "Frozen");
6277
+ holders.forEach((holder) => {
6278
+ console.log(holder.owner.toBase58(), "\t", holder.pubkey.toBase58(), "\t", holder.uiAmount, "\t", holder.frozen ? "Yes" : "No");
6279
+ });
6280
+ }
6281
+ catch (e) {
6282
+ console.error((0, utils_1.parseTxError)(e));
6283
+ process.exit(1);
6284
+ }
6285
+ });
6286
+ mint
6287
+ .command("update")
6288
+ .description("Update mint parameters")
6289
+ .option("-l, --lockup <seconds>", "Set lockup period in seconds")
6290
+ .option("-f, --frozen <boolean>", "Set default account state frozen")
6291
+ .action(async (options) => {
6292
+ const statePda = cliConfig.glam_state
6293
+ ? new web3_js_1.PublicKey(cliConfig.glam_state)
6294
+ : null;
6295
+ if (!statePda) {
6296
+ console.error("GLAM state not found in config file");
6297
+ process.exit(1);
6298
+ }
6299
+ const mintModel = {};
6300
+ if (options.lockup) {
6301
+ mintModel.lockUpPeriodInSeconds = parseInt(options.lockup);
6302
+ }
6303
+ if (options.frozen !== undefined) {
6304
+ mintModel.defaultAccountStateFrozen = options.frozen === "true";
6305
+ }
6306
+ if (Object.keys(mintModel).length === 0) {
6307
+ console.error("No parameters specified to update");
6308
+ process.exit(1);
6309
+ }
6310
+ try {
6311
+ const txSig = await glamClient.mint.update(statePda, 0, mintModel);
6312
+ console.log(`Updated mint parameters:`, txSig);
6313
+ }
6314
+ catch (e) {
6315
+ console.error((0, utils_1.parseTxError)(e));
6316
+ process.exit(1);
6317
+ }
6318
+ });
6319
+ mint
6320
+ .command("create-account <owner>")
6321
+ .description("Create a token account for a user")
6322
+ .option("-f, --frozen <boolean>", "Set account frozen state", "true")
6323
+ .action(async (owner, options) => {
6324
+ const statePda = cliConfig.glam_state
6325
+ ? new web3_js_1.PublicKey(cliConfig.glam_state)
6326
+ : null;
6327
+ if (!statePda) {
6328
+ console.error("GLAM state not found in config file");
6329
+ process.exit(1);
6330
+ }
6331
+ try {
6332
+ const ownerPubkey = new web3_js_1.PublicKey(owner);
6333
+ const frozen = options.frozen === "true";
6334
+ const txSig = await glamClient.mint.createTokenAccount(statePda, ownerPubkey, 0, frozen, txOptions);
6335
+ console.log(`Created token account for ${owner}:`, txSig);
6336
+ }
6337
+ catch (e) {
6338
+ console.error((0, utils_1.parseTxError)(e));
6339
+ process.exit(1);
6340
+ }
6341
+ });
6342
+ mint
6343
+ .command("freeze <accounts...>")
6344
+ .description("Freeze token accounts (space-separated pubkeys)")
6345
+ .action(async (accounts) => {
6346
+ const statePda = cliConfig.glam_state
6347
+ ? new web3_js_1.PublicKey(cliConfig.glam_state)
6348
+ : null;
6349
+ if (!statePda) {
6350
+ console.error("GLAM state not found in config file");
6351
+ process.exit(1);
6352
+ }
6353
+ try {
6354
+ const accountPubkeys = accounts.map((acc) => new web3_js_1.PublicKey(acc));
6355
+ const txSig = await glamClient.mint.setTokenAccountsStates(statePda, 0, accountPubkeys, true, txOptions);
6356
+ console.log(`Froze accounts ${accounts}:`, txSig);
6357
+ }
6358
+ catch (e) {
6359
+ console.error((0, utils_1.parseTxError)(e));
6360
+ process.exit(1);
6361
+ }
6362
+ });
6363
+ mint
6364
+ .command("unfreeze <accounts...>")
6365
+ .description("Unfreeze token accounts (space-separated pubkeys)")
6366
+ .action(async (accounts) => {
6367
+ const statePda = cliConfig.glam_state
6368
+ ? new web3_js_1.PublicKey(cliConfig.glam_state)
6369
+ : null;
6370
+ if (!statePda) {
6371
+ console.error("GLAM state not found in config file");
6372
+ process.exit(1);
6373
+ }
6374
+ try {
6375
+ const accountPubkeys = accounts.map((acc) => new web3_js_1.PublicKey(acc));
6376
+ const txSig = await glamClient.mint.setTokenAccountsStates(statePda, 0, accountPubkeys, false, txOptions);
6377
+ console.log(`Unfroze accounts ${accounts}:`, txSig);
6378
+ }
6379
+ catch (e) {
6380
+ console.error((0, utils_1.parseTxError)(e));
6381
+ process.exit(1);
6382
+ }
6383
+ });
6384
+ mint
6385
+ .command("issue <recipient> <amount>")
6386
+ .description("Mint tokens to a recipient")
6387
+ .option("-u, --unfreeze", "Unfreeze recipient token account before minting", false)
6388
+ .action(async (recipient, amount, options) => {
6389
+ const statePda = cliConfig.glam_state
6390
+ ? new web3_js_1.PublicKey(cliConfig.glam_state)
6391
+ : null;
6392
+ if (!statePda) {
6393
+ console.error("GLAM state not found in config file");
6394
+ process.exit(1);
6395
+ }
6396
+ try {
6397
+ const recipientPubkey = new web3_js_1.PublicKey(recipient);
6398
+ const amountBN = new anchor.BN(parseFloat(amount) * 1e9); // Assuming 9 decimals
6399
+ const txSig = await glamClient.mint.mint(statePda, 0, recipientPubkey, amountBN, options.unfreeze, txOptions);
6400
+ console.log(`Minted ${amount} tokens to ${recipient}:`, txSig);
6401
+ }
6402
+ catch (e) {
6403
+ console.error((0, utils_1.parseTxError)(e));
6404
+ process.exit(1);
6405
+ }
6406
+ });
6407
+ mint
6408
+ .command("burn <from> <amount>")
6409
+ .description("Burn tokens from an account")
6410
+ .option("-u, --unfreeze", "Unfreeze token account before burning", false)
6411
+ .action(async (from, amount, options) => {
6412
+ const statePda = cliConfig.glam_state
6413
+ ? new web3_js_1.PublicKey(cliConfig.glam_state)
6414
+ : null;
6415
+ if (!statePda) {
6416
+ console.error("GLAM state not found in config file");
6417
+ process.exit(1);
6418
+ }
6419
+ try {
6420
+ const fromPubkey = new web3_js_1.PublicKey(from);
6421
+ const amountBN = new anchor.BN(parseFloat(amount) * 1e9); // Assuming 9 decimals
6422
+ const txSig = await glamClient.mint.burn(statePda, 0, amountBN, fromPubkey, options.unfreeze, txOptions);
6423
+ console.log(`Burned ${amount} tokens from ${from}:`, txSig);
6424
+ }
6425
+ catch (e) {
6426
+ console.error((0, utils_1.parseTxError)(e));
6427
+ process.exit(1);
6428
+ }
6429
+ });
6430
+ mint
6431
+ .command("transfer <from> <to> <amount>")
6432
+ .description("Force transfer tokens between accounts")
6433
+ .option("-u, --unfreeze", "Unfreeze accounts before transferring", false)
6434
+ .action(async (from, to, amount, options) => {
6435
+ const statePda = cliConfig.glam_state
6436
+ ? new web3_js_1.PublicKey(cliConfig.glam_state)
6437
+ : null;
6438
+ if (!statePda) {
6439
+ console.error("GLAM state not found in config file");
6440
+ process.exit(1);
6441
+ }
6442
+ try {
6443
+ const fromPubkey = new web3_js_1.PublicKey(from);
6444
+ const toPubkey = new web3_js_1.PublicKey(to);
6445
+ const amountBN = new anchor.BN(parseFloat(amount) * 1e9); // Assuming 9 decimals
6446
+ const txSig = await glamClient.mint.forceTransfer(statePda, 0, amountBN, fromPubkey, toPubkey, options.unfreeze, txOptions);
6447
+ console.log(`Transferred ${amount} tokens from ${from} to ${to}:`, txSig);
6448
+ }
6449
+ catch (e) {
6450
+ console.error((0, utils_1.parseTxError)(e));
6451
+ process.exit(1);
6452
+ }
6453
+ });
5693
6454
  //
5694
6455
  // Run the CLI in development mode as follows:
5695
6456
  // npx nx run cli:dev -- --args="view <pubkey>"