@glamsystems/glam-cli 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/main.js +1539 -778
- 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__(
|
|
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__(
|
|
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.
|
|
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
|
|
50
|
-
exports.
|
|
51
|
-
const
|
|
52
|
-
exports.
|
|
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(
|
|
64
|
+
return new anchor_1.Program(GlamIdl, provider);
|
|
65
65
|
default:
|
|
66
|
-
const idl = { ...
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
338
|
-
obj.
|
|
339
|
-
this.
|
|
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.
|
|
360
|
-
|
|
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.
|
|
432
|
-
|
|
433
|
-
exports.
|
|
434
|
-
exports.
|
|
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
|
|
493
|
-
const
|
|
494
|
-
const
|
|
495
|
-
const
|
|
496
|
-
const
|
|
497
|
-
const
|
|
498
|
-
const
|
|
499
|
-
const
|
|
500
|
-
const
|
|
501
|
-
const
|
|
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.
|
|
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://
|
|
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
|
-
|
|
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:
|
|
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
|
|
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
|
-
|
|
777
|
-
|
|
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,
|
|
1014
|
+
async maybeWrapSol(glamState, lamports, signer) {
|
|
1015
|
+
const glamSigner = signer || this.getSigner();
|
|
948
1016
|
const glamVault = this.getVaultPda(glamState);
|
|
949
|
-
const vaultWsolAta = this.
|
|
950
|
-
let wsolBalance = new
|
|
1017
|
+
const vaultWsolAta = this.getAta(constants_1.WSOL, glamVault);
|
|
1018
|
+
let wsolBalance = new anchor_1.BN(0);
|
|
951
1019
|
try {
|
|
952
|
-
wsolBalance = new
|
|
1020
|
+
wsolBalance = new anchor_1.BN((await this.provider.connection.getTokenAccountBalance(vaultWsolAta)).value.amount);
|
|
953
1021
|
}
|
|
954
1022
|
catch (err) { }
|
|
955
|
-
const solBalance = new
|
|
956
|
-
const delta = new
|
|
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
|
|
961
|
-
return
|
|
962
|
-
.
|
|
963
|
-
.
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
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
|
|
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
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
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)(
|
|
1826
|
-
(0, sdk_1.getUserStatsAccountPublicKey)(
|
|
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
|
|
1830
|
-
const
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
1884
|
-
console.log("
|
|
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
|
-
|
|
1900
|
-
|
|
1901
|
-
|
|
1902
|
-
|
|
1903
|
-
|
|
1904
|
-
|
|
1905
|
-
|
|
1906
|
-
|
|
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
|
|
1911
|
-
|
|
1912
|
-
|
|
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
|
-
|
|
1922
|
-
|
|
1923
|
-
|
|
1924
|
-
|
|
1925
|
-
|
|
1926
|
-
|
|
1927
|
-
|
|
1928
|
-
|
|
1929
|
-
|
|
1930
|
-
|
|
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)(
|
|
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)(
|
|
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
|
-
|
|
2008
|
-
|
|
2009
|
-
|
|
2010
|
-
|
|
2011
|
-
|
|
2012
|
-
|
|
2013
|
-
|
|
2014
|
-
|
|
2015
|
-
|
|
2016
|
-
|
|
2017
|
-
|
|
2018
|
-
|
|
2019
|
-
|
|
2020
|
-
|
|
2021
|
-
const
|
|
2022
|
-
.
|
|
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
|
-
|
|
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
|
|
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)(
|
|
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)(
|
|
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)(
|
|
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)(
|
|
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)(
|
|
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
|
-
|
|
2299
|
-
const
|
|
2300
|
-
const
|
|
2301
|
-
|
|
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
|
-
.
|
|
2313
|
+
.priceDrift()
|
|
2338
2314
|
.accounts({
|
|
2339
|
-
glamState
|
|
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.
|
|
2327
|
+
exports.DriftClient = DriftClient;
|
|
2353
2328
|
|
|
2354
2329
|
|
|
2355
2330
|
/***/ }),
|
|
2356
|
-
/*
|
|
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
|
|
2383
|
-
|
|
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,
|
|
2418
|
-
const tx = await this.swapTx(glamState,
|
|
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,
|
|
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
|
-
|
|
2434
|
-
|
|
2435
|
-
|
|
2422
|
+
let inputMint;
|
|
2423
|
+
let outputMint;
|
|
2424
|
+
let amount;
|
|
2425
|
+
const { quoteParams, quoteResponse, swapInstructions } = options;
|
|
2436
2426
|
if (swapInstructions === undefined) {
|
|
2437
|
-
|
|
2438
|
-
if (
|
|
2427
|
+
let resolvedQuoteResponse = quoteResponse;
|
|
2428
|
+
if (resolvedQuoteResponse === undefined) {
|
|
2439
2429
|
if (quoteParams === undefined) {
|
|
2440
|
-
throw new Error("quoteParams must be specified when quoteResponse and
|
|
2430
|
+
throw new Error("quoteParams must be specified when quoteResponse and swapInstructions are not specified.");
|
|
2441
2431
|
}
|
|
2442
|
-
|
|
2432
|
+
resolvedQuoteResponse = await this.getQuoteResponse(quoteParams);
|
|
2443
2433
|
}
|
|
2444
|
-
|
|
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(
|
|
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
|
|
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
|
-
.
|
|
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
|
-
|
|
2646
|
-
|
|
2647
|
-
|
|
2648
|
-
|
|
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
|
-
/*
|
|
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__(
|
|
2776
|
+
const marinade_ts_sdk_1 = __webpack_require__(23);
|
|
2739
2777
|
const constants_1 = __webpack_require__(10);
|
|
2740
|
-
const
|
|
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
|
|
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
|
|
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(
|
|
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:
|
|
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
|
|
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:
|
|
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
|
-
.
|
|
2947
|
-
|
|
2948
|
-
|
|
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
|
-
/*
|
|
2980
|
+
/* 23 */
|
|
2979
2981
|
/***/ ((module) => {
|
|
2980
2982
|
|
|
2981
2983
|
module.exports = require("@marinade.finance/marinade-ts-sdk");
|
|
2982
2984
|
|
|
2983
2985
|
/***/ }),
|
|
2984
|
-
/*
|
|
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
|
|
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
|
-
.
|
|
3014
|
-
.
|
|
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
|
-
.
|
|
3022
|
-
.accounts({
|
|
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
|
-
/*
|
|
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__(
|
|
3041
|
-
const
|
|
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
|
-
*
|
|
3067
|
+
* Client methods
|
|
3049
3068
|
*/
|
|
3050
3069
|
async unstake(glamState, asset, amount, txOptions = {}) {
|
|
3051
3070
|
const assetStr = asset.toBase58();
|
|
3052
|
-
|
|
3071
|
+
// mSOL
|
|
3053
3072
|
if (assetStr === constants_1.MSOL.toBase58()) {
|
|
3054
|
-
|
|
3055
|
-
|
|
3073
|
+
const tx = await this.marinade.orderUnstakeTx(glamState, new anchor_1.BN(amount), txOptions);
|
|
3074
|
+
return await this.base.sendAndConfirm(tx);
|
|
3056
3075
|
}
|
|
3057
|
-
|
|
3058
|
-
|
|
3059
|
-
|
|
3060
|
-
|
|
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
|
|
3087
|
-
const tx = await this.
|
|
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
|
|
3091
|
-
const tx = await this.
|
|
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
|
|
3095
|
-
const tx = await this.
|
|
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
|
|
3099
|
-
const { tx, newStake } = await this.
|
|
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
|
|
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,
|
|
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(
|
|
3250
|
-
.
|
|
3246
|
+
.stakePoolDepositSol(lamports)
|
|
3247
|
+
.accounts({
|
|
3251
3248
|
glamSigner,
|
|
3252
3249
|
glamState,
|
|
3253
|
-
|
|
3254
|
-
mintTo: this.base.getVaultAta(glamState, poolMint),
|
|
3255
|
-
stakePoolProgram,
|
|
3250
|
+
cpiProgram: stakePoolProgram,
|
|
3256
3251
|
stakePool,
|
|
3257
|
-
|
|
3252
|
+
stakePoolWithdrawAuthority: withdrawAuthority,
|
|
3258
3253
|
reserveStake,
|
|
3259
|
-
withdrawAuthority,
|
|
3260
3254
|
feeAccount,
|
|
3261
|
-
|
|
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
|
-
.
|
|
3285
|
+
.accounts({
|
|
3285
3286
|
glamSigner,
|
|
3286
3287
|
glamState,
|
|
3287
|
-
|
|
3288
|
-
vaultStakeAccount: stakeAccount,
|
|
3289
|
-
mintTo: this.base.getVaultAta(glamState, poolMint),
|
|
3290
|
-
poolMint,
|
|
3291
|
-
feeAccount,
|
|
3288
|
+
cpiProgram: stakePoolProgram,
|
|
3292
3289
|
stakePool,
|
|
3293
|
-
|
|
3294
|
-
withdrawAuthority,
|
|
3290
|
+
stakePoolWithdrawAuthority: withdrawAuthority,
|
|
3295
3291
|
validatorList,
|
|
3296
3292
|
validatorStakeAccount,
|
|
3297
3293
|
reserveStakeAccount: reserveStake,
|
|
3298
|
-
|
|
3299
|
-
|
|
3300
|
-
|
|
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
|
-
.
|
|
3322
|
-
.
|
|
3322
|
+
.stakeDeactivate()
|
|
3323
|
+
.accounts({
|
|
3323
3324
|
glamSigner,
|
|
3324
3325
|
glamState,
|
|
3325
|
-
|
|
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
|
-
.
|
|
3333
|
+
.accounts({
|
|
3342
3334
|
glamSigner,
|
|
3343
3335
|
glamState,
|
|
3344
|
-
|
|
3345
|
-
|
|
3346
|
-
stakePoolProgram,
|
|
3336
|
+
cpiProgram: stakePoolProgram,
|
|
3337
|
+
stake: stakeAccount,
|
|
3347
3338
|
stakePool,
|
|
3348
3339
|
poolMint,
|
|
3349
|
-
|
|
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
|
-
.
|
|
3369
|
-
.
|
|
3372
|
+
.stakeDelegateStake()
|
|
3373
|
+
.accounts({
|
|
3370
3374
|
glamState,
|
|
3371
3375
|
glamSigner,
|
|
3372
|
-
|
|
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
|
|
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
|
-
.
|
|
3388
|
-
.
|
|
3390
|
+
.stakeDeactivate()
|
|
3391
|
+
.accounts({
|
|
3389
3392
|
glamState,
|
|
3390
3393
|
glamSigner,
|
|
3391
|
-
|
|
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
|
|
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
|
-
.
|
|
3408
|
-
.
|
|
3415
|
+
.stakeWithdraw(lamports)
|
|
3416
|
+
.accounts({
|
|
3409
3417
|
glamSigner,
|
|
3410
3418
|
glamState,
|
|
3411
|
-
|
|
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
|
|
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
|
-
.
|
|
3429
|
-
.
|
|
3432
|
+
.stakeMerge()
|
|
3433
|
+
.accounts({
|
|
3430
3434
|
glamSigner,
|
|
3431
3435
|
glamState,
|
|
3432
|
-
|
|
3433
|
-
|
|
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
|
|
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
|
-
.
|
|
3447
|
-
.
|
|
3446
|
+
.stakeSplit(lamports)
|
|
3447
|
+
.accounts({
|
|
3448
3448
|
glamSigner,
|
|
3449
3449
|
glamState,
|
|
3450
|
-
|
|
3451
|
-
|
|
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
|
-
.
|
|
3466
|
-
.
|
|
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
|
-
/*
|
|
3481
|
+
/* 26 */
|
|
3487
3482
|
/***/ ((module) => {
|
|
3488
3483
|
|
|
3489
3484
|
module.exports = require("@solana/spl-stake-pool");
|
|
3490
3485
|
|
|
3491
3486
|
/***/ }),
|
|
3492
|
-
/*
|
|
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
|
|
3519
|
+
// No share class, only need to initialize the state
|
|
3524
3520
|
if (mints && mints.length === 0) {
|
|
3525
|
-
|
|
3521
|
+
// @ts-ignore
|
|
3522
|
+
const tx = await this.base.program.methods
|
|
3526
3523
|
.initializeState(stateModel)
|
|
3527
3524
|
.accountsPartial({ glamState, glamSigner, glamVault })
|
|
3528
|
-
.
|
|
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
|
|
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
|
-
.
|
|
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
|
-
|
|
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
|
-
.
|
|
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
|
-
|
|
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
|
-
.
|
|
3573
|
-
|
|
3574
|
-
|
|
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.
|
|
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
|
|
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
|
|
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
|
-
.
|
|
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,
|
|
3735
|
-
const
|
|
3736
|
-
|
|
3737
|
-
|
|
3738
|
-
|
|
3739
|
-
|
|
3740
|
-
|
|
3741
|
-
|
|
3742
|
-
.
|
|
3743
|
-
|
|
3744
|
-
|
|
3745
|
-
|
|
3746
|
-
|
|
3747
|
-
|
|
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
|
|
3819
|
-
|
|
3820
|
-
|
|
3821
|
-
|
|
3822
|
-
|
|
3823
|
-
|
|
3824
|
-
|
|
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
|
-
/*
|
|
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
|
|
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
|
|
3994
|
+
* Freeze or unfreeze token accounts of a glam mint
|
|
3935
3995
|
*
|
|
3936
3996
|
* @param glamState
|
|
3937
|
-
* @param mintId
|
|
3938
|
-
* @param
|
|
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
|
|
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
|
|
3968
|
-
* @param amount Amount of
|
|
3969
|
-
* @param forceThaw If true,
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
-
/*
|
|
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__(
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
4272
|
-
reserve: solReserve.
|
|
4273
|
-
reserveFarmState: reserveFarmState.
|
|
4379
|
+
lendingMarketAuthority: lendingMarketAuthority.prod,
|
|
4380
|
+
reserve: solReserve.prod,
|
|
4381
|
+
reserveFarmState: reserveFarmState.prod,
|
|
4274
4382
|
obligationFarm,
|
|
4275
|
-
lendingMarket: lendingMarketMain.
|
|
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.
|
|
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.
|
|
4306
|
-
lendingMarket: lendingMarketMain.
|
|
4307
|
-
pythOracle: kLendProgramId.
|
|
4308
|
-
switchboardPriceOracle: kLendProgramId.
|
|
4309
|
-
switchboardTwapOracle: kLendProgramId.
|
|
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.
|
|
4417
|
+
}, kLendProgramId.prod),
|
|
4312
4418
|
refreshObligation({
|
|
4313
|
-
lendingMarket: lendingMarketMain.
|
|
4419
|
+
lendingMarket: lendingMarketMain.prod,
|
|
4314
4420
|
obligation,
|
|
4315
|
-
}, kLendProgramId.
|
|
4421
|
+
}, kLendProgramId.prod),
|
|
4316
4422
|
refreshObligationFarmsForReserve({ mode: 0 }, {
|
|
4317
4423
|
crank: this.base.getSigner(),
|
|
4318
4424
|
baseAccounts: {
|
|
4319
4425
|
obligation,
|
|
4320
|
-
lendingMarketAuthority: lendingMarketAuthority.
|
|
4321
|
-
reserve: solReserve.
|
|
4322
|
-
reserveFarmState: reserveFarmState.
|
|
4426
|
+
lendingMarketAuthority: lendingMarketAuthority.prod,
|
|
4427
|
+
reserve: solReserve.prod,
|
|
4428
|
+
reserveFarmState: reserveFarmState.prod,
|
|
4323
4429
|
obligationFarmUserState: obligationFarm,
|
|
4324
|
-
lendingMarket: lendingMarketMain.
|
|
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.
|
|
4435
|
+
}, kLendProgramId.prod),
|
|
4330
4436
|
];
|
|
4331
4437
|
const tx = await this.base.program.methods
|
|
4332
|
-
.
|
|
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.
|
|
4340
|
-
lendingMarketAuthority: lendingMarketAuthority.
|
|
4341
|
-
reserve: solReserve.
|
|
4443
|
+
lendingMarket: lendingMarketMain.prod,
|
|
4444
|
+
lendingMarketAuthority: lendingMarketAuthority.prod,
|
|
4445
|
+
reserve: solReserve.prod,
|
|
4342
4446
|
reserveLiquidityMint: asset,
|
|
4343
|
-
reserveLiquiditySupply: reserveLiquiditySupply.
|
|
4344
|
-
reserveCollateralMint: reserveCollateralMint.
|
|
4345
|
-
reserveDestinationDepositCollateral: reserveDestinationDepositCollateral.
|
|
4447
|
+
reserveLiquiditySupply: reserveLiquiditySupply.prod,
|
|
4448
|
+
reserveCollateralMint: reserveCollateralMint.prod,
|
|
4449
|
+
reserveDestinationDepositCollateral: reserveDestinationDepositCollateral.prod,
|
|
4346
4450
|
userSourceLiquidity: this.base.getVaultAta(statePda, asset),
|
|
4347
|
-
placeholderUserDestinationCollateral: kLendProgramId.
|
|
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
|
-
/*
|
|
4470
|
+
/* 30 */
|
|
4364
4471
|
/***/ ((module) => {
|
|
4365
4472
|
|
|
4366
4473
|
module.exports = require("@coral-xyz/borsh");
|
|
4367
4474
|
|
|
4368
4475
|
/***/ }),
|
|
4369
|
-
/*
|
|
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__(
|
|
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
|
|
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
|
|
4556
|
+
const activeBinId = (await dlmmPool.getActiveBin()).binId;
|
|
4424
4557
|
const glamState = new web3_js_1.PublicKey(statePda);
|
|
4425
|
-
const
|
|
4426
|
-
const
|
|
4427
|
-
const
|
|
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
|
-
.
|
|
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
|
|
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
|
-
.
|
|
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
|
-
.
|
|
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
|
-
|
|
4523
|
-
return await this.base.sendAndConfirm(vTx);
|
|
4998
|
+
return await this.base.intoVersionedTransaction(tx, txOptions);
|
|
4524
4999
|
}
|
|
4525
|
-
async
|
|
4526
|
-
|
|
4527
|
-
|
|
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
|
-
.
|
|
5022
|
+
.claim(0)
|
|
4530
5023
|
.accounts({
|
|
4531
5024
|
glamState,
|
|
4532
|
-
|
|
4533
|
-
|
|
4534
|
-
|
|
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
|
-
|
|
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.
|
|
5041
|
+
exports.InvestorClient = InvestorClient;
|
|
4572
5042
|
|
|
4573
5043
|
|
|
4574
5044
|
/***/ }),
|
|
4575
|
-
/*
|
|
4576
|
-
/***/ ((
|
|
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
|
-
/*
|
|
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
|
-
/*
|
|
5169
|
+
/* 36 */
|
|
4620
5170
|
/***/ ((module) => {
|
|
4621
5171
|
|
|
4622
5172
|
module.exports = require("commander");
|
|
4623
5173
|
|
|
4624
5174
|
/***/ }),
|
|
4625
|
-
/*
|
|
5175
|
+
/* 37 */
|
|
4626
5176
|
/***/ ((module) => {
|
|
4627
5177
|
|
|
4628
5178
|
module.exports = require("fs");
|
|
4629
5179
|
|
|
4630
5180
|
/***/ }),
|
|
4631
|
-
/*
|
|
5181
|
+
/* 38 */
|
|
4632
5182
|
/***/ ((module) => {
|
|
4633
5183
|
|
|
4634
5184
|
module.exports = require("inquirer");
|
|
4635
5185
|
|
|
4636
5186
|
/***/ }),
|
|
4637
|
-
/*
|
|
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__(
|
|
4647
|
-
const os_1 = tslib_1.__importDefault(__webpack_require__(
|
|
4648
|
-
const path_1 = tslib_1.__importDefault(__webpack_require__(
|
|
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
|
-
/*
|
|
5253
|
+
/* 40 */
|
|
4704
5254
|
/***/ ((module) => {
|
|
4705
5255
|
|
|
4706
5256
|
module.exports = require("os");
|
|
4707
5257
|
|
|
4708
5258
|
/***/ }),
|
|
4709
|
-
/*
|
|
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__(
|
|
4753
|
-
const fs_1 = tslib_1.__importDefault(__webpack_require__(
|
|
4754
|
-
const inquirer_1 = tslib_1.__importDefault(__webpack_require__(
|
|
4755
|
-
const utils_1 = __webpack_require__(
|
|
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
|
|
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.
|
|
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> <
|
|
6176
|
+
.command("add <position> <amountX> <amountY> <strategy>")
|
|
5627
6177
|
.description("Add liquidity to position")
|
|
5628
|
-
.action(async (position,
|
|
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.
|
|
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.
|
|
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>"
|