From edba69ef3d400a3f3a365dcbe2692c67f1e3b80e Mon Sep 17 00:00:00 2001 From: sina <20732540+SinaKhalili@users.noreply.github.com> Date: Mon, 24 Nov 2025 01:05:24 -0800 Subject: [PATCH 1/5] Add multi account subscriber --- src/driftpy/accounts/oracle.py | 13 +- src/driftpy/accounts/ws/drift_client.py | 44 ++- .../accounts/ws/multi_account_subscriber.py | 279 ++++++++++++++++++ 3 files changed, 309 insertions(+), 27 deletions(-) create mode 100644 src/driftpy/accounts/ws/multi_account_subscriber.py diff --git a/src/driftpy/accounts/oracle.py b/src/driftpy/accounts/oracle.py index abea895e..903fcb0a 100644 --- a/src/driftpy/accounts/oracle.py +++ b/src/driftpy/accounts/oracle.py @@ -229,12 +229,17 @@ def decode_swb_price_info(data: bytes): def decode_prelaunch_price_info(data: bytes): - prelaunch_oracle = DRIFT_CODER.accounts.decode(data) + decoded_account = DRIFT_CODER.accounts.decode(data) + + if not hasattr(decoded_account, "amm_last_update_slot"): + raise ValueError( + "Decoded account does not have amm_last_update_slot attribute, not a PrelaunchOracle" + ) return OraclePriceData( - price=prelaunch_oracle.price, - slot=prelaunch_oracle.amm_last_update_slot, - confidence=prelaunch_oracle.confidence, + price=decoded_account.price, + slot=decoded_account.amm_last_update_slot, + confidence=decoded_account.confidence, has_sufficient_number_of_data_points=True, twap=None, twap_confidence=None, diff --git a/src/driftpy/accounts/ws/drift_client.py b/src/driftpy/accounts/ws/drift_client.py index 91647a8e..5bcfd8d2 100644 --- a/src/driftpy/accounts/ws/drift_client.py +++ b/src/driftpy/accounts/ws/drift_client.py @@ -11,6 +11,7 @@ FullOracleWrapper, ) from driftpy.accounts.ws.account_subscriber import WebsocketAccountSubscriber +from driftpy.accounts.ws.multi_account_subscriber import WebsocketMultiAccountSubscriber from driftpy.addresses import ( Pubkey, get_perp_market_public_key, @@ -53,7 +54,8 @@ def __init__( self.state_subscriber = None self.spot_market_subscribers = {} self.perp_market_subscribers = {} - self.oracle_subscribers = {} + self.oracle_subscriber = WebsocketMultiAccountSubscriber(program, commitment) + self.oracle_id_to_pubkey: dict[str, Pubkey] = {} self.spot_market_map = None self.perp_market_map = None self.spot_market_oracle_map: dict[int, Pubkey] = {} @@ -112,6 +114,7 @@ async def subscribe(self): for full_oracle_wrapper in self.full_oracle_wrappers: await self.subscribe_to_oracle(full_oracle_wrapper) + await self.oracle_subscriber.subscribe() await spot_market_map.subscribe() await perp_market_map.subscribe() @@ -125,6 +128,8 @@ async def subscribe(self): for full_oracle_wrapper in self.full_oracle_wrappers: await self.subscribe_to_oracle_info(full_oracle_wrapper) + await self.oracle_subscriber.subscribe() + await self._set_perp_oracle_map() await self._set_spot_oracle_map() @@ -176,18 +181,15 @@ async def subscribe_to_oracle(self, full_oracle_wrapper: FullOracleWrapper): full_oracle_wrapper.pubkey, full_oracle_wrapper.oracle_source, ) - if oracle_id in self.oracle_subscribers: + if full_oracle_wrapper.pubkey in self.oracle_subscriber.data_map: return - oracle_subscriber = WebsocketAccountSubscriber[OraclePriceData]( + await self.oracle_subscriber.add_account( full_oracle_wrapper.pubkey, - self.program, - self.commitment, get_oracle_decode_fn(full_oracle_wrapper.oracle_source), initial_data=full_oracle_wrapper.oracle_price_data_and_slot, ) - await oracle_subscriber.subscribe() - self.oracle_subscribers[oracle_id] = oracle_subscriber + self.oracle_id_to_pubkey[oracle_id] = full_oracle_wrapper.pubkey async def subscribe_to_oracle_info( self, oracle_info: OracleInfo | FullOracleWrapper @@ -202,18 +204,14 @@ async def subscribe_to_oracle_info( if oracle_info.pubkey == Pubkey.default(): return - if oracle_id in self.oracle_subscribers: + if oracle_info.pubkey in self.oracle_subscriber.data_map: return - oracle_subscriber = WebsocketAccountSubscriber[OraclePriceData]( + await self.oracle_subscriber.add_account( oracle_info.pubkey, - self.program, - self.commitment, get_oracle_decode_fn(source), ) - - await oracle_subscriber.subscribe() - self.oracle_subscribers[oracle_id] = oracle_subscriber + self.oracle_id_to_pubkey[oracle_id] = oracle_info.pubkey def is_subscribed(self): return ( @@ -232,14 +230,12 @@ async def fetch(self): for spot_market_subscriber in self.spot_market_subscribers.values(): tasks.append(spot_market_subscriber.fetch()) - for oracle_subscriber in self.oracle_subscribers.values(): - tasks.append(oracle_subscriber.fetch()) + tasks.append(self.oracle_subscriber.fetch()) await asyncio.gather(*tasks) async def add_oracle(self, oracle_info: OracleInfo): - oracle_id = get_oracle_id(oracle_info.pubkey, oracle_info.source) - if oracle_id in self.oracle_subscribers: + if oracle_info.pubkey in self.oracle_subscriber.data_map: return True if oracle_info.pubkey == Pubkey.default(): @@ -271,7 +267,10 @@ def get_spot_market_and_slot( def get_oracle_price_data_and_slot( self, oracle_id: str ) -> Optional[DataAndSlot[OraclePriceData]]: - return self.oracle_subscribers[oracle_id].data_and_slot + pubkey = self.oracle_id_to_pubkey.get(oracle_id) + if pubkey is None: + return None + return self.oracle_subscriber.get_data(pubkey) async def unsubscribe(self): if self.is_subscribed(): @@ -284,8 +283,7 @@ async def unsubscribe(self): await spot_market_subscriber.unsubscribe() for perp_market_subscriber in self.perp_market_subscribers.values(): await perp_market_subscriber.unsubscribe() - for oracle_subscriber in self.oracle_subscribers.values(): - await oracle_subscriber.unsubscribe() + await self.oracle_subscriber.unsubscribe() def get_market_accounts_and_slots(self) -> list[DataAndSlot[PerpMarketAccount]]: if self.perp_market_map: @@ -317,7 +315,7 @@ async def _set_perp_oracle_map(self): market_index = perp_market_account.market_index oracle = perp_market_account.amm.oracle oracle_id = get_oracle_id(oracle, perp_market_account.amm.oracle_source) - if oracle_id not in self.oracle_subscribers: + if oracle not in self.oracle_subscriber.data_map: await self.add_oracle( OracleInfo(oracle, perp_market_account.amm.oracle_source) ) @@ -334,7 +332,7 @@ async def _set_spot_oracle_map(self): market_index = spot_market_account.market_index oracle = spot_market_account.oracle oracle_id = get_oracle_id(oracle, spot_market_account.oracle_source) - if oracle_id not in self.oracle_subscribers: + if oracle not in self.oracle_subscriber.data_map: await self.add_oracle( OracleInfo(oracle, spot_market_account.oracle_source) ) diff --git a/src/driftpy/accounts/ws/multi_account_subscriber.py b/src/driftpy/accounts/ws/multi_account_subscriber.py new file mode 100644 index 00000000..fa94d692 --- /dev/null +++ b/src/driftpy/accounts/ws/multi_account_subscriber.py @@ -0,0 +1,279 @@ +import asyncio +from typing import Any, Callable, Dict, Optional, cast + +import websockets +import websockets.exceptions # force eager imports +from anchorpy.program.core import Program +from solana.rpc.commitment import Commitment +from solana.rpc.websocket_api import SolanaWsClientProtocol, connect +from solders.pubkey import Pubkey + +from driftpy.accounts import DataAndSlot, get_account_data_and_slot +from driftpy.types import get_ws_url + + +class WebsocketMultiAccountSubscriber: + def __init__( + self, + program: Program, + commitment: Commitment = Commitment("confirmed"), + ): + self.program = program + self.commitment = commitment + self.ws: Optional[SolanaWsClientProtocol] = None + self.task: Optional[asyncio.Task] = None + + self.subscription_map: Dict[int, Pubkey] = {} + self.pubkey_to_subscription: Dict[Pubkey, int] = {} + self.decode_map: Dict[Pubkey, Callable[[bytes], Any]] = {} + self.data_map: Dict[Pubkey, Optional[DataAndSlot]] = {} + self.initial_data_map: Dict[Pubkey, Optional[DataAndSlot]] = {} + self.pending_subscriptions: list[Pubkey] = [] + + self._lock = asyncio.Lock() + + async def add_account( + self, + pubkey: Pubkey, + decode: Optional[Callable[[bytes], Any]] = None, + initial_data: Optional[DataAndSlot] = None, + ): + decode_fn = decode if decode is not None else self.program.coder.accounts.decode + + async with self._lock: + if pubkey in self.pubkey_to_subscription: + return + if pubkey in self.data_map and initial_data is None: + initial_data = self.data_map[pubkey] + + if initial_data is None: + try: + initial_data = await get_account_data_and_slot( + pubkey, self.program, self.commitment, decode_fn + ) + except Exception as e: + print(f"Error fetching initial data for {pubkey}: {e}") + return + + async with self._lock: + if pubkey in self.pubkey_to_subscription: + return + + self.decode_map[pubkey] = decode_fn + self.initial_data_map[pubkey] = initial_data + self.data_map[pubkey] = initial_data + + if self.ws is not None: + try: + # Enqueue before sending to maintain order + async with self._lock: + self.pending_subscriptions.append(pubkey) + + await self.ws.account_subscribe( + pubkey, + commitment=self.commitment, + encoding="base64", + ) + except Exception as e: + print(f"Error subscribing to account {pubkey}: {e}") + async with self._lock: + if ( + self.pending_subscriptions + and self.pending_subscriptions[-1] == pubkey + ): + self.pending_subscriptions.pop() + elif pubkey in self.pending_subscriptions: + self.pending_subscriptions.remove(pubkey) + + async def remove_account(self, pubkey: Pubkey): + async with self._lock: + if pubkey not in self.pubkey_to_subscription: + return + + subscription_id = self.pubkey_to_subscription[pubkey] + + if self.ws is not None: + try: + await self.ws.account_unsubscribe(subscription_id) + except Exception: + pass + + del self.subscription_map[subscription_id] + del self.pubkey_to_subscription[pubkey] + del self.decode_map[pubkey] + del self.data_map[pubkey] + if pubkey in self.initial_data_map: + del self.initial_data_map[pubkey] + + async def subscribe(self): + if self.task is not None: + return + + self.task = asyncio.create_task(self._subscribe_ws()) + + async def _subscribe_ws(self): + endpoint = self.program.provider.connection._provider.endpoint_uri + ws_endpoint = get_ws_url(endpoint) + + async for ws in connect(ws_endpoint): + try: + self.ws = cast(SolanaWsClientProtocol, ws) + + async with self._lock: + initial_accounts = [] + for pubkey in list(self.data_map.keys()): + if pubkey not in self.pubkey_to_subscription: + initial_accounts.append(pubkey) + + self.pending_subscriptions.extend(initial_accounts) + + for pubkey in initial_accounts: + try: + await ws.account_subscribe( + pubkey, + commitment=self.commitment, + encoding="base64", + ) + except Exception as e: + print(f"Error subscribing to account {pubkey}: {e}") + async with self._lock: + if pubkey in self.pending_subscriptions: + self.pending_subscriptions.remove(pubkey) + + async for msg in ws: + try: + if len(msg) == 0: + print("No message received") + continue + + result = msg[0].result + + if isinstance(result, int): + async with self._lock: + if self.pending_subscriptions: + pubkey = self.pending_subscriptions.pop(0) + subscription_id = result + self.subscription_map[subscription_id] = pubkey + self.pubkey_to_subscription[pubkey] = ( + subscription_id + ) + else: + print( + "No pending subscriptions but got a confirmation. " + "This implies a race condition or mismatch." + ) + continue + + if hasattr(result, "value") and result.value is not None: + subscription_id = None + if hasattr(msg[0], "subscription"): + subscription_id = msg[0].subscription + + if ( + subscription_id is None + or subscription_id not in self.subscription_map + ): + print( + f"Subscription ID {subscription_id} not found in subscription map" + ) + continue + + pubkey = self.subscription_map[subscription_id] + decode_fn = self.decode_map.get(pubkey) + + if decode_fn is None: + print(f"No decode function found for pubkey {pubkey}") + continue + + try: + slot = int(result.context.slot) + account_bytes = cast(bytes, result.value.data) + decoded_data = decode_fn(account_bytes) + new_data = DataAndSlot(slot, decoded_data) + self._update_data(pubkey, new_data) + except Exception: + # this is RPC noise? + continue + except Exception as e: + print(f"Error processing websocket message: {e}") + continue + + except websockets.exceptions.ConnectionClosed: + print("Websocket connection closed, reconnecting...") + self.ws = None + async with self._lock: + self.subscription_map.clear() + self.pubkey_to_subscription.clear() + continue + except Exception as e: + print(f"Error in websocket connection: {e}") + self.ws = None + async with self._lock: + self.subscription_map.clear() + self.pubkey_to_subscription.clear() + await asyncio.sleep(1) + continue + + def _update_data(self, pubkey: Pubkey, new_data: Optional[DataAndSlot]): + if new_data is None: + return + + current_data = self.data_map.get(pubkey) + if current_data is None or new_data.slot >= current_data.slot: + self.data_map[pubkey] = new_data + + def get_data(self, pubkey: Pubkey) -> Optional[DataAndSlot]: + return self.data_map.get(pubkey) + + async def fetch(self, pubkey: Optional[Pubkey] = None): + if pubkey is not None: + decode_fn = self.decode_map.get(pubkey) + if decode_fn is None: + return + new_data = await get_account_data_and_slot( + pubkey, self.program, self.commitment, decode_fn + ) + self._update_data(pubkey, new_data) + else: + tasks = [] + for pubkey, decode_fn in self.decode_map.items(): + tasks.append( + get_account_data_and_slot( + pubkey, self.program, self.commitment, decode_fn + ) + ) + results = await asyncio.gather(*tasks, return_exceptions=True) + for pubkey, result in zip(self.decode_map.keys(), results): + if isinstance(result, Exception): + continue + self._update_data(pubkey, result) + + def is_subscribed(self): + return self.ws is not None and self.task is not None + + async def unsubscribe(self): + if self.task: + self.task.cancel() + try: + await self.task + except asyncio.CancelledError: + pass + self.task = None + + if self.ws: + async with self._lock: + for subscription_id in list(self.subscription_map.keys()): + try: + await self.ws.account_unsubscribe(subscription_id) + except Exception: + pass + await self.ws.close() + self.ws = None + + async with self._lock: + self.subscription_map.clear() + self.pubkey_to_subscription.clear() + self.decode_map.clear() + self.data_map.clear() + self.initial_data_map.clear() + self.pending_subscriptions.clear() From 27269f44bb7794b46e4774b45893cdf29f5b00a5 Mon Sep 17 00:00:00 2001 From: sina <20732540+SinaKhalili@users.noreply.github.com> Date: Mon, 24 Nov 2025 01:06:27 -0800 Subject: [PATCH 2/5] Update protocol, drift IDL --- protocol-v2 | 2 +- src/driftpy/idl/drift.json | 3806 ++++++++++++++++++++++++++++++------ 2 files changed, 3249 insertions(+), 559 deletions(-) diff --git a/protocol-v2 b/protocol-v2 index 151cd424..c74d5e99 160000 --- a/protocol-v2 +++ b/protocol-v2 @@ -1 +1 @@ -Subproject commit 151cd42483244825bf4ee8f20ca94e65bbf263ac +Subproject commit c74d5e992e2754e71e9cb48d67dd554c001039fc diff --git a/src/driftpy/idl/drift.json b/src/driftpy/idl/drift.json index 33cc004c..4988c33f 100644 --- a/src/driftpy/idl/drift.json +++ b/src/driftpy/idl/drift.json @@ -1,5 +1,5 @@ { - "version": "2.142.0", + "version": "2.149.1", "name": "drift", "instructions": [ { @@ -2008,32 +2008,6 @@ } ] }, - { - "name": "updateUserFuelBonus", - "accounts": [ - { - "name": "state", - "isMut": false, - "isSigner": false - }, - { - "name": "authority", - "isMut": false, - "isSigner": true - }, - { - "name": "user", - "isMut": true, - "isSigner": false - }, - { - "name": "userStats", - "isMut": true, - "isSigner": false - } - ], - "args": [] - }, { "name": "updateUserStatsReferrerStatus", "accounts": [ @@ -4386,9 +4360,122 @@ "type": { "array": ["u8", 32] } + }, + { + "name": "lpPoolId", + "type": "u8" } ] }, + { + "name": "initializeAmmCache", + "accounts": [ + { + "name": "admin", + "isMut": true, + "isSigner": true + }, + { + "name": "state", + "isMut": false, + "isSigner": false + }, + { + "name": "ammCache", + "isMut": true, + "isSigner": false + }, + { + "name": "rent", + "isMut": false, + "isSigner": false + }, + { + "name": "systemProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [] + }, + { + "name": "addMarketToAmmCache", + "accounts": [ + { + "name": "admin", + "isMut": true, + "isSigner": true + }, + { + "name": "state", + "isMut": false, + "isSigner": false + }, + { + "name": "ammCache", + "isMut": true, + "isSigner": false + }, + { + "name": "perpMarket", + "isMut": false, + "isSigner": false + }, + { + "name": "rent", + "isMut": false, + "isSigner": false + }, + { + "name": "systemProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [] + }, + { + "name": "deleteAmmCache", + "accounts": [ + { + "name": "admin", + "isMut": true, + "isSigner": true + }, + { + "name": "state", + "isMut": false, + "isSigner": false + }, + { + "name": "ammCache", + "isMut": true, + "isSigner": false + } + ], + "args": [] + }, + { + "name": "updateInitialAmmCacheInfo", + "accounts": [ + { + "name": "state", + "isMut": true, + "isSigner": false + }, + { + "name": "admin", + "isMut": false, + "isSigner": true + }, + { + "name": "ammCache", + "isMut": true, + "isSigner": false + } + ], + "args": [] + }, { "name": "initializePredictionMarket", "accounts": [ @@ -4602,6 +4689,97 @@ } ] }, + { + "name": "updatePerpMarketLpPoolPausedOperations", + "accounts": [ + { + "name": "admin", + "isMut": false, + "isSigner": true + }, + { + "name": "state", + "isMut": false, + "isSigner": false + }, + { + "name": "perpMarket", + "isMut": true, + "isSigner": false + } + ], + "args": [ + { + "name": "lpPausedOperations", + "type": "u8" + } + ] + }, + { + "name": "updatePerpMarketLpPoolStatus", + "accounts": [ + { + "name": "admin", + "isMut": false, + "isSigner": true + }, + { + "name": "state", + "isMut": false, + "isSigner": false + }, + { + "name": "perpMarket", + "isMut": true, + "isSigner": false + }, + { + "name": "ammCache", + "isMut": true, + "isSigner": false + } + ], + "args": [ + { + "name": "lpStatus", + "type": "u8" + } + ] + }, + { + "name": "updatePerpMarketLpPoolFeeTransferScalar", + "accounts": [ + { + "name": "admin", + "isMut": false, + "isSigner": true + }, + { + "name": "state", + "isMut": false, + "isSigner": false + }, + { + "name": "perpMarket", + "isMut": true, + "isSigner": false + } + ], + "args": [ + { + "name": "optionalLpFeeTransferScalar", + "type": { + "option": "u8" + } + }, + { + "name": "optionalLpNetPnlTransferScalar", + "type": { + "option": "u8" + } + } + ] + }, { "name": "settleExpiredMarketPoolsToRevenuePool", "accounts": [ @@ -5061,6 +5239,32 @@ } ] }, + { + "name": "updatePerpMarketLpPoolId", + "accounts": [ + { + "name": "admin", + "isMut": false, + "isSigner": true + }, + { + "name": "state", + "isMut": false, + "isSigner": false + }, + { + "name": "perpMarket", + "isMut": true, + "isSigner": false + } + ], + "args": [ + { + "name": "lpPoolId", + "type": "u8" + } + ] + }, { "name": "updateInsuranceFundUnstakingPeriod", "accounts": [ @@ -5873,27 +6077,6 @@ } ] }, - { - "name": "updateLpCooldownTime", - "accounts": [ - { - "name": "admin", - "isMut": false, - "isSigner": true - }, - { - "name": "state", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "lpCooldownTime", - "type": "u64" - } - ] - }, { "name": "updatePerpFeeStructure", "accounts": [ @@ -6116,7 +6299,12 @@ "name": "oldOracle", "isMut": false, "isSigner": false - } + }, + { + "name": "ammCache", + "isMut": true, + "isSigner": false + } ], "args": [ { @@ -6461,46 +6649,6 @@ } ] }, - { - "name": "updatePerpMarketFuel", - "accounts": [ - { - "name": "admin", - "isMut": false, - "isSigner": true - }, - { - "name": "state", - "isMut": false, - "isSigner": false - }, - { - "name": "perpMarket", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "fuelBoostTaker", - "type": { - "option": "u8" - } - }, - { - "name": "fuelBoostMaker", - "type": { - "option": "u8" - } - }, - { - "name": "fuelBoostPosition", - "type": { - "option": "u8" - } - } - ] - }, { "name": "updatePerpMarketProtectedMakerParams", "accounts": [ @@ -6536,7 +6684,7 @@ ] }, { - "name": "updatePerpMarketTakerSpeedBumpOverride", + "name": "updatePerpMarketOracleLowRiskSlotDelayOverride", "accounts": [ { "name": "admin", @@ -6556,7 +6704,7 @@ ], "args": [ { - "name": "takerSpeedBumpOverride", + "name": "oracleLowRiskSlotDelayOverride", "type": "i8" } ] @@ -6621,115 +6769,6 @@ } ] }, - { - "name": "updateSpotMarketFuel", - "accounts": [ - { - "name": "admin", - "isMut": false, - "isSigner": true - }, - { - "name": "state", - "isMut": false, - "isSigner": false - }, - { - "name": "spotMarket", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "fuelBoostDeposits", - "type": { - "option": "u8" - } - }, - { - "name": "fuelBoostBorrows", - "type": { - "option": "u8" - } - }, - { - "name": "fuelBoostTaker", - "type": { - "option": "u8" - } - }, - { - "name": "fuelBoostMaker", - "type": { - "option": "u8" - } - }, - { - "name": "fuelBoostInsurance", - "type": { - "option": "u8" - } - } - ] - }, - { - "name": "initUserFuel", - "accounts": [ - { - "name": "admin", - "isMut": false, - "isSigner": true - }, - { - "name": "state", - "isMut": false, - "isSigner": false - }, - { - "name": "user", - "isMut": true, - "isSigner": false - }, - { - "name": "userStats", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "fuelBoostDeposits", - "type": { - "option": "i32" - } - }, - { - "name": "fuelBoostBorrows", - "type": { - "option": "u32" - } - }, - { - "name": "fuelBoostTaker", - "type": { - "option": "u32" - } - }, - { - "name": "fuelBoostMaker", - "type": { - "option": "u32" - } - }, - { - "name": "fuelBoostInsurance", - "type": { - "option": "u32" - } - } - ] - }, { "name": "updateAdmin", "accounts": [ @@ -6751,27 +6790,6 @@ } ] }, - { - "name": "updateWhitelistMint", - "accounts": [ - { - "name": "admin", - "isMut": false, - "isSigner": true - }, - { - "name": "state", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "whitelistMint", - "type": "publicKey" - } - ] - }, { "name": "updateDiscountMint", "accounts": [ @@ -7543,107 +7561,1702 @@ "type": "bool" } ] - } - ], - "accounts": [ - { - "name": "OpenbookV2FulfillmentConfig", - "type": { - "kind": "struct", - "fields": [ - { - "name": "pubkey", - "type": "publicKey" - }, - { - "name": "openbookV2ProgramId", - "type": "publicKey" - }, - { - "name": "openbookV2Market", - "type": "publicKey" - }, - { - "name": "openbookV2MarketAuthority", - "type": "publicKey" - }, - { - "name": "openbookV2EventHeap", - "type": "publicKey" - }, - { - "name": "openbookV2Bids", - "type": "publicKey" - }, - { - "name": "openbookV2Asks", - "type": "publicKey" - }, - { - "name": "openbookV2BaseVault", - "type": "publicKey" - }, - { - "name": "openbookV2QuoteVault", - "type": "publicKey" - }, - { - "name": "marketIndex", - "type": "u16" - }, - { - "name": "fulfillmentType", - "type": { - "defined": "SpotFulfillmentType" - } - }, - { - "name": "status", - "type": { - "defined": "SpotFulfillmentConfigStatus" - } - }, - { - "name": "padding", - "type": { - "array": ["u8", 4] - } - } - ] - } }, { - "name": "PhoenixV1FulfillmentConfig", - "type": { - "kind": "struct", - "fields": [ - { - "name": "pubkey", - "type": "publicKey" - }, - { - "name": "phoenixProgramId", - "type": "publicKey" - }, - { - "name": "phoenixLogAuthority", - "type": "publicKey" - }, - { - "name": "phoenixMarket", - "type": "publicKey" - }, - { - "name": "phoenixBaseVault", - "type": "publicKey" - }, - { - "name": "phoenixQuoteVault", - "type": "publicKey" - }, - { - "name": "marketIndex", - "type": "u16" + "name": "initializeLpPool", + "accounts": [ + { + "name": "admin", + "isMut": true, + "isSigner": true + }, + { + "name": "lpPool", + "isMut": true, + "isSigner": false + }, + { + "name": "mint", + "isMut": false, + "isSigner": false + }, + { + "name": "lpPoolTokenVault", + "isMut": true, + "isSigner": false + }, + { + "name": "ammConstituentMapping", + "isMut": true, + "isSigner": false + }, + { + "name": "constituentTargetBase", + "isMut": true, + "isSigner": false + }, + { + "name": "constituentCorrelations", + "isMut": true, + "isSigner": false + }, + { + "name": "state", + "isMut": false, + "isSigner": false + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "rent", + "isMut": false, + "isSigner": false + }, + { + "name": "systemProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "lpPoolId", + "type": "u8" + }, + { + "name": "minMintFee", + "type": "i64" + }, + { + "name": "maxAum", + "type": "u128" + }, + { + "name": "maxSettleQuoteAmountPerMarket", + "type": "u64" + }, + { + "name": "whitelistMint", + "type": "publicKey" + } + ] + }, + { + "name": "updateFeatureBitFlagsSettleLpPool", + "accounts": [ + { + "name": "admin", + "isMut": false, + "isSigner": true + }, + { + "name": "state", + "isMut": true, + "isSigner": false + } + ], + "args": [ + { + "name": "enable", + "type": "bool" + } + ] + }, + { + "name": "updateFeatureBitFlagsSwapLpPool", + "accounts": [ + { + "name": "admin", + "isMut": false, + "isSigner": true + }, + { + "name": "state", + "isMut": true, + "isSigner": false + } + ], + "args": [ + { + "name": "enable", + "type": "bool" + } + ] + }, + { + "name": "updateFeatureBitFlagsMintRedeemLpPool", + "accounts": [ + { + "name": "admin", + "isMut": false, + "isSigner": true + }, + { + "name": "state", + "isMut": true, + "isSigner": false + } + ], + "args": [ + { + "name": "enable", + "type": "bool" + } + ] + }, + { + "name": "initializeConstituent", + "accounts": [ + { + "name": "state", + "isMut": false, + "isSigner": false + }, + { + "name": "admin", + "isMut": true, + "isSigner": true + }, + { + "name": "lpPool", + "isMut": true, + "isSigner": false + }, + { + "name": "constituentTargetBase", + "isMut": true, + "isSigner": false + }, + { + "name": "constituentCorrelations", + "isMut": true, + "isSigner": false + }, + { + "name": "constituent", + "isMut": true, + "isSigner": false + }, + { + "name": "spotMarket", + "isMut": false, + "isSigner": false + }, + { + "name": "spotMarketMint", + "isMut": false, + "isSigner": false + }, + { + "name": "constituentVault", + "isMut": true, + "isSigner": false + }, + { + "name": "rent", + "isMut": false, + "isSigner": false + }, + { + "name": "systemProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "spotMarketIndex", + "type": "u16" + }, + { + "name": "decimals", + "type": "u8" + }, + { + "name": "maxWeightDeviation", + "type": "i64" + }, + { + "name": "swapFeeMin", + "type": "i64" + }, + { + "name": "swapFeeMax", + "type": "i64" + }, + { + "name": "maxBorrowTokenAmount", + "type": "u64" + }, + { + "name": "oracleStalenessThreshold", + "type": "u64" + }, + { + "name": "costToTrade", + "type": "i32" + }, + { + "name": "constituentDerivativeIndex", + "type": { + "option": "i16" + } + }, + { + "name": "constituentDerivativeDepegThreshold", + "type": "u64" + }, + { + "name": "derivativeWeight", + "type": "u64" + }, + { + "name": "volatility", + "type": "u64" + }, + { + "name": "gammaExecution", + "type": "u8" + }, + { + "name": "gammaInventory", + "type": "u8" + }, + { + "name": "xi", + "type": "u8" + }, + { + "name": "newConstituentCorrelations", + "type": { + "vec": "i64" + } + } + ] + }, + { + "name": "updateConstituentStatus", + "accounts": [ + { + "name": "admin", + "isMut": true, + "isSigner": true + }, + { + "name": "state", + "isMut": false, + "isSigner": false + }, + { + "name": "constituent", + "isMut": true, + "isSigner": false + } + ], + "args": [ + { + "name": "newStatus", + "type": "u8" + } + ] + }, + { + "name": "updateConstituentPausedOperations", + "accounts": [ + { + "name": "admin", + "isMut": true, + "isSigner": true + }, + { + "name": "state", + "isMut": false, + "isSigner": false + }, + { + "name": "constituent", + "isMut": true, + "isSigner": false + } + ], + "args": [ + { + "name": "pausedOperations", + "type": "u8" + } + ] + }, + { + "name": "updateConstituentParams", + "accounts": [ + { + "name": "lpPool", + "isMut": false, + "isSigner": false + }, + { + "name": "constituentTargetBase", + "isMut": true, + "isSigner": false + }, + { + "name": "admin", + "isMut": true, + "isSigner": true + }, + { + "name": "state", + "isMut": false, + "isSigner": false + }, + { + "name": "constituent", + "isMut": true, + "isSigner": false + } + ], + "args": [ + { + "name": "constituentParams", + "type": { + "defined": "ConstituentParams" + } + } + ] + }, + { + "name": "updateLpPoolParams", + "accounts": [ + { + "name": "lpPool", + "isMut": true, + "isSigner": false + }, + { + "name": "admin", + "isMut": true, + "isSigner": true + }, + { + "name": "state", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "lpPoolParams", + "type": { + "defined": "LpPoolParams" + } + } + ] + }, + { + "name": "addAmmConstituentMappingData", + "accounts": [ + { + "name": "admin", + "isMut": true, + "isSigner": true + }, + { + "name": "lpPool", + "isMut": false, + "isSigner": false + }, + { + "name": "ammConstituentMapping", + "isMut": true, + "isSigner": false + }, + { + "name": "constituentTargetBase", + "isMut": true, + "isSigner": false + }, + { + "name": "state", + "isMut": false, + "isSigner": false + }, + { + "name": "systemProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "ammConstituentMappingData", + "type": { + "vec": { + "defined": "AddAmmConstituentMappingDatum" + } + } + } + ] + }, + { + "name": "updateAmmConstituentMappingData", + "accounts": [ + { + "name": "admin", + "isMut": true, + "isSigner": true + }, + { + "name": "lpPool", + "isMut": false, + "isSigner": false + }, + { + "name": "ammConstituentMapping", + "isMut": true, + "isSigner": false + }, + { + "name": "systemProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "state", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "ammConstituentMappingData", + "type": { + "vec": { + "defined": "AddAmmConstituentMappingDatum" + } + } + } + ] + }, + { + "name": "removeAmmConstituentMappingData", + "accounts": [ + { + "name": "admin", + "isMut": true, + "isSigner": true + }, + { + "name": "lpPool", + "isMut": false, + "isSigner": false + }, + { + "name": "ammConstituentMapping", + "isMut": true, + "isSigner": false + }, + { + "name": "systemProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "state", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "perpMarketIndex", + "type": "u16" + }, + { + "name": "constituentIndex", + "type": "u16" + } + ] + }, + { + "name": "updateConstituentCorrelationData", + "accounts": [ + { + "name": "admin", + "isMut": true, + "isSigner": true + }, + { + "name": "lpPool", + "isMut": false, + "isSigner": false + }, + { + "name": "constituentCorrelations", + "isMut": true, + "isSigner": false + }, + { + "name": "state", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "index1", + "type": "u16" + }, + { + "name": "index2", + "type": "u16" + }, + { + "name": "correlation", + "type": "i64" + } + ] + }, + { + "name": "updateLpConstituentTargetBase", + "accounts": [ + { + "name": "state", + "isMut": false, + "isSigner": false + }, + { + "name": "keeper", + "isMut": true, + "isSigner": true + }, + { + "name": "ammConstituentMapping", + "isMut": false, + "isSigner": false + }, + { + "name": "constituentTargetBase", + "isMut": true, + "isSigner": false + }, + { + "name": "ammCache", + "isMut": false, + "isSigner": false + }, + { + "name": "lpPool", + "isMut": false, + "isSigner": false + } + ], + "args": [] + }, + { + "name": "updateLpPoolAum", + "accounts": [ + { + "name": "state", + "isMut": false, + "isSigner": false + }, + { + "name": "keeper", + "isMut": true, + "isSigner": true + }, + { + "name": "lpPool", + "isMut": true, + "isSigner": false + }, + { + "name": "constituentTargetBase", + "isMut": true, + "isSigner": false + }, + { + "name": "ammCache", + "isMut": true, + "isSigner": false + } + ], + "args": [] + }, + { + "name": "updateAmmCache", + "accounts": [ + { + "name": "keeper", + "isMut": true, + "isSigner": true + }, + { + "name": "state", + "isMut": false, + "isSigner": false + }, + { + "name": "ammCache", + "isMut": true, + "isSigner": false + }, + { + "name": "quoteMarket", + "isMut": false, + "isSigner": false + } + ], + "args": [] + }, + { + "name": "overrideAmmCacheInfo", + "accounts": [ + { + "name": "state", + "isMut": true, + "isSigner": false + }, + { + "name": "admin", + "isMut": false, + "isSigner": true + }, + { + "name": "ammCache", + "isMut": true, + "isSigner": false + } + ], + "args": [ + { + "name": "marketIndex", + "type": "u16" + }, + { + "name": "overrideParams", + "type": { + "defined": "OverrideAmmCacheParams" + } + } + ] + }, + { + "name": "lpPoolSwap", + "accounts": [ + { + "name": "state", + "isMut": false, + "isSigner": false + }, + { + "name": "lpPool", + "isMut": false, + "isSigner": false + }, + { + "name": "constituentTargetBase", + "isMut": false, + "isSigner": false + }, + { + "name": "constituentCorrelations", + "isMut": false, + "isSigner": false + }, + { + "name": "constituentInTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "constituentOutTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "userInTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "userOutTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "inConstituent", + "isMut": true, + "isSigner": false + }, + { + "name": "outConstituent", + "isMut": true, + "isSigner": false + }, + { + "name": "inMarketMint", + "isMut": false, + "isSigner": false + }, + { + "name": "outMarketMint", + "isMut": false, + "isSigner": false + }, + { + "name": "authority", + "isMut": false, + "isSigner": true + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "inMarketIndex", + "type": "u16" + }, + { + "name": "outMarketIndex", + "type": "u16" + }, + { + "name": "inAmount", + "type": "u64" + }, + { + "name": "minOutAmount", + "type": "u64" + } + ] + }, + { + "name": "viewLpPoolSwapFees", + "accounts": [ + { + "name": "driftSigner", + "isMut": false, + "isSigner": false + }, + { + "name": "state", + "isMut": false, + "isSigner": false + }, + { + "name": "lpPool", + "isMut": false, + "isSigner": false + }, + { + "name": "constituentTargetBase", + "isMut": false, + "isSigner": false + }, + { + "name": "constituentCorrelations", + "isMut": false, + "isSigner": false + }, + { + "name": "constituentInTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "constituentOutTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "inConstituent", + "isMut": true, + "isSigner": false + }, + { + "name": "outConstituent", + "isMut": true, + "isSigner": false + }, + { + "name": "authority", + "isMut": false, + "isSigner": true + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "inMarketIndex", + "type": "u16" + }, + { + "name": "outMarketIndex", + "type": "u16" + }, + { + "name": "inAmount", + "type": "u64" + }, + { + "name": "inTargetWeight", + "type": "i64" + }, + { + "name": "outTargetWeight", + "type": "i64" + } + ] + }, + { + "name": "lpPoolAddLiquidity", + "accounts": [ + { + "name": "state", + "isMut": false, + "isSigner": false + }, + { + "name": "lpPool", + "isMut": true, + "isSigner": false + }, + { + "name": "authority", + "isMut": false, + "isSigner": true + }, + { + "name": "inMarketMint", + "isMut": false, + "isSigner": false + }, + { + "name": "inConstituent", + "isMut": true, + "isSigner": false + }, + { + "name": "userInTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "constituentInTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "userLpTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "lpMint", + "isMut": true, + "isSigner": false + }, + { + "name": "constituentTargetBase", + "isMut": false, + "isSigner": false + }, + { + "name": "lpPoolTokenVault", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "inMarketIndex", + "type": "u16" + }, + { + "name": "inAmount", + "type": "u128" + }, + { + "name": "minMintAmount", + "type": "u64" + } + ] + }, + { + "name": "lpPoolRemoveLiquidity", + "accounts": [ + { + "name": "state", + "isMut": false, + "isSigner": false + }, + { + "name": "driftSigner", + "isMut": false, + "isSigner": false + }, + { + "name": "lpPool", + "isMut": true, + "isSigner": false + }, + { + "name": "authority", + "isMut": false, + "isSigner": true + }, + { + "name": "outMarketMint", + "isMut": false, + "isSigner": false + }, + { + "name": "outConstituent", + "isMut": true, + "isSigner": false + }, + { + "name": "userOutTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "constituentOutTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "userLpTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "spotMarketTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "lpMint", + "isMut": true, + "isSigner": false + }, + { + "name": "constituentTargetBase", + "isMut": false, + "isSigner": false + }, + { + "name": "lpPoolTokenVault", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "ammCache", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "inMarketIndex", + "type": "u16" + }, + { + "name": "inAmount", + "type": "u64" + }, + { + "name": "minOutAmount", + "type": "u128" + } + ] + }, + { + "name": "viewLpPoolAddLiquidityFees", + "accounts": [ + { + "name": "state", + "isMut": false, + "isSigner": false + }, + { + "name": "lpPool", + "isMut": false, + "isSigner": false + }, + { + "name": "authority", + "isMut": false, + "isSigner": true + }, + { + "name": "inMarketMint", + "isMut": false, + "isSigner": false + }, + { + "name": "inConstituent", + "isMut": false, + "isSigner": false + }, + { + "name": "lpMint", + "isMut": false, + "isSigner": false + }, + { + "name": "constituentTargetBase", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "inMarketIndex", + "type": "u16" + }, + { + "name": "inAmount", + "type": "u128" + } + ] + }, + { + "name": "viewLpPoolRemoveLiquidityFees", + "accounts": [ + { + "name": "state", + "isMut": false, + "isSigner": false + }, + { + "name": "lpPool", + "isMut": false, + "isSigner": false + }, + { + "name": "authority", + "isMut": false, + "isSigner": true + }, + { + "name": "outMarketMint", + "isMut": false, + "isSigner": false + }, + { + "name": "outConstituent", + "isMut": false, + "isSigner": false + }, + { + "name": "lpMint", + "isMut": false, + "isSigner": false + }, + { + "name": "constituentTargetBase", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "inMarketIndex", + "type": "u16" + }, + { + "name": "inAmount", + "type": "u64" + } + ] + }, + { + "name": "beginLpSwap", + "accounts": [ + { + "name": "state", + "isMut": false, + "isSigner": false + }, + { + "name": "admin", + "isMut": true, + "isSigner": true + }, + { + "name": "signerOutTokenAccount", + "isMut": true, + "isSigner": false, + "docs": ["Signer token accounts"] + }, + { + "name": "signerInTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "constituentOutTokenAccount", + "isMut": true, + "isSigner": false, + "docs": ["Constituent token accounts"] + }, + { + "name": "constituentInTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "outConstituent", + "isMut": true, + "isSigner": false, + "docs": ["Constituents"] + }, + { + "name": "inConstituent", + "isMut": true, + "isSigner": false + }, + { + "name": "lpPool", + "isMut": false, + "isSigner": false + }, + { + "name": "instructions", + "isMut": false, + "isSigner": false, + "docs": [ + "Instructions Sysvar for instruction introspection" + ] + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "inMarketIndex", + "type": "u16" + }, + { + "name": "outMarketIndex", + "type": "u16" + }, + { + "name": "amountIn", + "type": "u64" + } + ] + }, + { + "name": "endLpSwap", + "accounts": [ + { + "name": "state", + "isMut": false, + "isSigner": false + }, + { + "name": "admin", + "isMut": true, + "isSigner": true + }, + { + "name": "signerOutTokenAccount", + "isMut": true, + "isSigner": false, + "docs": ["Signer token accounts"] + }, + { + "name": "signerInTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "constituentOutTokenAccount", + "isMut": true, + "isSigner": false, + "docs": ["Constituent token accounts"] + }, + { + "name": "constituentInTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "outConstituent", + "isMut": true, + "isSigner": false, + "docs": ["Constituents"] + }, + { + "name": "inConstituent", + "isMut": true, + "isSigner": false + }, + { + "name": "lpPool", + "isMut": false, + "isSigner": false + }, + { + "name": "instructions", + "isMut": false, + "isSigner": false, + "docs": [ + "Instructions Sysvar for instruction introspection" + ] + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "inMarketIndex", + "type": "u16" + }, + { + "name": "outMarketIndex", + "type": "u16" + } + ] + }, + { + "name": "updateConstituentOracleInfo", + "accounts": [ + { + "name": "state", + "isMut": false, + "isSigner": false + }, + { + "name": "keeper", + "isMut": true, + "isSigner": true + }, + { + "name": "constituent", + "isMut": true, + "isSigner": false + }, + { + "name": "spotMarket", + "isMut": false, + "isSigner": false + }, + { + "name": "oracle", + "isMut": false, + "isSigner": false + } + ], + "args": [] + }, + { + "name": "depositToProgramVault", + "accounts": [ + { + "name": "state", + "isMut": false, + "isSigner": false + }, + { + "name": "admin", + "isMut": true, + "isSigner": true + }, + { + "name": "constituent", + "isMut": true, + "isSigner": false + }, + { + "name": "constituentTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "spotMarket", + "isMut": true, + "isSigner": false + }, + { + "name": "spotMarketVault", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "mint", + "isMut": false, + "isSigner": false + }, + { + "name": "oracle", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "amount", + "type": "u64" + } + ] + }, + { + "name": "withdrawFromProgramVault", + "accounts": [ + { + "name": "state", + "isMut": false, + "isSigner": false + }, + { + "name": "admin", + "isMut": true, + "isSigner": true + }, + { + "name": "driftSigner", + "isMut": false, + "isSigner": false + }, + { + "name": "constituent", + "isMut": true, + "isSigner": false + }, + { + "name": "constituentTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "spotMarket", + "isMut": true, + "isSigner": false + }, + { + "name": "spotMarketVault", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "mint", + "isMut": false, + "isSigner": false + }, + { + "name": "oracle", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "amount", + "type": "u64" + } + ] + }, + { + "name": "settlePerpToLpPool", + "accounts": [ + { + "name": "state", + "isMut": false, + "isSigner": false + }, + { + "name": "lpPool", + "isMut": true, + "isSigner": false + }, + { + "name": "keeper", + "isMut": true, + "isSigner": true + }, + { + "name": "ammCache", + "isMut": true, + "isSigner": false + }, + { + "name": "quoteMarket", + "isMut": true, + "isSigner": false + }, + { + "name": "constituent", + "isMut": true, + "isSigner": false + }, + { + "name": "constituentQuoteTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "quoteTokenVault", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "driftSigner", + "isMut": false, + "isSigner": false + } + ], + "args": [] + } + ], + "accounts": [ + { + "name": "AmmCache", + "type": { + "kind": "struct", + "fields": [ + { + "name": "bump", + "type": "u8" + }, + { + "name": "padding", + "type": { + "array": ["u8", 3] + } + }, + { + "name": "cache", + "type": { + "vec": { + "defined": "CacheInfo" + } + } + } + ] + } + }, + { + "name": "OpenbookV2FulfillmentConfig", + "type": { + "kind": "struct", + "fields": [ + { + "name": "pubkey", + "type": "publicKey" + }, + { + "name": "openbookV2ProgramId", + "type": "publicKey" + }, + { + "name": "openbookV2Market", + "type": "publicKey" + }, + { + "name": "openbookV2MarketAuthority", + "type": "publicKey" + }, + { + "name": "openbookV2EventHeap", + "type": "publicKey" + }, + { + "name": "openbookV2Bids", + "type": "publicKey" + }, + { + "name": "openbookV2Asks", + "type": "publicKey" + }, + { + "name": "openbookV2BaseVault", + "type": "publicKey" + }, + { + "name": "openbookV2QuoteVault", + "type": "publicKey" + }, + { + "name": "marketIndex", + "type": "u16" + }, + { + "name": "fulfillmentType", + "type": { + "defined": "SpotFulfillmentType" + } + }, + { + "name": "status", + "type": { + "defined": "SpotFulfillmentConfigStatus" + } + }, + { + "name": "padding", + "type": { + "array": ["u8", 4] + } + } + ] + } + }, + { + "name": "PhoenixV1FulfillmentConfig", + "type": { + "kind": "struct", + "fields": [ + { + "name": "pubkey", + "type": "publicKey" + }, + { + "name": "phoenixProgramId", + "type": "publicKey" + }, + { + "name": "phoenixLogAuthority", + "type": "publicKey" + }, + { + "name": "phoenixMarket", + "type": "publicKey" + }, + { + "name": "phoenixBaseVault", + "type": "publicKey" + }, + { + "name": "phoenixQuoteVault", + "type": "publicKey" + }, + { + "name": "marketIndex", + "type": "u16" + }, + { + "name": "fulfillmentType", + "type": { + "defined": "SpotFulfillmentType" + } + }, + { + "name": "status", + "type": { + "defined": "SpotFulfillmentConfigStatus" + } + }, + { + "name": "padding", + "type": { + "array": ["u8", 4] + } + } + ] + } + }, + { + "name": "SerumV3FulfillmentConfig", + "type": { + "kind": "struct", + "fields": [ + { + "name": "pubkey", + "type": "publicKey" + }, + { + "name": "serumProgramId", + "type": "publicKey" + }, + { + "name": "serumMarket", + "type": "publicKey" + }, + { + "name": "serumRequestQueue", + "type": "publicKey" + }, + { + "name": "serumEventQueue", + "type": "publicKey" + }, + { + "name": "serumBids", + "type": "publicKey" + }, + { + "name": "serumAsks", + "type": "publicKey" + }, + { + "name": "serumBaseVault", + "type": "publicKey" + }, + { + "name": "serumQuoteVault", + "type": "publicKey" + }, + { + "name": "serumOpenOrders", + "type": "publicKey" + }, + { + "name": "serumSignerNonce", + "type": "u64" + }, + { + "name": "marketIndex", + "type": "u16" }, { "name": "fulfillmentType", @@ -7667,185 +9280,508 @@ } }, { - "name": "SerumV3FulfillmentConfig", + "name": "HighLeverageModeConfig", + "type": { + "kind": "struct", + "fields": [ + { + "name": "maxUsers", + "type": "u32" + }, + { + "name": "currentUsers", + "type": "u32" + }, + { + "name": "reduceOnly", + "type": "u8" + }, + { + "name": "padding1", + "type": { + "array": ["u8", 3] + } + }, + { + "name": "currentMaintenanceUsers", + "type": "u32" + }, + { + "name": "padding2", + "type": { + "array": ["u8", 24] + } + } + ] + } + }, + { + "name": "IfRebalanceConfig", + "type": { + "kind": "struct", + "fields": [ + { + "name": "pubkey", + "type": "publicKey" + }, + { + "name": "totalInAmount", + "docs": ["total amount to be sold"], + "type": "u64" + }, + { + "name": "currentInAmount", + "docs": ["amount already sold"], + "type": "u64" + }, + { + "name": "currentOutAmount", + "docs": ["amount already bought"], + "type": "u64" + }, + { + "name": "currentOutAmountTransferred", + "docs": ["amount already transferred to revenue pool"], + "type": "u64" + }, + { + "name": "currentInAmountSinceLastTransfer", + "docs": ["amount already bought in epoch"], + "type": "u64" + }, + { + "name": "epochStartTs", + "docs": ["start time of epoch"], + "type": "i64" + }, + { + "name": "epochInAmount", + "docs": ["amount already bought in epoch"], + "type": "u64" + }, + { + "name": "epochMaxInAmount", + "docs": ["max amount to swap in epoch"], + "type": "u64" + }, + { + "name": "epochDuration", + "docs": ["duration of epoch"], + "type": "i64" + }, + { + "name": "outMarketIndex", + "docs": ["market index to sell"], + "type": "u16" + }, + { + "name": "inMarketIndex", + "docs": ["market index to buy"], + "type": "u16" + }, + { + "name": "maxSlippageBps", + "type": "u16" + }, + { + "name": "swapMode", + "type": "u8" + }, + { + "name": "status", + "type": "u8" + }, + { + "name": "padding2", + "type": { + "array": ["u8", 32] + } + } + ] + } + }, + { + "name": "InsuranceFundStake", + "type": { + "kind": "struct", + "fields": [ + { + "name": "authority", + "type": "publicKey" + }, + { + "name": "ifShares", + "type": "u128" + }, + { + "name": "lastWithdrawRequestShares", + "type": "u128" + }, + { + "name": "ifBase", + "type": "u128" + }, + { + "name": "lastValidTs", + "type": "i64" + }, + { + "name": "lastWithdrawRequestValue", + "type": "u64" + }, + { + "name": "lastWithdrawRequestTs", + "type": "i64" + }, + { + "name": "costBasis", + "type": "i64" + }, + { + "name": "marketIndex", + "type": "u16" + }, + { + "name": "padding", + "type": { + "array": ["u8", 14] + } + } + ] + } + }, + { + "name": "ProtocolIfSharesTransferConfig", + "type": { + "kind": "struct", + "fields": [ + { + "name": "whitelistedSigners", + "type": { + "array": ["publicKey", 4] + } + }, + { + "name": "maxTransferPerEpoch", + "type": "u128" + }, + { + "name": "currentEpochTransfer", + "type": "u128" + }, + { + "name": "nextEpochTs", + "type": "i64" + }, + { + "name": "padding", + "type": { + "array": ["u128", 8] + } + } + ] + } + }, + { + "name": "LPPool", "type": { "kind": "struct", "fields": [ { "name": "pubkey", + "docs": ["address of the vault."], + "type": "publicKey" + }, + { + "name": "mint", + "type": "publicKey" + }, + { + "name": "whitelistMint", + "type": "publicKey" + }, + { + "name": "constituentTargetBase", + "type": "publicKey" + }, + { + "name": "constituentCorrelations", "type": "publicKey" }, { - "name": "serumProgramId", - "type": "publicKey" + "name": "maxAum", + "docs": [ + "The current number of VaultConstituents in the vault, each constituent is pda(LPPool.address, constituent_index)", + "which constituent is the quote, receives revenue pool distributions. (maybe this should just be implied idx 0)", + "pub quote_constituent_index: u16,", + "QUOTE_PRECISION: Max AUM, Prohibit minting new DLP beyond this" + ], + "type": "u128" + }, + { + "name": "lastAum", + "docs": [ + "QUOTE_PRECISION: AUM of the vault in USD, updated lazily" + ], + "type": "u128" + }, + { + "name": "cumulativeQuoteSentToPerpMarkets", + "docs": [ + "QUOTE PRECISION: Cumulative quotes from settles" + ], + "type": "u128" + }, + { + "name": "cumulativeQuoteReceivedFromPerpMarkets", + "type": "u128" + }, + { + "name": "totalMintRedeemFeesPaid", + "docs": [ + "QUOTE_PRECISION: Total fees paid for minting and redeeming LP tokens" + ], + "type": "i128" + }, + { + "name": "lastAumSlot", + "docs": ["timestamp of last AUM slot"], + "type": "u64" + }, + { + "name": "maxSettleQuoteAmount", + "type": "u64" + }, + { + "name": "padding", + "docs": ["timestamp of last vAMM revenue rebalance"], + "type": "u64" + }, + { + "name": "mintRedeemId", + "docs": [ + "Every mint/redeem has a monotonically increasing id. This is the next id to use" + ], + "type": "u64" }, { - "name": "serumMarket", - "type": "publicKey" + "name": "settleId", + "type": "u64" }, { - "name": "serumRequestQueue", - "type": "publicKey" + "name": "minMintFee", + "docs": ["PERCENTAGE_PRECISION"], + "type": "i64" }, { - "name": "serumEventQueue", - "type": "publicKey" + "name": "tokenSupply", + "type": "u64" }, { - "name": "serumBids", - "type": "publicKey" + "name": "volatility", + "type": "u64" }, { - "name": "serumAsks", - "type": "publicKey" + "name": "constituents", + "type": "u16" }, { - "name": "serumBaseVault", - "type": "publicKey" + "name": "quoteConsituentIndex", + "type": "u16" }, { - "name": "serumQuoteVault", - "type": "publicKey" + "name": "bump", + "type": "u8" }, { - "name": "serumOpenOrders", - "type": "publicKey" + "name": "gammaExecution", + "type": "u8" }, { - "name": "serumSignerNonce", - "type": "u64" + "name": "xi", + "type": "u8" }, { - "name": "marketIndex", - "type": "u16" + "name": "targetOracleDelayFeeBpsPer10Slots", + "type": "u8" }, { - "name": "fulfillmentType", - "type": { - "defined": "SpotFulfillmentType" - } + "name": "targetPositionDelayFeeBpsPer10Slots", + "type": "u8" }, { - "name": "status", - "type": { - "defined": "SpotFulfillmentConfigStatus" - } + "name": "lpPoolId", + "type": "u8" }, { "name": "padding", "type": { - "array": ["u8", 4] + "array": ["u8", 174] } } ] } }, { - "name": "HighLeverageModeConfig", + "name": "Constituent", "type": { "kind": "struct", "fields": [ { - "name": "maxUsers", - "type": "u32" + "name": "pubkey", + "docs": ["address of the constituent"], + "type": "publicKey" }, { - "name": "currentUsers", - "type": "u32" + "name": "mint", + "type": "publicKey" }, { - "name": "reduceOnly", - "type": "u8" + "name": "lpPool", + "type": "publicKey" }, { - "name": "padding1", - "type": { - "array": ["u8", 3] - } + "name": "vault", + "type": "publicKey" }, { - "name": "currentMaintenanceUsers", - "type": "u32" + "name": "totalSwapFees", + "docs": [ + "total fees received by the constituent. Positive = fees received, Negative = fees paid" + ], + "type": "i128" }, { - "name": "padding2", + "name": "spotBalance", + "docs": ["spot borrow-lend balance for constituent"], "type": { - "array": ["u8", 24] + "defined": "ConstituentSpotBalance" } - } - ] - } - }, - { - "name": "IfRebalanceConfig", - "type": { - "kind": "struct", - "fields": [ + }, { - "name": "pubkey", - "type": "publicKey" + "name": "lastSpotBalanceTokenAmount", + "type": "i64" }, { - "name": "totalInAmount", - "docs": ["total amount to be sold"], + "name": "cumulativeSpotInterestAccruedTokenAmount", + "type": "i64" + }, + { + "name": "maxWeightDeviation", + "docs": [ + "max deviation from target_weight allowed for the constituent", + "precision: PERCENTAGE_PRECISION" + ], + "type": "i64" + }, + { + "name": "swapFeeMin", + "docs": [ + "min fee charged on swaps to/from this constituent", + "precision: PERCENTAGE_PRECISION" + ], + "type": "i64" + }, + { + "name": "swapFeeMax", + "docs": [ + "max fee charged on swaps to/from this constituent", + "precision: PERCENTAGE_PRECISION" + ], + "type": "i64" + }, + { + "name": "maxBorrowTokenAmount", + "docs": [ + "Max Borrow amount:", + "precision: token precision" + ], "type": "u64" }, { - "name": "currentInAmount", - "docs": ["amount already sold"], + "name": "vaultTokenBalance", + "docs": ["ata token balance in token precision"], "type": "u64" }, { - "name": "currentOutAmount", - "docs": ["amount already bought"], + "name": "lastOraclePrice", + "type": "i64" + }, + { + "name": "lastOracleSlot", "type": "u64" }, { - "name": "currentOutAmountTransferred", - "docs": ["amount already transferred to revenue pool"], + "name": "oracleStalenessThreshold", + "docs": ["Delay allowed for valid AUM calculation"], "type": "u64" }, { - "name": "currentInAmountSinceLastTransfer", - "docs": ["amount already bought in epoch"], + "name": "flashLoanInitialTokenAmount", "type": "u64" }, { - "name": "epochStartTs", - "docs": ["start time of epoch"], - "type": "i64" + "name": "nextSwapId", + "docs": [ + "Every swap to/from this constituent has a monotonically increasing id. This is the next id to use" + ], + "type": "u64" }, { - "name": "epochInAmount", - "docs": ["amount already bought in epoch"], + "name": "derivativeWeight", + "docs": [ + "percentable of derivatve weight to go to this specific derivative PERCENTAGE_PRECISION. Zero if no derivative weight" + ], "type": "u64" }, { - "name": "epochMaxInAmount", - "docs": ["max amount to swap in epoch"], + "name": "volatility", "type": "u64" }, { - "name": "epochDuration", - "docs": ["duration of epoch"], - "type": "i64" + "name": "constituentDerivativeDepegThreshold", + "type": "u64" }, { - "name": "outMarketIndex", - "docs": ["market index to sell"], - "type": "u16" + "name": "constituentDerivativeIndex", + "docs": [ + "The `constituent_index` of the parent constituent. -1 if it is a parent index", + "Example: if in a pool with SOL (parent) and dSOL (derivative),", + "SOL.constituent_index = 1, SOL.constituent_derivative_index = -1,", + "dSOL.constituent_index = 2, dSOL.constituent_derivative_index = 1" + ], + "type": "i16" }, { - "name": "inMarketIndex", - "docs": ["market index to buy"], + "name": "spotMarketIndex", "type": "u16" }, { - "name": "maxSlippageBps", + "name": "constituentIndex", "type": "u16" }, { - "name": "swapMode", + "name": "decimals", + "type": "u8" + }, + { + "name": "bump", + "type": "u8" + }, + { + "name": "vaultBump", + "type": "u8" + }, + { + "name": "gammaInventory", + "type": "u8" + }, + { + "name": "gammaExecution", + "type": "u8" + }, + { + "name": "xi", "type": "u8" }, { @@ -7853,91 +9789,101 @@ "type": "u8" }, { - "name": "padding2", + "name": "pausedOperations", + "type": "u8" + }, + { + "name": "padding", "type": { - "array": ["u8", 32] + "array": ["u8", 162] } } ] } }, { - "name": "InsuranceFundStake", + "name": "AmmConstituentMapping", "type": { "kind": "struct", "fields": [ { - "name": "authority", + "name": "lpPool", "type": "publicKey" }, { - "name": "ifShares", - "type": "u128" - }, - { - "name": "lastWithdrawRequestShares", - "type": "u128" - }, - { - "name": "ifBase", - "type": "u128" + "name": "bump", + "type": "u8" }, { - "name": "lastValidTs", - "type": "i64" + "name": "padding", + "type": { + "array": ["u8", 3] + } }, { - "name": "lastWithdrawRequestValue", - "type": "u64" - }, + "name": "weights", + "type": { + "vec": { + "defined": "AmmConstituentDatum" + } + } + } + ] + } + }, + { + "name": "ConstituentTargetBase", + "type": { + "kind": "struct", + "fields": [ { - "name": "lastWithdrawRequestTs", - "type": "i64" + "name": "lpPool", + "type": "publicKey" }, { - "name": "costBasis", - "type": "i64" + "name": "bump", + "type": "u8" }, { - "name": "marketIndex", - "type": "u16" + "name": "padding", + "type": { + "array": ["u8", 3] + } }, { - "name": "padding", + "name": "targets", "type": { - "array": ["u8", 14] + "vec": { + "defined": "TargetsDatum" + } } } ] } }, { - "name": "ProtocolIfSharesTransferConfig", + "name": "ConstituentCorrelations", "type": { "kind": "struct", "fields": [ { - "name": "whitelistedSigners", - "type": { - "array": ["publicKey", 4] - } - }, - { - "name": "maxTransferPerEpoch", - "type": "u128" + "name": "lpPool", + "type": "publicKey" }, { - "name": "currentEpochTransfer", - "type": "u128" + "name": "bump", + "type": "u8" }, { - "name": "nextEpochTs", - "type": "i64" + "name": "padding", + "type": { + "array": ["u8", 3] + } }, { - "name": "padding", + "name": "correlations", "type": { - "array": ["u128", 8] + "vec": "i64" } } ] @@ -8237,29 +10183,45 @@ "type": "u16" }, { - "name": "highLeverageMarginRatioMaintenance", - "type": "u16" + "name": "highLeverageMarginRatioMaintenance", + "type": "u16" + }, + { + "name": "protectedMakerLimitPriceDivisor", + "type": "u8" + }, + { + "name": "protectedMakerDynamicDivisor", + "type": "u8" + }, + { + "name": "lpFeeTransferScalar", + "type": "u8" }, { - "name": "protectedMakerLimitPriceDivisor", + "name": "lpStatus", "type": "u8" }, { - "name": "protectedMakerDynamicDivisor", + "name": "lpPausedOperations", "type": "u8" }, { - "name": "padding1", - "type": "u32" + "name": "lpExchangeFeeExcluscionScalar", + "type": "u8" }, { "name": "lastFillPrice", "type": "u64" }, + { + "name": "lpPoolId", + "type": "u8" + }, { "name": "padding", "type": { - "array": ["u8", 24] + "array": ["u8", 23] } } ] @@ -9068,10 +11030,14 @@ "name": "featureBitFlags", "type": "u8" }, + { + "name": "lpPoolFeatureBitFlags", + "type": "u8" + }, { "name": "padding", "type": { - "array": ["u8", 9] + "array": ["u8", 8] } } ] @@ -9502,86 +11468,391 @@ } }, { - "name": "FuelOverflow", + "name": "FuelOverflow", + "type": { + "kind": "struct", + "fields": [ + { + "name": "authority", + "docs": ["The authority of this overflow account"], + "type": "publicKey" + }, + { + "name": "fuelInsurance", + "type": "u128" + }, + { + "name": "fuelDeposits", + "type": "u128" + }, + { + "name": "fuelBorrows", + "type": "u128" + }, + { + "name": "fuelPositions", + "type": "u128" + }, + { + "name": "fuelTaker", + "type": "u128" + }, + { + "name": "fuelMaker", + "type": "u128" + }, + { + "name": "lastFuelSweepTs", + "type": "u32" + }, + { + "name": "lastResetTs", + "type": "u32" + }, + { + "name": "padding", + "type": { + "array": ["u128", 6] + } + } + ] + } + } + ], + "types": [ + { + "name": "UpdatePerpMarketSummaryStatsParams", + "type": { + "kind": "struct", + "fields": [ + { + "name": "quoteAssetAmountWithUnsettledLp", + "type": { + "option": "i64" + } + }, + { + "name": "netUnsettledFundingPnl", + "type": { + "option": "i64" + } + }, + { + "name": "updateAmmSummaryStats", + "type": { + "option": "bool" + } + }, + { + "name": "excludeTotalLiqFee", + "type": { + "option": "bool" + } + } + ] + } + }, + { + "name": "ConstituentParams", + "type": { + "kind": "struct", + "fields": [ + { + "name": "maxWeightDeviation", + "type": { + "option": "i64" + } + }, + { + "name": "swapFeeMin", + "type": { + "option": "i64" + } + }, + { + "name": "swapFeeMax", + "type": { + "option": "i64" + } + }, + { + "name": "maxBorrowTokenAmount", + "type": { + "option": "u64" + } + }, + { + "name": "oracleStalenessThreshold", + "type": { + "option": "u64" + } + }, + { + "name": "costToTradeBps", + "type": { + "option": "i32" + } + }, + { + "name": "constituentDerivativeIndex", + "type": { + "option": "i16" + } + }, + { + "name": "derivativeWeight", + "type": { + "option": "u64" + } + }, + { + "name": "volatility", + "type": { + "option": "u64" + } + }, + { + "name": "gammaExecution", + "type": { + "option": "u8" + } + }, + { + "name": "gammaInventory", + "type": { + "option": "u8" + } + }, + { + "name": "xi", + "type": { + "option": "u8" + } + } + ] + } + }, + { + "name": "LpPoolParams", + "type": { + "kind": "struct", + "fields": [ + { + "name": "maxSettleQuoteAmount", + "type": { + "option": "u64" + } + }, + { + "name": "volatility", + "type": { + "option": "u64" + } + }, + { + "name": "gammaExecution", + "type": { + "option": "u8" + } + }, + { + "name": "xi", + "type": { + "option": "u8" + } + }, + { + "name": "maxAum", + "type": { + "option": "u128" + } + }, + { + "name": "whitelistMint", + "type": { + "option": "publicKey" + } + } + ] + } + }, + { + "name": "OverrideAmmCacheParams", + "type": { + "kind": "struct", + "fields": [ + { + "name": "quoteOwedFromLpPool", + "type": { + "option": "i64" + } + }, + { + "name": "lastSettleSlot", + "type": { + "option": "u64" + } + }, + { + "name": "lastFeePoolTokenAmount", + "type": { + "option": "u128" + } + }, + { + "name": "lastNetPnlPoolTokenAmount", + "type": { + "option": "i128" + } + }, + { + "name": "ammPositionScalar", + "type": { + "option": "u8" + } + }, + { + "name": "ammInventoryLimit", + "type": { + "option": "i64" + } + } + ] + } + }, + { + "name": "AddAmmConstituentMappingDatum", + "type": { + "kind": "struct", + "fields": [ + { + "name": "constituentIndex", + "type": "u16" + }, + { + "name": "perpMarketIndex", + "type": "u16" + }, + { + "name": "weight", + "type": "i64" + } + ] + } + }, + { + "name": "CacheInfo", "type": { "kind": "struct", "fields": [ { - "name": "authority", - "docs": ["The authority of this overflow account"], + "name": "oracle", "type": "publicKey" }, { - "name": "fuelInsurance", + "name": "lastFeePoolTokenAmount", "type": "u128" }, { - "name": "fuelDeposits", - "type": "u128" + "name": "lastNetPnlPoolTokenAmount", + "type": "i128" }, { - "name": "fuelBorrows", + "name": "lastExchangeFees", "type": "u128" }, { - "name": "fuelPositions", + "name": "lastSettleAmmExFees", "type": "u128" }, { - "name": "fuelTaker", - "type": "u128" + "name": "lastSettleAmmPnl", + "type": "i128" }, { - "name": "fuelMaker", - "type": "u128" + "name": "position", + "docs": ["BASE PRECISION"], + "type": "i64" }, { - "name": "lastFuelSweepTs", - "type": "u32" + "name": "slot", + "type": "u64" }, { - "name": "lastResetTs", - "type": "u32" + "name": "lastSettleAmount", + "type": "u64" + }, + { + "name": "lastSettleSlot", + "type": "u64" + }, + { + "name": "lastSettleTs", + "type": "i64" + }, + { + "name": "quoteOwedFromLpPool", + "type": "i64" + }, + { + "name": "ammInventoryLimit", + "type": "i64" + }, + { + "name": "oraclePrice", + "type": "i64" + }, + { + "name": "oracleSlot", + "type": "u64" + }, + { + "name": "marketIndex", + "type": "u16" + }, + { + "name": "oracleSource", + "type": "u8" + }, + { + "name": "oracleValidity", + "type": "u8" + }, + { + "name": "lpStatusForPerpMarket", + "type": "u8" + }, + { + "name": "ammPositionScalar", + "type": "u8" }, { "name": "padding", "type": { - "array": ["u128", 6] + "array": ["u8", 34] } } ] } - } - ], - "types": [ + }, { - "name": "UpdatePerpMarketSummaryStatsParams", + "name": "AmmCacheFixed", "type": { "kind": "struct", "fields": [ { - "name": "quoteAssetAmountWithUnsettledLp", - "type": { - "option": "i64" - } - }, - { - "name": "netUnsettledFundingPnl", - "type": { - "option": "i64" - } + "name": "bump", + "type": "u8" }, { - "name": "updateAmmSummaryStats", + "name": "pad", "type": { - "option": "bool" + "array": ["u8", 3] } }, { - "name": "excludeTotalLiqFee", - "type": { - "option": "bool" - } + "name": "len", + "type": "u32" } ] } @@ -9740,101 +12011,289 @@ } }, { - "name": "PerpBankruptcyRecord", + "name": "PerpBankruptcyRecord", + "type": { + "kind": "struct", + "fields": [ + { + "name": "marketIndex", + "type": "u16" + }, + { + "name": "pnl", + "type": "i128" + }, + { + "name": "ifPayment", + "type": "u128" + }, + { + "name": "clawbackUser", + "type": { + "option": "publicKey" + } + }, + { + "name": "clawbackUserPayment", + "type": { + "option": "u128" + } + }, + { + "name": "cumulativeFundingRateDelta", + "type": "i128" + } + ] + } + }, + { + "name": "SpotBankruptcyRecord", + "type": { + "kind": "struct", + "fields": [ + { + "name": "marketIndex", + "type": "u16" + }, + { + "name": "borrowAmount", + "type": "u128" + }, + { + "name": "ifPayment", + "type": "u128" + }, + { + "name": "cumulativeDepositInterestDelta", + "type": "u128" + } + ] + } + }, + { + "name": "IfRebalanceConfigParams", + "type": { + "kind": "struct", + "fields": [ + { + "name": "totalInAmount", + "type": "u64" + }, + { + "name": "epochMaxInAmount", + "type": "u64" + }, + { + "name": "epochDuration", + "type": "i64" + }, + { + "name": "outMarketIndex", + "type": "u16" + }, + { + "name": "inMarketIndex", + "type": "u16" + }, + { + "name": "maxSlippageBps", + "type": "u16" + }, + { + "name": "swapMode", + "type": "u8" + }, + { + "name": "status", + "type": "u8" + } + ] + } + }, + { + "name": "ConstituentSpotBalance", + "type": { + "kind": "struct", + "fields": [ + { + "name": "scaledBalance", + "docs": [ + "The scaled balance of the position. To get the token amount, multiply by the cumulative deposit/borrow", + "interest of corresponding market.", + "precision: token precision" + ], + "type": "u128" + }, + { + "name": "cumulativeDeposits", + "docs": [ + "The cumulative deposits/borrows a user has made into a market", + "precision: token mint precision" + ], + "type": "i64" + }, + { + "name": "marketIndex", + "docs": [ + "The market index of the corresponding spot market" + ], + "type": "u16" + }, + { + "name": "balanceType", + "docs": ["Whether the position is deposit or borrow"], + "type": { + "defined": "SpotBalanceType" + } + }, + { + "name": "padding", + "type": { + "array": ["u8", 5] + } + } + ] + } + }, + { + "name": "AmmConstituentDatum", + "type": { + "kind": "struct", + "fields": [ + { + "name": "perpMarketIndex", + "type": "u16" + }, + { + "name": "constituentIndex", + "type": "u16" + }, + { + "name": "padding", + "type": { + "array": ["u8", 4] + } + }, + { + "name": "lastSlot", + "type": "u64" + }, + { + "name": "weight", + "docs": [ + "PERCENTAGE_PRECISION. The weight this constituent has on the perp market" + ], + "type": "i64" + } + ] + } + }, + { + "name": "AmmConstituentMappingFixed", "type": { "kind": "struct", "fields": [ { - "name": "marketIndex", - "type": "u16" - }, - { - "name": "pnl", - "type": "i128" - }, - { - "name": "ifPayment", - "type": "u128" + "name": "lpPool", + "type": "publicKey" }, { - "name": "clawbackUser", - "type": { - "option": "publicKey" - } + "name": "bump", + "type": "u8" }, { - "name": "clawbackUserPayment", + "name": "pad", "type": { - "option": "u128" + "array": ["u8", 3] } }, { - "name": "cumulativeFundingRateDelta", - "type": "i128" + "name": "len", + "type": "u32" } ] } }, { - "name": "SpotBankruptcyRecord", + "name": "TargetsDatum", "type": { "kind": "struct", "fields": [ { - "name": "marketIndex", - "type": "u16" + "name": "costToTradeBps", + "type": "i32" }, { - "name": "borrowAmount", - "type": "u128" + "name": "padding", + "type": { + "array": ["u8", 4] + } }, { - "name": "ifPayment", - "type": "u128" + "name": "targetBase", + "type": "i64" }, { - "name": "cumulativeDepositInterestDelta", - "type": "u128" + "name": "lastOracleSlot", + "type": "u64" + }, + { + "name": "lastPositionSlot", + "type": "u64" } ] } }, { - "name": "IfRebalanceConfigParams", + "name": "ConstituentTargetBaseFixed", "type": { "kind": "struct", "fields": [ { - "name": "totalInAmount", - "type": "u64" + "name": "lpPool", + "type": "publicKey" }, { - "name": "epochMaxInAmount", - "type": "u64" + "name": "bump", + "type": "u8" }, { - "name": "epochDuration", - "type": "i64" + "name": "pad", + "type": { + "array": ["u8", 3] + } }, { - "name": "outMarketIndex", - "type": "u16" - }, + "name": "len", + "docs": ["total elements in the flattened `data` vec"], + "type": "u32" + } + ] + } + }, + { + "name": "ConstituentCorrelationsFixed", + "type": { + "kind": "struct", + "fields": [ { - "name": "inMarketIndex", - "type": "u16" + "name": "lpPool", + "type": "publicKey" }, { - "name": "maxSlippageBps", - "type": "u16" + "name": "bump", + "type": "u8" }, { - "name": "swapMode", - "type": "u8" + "name": "pad", + "type": { + "array": ["u8", 3] + } }, { - "name": "status", - "type": "u8" + "name": "len", + "docs": ["total elements in the flattened `data` vec"], + "type": "u32" } ] } @@ -10108,6 +12567,12 @@ "type": { "option": "u16" } + }, + { + "name": "isolatedPositionDeposit", + "type": { + "option": "u64" + } } ] } @@ -10170,6 +12635,12 @@ "type": { "option": "u16" } + }, + { + "name": "isolatedPositionDeposit", + "type": { + "option": "u64" + } } ] } @@ -10944,7 +13415,7 @@ "type": "i8" }, { - "name": "takerSpeedBumpOverride", + "name": "oracleLowRiskSlotDelayOverride", "docs": [ "the override for the state.min_perp_auction_duration", "0 is no override, -1 is disable speed bump, 1-100 is literal speed bump" @@ -11938,6 +14409,23 @@ ] } }, + { + "name": "SettlementDirection", + "type": { + "kind": "enum", + "variants": [ + { + "name": "ToLpPool" + }, + { + "name": "FromLpPool" + }, + { + "name": "None" + } + ] + } + }, { "name": "MarginRequirementType", "type": { @@ -11976,7 +14464,17 @@ "name": "InsufficientDataPoints" }, { - "name": "StaleForAMM" + "name": "StaleForAMM", + "fields": [ + { + "name": "immediate", + "type": "bool" + }, + { + "name": "lowRisk", + "type": "bool" + } + ] }, { "name": "Valid" @@ -12002,7 +14500,10 @@ "name": "FillOrderMatch" }, { - "name": "FillOrderAmm" + "name": "FillOrderAmmLowRisk" + }, + { + "name": "FillOrderAmmImmediate" }, { "name": "Liquidate" @@ -12021,6 +14522,15 @@ }, { "name": "UseMMOraclePrice" + }, + { + "name": "UpdateAmmCache" + }, + { + "name": "UpdateLpPoolAum" + }, + { + "name": "LpPoolSwap" } ] } @@ -12041,6 +14551,9 @@ }, { "name": "SafeMMOracle" + }, + { + "name": "Margin" } ] } @@ -12344,6 +14857,20 @@ ] } }, + { + "name": "ConstituentStatus", + "type": { + "kind": "enum", + "variants": [ + { + "name": "ReduceOnly" + }, + { + "name": "Decommissioned" + } + ] + } + }, { "name": "MarginCalculationMode", "type": { @@ -12517,6 +15044,9 @@ }, { "name": "AmmImmediateFill" + }, + { + "name": "SettleRevPool" } ] } @@ -12564,6 +15094,37 @@ ] } }, + { + "name": "PerpLpOperation", + "type": { + "kind": "enum", + "variants": [ + { + "name": "TrackAmmRevenue" + }, + { + "name": "SettleQuoteOwed" + } + ] + } + }, + { + "name": "ConstituentLpOperation", + "type": { + "kind": "enum", + "variants": [ + { + "name": "Swap" + }, + { + "name": "Deposit" + }, + { + "name": "Withdraw" + } + ] + } + }, { "name": "MarketStatus", "type": { @@ -12599,6 +15160,23 @@ ] } }, + { + "name": "LpStatus", + "type": { + "kind": "enum", + "variants": [ + { + "name": "Uncollateralized" + }, + { + "name": "Active" + }, + { + "name": "Decommissioning" + } + ] + } + }, { "name": "ContractType", "type": { @@ -12642,23 +15220,6 @@ ] } }, - { - "name": "AMMAvailability", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Immediate" - }, - { - "name": "AfterMinDuration" - }, - { - "name": "Unavailable" - } - ] - } - }, { "name": "RevenueShareOrderBitFlag", "type": { @@ -12810,6 +15371,23 @@ ] } }, + { + "name": "LpPoolFeatureBitFlags", + "type": { + "kind": "enum", + "variants": [ + { + "name": "SettleLpPool" + }, + { + "name": "SwapLpPool" + }, + { + "name": "MintRedeemLpPool" + } + ] + } + }, { "name": "UserStatus", "type": { @@ -13163,6 +15741,18 @@ "option": "publicKey" }, "index": false + }, + { + "name": "signer", + "type": { + "option": "publicKey" + }, + "index": false + }, + { + "name": "userTokenAmountAfter", + "type": "i128", + "index": false } ] }, @@ -16493,6 +19083,106 @@ "code": 6324, "name": "UnableToLoadRevenueShareAccount", "msg": "Unable to load builder account" + }, + { + "code": 6325, + "name": "InvalidConstituent", + "msg": "Invalid Constituent" + }, + { + "code": 6326, + "name": "InvalidAmmConstituentMappingArgument", + "msg": "Invalid Amm Constituent Mapping argument" + }, + { + "code": 6327, + "name": "ConstituentNotFound", + "msg": "Constituent not found" + }, + { + "code": 6328, + "name": "ConstituentCouldNotLoad", + "msg": "Constituent could not load" + }, + { + "code": 6329, + "name": "ConstituentWrongMutability", + "msg": "Constituent wrong mutability" + }, + { + "code": 6330, + "name": "WrongNumberOfConstituents", + "msg": "Wrong number of constituents passed to instruction" + }, + { + "code": 6331, + "name": "InsufficientConstituentTokenBalance", + "msg": "Insufficient constituent token balance" + }, + { + "code": 6332, + "name": "AMMCacheStale", + "msg": "Amm Cache data too stale" + }, + { + "code": 6333, + "name": "LpPoolAumDelayed", + "msg": "LP Pool AUM not updated recently" + }, + { + "code": 6334, + "name": "ConstituentOracleStale", + "msg": "Constituent oracle is stale" + }, + { + "code": 6335, + "name": "LpInvariantFailed", + "msg": "LP Invariant failed" + }, + { + "code": 6336, + "name": "InvalidConstituentDerivativeWeights", + "msg": "Invalid constituent derivative weights" + }, + { + "code": 6337, + "name": "MaxDlpAumBreached", + "msg": "Max DLP AUM Breached" + }, + { + "code": 6338, + "name": "SettleLpPoolDisabled", + "msg": "Settle Lp Pool Disabled" + }, + { + "code": 6339, + "name": "MintRedeemLpPoolDisabled", + "msg": "Mint/Redeem Lp Pool Disabled" + }, + { + "code": 6340, + "name": "LpPoolSettleInvariantBreached", + "msg": "Settlement amount exceeded" + }, + { + "code": 6341, + "name": "InvalidConstituentOperation", + "msg": "Invalid constituent operation" + }, + { + "code": 6342, + "name": "Unauthorized", + "msg": "Unauthorized for operation" + }, + { + "code": 6343, + "name": "InvalidLpPoolId", + "msg": "Invalid Lp Pool Id for Operation" + }, + { + "code": 6344, + "name": "MarketIndexNotFoundAmmCache", + "msg": "MarketIndexNotFoundAmmCache" } ] } From 9572536d95a9291f04866ea04bc6f7fb92ca2a3f Mon Sep 17 00:00:00 2001 From: sina <20732540+SinaKhalili@users.noreply.github.com> Date: Mon, 24 Nov 2025 01:11:01 -0800 Subject: [PATCH 3/5] Revert "Update protocol, drift IDL" This reverts commit 27269f44bb7794b46e4774b45893cdf29f5b00a5. --- protocol-v2 | 2 +- src/driftpy/idl/drift.json | 3778 ++++++------------------------------ 2 files changed, 545 insertions(+), 3235 deletions(-) diff --git a/protocol-v2 b/protocol-v2 index c74d5e99..151cd424 160000 --- a/protocol-v2 +++ b/protocol-v2 @@ -1 +1 @@ -Subproject commit c74d5e992e2754e71e9cb48d67dd554c001039fc +Subproject commit 151cd42483244825bf4ee8f20ca94e65bbf263ac diff --git a/src/driftpy/idl/drift.json b/src/driftpy/idl/drift.json index 4988c33f..33cc004c 100644 --- a/src/driftpy/idl/drift.json +++ b/src/driftpy/idl/drift.json @@ -1,5 +1,5 @@ { - "version": "2.149.1", + "version": "2.142.0", "name": "drift", "instructions": [ { @@ -2008,6 +2008,32 @@ } ] }, + { + "name": "updateUserFuelBonus", + "accounts": [ + { + "name": "state", + "isMut": false, + "isSigner": false + }, + { + "name": "authority", + "isMut": false, + "isSigner": true + }, + { + "name": "user", + "isMut": true, + "isSigner": false + }, + { + "name": "userStats", + "isMut": true, + "isSigner": false + } + ], + "args": [] + }, { "name": "updateUserStatsReferrerStatus", "accounts": [ @@ -4360,122 +4386,9 @@ "type": { "array": ["u8", 32] } - }, - { - "name": "lpPoolId", - "type": "u8" } ] }, - { - "name": "initializeAmmCache", - "accounts": [ - { - "name": "admin", - "isMut": true, - "isSigner": true - }, - { - "name": "state", - "isMut": false, - "isSigner": false - }, - { - "name": "ammCache", - "isMut": true, - "isSigner": false - }, - { - "name": "rent", - "isMut": false, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "addMarketToAmmCache", - "accounts": [ - { - "name": "admin", - "isMut": true, - "isSigner": true - }, - { - "name": "state", - "isMut": false, - "isSigner": false - }, - { - "name": "ammCache", - "isMut": true, - "isSigner": false - }, - { - "name": "perpMarket", - "isMut": false, - "isSigner": false - }, - { - "name": "rent", - "isMut": false, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "deleteAmmCache", - "accounts": [ - { - "name": "admin", - "isMut": true, - "isSigner": true - }, - { - "name": "state", - "isMut": false, - "isSigner": false - }, - { - "name": "ammCache", - "isMut": true, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "updateInitialAmmCacheInfo", - "accounts": [ - { - "name": "state", - "isMut": true, - "isSigner": false - }, - { - "name": "admin", - "isMut": false, - "isSigner": true - }, - { - "name": "ammCache", - "isMut": true, - "isSigner": false - } - ], - "args": [] - }, { "name": "initializePredictionMarket", "accounts": [ @@ -4689,97 +4602,6 @@ } ] }, - { - "name": "updatePerpMarketLpPoolPausedOperations", - "accounts": [ - { - "name": "admin", - "isMut": false, - "isSigner": true - }, - { - "name": "state", - "isMut": false, - "isSigner": false - }, - { - "name": "perpMarket", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "lpPausedOperations", - "type": "u8" - } - ] - }, - { - "name": "updatePerpMarketLpPoolStatus", - "accounts": [ - { - "name": "admin", - "isMut": false, - "isSigner": true - }, - { - "name": "state", - "isMut": false, - "isSigner": false - }, - { - "name": "perpMarket", - "isMut": true, - "isSigner": false - }, - { - "name": "ammCache", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "lpStatus", - "type": "u8" - } - ] - }, - { - "name": "updatePerpMarketLpPoolFeeTransferScalar", - "accounts": [ - { - "name": "admin", - "isMut": false, - "isSigner": true - }, - { - "name": "state", - "isMut": false, - "isSigner": false - }, - { - "name": "perpMarket", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "optionalLpFeeTransferScalar", - "type": { - "option": "u8" - } - }, - { - "name": "optionalLpNetPnlTransferScalar", - "type": { - "option": "u8" - } - } - ] - }, { "name": "settleExpiredMarketPoolsToRevenuePool", "accounts": [ @@ -5239,32 +5061,6 @@ } ] }, - { - "name": "updatePerpMarketLpPoolId", - "accounts": [ - { - "name": "admin", - "isMut": false, - "isSigner": true - }, - { - "name": "state", - "isMut": false, - "isSigner": false - }, - { - "name": "perpMarket", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "lpPoolId", - "type": "u8" - } - ] - }, { "name": "updateInsuranceFundUnstakingPeriod", "accounts": [ @@ -6077,6 +5873,27 @@ } ] }, + { + "name": "updateLpCooldownTime", + "accounts": [ + { + "name": "admin", + "isMut": false, + "isSigner": true + }, + { + "name": "state", + "isMut": true, + "isSigner": false + } + ], + "args": [ + { + "name": "lpCooldownTime", + "type": "u64" + } + ] + }, { "name": "updatePerpFeeStructure", "accounts": [ @@ -6299,11 +6116,6 @@ "name": "oldOracle", "isMut": false, "isSigner": false - }, - { - "name": "ammCache", - "isMut": true, - "isSigner": false } ], "args": [ @@ -6649,6 +6461,46 @@ } ] }, + { + "name": "updatePerpMarketFuel", + "accounts": [ + { + "name": "admin", + "isMut": false, + "isSigner": true + }, + { + "name": "state", + "isMut": false, + "isSigner": false + }, + { + "name": "perpMarket", + "isMut": true, + "isSigner": false + } + ], + "args": [ + { + "name": "fuelBoostTaker", + "type": { + "option": "u8" + } + }, + { + "name": "fuelBoostMaker", + "type": { + "option": "u8" + } + }, + { + "name": "fuelBoostPosition", + "type": { + "option": "u8" + } + } + ] + }, { "name": "updatePerpMarketProtectedMakerParams", "accounts": [ @@ -6684,7 +6536,7 @@ ] }, { - "name": "updatePerpMarketOracleLowRiskSlotDelayOverride", + "name": "updatePerpMarketTakerSpeedBumpOverride", "accounts": [ { "name": "admin", @@ -6704,7 +6556,7 @@ ], "args": [ { - "name": "oracleLowRiskSlotDelayOverride", + "name": "takerSpeedBumpOverride", "type": "i8" } ] @@ -6769,6 +6621,115 @@ } ] }, + { + "name": "updateSpotMarketFuel", + "accounts": [ + { + "name": "admin", + "isMut": false, + "isSigner": true + }, + { + "name": "state", + "isMut": false, + "isSigner": false + }, + { + "name": "spotMarket", + "isMut": true, + "isSigner": false + } + ], + "args": [ + { + "name": "fuelBoostDeposits", + "type": { + "option": "u8" + } + }, + { + "name": "fuelBoostBorrows", + "type": { + "option": "u8" + } + }, + { + "name": "fuelBoostTaker", + "type": { + "option": "u8" + } + }, + { + "name": "fuelBoostMaker", + "type": { + "option": "u8" + } + }, + { + "name": "fuelBoostInsurance", + "type": { + "option": "u8" + } + } + ] + }, + { + "name": "initUserFuel", + "accounts": [ + { + "name": "admin", + "isMut": false, + "isSigner": true + }, + { + "name": "state", + "isMut": false, + "isSigner": false + }, + { + "name": "user", + "isMut": true, + "isSigner": false + }, + { + "name": "userStats", + "isMut": true, + "isSigner": false + } + ], + "args": [ + { + "name": "fuelBoostDeposits", + "type": { + "option": "i32" + } + }, + { + "name": "fuelBoostBorrows", + "type": { + "option": "u32" + } + }, + { + "name": "fuelBoostTaker", + "type": { + "option": "u32" + } + }, + { + "name": "fuelBoostMaker", + "type": { + "option": "u32" + } + }, + { + "name": "fuelBoostInsurance", + "type": { + "option": "u32" + } + } + ] + }, { "name": "updateAdmin", "accounts": [ @@ -6790,6 +6751,27 @@ } ] }, + { + "name": "updateWhitelistMint", + "accounts": [ + { + "name": "admin", + "isMut": false, + "isSigner": true + }, + { + "name": "state", + "isMut": true, + "isSigner": false + } + ], + "args": [ + { + "name": "whitelistMint", + "type": "publicKey" + } + ] + }, { "name": "updateDiscountMint", "accounts": [ @@ -7561,1762 +7543,77 @@ "type": "bool" } ] + } + ], + "accounts": [ + { + "name": "OpenbookV2FulfillmentConfig", + "type": { + "kind": "struct", + "fields": [ + { + "name": "pubkey", + "type": "publicKey" + }, + { + "name": "openbookV2ProgramId", + "type": "publicKey" + }, + { + "name": "openbookV2Market", + "type": "publicKey" + }, + { + "name": "openbookV2MarketAuthority", + "type": "publicKey" + }, + { + "name": "openbookV2EventHeap", + "type": "publicKey" + }, + { + "name": "openbookV2Bids", + "type": "publicKey" + }, + { + "name": "openbookV2Asks", + "type": "publicKey" + }, + { + "name": "openbookV2BaseVault", + "type": "publicKey" + }, + { + "name": "openbookV2QuoteVault", + "type": "publicKey" + }, + { + "name": "marketIndex", + "type": "u16" + }, + { + "name": "fulfillmentType", + "type": { + "defined": "SpotFulfillmentType" + } + }, + { + "name": "status", + "type": { + "defined": "SpotFulfillmentConfigStatus" + } + }, + { + "name": "padding", + "type": { + "array": ["u8", 4] + } + } + ] + } }, { - "name": "initializeLpPool", - "accounts": [ - { - "name": "admin", - "isMut": true, - "isSigner": true - }, - { - "name": "lpPool", - "isMut": true, - "isSigner": false - }, - { - "name": "mint", - "isMut": false, - "isSigner": false - }, - { - "name": "lpPoolTokenVault", - "isMut": true, - "isSigner": false - }, - { - "name": "ammConstituentMapping", - "isMut": true, - "isSigner": false - }, - { - "name": "constituentTargetBase", - "isMut": true, - "isSigner": false - }, - { - "name": "constituentCorrelations", - "isMut": true, - "isSigner": false - }, - { - "name": "state", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "rent", - "isMut": false, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "lpPoolId", - "type": "u8" - }, - { - "name": "minMintFee", - "type": "i64" - }, - { - "name": "maxAum", - "type": "u128" - }, - { - "name": "maxSettleQuoteAmountPerMarket", - "type": "u64" - }, - { - "name": "whitelistMint", - "type": "publicKey" - } - ] - }, - { - "name": "updateFeatureBitFlagsSettleLpPool", - "accounts": [ - { - "name": "admin", - "isMut": false, - "isSigner": true - }, - { - "name": "state", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "enable", - "type": "bool" - } - ] - }, - { - "name": "updateFeatureBitFlagsSwapLpPool", - "accounts": [ - { - "name": "admin", - "isMut": false, - "isSigner": true - }, - { - "name": "state", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "enable", - "type": "bool" - } - ] - }, - { - "name": "updateFeatureBitFlagsMintRedeemLpPool", - "accounts": [ - { - "name": "admin", - "isMut": false, - "isSigner": true - }, - { - "name": "state", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "enable", - "type": "bool" - } - ] - }, - { - "name": "initializeConstituent", - "accounts": [ - { - "name": "state", - "isMut": false, - "isSigner": false - }, - { - "name": "admin", - "isMut": true, - "isSigner": true - }, - { - "name": "lpPool", - "isMut": true, - "isSigner": false - }, - { - "name": "constituentTargetBase", - "isMut": true, - "isSigner": false - }, - { - "name": "constituentCorrelations", - "isMut": true, - "isSigner": false - }, - { - "name": "constituent", - "isMut": true, - "isSigner": false - }, - { - "name": "spotMarket", - "isMut": false, - "isSigner": false - }, - { - "name": "spotMarketMint", - "isMut": false, - "isSigner": false - }, - { - "name": "constituentVault", - "isMut": true, - "isSigner": false - }, - { - "name": "rent", - "isMut": false, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "spotMarketIndex", - "type": "u16" - }, - { - "name": "decimals", - "type": "u8" - }, - { - "name": "maxWeightDeviation", - "type": "i64" - }, - { - "name": "swapFeeMin", - "type": "i64" - }, - { - "name": "swapFeeMax", - "type": "i64" - }, - { - "name": "maxBorrowTokenAmount", - "type": "u64" - }, - { - "name": "oracleStalenessThreshold", - "type": "u64" - }, - { - "name": "costToTrade", - "type": "i32" - }, - { - "name": "constituentDerivativeIndex", - "type": { - "option": "i16" - } - }, - { - "name": "constituentDerivativeDepegThreshold", - "type": "u64" - }, - { - "name": "derivativeWeight", - "type": "u64" - }, - { - "name": "volatility", - "type": "u64" - }, - { - "name": "gammaExecution", - "type": "u8" - }, - { - "name": "gammaInventory", - "type": "u8" - }, - { - "name": "xi", - "type": "u8" - }, - { - "name": "newConstituentCorrelations", - "type": { - "vec": "i64" - } - } - ] - }, - { - "name": "updateConstituentStatus", - "accounts": [ - { - "name": "admin", - "isMut": true, - "isSigner": true - }, - { - "name": "state", - "isMut": false, - "isSigner": false - }, - { - "name": "constituent", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "newStatus", - "type": "u8" - } - ] - }, - { - "name": "updateConstituentPausedOperations", - "accounts": [ - { - "name": "admin", - "isMut": true, - "isSigner": true - }, - { - "name": "state", - "isMut": false, - "isSigner": false - }, - { - "name": "constituent", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "pausedOperations", - "type": "u8" - } - ] - }, - { - "name": "updateConstituentParams", - "accounts": [ - { - "name": "lpPool", - "isMut": false, - "isSigner": false - }, - { - "name": "constituentTargetBase", - "isMut": true, - "isSigner": false - }, - { - "name": "admin", - "isMut": true, - "isSigner": true - }, - { - "name": "state", - "isMut": false, - "isSigner": false - }, - { - "name": "constituent", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "constituentParams", - "type": { - "defined": "ConstituentParams" - } - } - ] - }, - { - "name": "updateLpPoolParams", - "accounts": [ - { - "name": "lpPool", - "isMut": true, - "isSigner": false - }, - { - "name": "admin", - "isMut": true, - "isSigner": true - }, - { - "name": "state", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "lpPoolParams", - "type": { - "defined": "LpPoolParams" - } - } - ] - }, - { - "name": "addAmmConstituentMappingData", - "accounts": [ - { - "name": "admin", - "isMut": true, - "isSigner": true - }, - { - "name": "lpPool", - "isMut": false, - "isSigner": false - }, - { - "name": "ammConstituentMapping", - "isMut": true, - "isSigner": false - }, - { - "name": "constituentTargetBase", - "isMut": true, - "isSigner": false - }, - { - "name": "state", - "isMut": false, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "ammConstituentMappingData", - "type": { - "vec": { - "defined": "AddAmmConstituentMappingDatum" - } - } - } - ] - }, - { - "name": "updateAmmConstituentMappingData", - "accounts": [ - { - "name": "admin", - "isMut": true, - "isSigner": true - }, - { - "name": "lpPool", - "isMut": false, - "isSigner": false - }, - { - "name": "ammConstituentMapping", - "isMut": true, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "state", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "ammConstituentMappingData", - "type": { - "vec": { - "defined": "AddAmmConstituentMappingDatum" - } - } - } - ] - }, - { - "name": "removeAmmConstituentMappingData", - "accounts": [ - { - "name": "admin", - "isMut": true, - "isSigner": true - }, - { - "name": "lpPool", - "isMut": false, - "isSigner": false - }, - { - "name": "ammConstituentMapping", - "isMut": true, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "state", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "perpMarketIndex", - "type": "u16" - }, - { - "name": "constituentIndex", - "type": "u16" - } - ] - }, - { - "name": "updateConstituentCorrelationData", - "accounts": [ - { - "name": "admin", - "isMut": true, - "isSigner": true - }, - { - "name": "lpPool", - "isMut": false, - "isSigner": false - }, - { - "name": "constituentCorrelations", - "isMut": true, - "isSigner": false - }, - { - "name": "state", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "index1", - "type": "u16" - }, - { - "name": "index2", - "type": "u16" - }, - { - "name": "correlation", - "type": "i64" - } - ] - }, - { - "name": "updateLpConstituentTargetBase", - "accounts": [ - { - "name": "state", - "isMut": false, - "isSigner": false - }, - { - "name": "keeper", - "isMut": true, - "isSigner": true - }, - { - "name": "ammConstituentMapping", - "isMut": false, - "isSigner": false - }, - { - "name": "constituentTargetBase", - "isMut": true, - "isSigner": false - }, - { - "name": "ammCache", - "isMut": false, - "isSigner": false - }, - { - "name": "lpPool", - "isMut": false, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "updateLpPoolAum", - "accounts": [ - { - "name": "state", - "isMut": false, - "isSigner": false - }, - { - "name": "keeper", - "isMut": true, - "isSigner": true - }, - { - "name": "lpPool", - "isMut": true, - "isSigner": false - }, - { - "name": "constituentTargetBase", - "isMut": true, - "isSigner": false - }, - { - "name": "ammCache", - "isMut": true, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "updateAmmCache", - "accounts": [ - { - "name": "keeper", - "isMut": true, - "isSigner": true - }, - { - "name": "state", - "isMut": false, - "isSigner": false - }, - { - "name": "ammCache", - "isMut": true, - "isSigner": false - }, - { - "name": "quoteMarket", - "isMut": false, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "overrideAmmCacheInfo", - "accounts": [ - { - "name": "state", - "isMut": true, - "isSigner": false - }, - { - "name": "admin", - "isMut": false, - "isSigner": true - }, - { - "name": "ammCache", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "marketIndex", - "type": "u16" - }, - { - "name": "overrideParams", - "type": { - "defined": "OverrideAmmCacheParams" - } - } - ] - }, - { - "name": "lpPoolSwap", - "accounts": [ - { - "name": "state", - "isMut": false, - "isSigner": false - }, - { - "name": "lpPool", - "isMut": false, - "isSigner": false - }, - { - "name": "constituentTargetBase", - "isMut": false, - "isSigner": false - }, - { - "name": "constituentCorrelations", - "isMut": false, - "isSigner": false - }, - { - "name": "constituentInTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "constituentOutTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "userInTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "userOutTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "inConstituent", - "isMut": true, - "isSigner": false - }, - { - "name": "outConstituent", - "isMut": true, - "isSigner": false - }, - { - "name": "inMarketMint", - "isMut": false, - "isSigner": false - }, - { - "name": "outMarketMint", - "isMut": false, - "isSigner": false - }, - { - "name": "authority", - "isMut": false, - "isSigner": true - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "inMarketIndex", - "type": "u16" - }, - { - "name": "outMarketIndex", - "type": "u16" - }, - { - "name": "inAmount", - "type": "u64" - }, - { - "name": "minOutAmount", - "type": "u64" - } - ] - }, - { - "name": "viewLpPoolSwapFees", - "accounts": [ - { - "name": "driftSigner", - "isMut": false, - "isSigner": false - }, - { - "name": "state", - "isMut": false, - "isSigner": false - }, - { - "name": "lpPool", - "isMut": false, - "isSigner": false - }, - { - "name": "constituentTargetBase", - "isMut": false, - "isSigner": false - }, - { - "name": "constituentCorrelations", - "isMut": false, - "isSigner": false - }, - { - "name": "constituentInTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "constituentOutTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "inConstituent", - "isMut": true, - "isSigner": false - }, - { - "name": "outConstituent", - "isMut": true, - "isSigner": false - }, - { - "name": "authority", - "isMut": false, - "isSigner": true - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "inMarketIndex", - "type": "u16" - }, - { - "name": "outMarketIndex", - "type": "u16" - }, - { - "name": "inAmount", - "type": "u64" - }, - { - "name": "inTargetWeight", - "type": "i64" - }, - { - "name": "outTargetWeight", - "type": "i64" - } - ] - }, - { - "name": "lpPoolAddLiquidity", - "accounts": [ - { - "name": "state", - "isMut": false, - "isSigner": false - }, - { - "name": "lpPool", - "isMut": true, - "isSigner": false - }, - { - "name": "authority", - "isMut": false, - "isSigner": true - }, - { - "name": "inMarketMint", - "isMut": false, - "isSigner": false - }, - { - "name": "inConstituent", - "isMut": true, - "isSigner": false - }, - { - "name": "userInTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "constituentInTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "userLpTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "lpMint", - "isMut": true, - "isSigner": false - }, - { - "name": "constituentTargetBase", - "isMut": false, - "isSigner": false - }, - { - "name": "lpPoolTokenVault", - "isMut": true, - "isSigner": false - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "inMarketIndex", - "type": "u16" - }, - { - "name": "inAmount", - "type": "u128" - }, - { - "name": "minMintAmount", - "type": "u64" - } - ] - }, - { - "name": "lpPoolRemoveLiquidity", - "accounts": [ - { - "name": "state", - "isMut": false, - "isSigner": false - }, - { - "name": "driftSigner", - "isMut": false, - "isSigner": false - }, - { - "name": "lpPool", - "isMut": true, - "isSigner": false - }, - { - "name": "authority", - "isMut": false, - "isSigner": true - }, - { - "name": "outMarketMint", - "isMut": false, - "isSigner": false - }, - { - "name": "outConstituent", - "isMut": true, - "isSigner": false - }, - { - "name": "userOutTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "constituentOutTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "userLpTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "spotMarketTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "lpMint", - "isMut": true, - "isSigner": false - }, - { - "name": "constituentTargetBase", - "isMut": false, - "isSigner": false - }, - { - "name": "lpPoolTokenVault", - "isMut": true, - "isSigner": false - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "ammCache", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "inMarketIndex", - "type": "u16" - }, - { - "name": "inAmount", - "type": "u64" - }, - { - "name": "minOutAmount", - "type": "u128" - } - ] - }, - { - "name": "viewLpPoolAddLiquidityFees", - "accounts": [ - { - "name": "state", - "isMut": false, - "isSigner": false - }, - { - "name": "lpPool", - "isMut": false, - "isSigner": false - }, - { - "name": "authority", - "isMut": false, - "isSigner": true - }, - { - "name": "inMarketMint", - "isMut": false, - "isSigner": false - }, - { - "name": "inConstituent", - "isMut": false, - "isSigner": false - }, - { - "name": "lpMint", - "isMut": false, - "isSigner": false - }, - { - "name": "constituentTargetBase", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "inMarketIndex", - "type": "u16" - }, - { - "name": "inAmount", - "type": "u128" - } - ] - }, - { - "name": "viewLpPoolRemoveLiquidityFees", - "accounts": [ - { - "name": "state", - "isMut": false, - "isSigner": false - }, - { - "name": "lpPool", - "isMut": false, - "isSigner": false - }, - { - "name": "authority", - "isMut": false, - "isSigner": true - }, - { - "name": "outMarketMint", - "isMut": false, - "isSigner": false - }, - { - "name": "outConstituent", - "isMut": false, - "isSigner": false - }, - { - "name": "lpMint", - "isMut": false, - "isSigner": false - }, - { - "name": "constituentTargetBase", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "inMarketIndex", - "type": "u16" - }, - { - "name": "inAmount", - "type": "u64" - } - ] - }, - { - "name": "beginLpSwap", - "accounts": [ - { - "name": "state", - "isMut": false, - "isSigner": false - }, - { - "name": "admin", - "isMut": true, - "isSigner": true - }, - { - "name": "signerOutTokenAccount", - "isMut": true, - "isSigner": false, - "docs": ["Signer token accounts"] - }, - { - "name": "signerInTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "constituentOutTokenAccount", - "isMut": true, - "isSigner": false, - "docs": ["Constituent token accounts"] - }, - { - "name": "constituentInTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "outConstituent", - "isMut": true, - "isSigner": false, - "docs": ["Constituents"] - }, - { - "name": "inConstituent", - "isMut": true, - "isSigner": false - }, - { - "name": "lpPool", - "isMut": false, - "isSigner": false - }, - { - "name": "instructions", - "isMut": false, - "isSigner": false, - "docs": [ - "Instructions Sysvar for instruction introspection" - ] - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "inMarketIndex", - "type": "u16" - }, - { - "name": "outMarketIndex", - "type": "u16" - }, - { - "name": "amountIn", - "type": "u64" - } - ] - }, - { - "name": "endLpSwap", - "accounts": [ - { - "name": "state", - "isMut": false, - "isSigner": false - }, - { - "name": "admin", - "isMut": true, - "isSigner": true - }, - { - "name": "signerOutTokenAccount", - "isMut": true, - "isSigner": false, - "docs": ["Signer token accounts"] - }, - { - "name": "signerInTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "constituentOutTokenAccount", - "isMut": true, - "isSigner": false, - "docs": ["Constituent token accounts"] - }, - { - "name": "constituentInTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "outConstituent", - "isMut": true, - "isSigner": false, - "docs": ["Constituents"] - }, - { - "name": "inConstituent", - "isMut": true, - "isSigner": false - }, - { - "name": "lpPool", - "isMut": false, - "isSigner": false - }, - { - "name": "instructions", - "isMut": false, - "isSigner": false, - "docs": [ - "Instructions Sysvar for instruction introspection" - ] - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "inMarketIndex", - "type": "u16" - }, - { - "name": "outMarketIndex", - "type": "u16" - } - ] - }, - { - "name": "updateConstituentOracleInfo", - "accounts": [ - { - "name": "state", - "isMut": false, - "isSigner": false - }, - { - "name": "keeper", - "isMut": true, - "isSigner": true - }, - { - "name": "constituent", - "isMut": true, - "isSigner": false - }, - { - "name": "spotMarket", - "isMut": false, - "isSigner": false - }, - { - "name": "oracle", - "isMut": false, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "depositToProgramVault", - "accounts": [ - { - "name": "state", - "isMut": false, - "isSigner": false - }, - { - "name": "admin", - "isMut": true, - "isSigner": true - }, - { - "name": "constituent", - "isMut": true, - "isSigner": false - }, - { - "name": "constituentTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "spotMarket", - "isMut": true, - "isSigner": false - }, - { - "name": "spotMarketVault", - "isMut": true, - "isSigner": false - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "mint", - "isMut": false, - "isSigner": false - }, - { - "name": "oracle", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "amount", - "type": "u64" - } - ] - }, - { - "name": "withdrawFromProgramVault", - "accounts": [ - { - "name": "state", - "isMut": false, - "isSigner": false - }, - { - "name": "admin", - "isMut": true, - "isSigner": true - }, - { - "name": "driftSigner", - "isMut": false, - "isSigner": false - }, - { - "name": "constituent", - "isMut": true, - "isSigner": false - }, - { - "name": "constituentTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "spotMarket", - "isMut": true, - "isSigner": false - }, - { - "name": "spotMarketVault", - "isMut": true, - "isSigner": false - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "mint", - "isMut": false, - "isSigner": false - }, - { - "name": "oracle", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "amount", - "type": "u64" - } - ] - }, - { - "name": "settlePerpToLpPool", - "accounts": [ - { - "name": "state", - "isMut": false, - "isSigner": false - }, - { - "name": "lpPool", - "isMut": true, - "isSigner": false - }, - { - "name": "keeper", - "isMut": true, - "isSigner": true - }, - { - "name": "ammCache", - "isMut": true, - "isSigner": false - }, - { - "name": "quoteMarket", - "isMut": true, - "isSigner": false - }, - { - "name": "constituent", - "isMut": true, - "isSigner": false - }, - { - "name": "constituentQuoteTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "quoteTokenVault", - "isMut": true, - "isSigner": false - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "driftSigner", - "isMut": false, - "isSigner": false - } - ], - "args": [] - } - ], - "accounts": [ - { - "name": "AmmCache", - "type": { - "kind": "struct", - "fields": [ - { - "name": "bump", - "type": "u8" - }, - { - "name": "padding", - "type": { - "array": ["u8", 3] - } - }, - { - "name": "cache", - "type": { - "vec": { - "defined": "CacheInfo" - } - } - } - ] - } - }, - { - "name": "OpenbookV2FulfillmentConfig", - "type": { - "kind": "struct", - "fields": [ - { - "name": "pubkey", - "type": "publicKey" - }, - { - "name": "openbookV2ProgramId", - "type": "publicKey" - }, - { - "name": "openbookV2Market", - "type": "publicKey" - }, - { - "name": "openbookV2MarketAuthority", - "type": "publicKey" - }, - { - "name": "openbookV2EventHeap", - "type": "publicKey" - }, - { - "name": "openbookV2Bids", - "type": "publicKey" - }, - { - "name": "openbookV2Asks", - "type": "publicKey" - }, - { - "name": "openbookV2BaseVault", - "type": "publicKey" - }, - { - "name": "openbookV2QuoteVault", - "type": "publicKey" - }, - { - "name": "marketIndex", - "type": "u16" - }, - { - "name": "fulfillmentType", - "type": { - "defined": "SpotFulfillmentType" - } - }, - { - "name": "status", - "type": { - "defined": "SpotFulfillmentConfigStatus" - } - }, - { - "name": "padding", - "type": { - "array": ["u8", 4] - } - } - ] - } - }, - { - "name": "PhoenixV1FulfillmentConfig", - "type": { - "kind": "struct", - "fields": [ - { - "name": "pubkey", - "type": "publicKey" - }, - { - "name": "phoenixProgramId", - "type": "publicKey" - }, - { - "name": "phoenixLogAuthority", - "type": "publicKey" - }, - { - "name": "phoenixMarket", - "type": "publicKey" - }, - { - "name": "phoenixBaseVault", - "type": "publicKey" - }, - { - "name": "phoenixQuoteVault", - "type": "publicKey" - }, - { - "name": "marketIndex", - "type": "u16" - }, - { - "name": "fulfillmentType", - "type": { - "defined": "SpotFulfillmentType" - } - }, - { - "name": "status", - "type": { - "defined": "SpotFulfillmentConfigStatus" - } - }, - { - "name": "padding", - "type": { - "array": ["u8", 4] - } - } - ] - } - }, - { - "name": "SerumV3FulfillmentConfig", - "type": { - "kind": "struct", - "fields": [ - { - "name": "pubkey", - "type": "publicKey" - }, - { - "name": "serumProgramId", - "type": "publicKey" - }, - { - "name": "serumMarket", - "type": "publicKey" - }, - { - "name": "serumRequestQueue", - "type": "publicKey" - }, - { - "name": "serumEventQueue", - "type": "publicKey" - }, - { - "name": "serumBids", - "type": "publicKey" - }, - { - "name": "serumAsks", - "type": "publicKey" - }, - { - "name": "serumBaseVault", - "type": "publicKey" - }, - { - "name": "serumQuoteVault", - "type": "publicKey" - }, - { - "name": "serumOpenOrders", - "type": "publicKey" - }, - { - "name": "serumSignerNonce", - "type": "u64" - }, - { - "name": "marketIndex", - "type": "u16" - }, - { - "name": "fulfillmentType", - "type": { - "defined": "SpotFulfillmentType" - } - }, - { - "name": "status", - "type": { - "defined": "SpotFulfillmentConfigStatus" - } - }, - { - "name": "padding", - "type": { - "array": ["u8", 4] - } - } - ] - } - }, - { - "name": "HighLeverageModeConfig", - "type": { - "kind": "struct", - "fields": [ - { - "name": "maxUsers", - "type": "u32" - }, - { - "name": "currentUsers", - "type": "u32" - }, - { - "name": "reduceOnly", - "type": "u8" - }, - { - "name": "padding1", - "type": { - "array": ["u8", 3] - } - }, - { - "name": "currentMaintenanceUsers", - "type": "u32" - }, - { - "name": "padding2", - "type": { - "array": ["u8", 24] - } - } - ] - } - }, - { - "name": "IfRebalanceConfig", + "name": "PhoenixV1FulfillmentConfig", "type": { "kind": "struct", "fields": [ @@ -9325,463 +7622,230 @@ "type": "publicKey" }, { - "name": "totalInAmount", - "docs": ["total amount to be sold"], - "type": "u64" - }, - { - "name": "currentInAmount", - "docs": ["amount already sold"], - "type": "u64" - }, - { - "name": "currentOutAmount", - "docs": ["amount already bought"], - "type": "u64" - }, - { - "name": "currentOutAmountTransferred", - "docs": ["amount already transferred to revenue pool"], - "type": "u64" - }, - { - "name": "currentInAmountSinceLastTransfer", - "docs": ["amount already bought in epoch"], - "type": "u64" - }, - { - "name": "epochStartTs", - "docs": ["start time of epoch"], - "type": "i64" - }, - { - "name": "epochInAmount", - "docs": ["amount already bought in epoch"], - "type": "u64" - }, - { - "name": "epochMaxInAmount", - "docs": ["max amount to swap in epoch"], - "type": "u64" - }, - { - "name": "epochDuration", - "docs": ["duration of epoch"], - "type": "i64" - }, - { - "name": "outMarketIndex", - "docs": ["market index to sell"], - "type": "u16" - }, - { - "name": "inMarketIndex", - "docs": ["market index to buy"], - "type": "u16" - }, - { - "name": "maxSlippageBps", - "type": "u16" - }, - { - "name": "swapMode", - "type": "u8" - }, - { - "name": "status", - "type": "u8" - }, - { - "name": "padding2", - "type": { - "array": ["u8", 32] - } - } - ] - } - }, - { - "name": "InsuranceFundStake", - "type": { - "kind": "struct", - "fields": [ - { - "name": "authority", + "name": "phoenixProgramId", "type": "publicKey" }, { - "name": "ifShares", - "type": "u128" - }, - { - "name": "lastWithdrawRequestShares", - "type": "u128" - }, - { - "name": "ifBase", - "type": "u128" - }, - { - "name": "lastValidTs", - "type": "i64" + "name": "phoenixLogAuthority", + "type": "publicKey" }, { - "name": "lastWithdrawRequestValue", - "type": "u64" + "name": "phoenixMarket", + "type": "publicKey" }, { - "name": "lastWithdrawRequestTs", - "type": "i64" + "name": "phoenixBaseVault", + "type": "publicKey" }, { - "name": "costBasis", - "type": "i64" + "name": "phoenixQuoteVault", + "type": "publicKey" }, { "name": "marketIndex", "type": "u16" }, { - "name": "padding", + "name": "fulfillmentType", "type": { - "array": ["u8", 14] + "defined": "SpotFulfillmentType" } - } - ] - } - }, - { - "name": "ProtocolIfSharesTransferConfig", - "type": { - "kind": "struct", - "fields": [ + }, { - "name": "whitelistedSigners", + "name": "status", "type": { - "array": ["publicKey", 4] + "defined": "SpotFulfillmentConfigStatus" } }, - { - "name": "maxTransferPerEpoch", - "type": "u128" - }, - { - "name": "currentEpochTransfer", - "type": "u128" - }, - { - "name": "nextEpochTs", - "type": "i64" - }, { "name": "padding", "type": { - "array": ["u128", 8] + "array": ["u8", 4] } } ] } }, { - "name": "LPPool", + "name": "SerumV3FulfillmentConfig", "type": { "kind": "struct", "fields": [ { - "name": "pubkey", - "docs": ["address of the vault."], - "type": "publicKey" - }, - { - "name": "mint", - "type": "publicKey" - }, - { - "name": "whitelistMint", - "type": "publicKey" - }, - { - "name": "constituentTargetBase", - "type": "publicKey" - }, - { - "name": "constituentCorrelations", - "type": "publicKey" - }, - { - "name": "maxAum", - "docs": [ - "The current number of VaultConstituents in the vault, each constituent is pda(LPPool.address, constituent_index)", - "which constituent is the quote, receives revenue pool distributions. (maybe this should just be implied idx 0)", - "pub quote_constituent_index: u16,", - "QUOTE_PRECISION: Max AUM, Prohibit minting new DLP beyond this" - ], - "type": "u128" - }, - { - "name": "lastAum", - "docs": [ - "QUOTE_PRECISION: AUM of the vault in USD, updated lazily" - ], - "type": "u128" - }, - { - "name": "cumulativeQuoteSentToPerpMarkets", - "docs": [ - "QUOTE PRECISION: Cumulative quotes from settles" - ], - "type": "u128" - }, - { - "name": "cumulativeQuoteReceivedFromPerpMarkets", - "type": "u128" - }, - { - "name": "totalMintRedeemFeesPaid", - "docs": [ - "QUOTE_PRECISION: Total fees paid for minting and redeeming LP tokens" - ], - "type": "i128" - }, - { - "name": "lastAumSlot", - "docs": ["timestamp of last AUM slot"], - "type": "u64" - }, - { - "name": "maxSettleQuoteAmount", - "type": "u64" - }, - { - "name": "padding", - "docs": ["timestamp of last vAMM revenue rebalance"], - "type": "u64" + "name": "pubkey", + "type": "publicKey" }, { - "name": "mintRedeemId", - "docs": [ - "Every mint/redeem has a monotonically increasing id. This is the next id to use" - ], - "type": "u64" + "name": "serumProgramId", + "type": "publicKey" }, { - "name": "settleId", - "type": "u64" + "name": "serumMarket", + "type": "publicKey" }, { - "name": "minMintFee", - "docs": ["PERCENTAGE_PRECISION"], - "type": "i64" + "name": "serumRequestQueue", + "type": "publicKey" }, { - "name": "tokenSupply", - "type": "u64" + "name": "serumEventQueue", + "type": "publicKey" }, { - "name": "volatility", - "type": "u64" + "name": "serumBids", + "type": "publicKey" }, { - "name": "constituents", - "type": "u16" + "name": "serumAsks", + "type": "publicKey" }, { - "name": "quoteConsituentIndex", - "type": "u16" + "name": "serumBaseVault", + "type": "publicKey" }, { - "name": "bump", - "type": "u8" + "name": "serumQuoteVault", + "type": "publicKey" }, { - "name": "gammaExecution", - "type": "u8" + "name": "serumOpenOrders", + "type": "publicKey" }, { - "name": "xi", - "type": "u8" + "name": "serumSignerNonce", + "type": "u64" }, { - "name": "targetOracleDelayFeeBpsPer10Slots", - "type": "u8" + "name": "marketIndex", + "type": "u16" }, { - "name": "targetPositionDelayFeeBpsPer10Slots", - "type": "u8" + "name": "fulfillmentType", + "type": { + "defined": "SpotFulfillmentType" + } }, { - "name": "lpPoolId", - "type": "u8" + "name": "status", + "type": { + "defined": "SpotFulfillmentConfigStatus" + } }, { "name": "padding", "type": { - "array": ["u8", 174] + "array": ["u8", 4] } } ] } }, { - "name": "Constituent", + "name": "HighLeverageModeConfig", "type": { "kind": "struct", "fields": [ { - "name": "pubkey", - "docs": ["address of the constituent"], - "type": "publicKey" - }, - { - "name": "mint", - "type": "publicKey" - }, - { - "name": "lpPool", - "type": "publicKey" + "name": "maxUsers", + "type": "u32" }, { - "name": "vault", - "type": "publicKey" + "name": "currentUsers", + "type": "u32" }, { - "name": "totalSwapFees", - "docs": [ - "total fees received by the constituent. Positive = fees received, Negative = fees paid" - ], - "type": "i128" + "name": "reduceOnly", + "type": "u8" }, { - "name": "spotBalance", - "docs": ["spot borrow-lend balance for constituent"], + "name": "padding1", "type": { - "defined": "ConstituentSpotBalance" + "array": ["u8", 3] } }, { - "name": "lastSpotBalanceTokenAmount", - "type": "i64" - }, - { - "name": "cumulativeSpotInterestAccruedTokenAmount", - "type": "i64" - }, - { - "name": "maxWeightDeviation", - "docs": [ - "max deviation from target_weight allowed for the constituent", - "precision: PERCENTAGE_PRECISION" - ], - "type": "i64" - }, - { - "name": "swapFeeMin", - "docs": [ - "min fee charged on swaps to/from this constituent", - "precision: PERCENTAGE_PRECISION" - ], - "type": "i64" + "name": "currentMaintenanceUsers", + "type": "u32" }, { - "name": "swapFeeMax", - "docs": [ - "max fee charged on swaps to/from this constituent", - "precision: PERCENTAGE_PRECISION" - ], - "type": "i64" - }, + "name": "padding2", + "type": { + "array": ["u8", 24] + } + } + ] + } + }, + { + "name": "IfRebalanceConfig", + "type": { + "kind": "struct", + "fields": [ { - "name": "maxBorrowTokenAmount", - "docs": [ - "Max Borrow amount:", - "precision: token precision" - ], - "type": "u64" + "name": "pubkey", + "type": "publicKey" }, { - "name": "vaultTokenBalance", - "docs": ["ata token balance in token precision"], + "name": "totalInAmount", + "docs": ["total amount to be sold"], "type": "u64" }, { - "name": "lastOraclePrice", - "type": "i64" - }, - { - "name": "lastOracleSlot", + "name": "currentInAmount", + "docs": ["amount already sold"], "type": "u64" }, { - "name": "oracleStalenessThreshold", - "docs": ["Delay allowed for valid AUM calculation"], + "name": "currentOutAmount", + "docs": ["amount already bought"], "type": "u64" }, { - "name": "flashLoanInitialTokenAmount", + "name": "currentOutAmountTransferred", + "docs": ["amount already transferred to revenue pool"], "type": "u64" }, { - "name": "nextSwapId", - "docs": [ - "Every swap to/from this constituent has a monotonically increasing id. This is the next id to use" - ], + "name": "currentInAmountSinceLastTransfer", + "docs": ["amount already bought in epoch"], "type": "u64" }, { - "name": "derivativeWeight", - "docs": [ - "percentable of derivatve weight to go to this specific derivative PERCENTAGE_PRECISION. Zero if no derivative weight" - ], - "type": "u64" + "name": "epochStartTs", + "docs": ["start time of epoch"], + "type": "i64" }, { - "name": "volatility", + "name": "epochInAmount", + "docs": ["amount already bought in epoch"], "type": "u64" }, { - "name": "constituentDerivativeDepegThreshold", + "name": "epochMaxInAmount", + "docs": ["max amount to swap in epoch"], "type": "u64" }, { - "name": "constituentDerivativeIndex", - "docs": [ - "The `constituent_index` of the parent constituent. -1 if it is a parent index", - "Example: if in a pool with SOL (parent) and dSOL (derivative),", - "SOL.constituent_index = 1, SOL.constituent_derivative_index = -1,", - "dSOL.constituent_index = 2, dSOL.constituent_derivative_index = 1" - ], - "type": "i16" + "name": "epochDuration", + "docs": ["duration of epoch"], + "type": "i64" }, { - "name": "spotMarketIndex", + "name": "outMarketIndex", + "docs": ["market index to sell"], "type": "u16" }, { - "name": "constituentIndex", + "name": "inMarketIndex", + "docs": ["market index to buy"], "type": "u16" }, { - "name": "decimals", - "type": "u8" - }, - { - "name": "bump", - "type": "u8" - }, - { - "name": "vaultBump", - "type": "u8" - }, - { - "name": "gammaInventory", - "type": "u8" - }, - { - "name": "gammaExecution", - "type": "u8" + "name": "maxSlippageBps", + "type": "u16" }, { - "name": "xi", + "name": "swapMode", "type": "u8" }, { @@ -9789,101 +7853,91 @@ "type": "u8" }, { - "name": "pausedOperations", - "type": "u8" - }, - { - "name": "padding", + "name": "padding2", "type": { - "array": ["u8", 162] + "array": ["u8", 32] } } ] } }, { - "name": "AmmConstituentMapping", + "name": "InsuranceFundStake", "type": { "kind": "struct", "fields": [ { - "name": "lpPool", + "name": "authority", "type": "publicKey" }, { - "name": "bump", - "type": "u8" + "name": "ifShares", + "type": "u128" }, { - "name": "padding", - "type": { - "array": ["u8", 3] - } + "name": "lastWithdrawRequestShares", + "type": "u128" }, { - "name": "weights", - "type": { - "vec": { - "defined": "AmmConstituentDatum" - } - } - } - ] - } - }, - { - "name": "ConstituentTargetBase", - "type": { - "kind": "struct", - "fields": [ + "name": "ifBase", + "type": "u128" + }, { - "name": "lpPool", - "type": "publicKey" + "name": "lastValidTs", + "type": "i64" }, { - "name": "bump", - "type": "u8" + "name": "lastWithdrawRequestValue", + "type": "u64" }, { - "name": "padding", - "type": { - "array": ["u8", 3] - } + "name": "lastWithdrawRequestTs", + "type": "i64" + }, + { + "name": "costBasis", + "type": "i64" + }, + { + "name": "marketIndex", + "type": "u16" }, { - "name": "targets", + "name": "padding", "type": { - "vec": { - "defined": "TargetsDatum" - } + "array": ["u8", 14] } } ] } }, { - "name": "ConstituentCorrelations", + "name": "ProtocolIfSharesTransferConfig", "type": { "kind": "struct", "fields": [ { - "name": "lpPool", - "type": "publicKey" + "name": "whitelistedSigners", + "type": { + "array": ["publicKey", 4] + } }, { - "name": "bump", - "type": "u8" + "name": "maxTransferPerEpoch", + "type": "u128" }, { - "name": "padding", - "type": { - "array": ["u8", 3] - } + "name": "currentEpochTransfer", + "type": "u128" + }, + { + "name": "nextEpochTs", + "type": "i64" }, { - "name": "correlations", + "name": "padding", "type": { - "vec": "i64" + "array": ["u128", 8] } } ] @@ -10184,44 +8238,28 @@ }, { "name": "highLeverageMarginRatioMaintenance", - "type": "u16" - }, - { - "name": "protectedMakerLimitPriceDivisor", - "type": "u8" - }, - { - "name": "protectedMakerDynamicDivisor", - "type": "u8" - }, - { - "name": "lpFeeTransferScalar", - "type": "u8" + "type": "u16" }, { - "name": "lpStatus", + "name": "protectedMakerLimitPriceDivisor", "type": "u8" }, { - "name": "lpPausedOperations", + "name": "protectedMakerDynamicDivisor", "type": "u8" }, { - "name": "lpExchangeFeeExcluscionScalar", - "type": "u8" + "name": "padding1", + "type": "u32" }, { "name": "lastFillPrice", "type": "u64" }, - { - "name": "lpPoolId", - "type": "u8" - }, { "name": "padding", "type": { - "array": ["u8", 23] + "array": ["u8", 24] } } ] @@ -11030,14 +9068,10 @@ "name": "featureBitFlags", "type": "u8" }, - { - "name": "lpPoolFeatureBitFlags", - "type": "u8" - }, { "name": "padding", "type": { - "array": ["u8", 8] + "array": ["u8", 9] } } ] @@ -11468,391 +9502,86 @@ } }, { - "name": "FuelOverflow", - "type": { - "kind": "struct", - "fields": [ - { - "name": "authority", - "docs": ["The authority of this overflow account"], - "type": "publicKey" - }, - { - "name": "fuelInsurance", - "type": "u128" - }, - { - "name": "fuelDeposits", - "type": "u128" - }, - { - "name": "fuelBorrows", - "type": "u128" - }, - { - "name": "fuelPositions", - "type": "u128" - }, - { - "name": "fuelTaker", - "type": "u128" - }, - { - "name": "fuelMaker", - "type": "u128" - }, - { - "name": "lastFuelSweepTs", - "type": "u32" - }, - { - "name": "lastResetTs", - "type": "u32" - }, - { - "name": "padding", - "type": { - "array": ["u128", 6] - } - } - ] - } - } - ], - "types": [ - { - "name": "UpdatePerpMarketSummaryStatsParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "quoteAssetAmountWithUnsettledLp", - "type": { - "option": "i64" - } - }, - { - "name": "netUnsettledFundingPnl", - "type": { - "option": "i64" - } - }, - { - "name": "updateAmmSummaryStats", - "type": { - "option": "bool" - } - }, - { - "name": "excludeTotalLiqFee", - "type": { - "option": "bool" - } - } - ] - } - }, - { - "name": "ConstituentParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "maxWeightDeviation", - "type": { - "option": "i64" - } - }, - { - "name": "swapFeeMin", - "type": { - "option": "i64" - } - }, - { - "name": "swapFeeMax", - "type": { - "option": "i64" - } - }, - { - "name": "maxBorrowTokenAmount", - "type": { - "option": "u64" - } - }, - { - "name": "oracleStalenessThreshold", - "type": { - "option": "u64" - } - }, - { - "name": "costToTradeBps", - "type": { - "option": "i32" - } - }, - { - "name": "constituentDerivativeIndex", - "type": { - "option": "i16" - } - }, - { - "name": "derivativeWeight", - "type": { - "option": "u64" - } - }, - { - "name": "volatility", - "type": { - "option": "u64" - } - }, - { - "name": "gammaExecution", - "type": { - "option": "u8" - } - }, - { - "name": "gammaInventory", - "type": { - "option": "u8" - } - }, - { - "name": "xi", - "type": { - "option": "u8" - } - } - ] - } - }, - { - "name": "LpPoolParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "maxSettleQuoteAmount", - "type": { - "option": "u64" - } - }, - { - "name": "volatility", - "type": { - "option": "u64" - } - }, - { - "name": "gammaExecution", - "type": { - "option": "u8" - } - }, - { - "name": "xi", - "type": { - "option": "u8" - } - }, - { - "name": "maxAum", - "type": { - "option": "u128" - } - }, - { - "name": "whitelistMint", - "type": { - "option": "publicKey" - } - } - ] - } - }, - { - "name": "OverrideAmmCacheParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "quoteOwedFromLpPool", - "type": { - "option": "i64" - } - }, - { - "name": "lastSettleSlot", - "type": { - "option": "u64" - } - }, - { - "name": "lastFeePoolTokenAmount", - "type": { - "option": "u128" - } - }, - { - "name": "lastNetPnlPoolTokenAmount", - "type": { - "option": "i128" - } - }, - { - "name": "ammPositionScalar", - "type": { - "option": "u8" - } - }, - { - "name": "ammInventoryLimit", - "type": { - "option": "i64" - } - } - ] - } - }, - { - "name": "AddAmmConstituentMappingDatum", - "type": { - "kind": "struct", - "fields": [ - { - "name": "constituentIndex", - "type": "u16" - }, - { - "name": "perpMarketIndex", - "type": "u16" - }, - { - "name": "weight", - "type": "i64" - } - ] - } - }, - { - "name": "CacheInfo", + "name": "FuelOverflow", "type": { "kind": "struct", "fields": [ { - "name": "oracle", + "name": "authority", + "docs": ["The authority of this overflow account"], "type": "publicKey" }, { - "name": "lastFeePoolTokenAmount", + "name": "fuelInsurance", "type": "u128" }, { - "name": "lastNetPnlPoolTokenAmount", - "type": "i128" - }, - { - "name": "lastExchangeFees", + "name": "fuelDeposits", "type": "u128" }, { - "name": "lastSettleAmmExFees", + "name": "fuelBorrows", "type": "u128" }, { - "name": "lastSettleAmmPnl", - "type": "i128" - }, - { - "name": "position", - "docs": ["BASE PRECISION"], - "type": "i64" - }, - { - "name": "slot", - "type": "u64" - }, - { - "name": "lastSettleAmount", - "type": "u64" - }, - { - "name": "lastSettleSlot", - "type": "u64" - }, - { - "name": "lastSettleTs", - "type": "i64" - }, - { - "name": "quoteOwedFromLpPool", - "type": "i64" - }, - { - "name": "ammInventoryLimit", - "type": "i64" - }, - { - "name": "oraclePrice", - "type": "i64" - }, - { - "name": "oracleSlot", - "type": "u64" - }, - { - "name": "marketIndex", - "type": "u16" + "name": "fuelPositions", + "type": "u128" }, { - "name": "oracleSource", - "type": "u8" + "name": "fuelTaker", + "type": "u128" }, { - "name": "oracleValidity", - "type": "u8" + "name": "fuelMaker", + "type": "u128" }, { - "name": "lpStatusForPerpMarket", - "type": "u8" + "name": "lastFuelSweepTs", + "type": "u32" }, { - "name": "ammPositionScalar", - "type": "u8" + "name": "lastResetTs", + "type": "u32" }, { "name": "padding", "type": { - "array": ["u8", 34] + "array": ["u128", 6] } } ] } - }, + } + ], + "types": [ { - "name": "AmmCacheFixed", + "name": "UpdatePerpMarketSummaryStatsParams", "type": { "kind": "struct", "fields": [ { - "name": "bump", - "type": "u8" + "name": "quoteAssetAmountWithUnsettledLp", + "type": { + "option": "i64" + } }, { - "name": "pad", + "name": "netUnsettledFundingPnl", "type": { - "array": ["u8", 3] + "option": "i64" } }, { - "name": "len", - "type": "u32" + "name": "updateAmmSummaryStats", + "type": { + "option": "bool" + } + }, + { + "name": "excludeTotalLiqFee", + "type": { + "option": "bool" + } } ] } @@ -12005,295 +9734,107 @@ }, { "name": "assetTransfer", - "type": "u128" - } - ] - } - }, - { - "name": "PerpBankruptcyRecord", - "type": { - "kind": "struct", - "fields": [ - { - "name": "marketIndex", - "type": "u16" - }, - { - "name": "pnl", - "type": "i128" - }, - { - "name": "ifPayment", - "type": "u128" - }, - { - "name": "clawbackUser", - "type": { - "option": "publicKey" - } - }, - { - "name": "clawbackUserPayment", - "type": { - "option": "u128" - } - }, - { - "name": "cumulativeFundingRateDelta", - "type": "i128" - } - ] - } - }, - { - "name": "SpotBankruptcyRecord", - "type": { - "kind": "struct", - "fields": [ - { - "name": "marketIndex", - "type": "u16" - }, - { - "name": "borrowAmount", - "type": "u128" - }, - { - "name": "ifPayment", - "type": "u128" - }, - { - "name": "cumulativeDepositInterestDelta", - "type": "u128" - } - ] - } - }, - { - "name": "IfRebalanceConfigParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "totalInAmount", - "type": "u64" - }, - { - "name": "epochMaxInAmount", - "type": "u64" - }, - { - "name": "epochDuration", - "type": "i64" - }, - { - "name": "outMarketIndex", - "type": "u16" - }, - { - "name": "inMarketIndex", - "type": "u16" - }, - { - "name": "maxSlippageBps", - "type": "u16" - }, - { - "name": "swapMode", - "type": "u8" - }, - { - "name": "status", - "type": "u8" - } - ] - } - }, - { - "name": "ConstituentSpotBalance", - "type": { - "kind": "struct", - "fields": [ - { - "name": "scaledBalance", - "docs": [ - "The scaled balance of the position. To get the token amount, multiply by the cumulative deposit/borrow", - "interest of corresponding market.", - "precision: token precision" - ], - "type": "u128" - }, - { - "name": "cumulativeDeposits", - "docs": [ - "The cumulative deposits/borrows a user has made into a market", - "precision: token mint precision" - ], - "type": "i64" - }, - { - "name": "marketIndex", - "docs": [ - "The market index of the corresponding spot market" - ], - "type": "u16" - }, - { - "name": "balanceType", - "docs": ["Whether the position is deposit or borrow"], - "type": { - "defined": "SpotBalanceType" - } - }, - { - "name": "padding", - "type": { - "array": ["u8", 5] - } - } - ] - } - }, - { - "name": "AmmConstituentDatum", - "type": { - "kind": "struct", - "fields": [ - { - "name": "perpMarketIndex", - "type": "u16" - }, - { - "name": "constituentIndex", - "type": "u16" - }, - { - "name": "padding", - "type": { - "array": ["u8", 4] - } - }, - { - "name": "lastSlot", - "type": "u64" - }, - { - "name": "weight", - "docs": [ - "PERCENTAGE_PRECISION. The weight this constituent has on the perp market" - ], - "type": "i64" + "type": "u128" } ] } }, { - "name": "AmmConstituentMappingFixed", + "name": "PerpBankruptcyRecord", "type": { "kind": "struct", "fields": [ { - "name": "lpPool", - "type": "publicKey" + "name": "marketIndex", + "type": "u16" }, { - "name": "bump", - "type": "u8" + "name": "pnl", + "type": "i128" }, { - "name": "pad", + "name": "ifPayment", + "type": "u128" + }, + { + "name": "clawbackUser", "type": { - "array": ["u8", 3] + "option": "publicKey" } }, { - "name": "len", - "type": "u32" + "name": "clawbackUserPayment", + "type": { + "option": "u128" + } + }, + { + "name": "cumulativeFundingRateDelta", + "type": "i128" } ] } }, { - "name": "TargetsDatum", + "name": "SpotBankruptcyRecord", "type": { "kind": "struct", "fields": [ { - "name": "costToTradeBps", - "type": "i32" - }, - { - "name": "padding", - "type": { - "array": ["u8", 4] - } + "name": "marketIndex", + "type": "u16" }, { - "name": "targetBase", - "type": "i64" + "name": "borrowAmount", + "type": "u128" }, { - "name": "lastOracleSlot", - "type": "u64" + "name": "ifPayment", + "type": "u128" }, { - "name": "lastPositionSlot", - "type": "u64" + "name": "cumulativeDepositInterestDelta", + "type": "u128" } ] } }, { - "name": "ConstituentTargetBaseFixed", + "name": "IfRebalanceConfigParams", "type": { "kind": "struct", "fields": [ { - "name": "lpPool", - "type": "publicKey" + "name": "totalInAmount", + "type": "u64" }, { - "name": "bump", - "type": "u8" + "name": "epochMaxInAmount", + "type": "u64" }, { - "name": "pad", - "type": { - "array": ["u8", 3] - } + "name": "epochDuration", + "type": "i64" }, { - "name": "len", - "docs": ["total elements in the flattened `data` vec"], - "type": "u32" - } - ] - } - }, - { - "name": "ConstituentCorrelationsFixed", - "type": { - "kind": "struct", - "fields": [ + "name": "outMarketIndex", + "type": "u16" + }, { - "name": "lpPool", - "type": "publicKey" + "name": "inMarketIndex", + "type": "u16" }, { - "name": "bump", - "type": "u8" + "name": "maxSlippageBps", + "type": "u16" }, { - "name": "pad", - "type": { - "array": ["u8", 3] - } + "name": "swapMode", + "type": "u8" }, { - "name": "len", - "docs": ["total elements in the flattened `data` vec"], - "type": "u32" + "name": "status", + "type": "u8" } ] } @@ -12567,12 +10108,6 @@ "type": { "option": "u16" } - }, - { - "name": "isolatedPositionDeposit", - "type": { - "option": "u64" - } } ] } @@ -12635,12 +10170,6 @@ "type": { "option": "u16" } - }, - { - "name": "isolatedPositionDeposit", - "type": { - "option": "u64" - } } ] } @@ -13415,7 +10944,7 @@ "type": "i8" }, { - "name": "oracleLowRiskSlotDelayOverride", + "name": "takerSpeedBumpOverride", "docs": [ "the override for the state.min_perp_auction_duration", "0 is no override, -1 is disable speed bump, 1-100 is literal speed bump" @@ -14409,23 +11938,6 @@ ] } }, - { - "name": "SettlementDirection", - "type": { - "kind": "enum", - "variants": [ - { - "name": "ToLpPool" - }, - { - "name": "FromLpPool" - }, - { - "name": "None" - } - ] - } - }, { "name": "MarginRequirementType", "type": { @@ -14464,17 +11976,7 @@ "name": "InsufficientDataPoints" }, { - "name": "StaleForAMM", - "fields": [ - { - "name": "immediate", - "type": "bool" - }, - { - "name": "lowRisk", - "type": "bool" - } - ] + "name": "StaleForAMM" }, { "name": "Valid" @@ -14500,10 +12002,7 @@ "name": "FillOrderMatch" }, { - "name": "FillOrderAmmLowRisk" - }, - { - "name": "FillOrderAmmImmediate" + "name": "FillOrderAmm" }, { "name": "Liquidate" @@ -14522,15 +12021,6 @@ }, { "name": "UseMMOraclePrice" - }, - { - "name": "UpdateAmmCache" - }, - { - "name": "UpdateLpPoolAum" - }, - { - "name": "LpPoolSwap" } ] } @@ -14551,9 +12041,6 @@ }, { "name": "SafeMMOracle" - }, - { - "name": "Margin" } ] } @@ -14857,20 +12344,6 @@ ] } }, - { - "name": "ConstituentStatus", - "type": { - "kind": "enum", - "variants": [ - { - "name": "ReduceOnly" - }, - { - "name": "Decommissioned" - } - ] - } - }, { "name": "MarginCalculationMode", "type": { @@ -15044,9 +12517,6 @@ }, { "name": "AmmImmediateFill" - }, - { - "name": "SettleRevPool" } ] } @@ -15094,37 +12564,6 @@ ] } }, - { - "name": "PerpLpOperation", - "type": { - "kind": "enum", - "variants": [ - { - "name": "TrackAmmRevenue" - }, - { - "name": "SettleQuoteOwed" - } - ] - } - }, - { - "name": "ConstituentLpOperation", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Swap" - }, - { - "name": "Deposit" - }, - { - "name": "Withdraw" - } - ] - } - }, { "name": "MarketStatus", "type": { @@ -15160,23 +12599,6 @@ ] } }, - { - "name": "LpStatus", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Uncollateralized" - }, - { - "name": "Active" - }, - { - "name": "Decommissioning" - } - ] - } - }, { "name": "ContractType", "type": { @@ -15220,6 +12642,23 @@ ] } }, + { + "name": "AMMAvailability", + "type": { + "kind": "enum", + "variants": [ + { + "name": "Immediate" + }, + { + "name": "AfterMinDuration" + }, + { + "name": "Unavailable" + } + ] + } + }, { "name": "RevenueShareOrderBitFlag", "type": { @@ -15371,23 +12810,6 @@ ] } }, - { - "name": "LpPoolFeatureBitFlags", - "type": { - "kind": "enum", - "variants": [ - { - "name": "SettleLpPool" - }, - { - "name": "SwapLpPool" - }, - { - "name": "MintRedeemLpPool" - } - ] - } - }, { "name": "UserStatus", "type": { @@ -15741,18 +13163,6 @@ "option": "publicKey" }, "index": false - }, - { - "name": "signer", - "type": { - "option": "publicKey" - }, - "index": false - }, - { - "name": "userTokenAmountAfter", - "type": "i128", - "index": false } ] }, @@ -19083,106 +16493,6 @@ "code": 6324, "name": "UnableToLoadRevenueShareAccount", "msg": "Unable to load builder account" - }, - { - "code": 6325, - "name": "InvalidConstituent", - "msg": "Invalid Constituent" - }, - { - "code": 6326, - "name": "InvalidAmmConstituentMappingArgument", - "msg": "Invalid Amm Constituent Mapping argument" - }, - { - "code": 6327, - "name": "ConstituentNotFound", - "msg": "Constituent not found" - }, - { - "code": 6328, - "name": "ConstituentCouldNotLoad", - "msg": "Constituent could not load" - }, - { - "code": 6329, - "name": "ConstituentWrongMutability", - "msg": "Constituent wrong mutability" - }, - { - "code": 6330, - "name": "WrongNumberOfConstituents", - "msg": "Wrong number of constituents passed to instruction" - }, - { - "code": 6331, - "name": "InsufficientConstituentTokenBalance", - "msg": "Insufficient constituent token balance" - }, - { - "code": 6332, - "name": "AMMCacheStale", - "msg": "Amm Cache data too stale" - }, - { - "code": 6333, - "name": "LpPoolAumDelayed", - "msg": "LP Pool AUM not updated recently" - }, - { - "code": 6334, - "name": "ConstituentOracleStale", - "msg": "Constituent oracle is stale" - }, - { - "code": 6335, - "name": "LpInvariantFailed", - "msg": "LP Invariant failed" - }, - { - "code": 6336, - "name": "InvalidConstituentDerivativeWeights", - "msg": "Invalid constituent derivative weights" - }, - { - "code": 6337, - "name": "MaxDlpAumBreached", - "msg": "Max DLP AUM Breached" - }, - { - "code": 6338, - "name": "SettleLpPoolDisabled", - "msg": "Settle Lp Pool Disabled" - }, - { - "code": 6339, - "name": "MintRedeemLpPoolDisabled", - "msg": "Mint/Redeem Lp Pool Disabled" - }, - { - "code": 6340, - "name": "LpPoolSettleInvariantBreached", - "msg": "Settlement amount exceeded" - }, - { - "code": 6341, - "name": "InvalidConstituentOperation", - "msg": "Invalid constituent operation" - }, - { - "code": 6342, - "name": "Unauthorized", - "msg": "Unauthorized for operation" - }, - { - "code": 6343, - "name": "InvalidLpPoolId", - "msg": "Invalid Lp Pool Id for Operation" - }, - { - "code": 6344, - "name": "MarketIndexNotFoundAmmCache", - "msg": "MarketIndexNotFoundAmmCache" } ] } From 1fe730a3fb34bdef722f83430820cca93e24b503 Mon Sep 17 00:00:00 2001 From: sina <20732540+SinaKhalili@users.noreply.github.com> Date: Mon, 24 Nov 2025 01:17:44 -0800 Subject: [PATCH 4/5] Update spot market constants --- src/driftpy/constants/spot_markets.py | 41 ++++++++++++++++----------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/src/driftpy/constants/spot_markets.py b/src/driftpy/constants/spot_markets.py index 84b71657..64da3957 100644 --- a/src/driftpy/constants/spot_markets.py +++ b/src/driftpy/constants/spot_markets.py @@ -19,7 +19,6 @@ class SpotMarketConfig: WRAPPED_SOL_MINT = Pubkey.from_string("So11111111111111111111111111111111111111112") - devnet_spot_market_configs: list[SpotMarketConfig] = [ SpotMarketConfig( symbol="USDC", @@ -115,8 +114,8 @@ class SpotMarketConfig: SpotMarketConfig( symbol="mSOL", market_index=2, - oracle=Pubkey.from_string("FAq7hqjn7FWGXKDwJHzsXGgBcydGTcK4kziJpAGWXjDb"), - oracle_source=OracleSource.PythPull(), # type: ignore + oracle=Pubkey.from_string("FY2JMi1vYz1uayVT2GJ96ysZgpagjhdPRG2upNPtSZsC"), + oracle_source=OracleSource.PythLazer(), # type: ignore mint=Pubkey.from_string("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"), decimals=9, ), @@ -147,8 +146,8 @@ class SpotMarketConfig: SpotMarketConfig( symbol="jitoSOL", market_index=6, - oracle=Pubkey.from_string("9QE1P5EfzthYDgoQ9oPeTByCEKaRJeZbVVqKJfgU9iau"), - oracle_source=OracleSource.PythPull(), # type: ignore + oracle=Pubkey.from_string("2cHCtAkMnttMh3bNKSCgSKSP5D4yN3p8bfnMdS3VZsDf"), + oracle_source=OracleSource.PythLazer(), # type: ignore mint=Pubkey.from_string("J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn"), decimals=9, ), @@ -291,16 +290,16 @@ class SpotMarketConfig: SpotMarketConfig( symbol="sUSDe", market_index=24, - oracle=Pubkey.from_string("BRuNuzLAPHHGSSVAJPKMcmJMdgDfrekvnSxkxPDGdeqp"), - oracle_source=OracleSource.PythPull(), # type: ignore + oracle=Pubkey.from_string("CX7JCXtUTiC43ZA4uzoH7iQBD15jtVwdBNCnjKHt1BrQ"), + oracle_source=OracleSource.PythLazer(), # type: ignore mint=Pubkey.from_string("Eh6XEPhSwoLv5wFApukmnaVSHQ6sAnoD9BmgmwQoN2sN"), decimals=9, ), SpotMarketConfig( symbol="BNSOL", market_index=25, - oracle=Pubkey.from_string("8DmXTfhhtb9kTcpTVfb6Ygx8WhZ8wexGqcpxfn23zooe"), - oracle_source=OracleSource.PythPull(), # type: ignore + oracle=Pubkey.from_string("2LxMbHBHsw74aE3XgfthmUNkdDfUGcSEy3G3D3t642fd"), + oracle_source=OracleSource.PythLazer(), # type: ignore mint=Pubkey.from_string("BNso1VUJnh4zcfpZa6986Ea66P6TCp59hvtNJ8b1X85"), decimals=9, ), @@ -323,8 +322,8 @@ class SpotMarketConfig: SpotMarketConfig( symbol="USDS", market_index=28, - oracle=Pubkey.from_string("7pT9mxKXyvfaZKeKy1oe2oV2K1RFtF7tPEJHUY3h2vVV"), - oracle_source=OracleSource.PythStableCoinPull(), # type: ignore + oracle=Pubkey.from_string("5Km85n3s9Zs5wEoXYWuHbpoDzst4EBkS5f1XuQJGG1DL"), + oracle_source=OracleSource.PythLazerStableCoin(), # type: ignore mint=Pubkey.from_string("USDSwr9ApdHk5bvJKMjzff41FfuX8bSxdKcR81vTwcA"), decimals=6, ), @@ -379,8 +378,8 @@ class SpotMarketConfig: SpotMarketConfig( symbol="AI16Z", market_index=35, - oracle=Pubkey.from_string("3BGheQVvYtBNpBKSUXSTjpyKQc3dh8iiwT91Aiq7KYCU"), - oracle_source=OracleSource.PythLazer(), # type: ignore + oracle=Pubkey.from_string("BHqLyA9ov1VPNzt8eb5bt75X2Vk1EVKw1d9Qa78Gk5tR"), + oracle_source=OracleSource.SwitchboardOnDemand(), # type: ignore mint=Pubkey.from_string("HeLp6NuQkmYB4pYWo2zYs22mESHXPQYzXbB8n4V98jwC"), decimals=9, ), @@ -403,8 +402,8 @@ class SpotMarketConfig: SpotMarketConfig( symbol="AUSD", market_index=38, - oracle=Pubkey.from_string("8FZhpiM8n3mpgvENWLcEvHsKB1bBhYBAyL4Ypr4gptLZ"), - oracle_source=OracleSource.PythStableCoinPull(), # type: ignore + oracle=Pubkey.from_string("9JYpqJfLXgrW8Wqzfd93GvJF73m2jJFjNqpQv3wQtehZ"), + oracle_source=OracleSource.PythLazerStableCoin(), # type: ignore mint=Pubkey.from_string("AUSD1jCcCyPLybk1YnvPWsHQSrZ46dxwoMniN4N2UEB9"), decimals=6, ), @@ -459,8 +458,8 @@ class SpotMarketConfig: SpotMarketConfig( symbol="zBTC", market_index=45, - oracle=Pubkey.from_string("CN9QvvbGQzMnN8vJaSek2so4vFnTqgJDFrdJB8Y4tQfB"), - oracle_source=OracleSource.PythPull(), # type: ignore + oracle=Pubkey.from_string("3xcpvBUVV8ALVV4Wod733Vyic3fe8iJAeXDpRdk19Z3p"), + oracle_source=OracleSource.PythLazer(), # type: ignore mint=Pubkey.from_string("zBTCug3er3tLyffELcvDNrKkCymbPWysGcWihESYfLg"), decimals=8, ), @@ -584,4 +583,12 @@ class SpotMarketConfig: mint=Pubkey.from_string("METvsvVRapdj9cFLzq4Tr43xK4tAjQfwX76z3n6mWQL"), decimals=6, ), + SpotMarketConfig( + symbol="CASH", + market_index=61, + oracle=Pubkey.from_string("AK6coxSjfAnuDT4ZUSP3UpeQe2G1tKcALnsdd835eg7T"), + oracle_source=OracleSource.PythLazerStableCoin(), # type: ignore + mint=Pubkey.from_string("CASHx9KJUStyftLFWGvEVf59SGeG9sh5FfcnZMVPCASH"), + decimals=6, + ), ] From 172bd024c0f7da8f595ed6a9cbfd91aa82cc72ed Mon Sep 17 00:00:00 2001 From: sina <20732540+SinaKhalili@users.noreply.github.com> Date: Mon, 24 Nov 2025 01:28:44 -0800 Subject: [PATCH 5/5] Remove spammy reconnect message --- src/driftpy/accounts/ws/multi_account_subscriber.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/driftpy/accounts/ws/multi_account_subscriber.py b/src/driftpy/accounts/ws/multi_account_subscriber.py index fa94d692..5d9873ea 100644 --- a/src/driftpy/accounts/ws/multi_account_subscriber.py +++ b/src/driftpy/accounts/ws/multi_account_subscriber.py @@ -199,7 +199,6 @@ async def _subscribe_ws(self): continue except websockets.exceptions.ConnectionClosed: - print("Websocket connection closed, reconnecting...") self.ws = None async with self._lock: self.subscription_map.clear()