Zo Zo: { accounts: [ { name: "cache" ; type: { fields: [ { name: "oracles" ; type: { array: [ { defined: "OracleCache" } , 25 ] } } , { name: "marks" ; type: { array: [ { defined: "MarkCache" } , 50 ] } } , { name: "fundingCache" ; type: { array: [ "i128" , 50 ] } } , { name: "borrowCache" ; type: { array: [ { defined: "BorrowCache" } , 25 ] } } ] ; kind: "struct" } } , { name: "control" ; type: { fields: [ { name: "authority" ; type: "publicKey" } , { name: "openOrdersAgg" ; type: { array: [ { defined: "OpenOrdersInfo" } , 50 ] } } ] ; kind: "struct" } } , { name: "globalState" ; type: { fields: [ { name: "globalNonce" ; type: "u8" } , { name: "state" ; type: "publicKey" } , { name: "padding" ; type: { array: [ "u8" , 1024 ] } } ] ; kind: "struct" } } , { name: "heimdall" ; type: { fields: [ { name: "nonce" ; type: "u8" } , { name: "dailyWdLimit" ; type: "u64" } , { name: "dailyWdStartTs" ; type: "u64" } , { name: "dailyWithdrawn" ; type: { array: [ "u64" , 25 ] } } , { name: "constantPrices" ; type: { array: [ "u64" , 25 ] } } , { name: "padding" ; type: { array: [ "u8" , 1024 ] } } ] ; kind: "struct" } } , { name: "margin" ; type: { fields: [ { name: "nonce" ; type: "u8" } , { name: "authority" ; type: "publicKey" } , { name: "collateral" ; type: { array: [ { defined: "WrappedI80F48" } , 25 ] } } , { name: "control" ; type: "publicKey" } , { name: "padding" ; type: { array: [ "u8" , 320 ] } } ] ; kind: "struct" } } , { name: "specialOrders" ; type: { fields: [ { name: "nonce" ; type: "u8" } , { name: "authority" ; type: "publicKey" } , { name: "prevId" ; type: "u16" } , { name: "entries" ; type: { array: [ { defined: "SpecialOrdersInfo" } , 20 ] } } , { name: "padding" ; type: { array: [ "u8" , 128 ] } } ] ; kind: "struct" } } , { name: "state" ; type: { fields: [ { name: "signerNonce" ; type: "u8" } , { name: "admin" ; type: "publicKey" } , { name: "cache" ; type: "publicKey" } , { name: "swapFeeVault" ; type: "publicKey" } , { name: "insurance" ; type: "u64" } , { name: "feesAccrued" ; type: { array: [ "u64" , 25 ] } } , { name: "vaults" ; type: { array: [ "publicKey" , 25 ] } } , { name: "collaterals" ; type: { array: [ { defined: "CollateralInfo" } , 25 ] } } , { name: "perpMarkets" ; type: { array: [ { defined: "PerpMarketInfo" } , 50 ] } } , { name: "totalCollaterals" ; type: "u16" } , { name: "totalMarkets" ; type: "u16" } , { name: "padding" ; type: { array: [ "u8" , 1280 ] } } ] ; kind: "struct" } } ] ; constants: [ { name: "SPOT_INITIAL_MARGIN_REQ" ; type: "u64" ; value: "1_100_000" } , { name: "SPOT_MAINT_MARGIN_REQ" ; type: "u64" ; value: "1_030_000" } , { name: "DUST_THRESHOLD" ; type: "i64" ; value: "1_000" } , { name: "MAX_SPECIAL_ORDERS" ; type: { defined: "usize" } ; value: "20" } , { name: "SPECIAL_ORDER_FEE" ; type: "u64" ; value: "200_000" } , { name: "ORACLE_STALENESS_THRESH" ; type: "u64" ; value: "300" } , { name: "TWAP_STALENESS_THRESH" ; type: "u64" ; value: "60" } , { name: "TWAP_SAMPLE_DT" ; type: "u64" ; value: "60" } , { name: "TWAP_SAMPLES_PER_H" ; type: "u64" ; value: "60" } , { name: "DEFAULT_IR_MULTIPLIER" ; type: "u64" ; value: "1_000_000" } , { name: "MAX_ORACLE_SOURCES" ; type: { defined: "usize" } ; value: "3" } , { name: "MAX_COLLATERALS" ; type: { defined: "usize" } ; value: "25" } , { name: "MAX_MARKETS" ; type: { defined: "usize" } ; value: "50" } , { name: "DEBUG_LOG" ; type: "string" ; value: "\"DEBUG\"" } ] ; errors: [ { code: 6000 ; msg: "A math failure occured, likely due to overflow" ; name: "MathFailure" } , { code: 6001 ; msg: "The amount you are withdrawing exceeds the available collateral" ; name: "InsufficientFunds" } , { code: 6002 ; msg: "Unauthorized to perform the operation" ; name: "Unauthorized" } , { code: 6003 ; msg: "Arguments passed were invalid" ; name: "InvalidArgument" } , { code: 6004 ; msg: "Invalid mint for transaction" ; name: "InvalidMint" } , { code: 6005 ; msg: "Everlasting account state is invalid" ; name: "InvalidOrderState" } , { code: 6006 ; msg: "Going below Margin maintenance" ; name: "BelowMarginMaintenance" } , { code: 6007 ; msg: "Above Margin maintenance" ; name: "AboveMMF" } , { code: 6008 ; msg: "Couldn't calculate the position value" ; name: "PositionValueCalculationFailure" } , { code: 6009 ; msg: "Pyth account is invalid" ; name: "InvalidPythAccount" } , { code: 6010 ; msg: "Liquidation has not fully completed" ; name: "IncompleteLiquidation" } , { code: 6011 ; msg: "The account has not been marked for liquidation" ; name: "NotMarkedLiquidate" } , { code: 6012 ; msg: "Account is under liquidation" ; name: "UnderLiquidation" } , { code: 6013 ; msg: "Failed to load dex market" ; name: "LoadDexMarketFailure" } , { code: 6014 ; msg: "Failed to load open orders" ; name: "LoadOpenOrdersFailure" } , { code: 6015 ; msg: "Failed to calculate margin ratio" ; name: "CalculateMarginRatioFailure" } , { code: 6016 ; msg: "Current margin fraction is below position initial margin fraction" ; name: "BelowInitialMarginFraction" } , { code: 6017 ; msg: "No active positions to close" ; name: "NoPositionToLiquidate" } , { code: 6018 ; msg: "The collateral pair already exists in the collateral array" ; name: "CollateralAlreadyExists" } , { code: 6019 ; msg: "The collateral array is at full capacity" ; name: "CollateralAtCapacity" } , { code: 6020 ; msg: "The collateral pair does not exist in the collateral array" ; name: "CollateralDoesNotExist" } , { code: 6021 ; msg: "The DEX Market key already exists in perp markets array" ; name: "DexMarketKeyAlreadyExists" } , { code: 6022 ; msg: "The symbol already exists in perp markets array" ; name: "SymbolAlreadyExists" } , { code: 6023 ; msg: "The perp markets array is at full capacity" ; name: "MarketsAtCapacity" } , { code: 6024 ; msg: "The given vault does not match the state vault" ; name: "InvalidVault" } , { code: 6025 ; msg: "The given DEX market key does not match any keys in the perp markets array" ; name: "InvalidDexMarketKey" } , { code: 6026 ; msg: "The open orders account is already initialized" ; name: "OpenOrdersAlreadyInitialized" } , { code: 6027 ; msg: "The limit price is invalid" ; name: "InvalidLimitPrice" } , { code: 6028 ; msg: "The max base quantity is invalid" ; name: "InvalidMaxBaseQuantity" } , { code: 6029 ; msg: "The max quote quantity is invalid" ; name: "InvalidMaxQuoteQuantity" } , { code: 6030 ; msg: "The oracle already exists in the oracle cache" ; name: "OracleAlreadyExists" } , { code: 6031 ; msg: "Oracle cache is at full capacity" ; name: "OracleCacheFull" } , { code: 6032 ; msg: "The given oracle does not exist" ; name: "OracleDoesNotExist" } , { code: 6033 ; msg: "The given oracle key is invalid" ; name: "InvalidOracleKey" } , { code: 6034 ; msg: "The given oracle type is invalid" ; name: "InvalidOracleType" } , { code: 6035 ; msg: "Oracle encountered an issue when fetching accurate price." ; name: "PriceOracleIssue" } , { code: 6036 ; msg: "Pyth oracle is not in trading status." ; name: "InvalidPythStatus" } , { code: 6037 ; msg: "The remaining accounts passed are invalid" ; name: "InvalidRemainingAccounts" } , { code: 6038 ; msg: "Expo is different" ; name: "DifferentExpo" } , { code: 6039 ; msg: "Insufficient funds in insurance" ; name: "InsufficientInsurance" } , { code: 6040 ; msg: "The oracle is invalid" ; name: "InvalidOracle" } , { code: 6041 ; msg: "Oracle last updated time is beyond the valid time since last update" ; name: "OracleNeedsUpdating" } , { code: 6042 ; msg: "The symbol is invalid" ; name: "InvalidSymbol" } , { code: 6043 ; msg: "Negative collateral value" ; name: "NegativeCollateral" } , { code: 6044 ; msg: "There is nothing to repay, cannot use repay only" ; name: "NothingToRepay" } , { code: 6045 ; msg: "There is nothing to repay, cannot use without allow borrow" ; name: "NothingToWithdraw" } , { code: 6046 ; msg: "There is not enough liquidity in the vault to withdraw" ; name: "InsufficientWithdrawalLiquidity" } , { code: 6047 ; msg: "There are open orders that have not been cancelled yet" ; name: "UncancelledOpenOrders" } , { code: 6048 ; msg: "Invalid open orders key" ; name: "InvalidOpenOrdersKey" } , { code: 6049 ; msg: "The asset is not borrowable" ; name: "NotBorrowable" } , { code: 6050 ; msg: "The oracle symbol is invalid" ; name: "InvalidOracleSymbol" } , { code: 6051 ; msg: "There are active positions that have not been closed" ; name: "UnliquidatedActivePositions" } , { code: 6052 ; msg: "There are spot/ borrow positions that have not been liquidated" ; name: "UnliquidatedSpotPositions" } , { code: 6053 ; msg: "Timestamp is invalid" ; name: "InvalidTimestamp" } , { code: 6054 ; msg: "Collateral is already swappable" ; name: "CollateralSwappable" } , { code: 6055 ; msg: "Collateral is not swappable" ; name: "CollateralNotSwappable" } , { code: 6056 ; msg: "Swap did the opposite of what it should have" ; name: "SwapNegative" } , { code: 6057 ; msg: "Can't swap to and from the same collateral" ; name: "SelfSwap" } , { code: 6058 ; msg: "Insufficient supply" ; name: "InsufficientSupply" } , { code: 6059 ; msg: "Oracle has not been recently updated" ; name: "OracleCacheStale" } , { code: 6060 ; msg: "No tokens received when swapping" ; name: "ZeroSwap" } , { code: 6061 ; msg: "Slippage tolerance exceeded" ; name: "SlippageExceeded" } , { code: 6062 ; msg: "Reduce only order was violated" ; name: "ReduceOnlyViolated" } , { code: 6063 ; msg: "Unimplemented" ; name: "Unimplemented" } , { code: 6064 ; msg: "Currently bankrupt" ; name: "Bankrupt" } , { code: 6065 ; msg: "Deposit exceeds deposit limit for the collateral" ; name: "AboveDepositLimit" } , { code: 6066 ; msg: "Below the dust threshold" ; name: "BelowDustThreshold" } , { code: 6067 ; msg: "The liquidation is invalid" ; name: "InvalidLiquidation" } , { code: 6068 ; msg: "The post orders are outside the price bands" ; name: "OutsidePriceBands" } , { code: 6069 ; msg: "The mark price is too far from the index price" ; name: "MarkTooFarFromIndex" } , { code: 6070 ; msg: "FillOrKill order was not completely filled" ; name: "FillOrKillNotFilled" } , { code: 6071 ; msg: "An error occurred during a Zamm operation" ; name: "ZammError" } , { code: 6072 ; msg: "An invalid perp type was used" ; name: "InvalidPerpType" } , { code: 6073 ; msg: "This market is disabled" ; name: "DisabledMarket" } , { code: 6074 ; msg: "This collateral is disabled" ; name: "CollateralDisabled" } , { code: 6075 ; msg: "The X Mint is not associated to the market" ; name: "InvalidXMint" } , { code: 6076 ; msg: "The state key is invalid" ; name: "InvalidState" } , { code: 6077 ; msg: "The zamm key is invalid" ; name: "InvalidZamm" } , { code: 6078 ; msg: "The withdraw amount exceeded the global daily withdraw limit" ; name: "ExceededSecurityWithdrawLimit" } , { code: 6079 ; msg: "Max number of special orders reached" ; name: "SpecialOrdersFull" } , { code: 6080 ; msg: "Special order not triggered" ; name: "SpecialOrderNotTriggered" } , { code: 6081 ; msg: "Special order does not exist" ; name: "SpecialOrderNotFound" } , { code: 6082 ; msg: "There are uncancelled special orders" ; name: "UncancelledSpecialOrders" } ] ; events: [ { fields: [ { index: false ; name: "colIndex" ; type: "u8" } , { index: false ; name: "depositAmount" ; type: "u64" } , { index: false ; name: "marginKey" ; type: "publicKey" } ] ; name: "DepositLog" } , { fields: [ { index: false ; name: "colIndex" ; type: "u8" } , { index: false ; name: "withdrawAmount" ; type: "u64" } , { index: false ; name: "marginKey" ; type: "publicKey" } ] ; name: "WithdrawLog" } , { fields: [ { index: false ; name: "marginKey" ; type: "publicKey" } , { index: false ; name: "baseIndex" ; type: "u8" } , { index: false ; name: "quoteIndex" ; type: "u8" } , { index: false ; name: "baseDelta" ; type: "i64" } , { index: false ; name: "quoteDelta" ; type: "i64" } ] ; name: "SwapLog" } , { fields: [ { index: false ; name: "colIndex" ; type: "u8" } , { index: false ; name: "col" ; type: { defined: "WrappedI80F48" } } ] ; name: "CollateralBalanceLog" } , { fields: [ { index: false ; name: "cancelledBids" ; type: "u64" } , { index: false ; name: "cancelledAsks" ; type: "u64" } ] ; name: "ForceCancelLog" } , { fields: [ { index: false ; name: "liquidationEvent" ; type: { defined: "LiquidationEvent" } } , { index: false ; name: "baseSymbol" ; type: "string" } , { index: false ; name: "quoteSymbol" ; type: { option: "string" } } , { index: false ; name: "liqorMargin" ; type: "publicKey" } , { index: false ; name: "liqeeMargin" ; type: "publicKey" } , { index: false ; name: "assetsToLiqor" ; type: "i64" } , { index: false ; name: "quoteToLiqor" ; type: "i64" } ] ; name: "LiquidationLog" } , { fields: [ { index: false ; name: "baseSymbol" ; type: "string" } , { index: false ; name: "liqorMargin" ; type: "publicKey" } , { index: false ; name: "liqeeMargin" ; type: "publicKey" } , { index: false ; name: "assetsToLiqor" ; type: "i64" } , { index: false ; name: "quoteToLiqor" ; type: "i64" } , { index: false ; name: "insuranceLoss" ; type: "i64" } , { index: false ; name: "socializedLoss" ; type: "i64" } ] ; name: "BankruptcyLog" } , { fields: [ { index: false ; name: "symbols" ; type: { vec: "string" } } , { index: false ; name: "prices" ; type: { vec: { defined: "WrappedI80F48" } } } , { index: false ; name: "twaps" ; type: { vec: { defined: "WrappedI80F48" } } } ] ; name: "CacheOracleLog" } , { fields: [ { index: false ; name: "symbols" ; type: { vec: "string" } } ] ; name: "CacheOracleNoops" } , { fields: [ { index: false ; name: "ir" ; type: { defined: "WrappedI80F48" } } , { index: false ; name: "util" ; type: { defined: "WrappedI80F48" } } , { index: false ; name: "supMul" ; type: { defined: "WrappedI80F48" } } , { index: false ; name: "borMul" ; type: { defined: "WrappedI80F48" } } ] ; name: "CacheIRLog" } , { fields: [ { index: false ; name: "market" ; type: "publicKey" } , { index: false ; name: "takerMargin" ; type: "publicKey" } , { index: false ; name: "makerMargin" ; type: "publicKey" } , { index: false ; name: "dBase" ; type: "i64" } , { index: false ; name: "dQuote" ; type: "i64" } ] ; name: "OtcFill" } , { fields: [ ] ; name: "ControlStateLog" } ] ; instructions: [ { accounts: [ { isMut: false ; isSigner: false ; name: "state" } , { isMut: false ; isSigner: true ; name: "authority" } , { isMut: true ; isSigner: true ; name: "payer" } , { isMut: true ; isSigner: false ; name: "margin" } , { isMut: true ; isSigner: false ; name: "control" } , { isMut: false ; isSigner: false ; name: "rent" } , { isMut: false ; isSigner: false ; name: "systemProgram" } ] ; args: [ { name: "nonce" ; type: "u8" } ] ; name: "createMargin" } , { accounts: [ { isMut: false ; isSigner: false ; name: "state" } , { isMut: false ; isSigner: false ; name: "stateSigner" } , { isMut: true ; isSigner: false ; name: "cache" } , { isMut: false ; isSigner: true ; name: "authority" } , { isMut: true ; isSigner: false ; name: "margin" } , { isMut: true ; isSigner: false ; name: "tokenAccount" } , { isMut: true ; isSigner: false ; name: "vault" } , { isMut: false ; isSigner: false ; name: "tokenProgram" } ] ; args: [ { name: "repayOnly" ; type: "bool" } , { name: "amount" ; type: "u64" } ] ; name: "deposit" } , { accounts: [ { isMut: true ; isSigner: false ; name: "state" } , { isMut: true ; isSigner: false ; name: "stateSigner" } , { isMut: true ; isSigner: false ; name: "cache" } , { isMut: false ; isSigner: true ; name: "authority" } , { isMut: true ; isSigner: false ; name: "margin" } , { isMut: true ; isSigner: false ; name: "control" } , { isMut: true ; isSigner: false ; name: "tokenAccount" } , { isMut: true ; isSigner: false ; name: "vault" } , { isMut: false ; isSigner: false ; name: "tokenProgram" } , { isMut: true ; isSigner: false ; name: "heimdall" } ] ; args: [ { name: "allowBorrow" ; type: "bool" } , { name: "amount" ; type: "u64" } ] ; name: "withdraw" } , { accounts: [ { isMut: false ; isSigner: false ; name: "state" } , { isMut: true ; isSigner: false ; name: "stateSigner" } , { isMut: false ; isSigner: true ; name: "authority" } , { isMut: false ; isSigner: true ; name: "payer" } , { isMut: true ; isSigner: false ; name: "margin" } , { isMut: true ; isSigner: false ; name: "control" } , { isMut: true ; isSigner: false ; name: "openOrders" } , { isMut: true ; isSigner: false ; name: "dexMarket" } , { isMut: false ; isSigner: false ; name: "dexProgram" } , { isMut: false ; isSigner: false ; name: "rent" } , { isMut: false ; isSigner: false ; name: "systemProgram" } ] ; args: [ ] ; name: "createPerpOpenOrders" } , { accounts: [ { isMut: false ; isSigner: false ; name: "state" } , { isMut: true ; isSigner: false ; name: "stateSigner" } , { isMut: true ; isSigner: false ; name: "cache" } , { isMut: false ; isSigner: true ; name: "authority" } , { isMut: true ; isSigner: false ; name: "margin" } , { isMut: true ; isSigner: false ; name: "control" } , { isMut: true ; isSigner: false ; name: "openOrders" } , { isMut: true ; isSigner: false ; name: "dexMarket" } , { isMut: true ; isSigner: false ; name: "reqQ" } , { isMut: true ; isSigner: false ; name: "eventQ" } , { isMut: true ; isSigner: false ; name: "marketBids" } , { isMut: true ; isSigner: false ; name: "marketAsks" } , { isMut: false ; isSigner: false ; name: "dexProgram" } , { isMut: false ; isSigner: false ; name: "rent" } ] ; args: [ { name: "isLong" ; type: "bool" } , { name: "limitPrice" ; type: "u64" } , { name: "maxBaseQuantity" ; type: "u64" } , { name: "maxQuoteQuantity" ; type: "u64" } , { name: "orderType" ; type: { defined: "OrderType" } } , { name: "limit" ; type: "u16" } , { name: "clientId" ; type: "u64" } ] ; name: "placePerpOrder" } , { accounts: [ { isMut: false ; isSigner: false ; name: "state" } , { isMut: true ; isSigner: false ; name: "stateSigner" } , { isMut: true ; isSigner: false ; name: "cache" } , { isMut: false ; isSigner: true ; name: "authority" } , { isMut: true ; isSigner: false ; name: "margin" } , { isMut: true ; isSigner: false ; name: "control" } , { isMut: true ; isSigner: false ; name: "openOrders" } , { isMut: true ; isSigner: false ; name: "dexMarket" } , { isMut: true ; isSigner: false ; name: "reqQ" } , { isMut: true ; isSigner: false ; name: "eventQ" } , { isMut: true ; isSigner: false ; name: "marketBids" } , { isMut: true ; isSigner: false ; name: "marketAsks" } , { isMut: false ; isSigner: false ; name: "dexProgram" } , { isMut: false ; isSigner: false ; name: "rent" } ] ; args: [ { name: "isLong" ; type: "bool" } , { name: "limitPrice" ; type: "u64" } , { name: "maxBaseQuantity" ; type: "u64" } , { name: "maxQuoteQuantity" ; type: "u64" } , { name: "orderType" ; type: { defined: "OrderType" } } , { name: "limit" ; type: "u16" } , { name: "clientId" ; type: "u64" } , { name: "maxTs" ; type: "i64" } ] ; name: "placePerpOrderWithMaxTs" } , { accounts: [ { isMut: false ; isSigner: false ; name: "state" } , { isMut: true ; isSigner: false ; name: "cache" } , { isMut: false ; isSigner: true ; name: "authority" } , { isMut: true ; isSigner: false ; name: "margin" } , { isMut: true ; isSigner: false ; name: "control" } , { isMut: true ; isSigner: false ; name: "openOrders" } , { isMut: true ; isSigner: false ; name: "dexMarket" } , { isMut: true ; isSigner: false ; name: "marketBids" } , { isMut: true ; isSigner: false ; name: "marketAsks" } , { isMut: true ; isSigner: false ; name: "eventQ" } , { isMut: false ; isSigner: false ; name: "dexProgram" } ] ; args: [ { name: "orderId" ; type: { option: "u128" } } , { name: "isLong" ; type: { option: "bool" } } , { name: "clientId" ; type: { option: "u64" } } ] ; name: "cancelPerpOrder" } , { accounts: [ { isMut: false ; isSigner: true ; name: "authority" } , { isMut: false ; isSigner: false ; name: "state" } , { isMut: true ; isSigner: false ; name: "cache" } , { isMut: true ; isSigner: false ; name: "stateSigner" } , { isMut: true ; isSigner: false ; name: "margin" } , { isMut: true ; isSigner: false ; name: "control" } , { isMut: true ; isSigner: false ; name: "oo" } , { isMut: true ; isSigner: false ; name: "dexMarket" } , { isMut: true ; isSigner: false ; name: "reqQ" } , { isMut: true ; isSigner: false ; name: "eventQ" } , { isMut: true ; isSigner: false ; name: "marketBids" } , { isMut: true ; isSigner: false ; name: "marketAsks" } , { isMut: false ; isSigner: false ; name: "dexProgram" } ] ; args: [ { name: "limit" ; type: "u16" } ] ; name: "cancelAllPerpOrders" } , { accounts: [ { isMut: false ; isSigner: false ; name: "state" } , { isMut: true ; isSigner: false ; name: "stateSigner" } , { isMut: true ; isSigner: false ; name: "cache" } , { isMut: true ; isSigner: false ; name: "dexMarket" } , { isMut: true ; isSigner: false ; name: "marketBids" } , { isMut: true ; isSigner: false ; name: "marketAsks" } , { isMut: false ; isSigner: false ; name: "dexProgram" } ] ; args: [ ] ; name: "updatePerpFunding" } , { accounts: [ { isMut: false ; isSigner: true ; name: "authority" } , { isMut: false ; isSigner: false ; name: "state" } , { isMut: true ; isSigner: false ; name: "stateSigner" } , { isMut: true ; isSigner: false ; name: "cache" } , { isMut: true ; isSigner: false ; name: "margin" } , { isMut: true ; isSigner: false ; name: "control" } , { isMut: true ; isSigner: false ; name: "openOrders" } , { isMut: true ; isSigner: false ; name: "dexMarket" } , { isMut: false ; isSigner: false ; name: "dexProgram" } ] ; args: [ ] ; name: "settleFunds" } , { accounts: [ { isMut: false ; isSigner: true ; name: "pruner" } , { isMut: false ; isSigner: false ; name: "state" } , { isMut: true ; isSigner: false ; name: "cache" } , { isMut: true ; isSigner: false ; name: "stateSigner" } , { isMut: true ; isSigner: false ; name: "liqeeMargin" } , { isMut: true ; isSigner: false ; name: "liqeeControl" } , { isMut: true ; isSigner: false ; name: "liqeeOo" } , { isMut: true ; isSigner: false ; name: "dexMarket" } , { isMut: true ; isSigner: false ; name: "reqQ" } , { isMut: true ; isSigner: false ; name: "eventQ" } , { isMut: true ; isSigner: false ; name: "marketBids" } , { isMut: true ; isSigner: false ; name: "marketAsks" } , { isMut: false ; isSigner: false ; name: "dexProgram" } ] ; args: [ { name: "limit" ; type: "u16" } ] ; name: "forceCancelAllPerpOrders" } , { accounts: [ { isMut: false ; isSigner: false ; name: "state" } , { isMut: true ; isSigner: false ; name: "cache" } , { isMut: true ; isSigner: false ; name: "stateSigner" } , { isMut: false ; isSigner: true ; name: "liqor" } , { isMut: true ; isSigner: false ; name: "liqorMargin" } , { isMut: true ; isSigner: false ; name: "liqorControl" } , { isMut: true ; isSigner: false ; name: "liqorOo" } , { isMut: false ; isSigner: false ; name: "liqee" } , { isMut: true ; isSigner: false ; name: "liqeeMargin" } , { isMut: true ; isSigner: false ; name: "liqeeControl" } , { isMut: true ; isSigner: false ; name: "liqeeOo" } , { isMut: true ; isSigner: false ; name: "dexMarket" } , { isMut: true ; isSigner: false ; name: "reqQ" } , { isMut: true ; isSigner: false ; name: "eventQ" } , { isMut: true ; isSigner: false ; name: "marketBids" } , { isMut: true ; isSigner: false ; name: "marketAsks" } , { isMut: false ; isSigner: false ; name: "dexProgram" } ] ; args: [ { name: "assetTransferLots" ; type: "u64" } ] ; name: "liquidatePerpPosition" } , { accounts: [ { isMut: false ; isSigner: false ; name: "state" } , { isMut: true ; isSigner: false ; name: "cache" } , { isMut: false ; isSigner: true ; name: "liqor" } , { isMut: true ; isSigner: false ; name: "liqorMargin" } , { isMut: true ; isSigner: false ; name: "liqorControl" } , { isMut: true ; isSigner: false ; name: "liqeeMargin" } , { isMut: true ; isSigner: false ; name: "liqeeControl" } , { isMut: false ; isSigner: false ; name: "assetMint" } , { isMut: false ; isSigner: false ; name: "quoteMint" } ] ; args: [ { name: "assetTransferAmount" ; type: "i64" } ] ; name: "liquidateSpotPosition" } , { accounts: [ { isMut: true ; isSigner: false ; name: "state" } , { isMut: true ; isSigner: false ; name: "stateSigner" } , { isMut: true ; isSigner: false ; name: "cache" } , { isMut: false ; isSigner: true ; name: "liqor" } , { isMut: true ; isSigner: false ; name: "liqorMargin" } , { isMut: true ; isSigner: false ; name: "liqorControl" } , { isMut: true ; isSigner: false ; name: "liqeeMargin" } , { isMut: true ; isSigner: false ; name: "liqeeControl" } , { isMut: false ; isSigner: false ; name: "assetMint" } ] ; args: [ ] ; name: "settleBankruptcy" } , { accounts: [ { isMut: false ; isSigner: true ; name: "authority" } , { isMut: true ; isSigner: false ; name: "state" } , { isMut: false ; isSigner: false ; name: "stateSigner" } , { isMut: true ; isSigner: false ; name: "cache" } , { isMut: true ; isSigner: false ; name: "margin" } , { isMut: true ; isSigner: false ; name: "control" } , { isMut: false ; isSigner: false ; name: "quoteMint" } , { isMut: true ; isSigner: false ; name: "quoteVault" } , { isMut: false ; isSigner: false ; name: "assetMint" } , { isMut: true ; isSigner: false ; name: "assetVault" } , { isMut: true ; isSigner: false ; name: "swapFeeVault" } , { isMut: true ; isSigner: false ; name: "serumOpenOrders" } , { isMut: true ; isSigner: false ; name: "serumMarket" } , { isMut: true ; isSigner: false ; name: "serumRequestQueue" } , { isMut: true ; isSigner: false ; name: "serumEventQueue" } , { isMut: true ; isSigner: false ; name: "serumBids" } , { isMut: true ; isSigner: false ; name: "serumAsks" } , { isMut: true ; isSigner: false ; name: "serumCoinVault" } , { isMut: true ; isSigner: false ; name: "serumPcVault" } , { isMut: false ; isSigner: false ; name: "serumVaultSigner" } , { isMut: false ; isSigner: false ; name: "srmSpotProgram" } , { isMut: false ; isSigner: false ; name: "tokenProgram" } , { isMut: false ; isSigner: false ; name: "rent" } ] ; args: [ { name: "buy" ; type: "bool" } , { name: "allowBorrow" ; type: "bool" } , { name: "amount" ; type: "u64" } , { name: "minRate" ; type: "u64" } ] ; name: "swap" } , { accounts: [ { isMut: false ; isSigner: true ; name: "signer" } , { isMut: false ; isSigner: false ; name: "state" } , { isMut: true ; isSigner: false ; name: "cache" } , { isMut: false ; isSigner: false ; name: "dexProgram" } ] ; args: [ { name: "symbols" ; type: { vec: "string" } } , { name: "mockPrices" ; type: { option: { vec: { option: "u64" } } } } ] ; name: "cacheOracle" } , { accounts: [ { isMut: false ; isSigner: true ; name: "signer" } , { isMut: false ; isSigner: false ; name: "state" } , { isMut: true ; isSigner: false ; name: "cache" } ] ; args: [ { name: "start" ; type: "u8" } , { name: "end" ; type: "u8" } ] ; name: "cacheInterestRates" } , { accounts: [ { isMut: true ; isSigner: false ; name: "state" } , { isMut: true ; isSigner: false ; name: "stateSigner" } , { isMut: false ; isSigner: false ; name: "dexProgram" } , { isMut: true ; isSigner: false ; name: "market" } , { isMut: true ; isSigner: false ; name: "eventQueue" } ] ; args: [ { name: "limit" ; type: "u16" } ] ; name: "consumeEvents" } , { accounts: [ { isMut: false ; isSigner: false ; name: "state" } , { isMut: true ; isSigner: false ; name: "stateSigner" } , { isMut: true ; isSigner: false ; name: "cache" } , { isMut: false ; isSigner: false ; name: "dexProgram" } , { isMut: true ; isSigner: false ; name: "market" } ] ; args: [ ] ; name: "crankPnl" } , { accounts: [ { isMut: false ; isSigner: false ; name: "state" } , { isMut: false ; isSigner: true ; name: "authority" } , { isMut: true ; isSigner: true ; name: "payer" } , { isMut: true ; isSigner: false ; name: "specialOrders" } , { isMut: false ; isSigner: false ; name: "rent" } , { isMut: false ; isSigner: false ; name: "systemProgram" } ] ; args: [ ] ; name: "createSpecialOrdersAccount" } , { accounts: [ { isMut: false ; isSigner: false ; name: "state" } , { isMut: false ; isSigner: true ; name: "authority" } , { isMut: true ; isSigner: false ; name: "specialOrders" } , { isMut: false ; isSigner: false ; name: "dexMarket" } , { isMut: false ; isSigner: false ; name: "systemProgram" } ] ; args: [ { name: "isLong" ; type: "bool" } , { name: "specialOrderType" ; type: { defined: "SpecialOrderType" } } , { name: "triggerPrice" ; type: "u64" } , { name: "limitPrice" ; type: "u64" } , { name: "size" ; type: "u64" } ] ; name: "placeSpecialOrder" } , { accounts: [ { isMut: false ; isSigner: false ; name: "state" } , { isMut: false ; isSigner: true ; name: "authority" } , { isMut: true ; isSigner: false ; name: "specialOrders" } , { isMut: false ; isSigner: false ; name: "dexMarket" } ] ; args: [ { name: "id" ; type: "u16" } ] ; name: "cancelSpecialOrder" } , { accounts: [ { isMut: false ; isSigner: false ; name: "state" } , { isMut: true ; isSigner: false ; name: "stateSigner" } , { isMut: true ; isSigner: false ; name: "cache" } , { isMut: true ; isSigner: true ; name: "payer" } , { isMut: false ; isSigner: false ; name: "authority" } , { isMut: true ; isSigner: false ; name: "margin" } , { isMut: true ; isSigner: false ; name: "control" } , { isMut: true ; isSigner: false ; name: "specialOrders" } , { isMut: true ; isSigner: false ; name: "openOrders" } , { isMut: true ; isSigner: false ; name: "dexMarket" } , { isMut: true ; isSigner: false ; name: "reqQ" } , { isMut: true ; isSigner: false ; name: "eventQ" } , { isMut: true ; isSigner: false ; name: "marketBids" } , { isMut: true ; isSigner: false ; name: "marketAsks" } , { isMut: false ; isSigner: false ; name: "dexProgram" } , { isMut: false ; isSigner: false ; name: "rent" } ] ; args: [ { name: "id" ; type: "u16" } ] ; name: "executeSpecialOrder" } ] ; name: "zo" ; types: [ { name: "AddCollateralArgs" ; type: { fields: [ { name: "oracleSymbol" ; type: "string" } , { name: "weight" ; type: "u16" } , { name: "isBorrowable" ; type: "bool" } , { name: "optimalUtil" ; type: "u16" } , { name: "optimalRate" ; type: "u16" } , { name: "maxRate" ; type: "u16" } , { name: "liqFee" ; type: "u16" } , { name: "ogFee" ; type: "u16" } , { name: "maxDeposit" ; type: "u64" } , { name: "dustThreshold" ; type: "u16" } ] ; kind: "struct" } } , { name: "OracleSource" ; type: { fields: [ { name: "ty" ; type: { defined: "OracleType" } } , { name: "key" ; type: "publicKey" } ] ; kind: "struct" } } , { name: "OraclePrice" ; type: { fields: [ { name: "price" ; type: { defined: "WrappedI80F48" } } , { name: "twap" ; type: { defined: "WrappedI80F48" } } ] ; kind: "struct" } } , { name: "BorrowCache" ; type: { fields: [ { name: "supply" ; type: { defined: "WrappedI80F48" } } , { name: "borrows" ; type: { defined: "WrappedI80F48" } } , { name: "supplyMultiplier" ; type: { defined: "WrappedI80F48" } } , { name: "borrowMultiplier" ; type: { defined: "WrappedI80F48" } } , { name: "lastUpdated" ; type: "u64" } ] ; kind: "struct" } } , { name: "OracleCache" ; type: { fields: [ { name: "symbol" ; type: { defined: "Symbol" } } , { name: "sources" ; type: { array: [ { defined: "OracleSource" } , 3 ] } } , { name: "lastUpdated" ; type: "u64" } , { name: "price" ; type: { defined: "WrappedI80F48" } } , { name: "twap" ; type: { defined: "WrappedI80F48" } } , { name: "baseDecimals" ; type: "u8" } , { name: "quoteDecimals" ; type: "u8" } ] ; kind: "struct" } } , { name: "MarkCache" ; type: { fields: [ { name: "price" ; type: { defined: "WrappedI80F48" } } , { name: "twap" ; type: { defined: "TwapInfo" } } ] ; kind: "struct" } } , { name: "TwapInfo" ; type: { fields: [ { name: "cumulAvg" ; type: { defined: "WrappedI80F48" } } , { name: "open" ; type: { defined: "WrappedI80F48" } } , { name: "high" ; type: { defined: "WrappedI80F48" } } , { name: "low" ; type: { defined: "WrappedI80F48" } } , { name: "close" ; type: { defined: "WrappedI80F48" } } , { name: "lastSampleStartTime" ; type: "u64" } ] ; kind: "struct" } } , { name: "OpenOrdersInfo" ; type: { fields: [ { name: "key" ; type: "publicKey" } , { name: "nativePcTotal" ; type: "i64" } , { name: "posSize" ; type: "i64" } , { name: "realizedPnl" ; type: "i64" } , { name: "coinOnBids" ; type: "u64" } , { name: "coinOnAsks" ; type: "u64" } , { name: "orderCount" ; type: "u8" } , { name: "fundingIndex" ; type: "i128" } ] ; kind: "struct" } } , { name: "SpecialOrdersInfo" ; type: { fields: [ { name: "id" ; type: "u16" } , { name: "market" ; type: "publicKey" } , { name: "ty" ; type: { defined: "SpecialOrderType" } } , { name: "isLong" ; type: "bool" } , { name: "triggerPrice" ; type: "u64" } , { name: "limitPrice" ; type: "u64" } , { name: "size" ; type: "u64" } , { name: "fee" ; type: "u64" } ] ; kind: "struct" } } , { name: "CollateralInfo" ; type: { fields: [ { name: "mint" ; type: "publicKey" } , { name: "oracleSymbol" ; type: { defined: "Symbol" } } , { name: "decimals" ; type: "u8" } , { name: "weight" ; type: "u16" } , { name: "liqFee" ; type: "u16" } , { name: "isBorrowable" ; type: "bool" } , { name: "optimalUtil" ; type: "u16" } , { name: "optimalRate" ; type: "u16" } , { name: "maxRate" ; type: "u16" } , { name: "ogFee" ; type: "u16" } , { name: "isSwappable" ; type: "bool" } , { name: "serumOpenOrders" ; type: "publicKey" } , { name: "maxDeposit" ; type: "u64" } , { name: "dustThreshold" ; type: "u16" } , { name: "padding" ; type: { array: [ "u8" , 384 ] } } ] ; kind: "struct" } } , { name: "PerpMarketInfo" ; type: { fields: [ { name: "symbol" ; type: { defined: "Symbol" } } , { name: "oracleSymbol" ; type: { defined: "Symbol" } } , { name: "perpType" ; type: { defined: "PerpType" } } , { name: "assetDecimals" ; type: "u8" } , { name: "assetLotSize" ; type: "u64" } , { name: "quoteLotSize" ; type: "u64" } , { name: "strike" ; type: "u64" } , { name: "baseImf" ; type: "u16" } , { name: "liqFee" ; type: "u16" } , { name: "dexMarket" ; type: "publicKey" } , { name: "padding" ; type: { array: [ "u8" , 320 ] } } ] ; kind: "struct" } } , { name: "Symbol" ; type: { fields: [ { name: "data" ; type: { array: [ "u8" , 24 ] } } ] ; kind: "struct" } } , { name: "WrappedI80F48" ; type: { fields: [ { name: "data" ; type: "i128" } ] ; kind: "struct" } } , { name: "LiquidationEvent" ; type: { kind: "enum" ; variants: [ { name: "Perp" } , { name: "Spot" } ] } } , { name: "MfReturnOption" ; type: { kind: "enum" ; variants: [ { name: "Imf" } , { name: "Mmf" } , { name: "Cancel" } , { name: "Both" } ] } } , { name: "OracleType" ; type: { kind: "enum" ; variants: [ { name: "Nil" } , { name: "Pyth" } , { name: "Switchboard" } ] } } , { name: "FractionType" ; type: { kind: "enum" ; variants: [ { name: "Maintenance" } , { name: "Initial" } , { name: "Cancel" } ] } } , { name: "OrderType" ; type: { kind: "enum" ; variants: [ { name: "Limit" } , { name: "ImmediateOrCancel" } , { name: "PostOnly" } , { name: "ReduceOnlyIoc" } , { name: "ReduceOnlyLimit" } , { name: "FillOrKill" } ] } } , { name: "SpecialOrderType" ; type: { kind: "enum" ; variants: [ { name: "TakeProfitMarket" } , { name: "TakeProfitLimit" } , { name: "StopLossMarket" } , { name: "StopLossLimit" } ] } } , { name: "PerpType" ; type: { kind: "enum" ; variants: [ { name: "Future" } , { name: "CallOption" } , { name: "PutOption" } , { name: "Square" } ] } } , { name: "Side" ; type: { kind: "enum" ; variants: [ { name: "Bid" } , { name: "Ask" } ] } } ] ; version: "0.7.0" }
Type declaration accounts: [ { name: "cache" ; type: { fields: [ { name: "oracles" ; type: { array: [ { defined: "OracleCache" } , 25 ] } } , { name: "marks" ; type: { array: [ { defined: "MarkCache" } , 50 ] } } , { name: "fundingCache" ; type: { array: [ "i128" , 50 ] } } , { name: "borrowCache" ; type: { array: [ { defined: "BorrowCache" } , 25 ] } } ] ; kind: "struct" } } , { name: "control" ; type: { fields: [ { name: "authority" ; type: "publicKey" } , { name: "openOrdersAgg" ; type: { array: [ { defined: "OpenOrdersInfo" } , 50 ] } } ] ; kind: "struct" } } , { name: "globalState" ; type: { fields: [ { name: "globalNonce" ; type: "u8" } , { name: "state" ; type: "publicKey" } , { name: "padding" ; type: { array: [ "u8" , 1024 ] } } ] ; kind: "struct" } } , { name: "heimdall" ; type: { fields: [ { name: "nonce" ; type: "u8" } , { name: "dailyWdLimit" ; type: "u64" } , { name: "dailyWdStartTs" ; type: "u64" } , { name: "dailyWithdrawn" ; type: { array: [ "u64" , 25 ] } } , { name: "constantPrices" ; type: { array: [ "u64" , 25 ] } } , { name: "padding" ; type: { array: [ "u8" , 1024 ] } } ] ; kind: "struct" } } , { name: "margin" ; type: { fields: [ { name: "nonce" ; type: "u8" } , { name: "authority" ; type: "publicKey" } , { name: "collateral" ; type: { array: [ { defined: "WrappedI80F48" } , 25 ] } } , { name: "control" ; type: "publicKey" } , { name: "padding" ; type: { array: [ "u8" , 320 ] } } ] ; kind: "struct" } } , { name: "specialOrders" ; type: { fields: [ { name: "nonce" ; type: "u8" } , { name: "authority" ; type: "publicKey" } , { name: "prevId" ; type: "u16" } , { name: "entries" ; type: { array: [ { defined: "SpecialOrdersInfo" } , 20 ] } } , { name: "padding" ; type: { array: [ "u8" , 128 ] } } ] ; kind: "struct" } } , { name: "state" ; type: { fields: [ { name: "signerNonce" ; type: "u8" } , { name: "admin" ; type: "publicKey" } , { name: "cache" ; type: "publicKey" } , { name: "swapFeeVault" ; type: "publicKey" } , { name: "insurance" ; type: "u64" } , { name: "feesAccrued" ; type: { array: [ "u64" , 25 ] } } , { name: "vaults" ; type: { array: [ "publicKey" , 25 ] } } , { name: "collaterals" ; type: { array: [ { defined: "CollateralInfo" } , 25 ] } } , { name: "perpMarkets" ; type: { array: [ { defined: "PerpMarketInfo" } , 50 ] } } , { name: "totalCollaterals" ; type: "u16" } , { name: "totalMarkets" ; type: "u16" } , { name: "padding" ; type: { array: [ "u8" , 1280 ] } } ] ; kind: "struct" } } ] constants: [ { name: "SPOT_INITIAL_MARGIN_REQ" ; type: "u64" ; value: "1_100_000" } , { name: "SPOT_MAINT_MARGIN_REQ" ; type: "u64" ; value: "1_030_000" } , { name: "DUST_THRESHOLD" ; type: "i64" ; value: "1_000" } , { name: "MAX_SPECIAL_ORDERS" ; type: { defined: "usize" } ; value: "20" } , { name: "SPECIAL_ORDER_FEE" ; type: "u64" ; value: "200_000" } , { name: "ORACLE_STALENESS_THRESH" ; type: "u64" ; value: "300" } , { name: "TWAP_STALENESS_THRESH" ; type: "u64" ; value: "60" } , { name: "TWAP_SAMPLE_DT" ; type: "u64" ; value: "60" } , { name: "TWAP_SAMPLES_PER_H" ; type: "u64" ; value: "60" } , { name: "DEFAULT_IR_MULTIPLIER" ; type: "u64" ; value: "1_000_000" } , { name: "MAX_ORACLE_SOURCES" ; type: { defined: "usize" } ; value: "3" } , { name: "MAX_COLLATERALS" ; type: { defined: "usize" } ; value: "25" } , { name: "MAX_MARKETS" ; type: { defined: "usize" } ; value: "50" } , { name: "DEBUG_LOG" ; type: "string" ; value: "\"DEBUG\"" } ] errors: [ { code: 6000 ; msg: "A math failure occured, likely due to overflow" ; name: "MathFailure" } , { code: 6001 ; msg: "The amount you are withdrawing exceeds the available collateral" ; name: "InsufficientFunds" } , { code: 6002 ; msg: "Unauthorized to perform the operation" ; name: "Unauthorized" } , { code: 6003 ; msg: "Arguments passed were invalid" ; name: "InvalidArgument" } , { code: 6004 ; msg: "Invalid mint for transaction" ; name: "InvalidMint" } , { code: 6005 ; msg: "Everlasting account state is invalid" ; name: "InvalidOrderState" } , { code: 6006 ; msg: "Going below Margin maintenance" ; name: "BelowMarginMaintenance" } , { code: 6007 ; msg: "Above Margin maintenance" ; name: "AboveMMF" } , { code: 6008 ; msg: "Couldn't calculate the position value" ; name: "PositionValueCalculationFailure" } , { code: 6009 ; msg: "Pyth account is invalid" ; name: "InvalidPythAccount" } , { code: 6010 ; msg: "Liquidation has not fully completed" ; name: "IncompleteLiquidation" } , { code: 6011 ; msg: "The account has not been marked for liquidation" ; name: "NotMarkedLiquidate" } , { code: 6012 ; msg: "Account is under liquidation" ; name: "UnderLiquidation" } , { code: 6013 ; msg: "Failed to load dex market" ; name: "LoadDexMarketFailure" } , { code: 6014 ; msg: "Failed to load open orders" ; name: "LoadOpenOrdersFailure" } , { code: 6015 ; msg: "Failed to calculate margin ratio" ; name: "CalculateMarginRatioFailure" } , { code: 6016 ; msg: "Current margin fraction is below position initial margin fraction" ; name: "BelowInitialMarginFraction" } , { code: 6017 ; msg: "No active positions to close" ; name: "NoPositionToLiquidate" } , { code: 6018 ; msg: "The collateral pair already exists in the collateral array" ; name: "CollateralAlreadyExists" } , { code: 6019 ; msg: "The collateral array is at full capacity" ; name: "CollateralAtCapacity" } , { code: 6020 ; msg: "The collateral pair does not exist in the collateral array" ; name: "CollateralDoesNotExist" } , { code: 6021 ; msg: "The DEX Market key already exists in perp markets array" ; name: "DexMarketKeyAlreadyExists" } , { code: 6022 ; msg: "The symbol already exists in perp markets array" ; name: "SymbolAlreadyExists" } , { code: 6023 ; msg: "The perp markets array is at full capacity" ; name: "MarketsAtCapacity" } , { code: 6024 ; msg: "The given vault does not match the state vault" ; name: "InvalidVault" } , { code: 6025 ; msg: "The given DEX market key does not match any keys in the perp markets array" ; name: "InvalidDexMarketKey" } , { code: 6026 ; msg: "The open orders account is already initialized" ; name: "OpenOrdersAlreadyInitialized" } , { code: 6027 ; msg: "The limit price is invalid" ; name: "InvalidLimitPrice" } , { code: 6028 ; msg: "The max base quantity is invalid" ; name: "InvalidMaxBaseQuantity" } , { code: 6029 ; msg: "The max quote quantity is invalid" ; name: "InvalidMaxQuoteQuantity" } , { code: 6030 ; msg: "The oracle already exists in the oracle cache" ; name: "OracleAlreadyExists" } , { code: 6031 ; msg: "Oracle cache is at full capacity" ; name: "OracleCacheFull" } , { code: 6032 ; msg: "The given oracle does not exist" ; name: "OracleDoesNotExist" } , { code: 6033 ; msg: "The given oracle key is invalid" ; name: "InvalidOracleKey" } , { code: 6034 ; msg: "The given oracle type is invalid" ; name: "InvalidOracleType" } , { code: 6035 ; msg: "Oracle encountered an issue when fetching accurate price." ; name: "PriceOracleIssue" } , { code: 6036 ; msg: "Pyth oracle is not in trading status." ; name: "InvalidPythStatus" } , { code: 6037 ; msg: "The remaining accounts passed are invalid" ; name: "InvalidRemainingAccounts" } , { code: 6038 ; msg: "Expo is different" ; name: "DifferentExpo" } , { code: 6039 ; msg: "Insufficient funds in insurance" ; name: "InsufficientInsurance" } , { code: 6040 ; msg: "The oracle is invalid" ; name: "InvalidOracle" } , { code: 6041 ; msg: "Oracle last updated time is beyond the valid time since last update" ; name: "OracleNeedsUpdating" } , { code: 6042 ; msg: "The symbol is invalid" ; name: "InvalidSymbol" } , { code: 6043 ; msg: "Negative collateral value" ; name: "NegativeCollateral" } , { code: 6044 ; msg: "There is nothing to repay, cannot use repay only" ; name: "NothingToRepay" } , { code: 6045 ; msg: "There is nothing to repay, cannot use without allow borrow" ; name: "NothingToWithdraw" } , { code: 6046 ; msg: "There is not enough liquidity in the vault to withdraw" ; name: "InsufficientWithdrawalLiquidity" } , { code: 6047 ; msg: "There are open orders that have not been cancelled yet" ; name: "UncancelledOpenOrders" } , { code: 6048 ; msg: "Invalid open orders key" ; name: "InvalidOpenOrdersKey" } , { code: 6049 ; msg: "The asset is not borrowable" ; name: "NotBorrowable" } , { code: 6050 ; msg: "The oracle symbol is invalid" ; name: "InvalidOracleSymbol" } , { code: 6051 ; msg: "There are active positions that have not been closed" ; name: "UnliquidatedActivePositions" } , { code: 6052 ; msg: "There are spot/ borrow positions that have not been liquidated" ; name: "UnliquidatedSpotPositions" } , { code: 6053 ; msg: "Timestamp is invalid" ; name: "InvalidTimestamp" } , { code: 6054 ; msg: "Collateral is already swappable" ; name: "CollateralSwappable" } , { code: 6055 ; msg: "Collateral is not swappable" ; name: "CollateralNotSwappable" } , { code: 6056 ; msg: "Swap did the opposite of what it should have" ; name: "SwapNegative" } , { code: 6057 ; msg: "Can't swap to and from the same collateral" ; name: "SelfSwap" } , { code: 6058 ; msg: "Insufficient supply" ; name: "InsufficientSupply" } , { code: 6059 ; msg: "Oracle has not been recently updated" ; name: "OracleCacheStale" } , { code: 6060 ; msg: "No tokens received when swapping" ; name: "ZeroSwap" } , { code: 6061 ; msg: "Slippage tolerance exceeded" ; name: "SlippageExceeded" } , { code: 6062 ; msg: "Reduce only order was violated" ; name: "ReduceOnlyViolated" } , { code: 6063 ; msg: "Unimplemented" ; name: "Unimplemented" } , { code: 6064 ; msg: "Currently bankrupt" ; name: "Bankrupt" } , { code: 6065 ; msg: "Deposit exceeds deposit limit for the collateral" ; name: "AboveDepositLimit" } , { code: 6066 ; msg: "Below the dust threshold" ; name: "BelowDustThreshold" } , { code: 6067 ; msg: "The liquidation is invalid" ; name: "InvalidLiquidation" } , { code: 6068 ; msg: "The post orders are outside the price bands" ; name: "OutsidePriceBands" } , { code: 6069 ; msg: "The mark price is too far from the index price" ; name: "MarkTooFarFromIndex" } , { code: 6070 ; msg: "FillOrKill order was not completely filled" ; name: "FillOrKillNotFilled" } , { code: 6071 ; msg: "An error occurred during a Zamm operation" ; name: "ZammError" } , { code: 6072 ; msg: "An invalid perp type was used" ; name: "InvalidPerpType" } , { code: 6073 ; msg: "This market is disabled" ; name: "DisabledMarket" } , { code: 6074 ; msg: "This collateral is disabled" ; name: "CollateralDisabled" } , { code: 6075 ; msg: "The X Mint is not associated to the market" ; name: "InvalidXMint" } , { code: 6076 ; msg: "The state key is invalid" ; name: "InvalidState" } , { code: 6077 ; msg: "The zamm key is invalid" ; name: "InvalidZamm" } , { code: 6078 ; msg: "The withdraw amount exceeded the global daily withdraw limit" ; name: "ExceededSecurityWithdrawLimit" } , { code: 6079 ; msg: "Max number of special orders reached" ; name: "SpecialOrdersFull" } , { code: 6080 ; msg: "Special order not triggered" ; name: "SpecialOrderNotTriggered" } , { code: 6081 ; msg: "Special order does not exist" ; name: "SpecialOrderNotFound" } , { code: 6082 ; msg: "There are uncancelled special orders" ; name: "UncancelledSpecialOrders" } ] events: [ { fields: [ { index: false ; name: "colIndex" ; type: "u8" } , { index: false ; name: "depositAmount" ; type: "u64" } , { index: false ; name: "marginKey" ; type: "publicKey" } ] ; name: "DepositLog" } , { fields: [ { index: false ; name: "colIndex" ; type: "u8" } , { index: false ; name: "withdrawAmount" ; type: "u64" } , { index: false ; name: "marginKey" ; type: "publicKey" } ] ; name: "WithdrawLog" } , { fields: [ { index: false ; name: "marginKey" ; type: "publicKey" } , { index: false ; name: "baseIndex" ; type: "u8" } , { index: false ; name: "quoteIndex" ; type: "u8" } , { index: false ; name: "baseDelta" ; type: "i64" } , { index: false ; name: "quoteDelta" ; type: "i64" } ] ; name: "SwapLog" } , { fields: [ { index: false ; name: "colIndex" ; type: "u8" } , { index: false ; name: "col" ; type: { defined: "WrappedI80F48" } } ] ; name: "CollateralBalanceLog" } , { fields: [ { index: false ; name: "cancelledBids" ; type: "u64" } , { index: false ; name: "cancelledAsks" ; type: "u64" } ] ; name: "ForceCancelLog" } , { fields: [ { index: false ; name: "liquidationEvent" ; type: { defined: "LiquidationEvent" } } , { index: false ; name: "baseSymbol" ; type: "string" } , { index: false ; name: "quoteSymbol" ; type: { option: "string" } } , { index: false ; name: "liqorMargin" ; type: "publicKey" } , { index: false ; name: "liqeeMargin" ; type: "publicKey" } , { index: false ; name: "assetsToLiqor" ; type: "i64" } , { index: false ; name: "quoteToLiqor" ; type: "i64" } ] ; name: "LiquidationLog" } , { fields: [ { index: false ; name: "baseSymbol" ; type: "string" } , { index: false ; name: "liqorMargin" ; type: "publicKey" } , { index: false ; name: "liqeeMargin" ; type: "publicKey" } , { index: false ; name: "assetsToLiqor" ; type: "i64" } , { index: false ; name: "quoteToLiqor" ; type: "i64" } , { index: false ; name: "insuranceLoss" ; type: "i64" } , { index: false ; name: "socializedLoss" ; type: "i64" } ] ; name: "BankruptcyLog" } , { fields: [ { index: false ; name: "symbols" ; type: { vec: "string" } } , { index: false ; name: "prices" ; type: { vec: { defined: "WrappedI80F48" } } } , { index: false ; name: "twaps" ; type: { vec: { defined: "WrappedI80F48" } } } ] ; name: "CacheOracleLog" } , { fields: [ { index: false ; name: "symbols" ; type: { vec: "string" } } ] ; name: "CacheOracleNoops" } , { fields: [ { index: false ; name: "ir" ; type: { defined: "WrappedI80F48" } } , { index: false ; name: "util" ; type: { defined: "WrappedI80F48" } } , { index: false ; name: "supMul" ; type: { defined: "WrappedI80F48" } } , { index: false ; name: "borMul" ; type: { defined: "WrappedI80F48" } } ] ; name: "CacheIRLog" } , { fields: [ { index: false ; name: "market" ; type: "publicKey" } , { index: false ; name: "takerMargin" ; type: "publicKey" } , { index: false ; name: "makerMargin" ; type: "publicKey" } , { index: false ; name: "dBase" ; type: "i64" } , { index: false ; name: "dQuote" ; type: "i64" } ] ; name: "OtcFill" } , { fields: [ ] ; name: "ControlStateLog" } ] instructions: [ { accounts: [ { isMut: false ; isSigner: false ; name: "state" } , { isMut: false ; isSigner: true ; name: "authority" } , { isMut: true ; isSigner: true ; name: "payer" } , { isMut: true ; isSigner: false ; name: "margin" } , { isMut: true ; isSigner: false ; name: "control" } , { isMut: false ; isSigner: false ; name: "rent" } , { isMut: false ; isSigner: false ; name: "systemProgram" } ] ; args: [ { name: "nonce" ; type: "u8" } ] ; name: "createMargin" } , { accounts: [ { isMut: false ; isSigner: false ; name: "state" } , { isMut: false ; isSigner: false ; name: "stateSigner" } , { isMut: true ; isSigner: false ; name: "cache" } , { isMut: false ; isSigner: true ; name: "authority" } , { isMut: true ; isSigner: false ; name: "margin" } , { isMut: true ; isSigner: false ; name: "tokenAccount" } , { isMut: true ; isSigner: false ; name: "vault" } , { isMut: false ; isSigner: false ; name: "tokenProgram" } ] ; args: [ { name: "repayOnly" ; type: "bool" } , { name: "amount" ; type: "u64" } ] ; name: "deposit" } , { accounts: [ { isMut: true ; isSigner: false ; name: "state" } , { isMut: true ; isSigner: false ; name: "stateSigner" } , { isMut: true ; isSigner: false ; name: "cache" } , { isMut: false ; isSigner: true ; name: "authority" } , { isMut: true ; isSigner: false ; name: "margin" } , { isMut: true ; isSigner: false ; name: "control" } , { isMut: true ; isSigner: false ; name: "tokenAccount" } , { isMut: true ; isSigner: false ; name: "vault" } , { isMut: false ; isSigner: false ; name: "tokenProgram" } , { isMut: true ; isSigner: false ; name: "heimdall" } ] ; args: [ { name: "allowBorrow" ; type: "bool" } , { name: "amount" ; type: "u64" } ] ; name: "withdraw" } , { accounts: [ { isMut: false ; isSigner: false ; name: "state" } , { isMut: true ; isSigner: false ; name: "stateSigner" } , { isMut: false ; isSigner: true ; name: "authority" } , { isMut: false ; isSigner: true ; name: "payer" } , { isMut: true ; isSigner: false ; name: "margin" } , { isMut: true ; isSigner: false ; name: "control" } , { isMut: true ; isSigner: false ; name: "openOrders" } , { isMut: true ; isSigner: false ; name: "dexMarket" } , { isMut: false ; isSigner: false ; name: "dexProgram" } , { isMut: false ; isSigner: false ; name: "rent" } , { isMut: false ; isSigner: false ; name: "systemProgram" } ] ; args: [ ] ; name: "createPerpOpenOrders" } , { accounts: [ { isMut: false ; isSigner: false ; name: "state" } , { isMut: true ; isSigner: false ; name: "stateSigner" } , { isMut: true ; isSigner: false ; name: "cache" } , { isMut: false ; isSigner: true ; name: "authority" } , { isMut: true ; isSigner: false ; name: "margin" } , { isMut: true ; isSigner: false ; name: "control" } , { isMut: true ; isSigner: false ; name: "openOrders" } , { isMut: true ; isSigner: false ; name: "dexMarket" } , { isMut: true ; isSigner: false ; name: "reqQ" } , { isMut: true ; isSigner: false ; name: "eventQ" } , { isMut: true ; isSigner: false ; name: "marketBids" } , { isMut: true ; isSigner: false ; name: "marketAsks" } , { isMut: false ; isSigner: false ; name: "dexProgram" } , { isMut: false ; isSigner: false ; name: "rent" } ] ; args: [ { name: "isLong" ; type: "bool" } , { name: "limitPrice" ; type: "u64" } , { name: "maxBaseQuantity" ; type: "u64" } , { name: "maxQuoteQuantity" ; type: "u64" } , { name: "orderType" ; type: { defined: "OrderType" } } , { name: "limit" ; type: "u16" } , { name: "clientId" ; type: "u64" } ] ; name: "placePerpOrder" } , { accounts: [ { isMut: false ; isSigner: false ; name: "state" } , { isMut: true ; isSigner: false ; name: "stateSigner" } , { isMut: true ; isSigner: false ; name: "cache" } , { isMut: false ; isSigner: true ; name: "authority" } , { isMut: true ; isSigner: false ; name: "margin" } , { isMut: true ; isSigner: false ; name: "control" } , { isMut: true ; isSigner: false ; name: "openOrders" } , { isMut: true ; isSigner: false ; name: "dexMarket" } , { isMut: true ; isSigner: false ; name: "reqQ" } , { isMut: true ; isSigner: false ; name: "eventQ" } , { isMut: true ; isSigner: false ; name: "marketBids" } , { isMut: true ; isSigner: false ; name: "marketAsks" } , { isMut: false ; isSigner: false ; name: "dexProgram" } , { isMut: false ; isSigner: false ; name: "rent" } ] ; args: [ { name: "isLong" ; type: "bool" } , { name: "limitPrice" ; type: "u64" } , { name: "maxBaseQuantity" ; type: "u64" } , { name: "maxQuoteQuantity" ; type: "u64" } , { name: "orderType" ; type: { defined: "OrderType" } } , { name: "limit" ; type: "u16" } , { name: "clientId" ; type: "u64" } , { name: "maxTs" ; type: "i64" } ] ; name: "placePerpOrderWithMaxTs" } , { accounts: [ { isMut: false ; isSigner: false ; name: "state" } , { isMut: true ; isSigner: false ; name: "cache" } , { isMut: false ; isSigner: true ; name: "authority" } , { isMut: true ; isSigner: false ; name: "margin" } , { isMut: true ; isSigner: false ; name: "control" } , { isMut: true ; isSigner: false ; name: "openOrders" } , { isMut: true ; isSigner: false ; name: "dexMarket" } , { isMut: true ; isSigner: false ; name: "marketBids" } , { isMut: true ; isSigner: false ; name: "marketAsks" } , { isMut: true ; isSigner: false ; name: "eventQ" } , { isMut: false ; isSigner: false ; name: "dexProgram" } ] ; args: [ { name: "orderId" ; type: { option: "u128" } } , { name: "isLong" ; type: { option: "bool" } } , { name: "clientId" ; type: { option: "u64" } } ] ; name: "cancelPerpOrder" } , { accounts: [ { isMut: false ; isSigner: true ; name: "authority" } , { isMut: false ; isSigner: false ; name: "state" } , { isMut: true ; isSigner: false ; name: "cache" } , { isMut: true ; isSigner: false ; name: "stateSigner" } , { isMut: true ; isSigner: false ; name: "margin" } , { isMut: true ; isSigner: false ; name: "control" } , { isMut: true ; isSigner: false ; name: "oo" } , { isMut: true ; isSigner: false ; name: "dexMarket" } , { isMut: true ; isSigner: false ; name: "reqQ" } , { isMut: true ; isSigner: false ; name: "eventQ" } , { isMut: true ; isSigner: false ; name: "marketBids" } , { isMut: true ; isSigner: false ; name: "marketAsks" } , { isMut: false ; isSigner: false ; name: "dexProgram" } ] ; args: [ { name: "limit" ; type: "u16" } ] ; name: "cancelAllPerpOrders" } , { accounts: [ { isMut: false ; isSigner: false ; name: "state" } , { isMut: true ; isSigner: false ; name: "stateSigner" } , { isMut: true ; isSigner: false ; name: "cache" } , { isMut: true ; isSigner: false ; name: "dexMarket" } , { isMut: true ; isSigner: false ; name: "marketBids" } , { isMut: true ; isSigner: false ; name: "marketAsks" } , { isMut: false ; isSigner: false ; name: "dexProgram" } ] ; args: [ ] ; name: "updatePerpFunding" } , { accounts: [ { isMut: false ; isSigner: true ; name: "authority" } , { isMut: false ; isSigner: false ; name: "state" } , { isMut: true ; isSigner: false ; name: "stateSigner" } , { isMut: true ; isSigner: false ; name: "cache" } , { isMut: true ; isSigner: false ; name: "margin" } , { isMut: true ; isSigner: false ; name: "control" } , { isMut: true ; isSigner: false ; name: "openOrders" } , { isMut: true ; isSigner: false ; name: "dexMarket" } , { isMut: false ; isSigner: false ; name: "dexProgram" } ] ; args: [ ] ; name: "settleFunds" } , { accounts: [ { isMut: false ; isSigner: true ; name: "pruner" } , { isMut: false ; isSigner: false ; name: "state" } , { isMut: true ; isSigner: false ; name: "cache" } , { isMut: true ; isSigner: false ; name: "stateSigner" } , { isMut: true ; isSigner: false ; name: "liqeeMargin" } , { isMut: true ; isSigner: false ; name: "liqeeControl" } , { isMut: true ; isSigner: false ; name: "liqeeOo" } , { isMut: true ; isSigner: false ; name: "dexMarket" } , { isMut: true ; isSigner: false ; name: "reqQ" } , { isMut: true ; isSigner: false ; name: "eventQ" } , { isMut: true ; isSigner: false ; name: "marketBids" } , { isMut: true ; isSigner: false ; name: "marketAsks" } , { isMut: false ; isSigner: false ; name: "dexProgram" } ] ; args: [ { name: "limit" ; type: "u16" } ] ; name: "forceCancelAllPerpOrders" } , { accounts: [ { isMut: false ; isSigner: false ; name: "state" } , { isMut: true ; isSigner: false ; name: "cache" } , { isMut: true ; isSigner: false ; name: "stateSigner" } , { isMut: false ; isSigner: true ; name: "liqor" } , { isMut: true ; isSigner: false ; name: "liqorMargin" } , { isMut: true ; isSigner: false ; name: "liqorControl" } , { isMut: true ; isSigner: false ; name: "liqorOo" } , { isMut: false ; isSigner: false ; name: "liqee" } , { isMut: true ; isSigner: false ; name: "liqeeMargin" } , { isMut: true ; isSigner: false ; name: "liqeeControl" } , { isMut: true ; isSigner: false ; name: "liqeeOo" } , { isMut: true ; isSigner: false ; name: "dexMarket" } , { isMut: true ; isSigner: false ; name: "reqQ" } , { isMut: true ; isSigner: false ; name: "eventQ" } , { isMut: true ; isSigner: false ; name: "marketBids" } , { isMut: true ; isSigner: false ; name: "marketAsks" } , { isMut: false ; isSigner: false ; name: "dexProgram" } ] ; args: [ { name: "assetTransferLots" ; type: "u64" } ] ; name: "liquidatePerpPosition" } , { accounts: [ { isMut: false ; isSigner: false ; name: "state" } , { isMut: true ; isSigner: false ; name: "cache" } , { isMut: false ; isSigner: true ; name: "liqor" } , { isMut: true ; isSigner: false ; name: "liqorMargin" } , { isMut: true ; isSigner: false ; name: "liqorControl" } , { isMut: true ; isSigner: false ; name: "liqeeMargin" } , { isMut: true ; isSigner: false ; name: "liqeeControl" } , { isMut: false ; isSigner: false ; name: "assetMint" } , { isMut: false ; isSigner: false ; name: "quoteMint" } ] ; args: [ { name: "assetTransferAmount" ; type: "i64" } ] ; name: "liquidateSpotPosition" } , { accounts: [ { isMut: true ; isSigner: false ; name: "state" } , { isMut: true ; isSigner: false ; name: "stateSigner" } , { isMut: true ; isSigner: false ; name: "cache" } , { isMut: false ; isSigner: true ; name: "liqor" } , { isMut: true ; isSigner: false ; name: "liqorMargin" } , { isMut: true ; isSigner: false ; name: "liqorControl" } , { isMut: true ; isSigner: false ; name: "liqeeMargin" } , { isMut: true ; isSigner: false ; name: "liqeeControl" } , { isMut: false ; isSigner: false ; name: "assetMint" } ] ; args: [ ] ; name: "settleBankruptcy" } , { accounts: [ { isMut: false ; isSigner: true ; name: "authority" } , { isMut: true ; isSigner: false ; name: "state" } , { isMut: false ; isSigner: false ; name: "stateSigner" } , { isMut: true ; isSigner: false ; name: "cache" } , { isMut: true ; isSigner: false ; name: "margin" } , { isMut: true ; isSigner: false ; name: "control" } , { isMut: false ; isSigner: false ; name: "quoteMint" } , { isMut: true ; isSigner: false ; name: "quoteVault" } , { isMut: false ; isSigner: false ; name: "assetMint" } , { isMut: true ; isSigner: false ; name: "assetVault" } , { isMut: true ; isSigner: false ; name: "swapFeeVault" } , { isMut: true ; isSigner: false ; name: "serumOpenOrders" } , { isMut: true ; isSigner: false ; name: "serumMarket" } , { isMut: true ; isSigner: false ; name: "serumRequestQueue" } , { isMut: true ; isSigner: false ; name: "serumEventQueue" } , { isMut: true ; isSigner: false ; name: "serumBids" } , { isMut: true ; isSigner: false ; name: "serumAsks" } , { isMut: true ; isSigner: false ; name: "serumCoinVault" } , { isMut: true ; isSigner: false ; name: "serumPcVault" } , { isMut: false ; isSigner: false ; name: "serumVaultSigner" } , { isMut: false ; isSigner: false ; name: "srmSpotProgram" } , { isMut: false ; isSigner: false ; name: "tokenProgram" } , { isMut: false ; isSigner: false ; name: "rent" } ] ; args: [ { name: "buy" ; type: "bool" } , { name: "allowBorrow" ; type: "bool" } , { name: "amount" ; type: "u64" } , { name: "minRate" ; type: "u64" } ] ; name: "swap" } , { accounts: [ { isMut: false ; isSigner: true ; name: "signer" } , { isMut: false ; isSigner: false ; name: "state" } , { isMut: true ; isSigner: false ; name: "cache" } , { isMut: false ; isSigner: false ; name: "dexProgram" } ] ; args: [ { name: "symbols" ; type: { vec: "string" } } , { name: "mockPrices" ; type: { option: { vec: { option: "u64" } } } } ] ; name: "cacheOracle" } , { accounts: [ { isMut: false ; isSigner: true ; name: "signer" } , { isMut: false ; isSigner: false ; name: "state" } , { isMut: true ; isSigner: false ; name: "cache" } ] ; args: [ { name: "start" ; type: "u8" } , { name: "end" ; type: "u8" } ] ; name: "cacheInterestRates" } , { accounts: [ { isMut: true ; isSigner: false ; name: "state" } , { isMut: true ; isSigner: false ; name: "stateSigner" } , { isMut: false ; isSigner: false ; name: "dexProgram" } , { isMut: true ; isSigner: false ; name: "market" } , { isMut: true ; isSigner: false ; name: "eventQueue" } ] ; args: [ { name: "limit" ; type: "u16" } ] ; name: "consumeEvents" } , { accounts: [ { isMut: false ; isSigner: false ; name: "state" } , { isMut: true ; isSigner: false ; name: "stateSigner" } , { isMut: true ; isSigner: false ; name: "cache" } , { isMut: false ; isSigner: false ; name: "dexProgram" } , { isMut: true ; isSigner: false ; name: "market" } ] ; args: [ ] ; name: "crankPnl" } , { accounts: [ { isMut: false ; isSigner: false ; name: "state" } , { isMut: false ; isSigner: true ; name: "authority" } , { isMut: true ; isSigner: true ; name: "payer" } , { isMut: true ; isSigner: false ; name: "specialOrders" } , { isMut: false ; isSigner: false ; name: "rent" } , { isMut: false ; isSigner: false ; name: "systemProgram" } ] ; args: [ ] ; name: "createSpecialOrdersAccount" } , { accounts: [ { isMut: false ; isSigner: false ; name: "state" } , { isMut: false ; isSigner: true ; name: "authority" } , { isMut: true ; isSigner: false ; name: "specialOrders" } , { isMut: false ; isSigner: false ; name: "dexMarket" } , { isMut: false ; isSigner: false ; name: "systemProgram" } ] ; args: [ { name: "isLong" ; type: "bool" } , { name: "specialOrderType" ; type: { defined: "SpecialOrderType" } } , { name: "triggerPrice" ; type: "u64" } , { name: "limitPrice" ; type: "u64" } , { name: "size" ; type: "u64" } ] ; name: "placeSpecialOrder" } , { accounts: [ { isMut: false ; isSigner: false ; name: "state" } , { isMut: false ; isSigner: true ; name: "authority" } , { isMut: true ; isSigner: false ; name: "specialOrders" } , { isMut: false ; isSigner: false ; name: "dexMarket" } ] ; args: [ { name: "id" ; type: "u16" } ] ; name: "cancelSpecialOrder" } , { accounts: [ { isMut: false ; isSigner: false ; name: "state" } , { isMut: true ; isSigner: false ; name: "stateSigner" } , { isMut: true ; isSigner: false ; name: "cache" } , { isMut: true ; isSigner: true ; name: "payer" } , { isMut: false ; isSigner: false ; name: "authority" } , { isMut: true ; isSigner: false ; name: "margin" } , { isMut: true ; isSigner: false ; name: "control" } , { isMut: true ; isSigner: false ; name: "specialOrders" } , { isMut: true ; isSigner: false ; name: "openOrders" } , { isMut: true ; isSigner: false ; name: "dexMarket" } , { isMut: true ; isSigner: false ; name: "reqQ" } , { isMut: true ; isSigner: false ; name: "eventQ" } , { isMut: true ; isSigner: false ; name: "marketBids" } , { isMut: true ; isSigner: false ; name: "marketAsks" } , { isMut: false ; isSigner: false ; name: "dexProgram" } , { isMut: false ; isSigner: false ; name: "rent" } ] ; args: [ { name: "id" ; type: "u16" } ] ; name: "executeSpecialOrder" } ] name: "zo" types: [ { name: "AddCollateralArgs" ; type: { fields: [ { name: "oracleSymbol" ; type: "string" } , { name: "weight" ; type: "u16" } , { name: "isBorrowable" ; type: "bool" } , { name: "optimalUtil" ; type: "u16" } , { name: "optimalRate" ; type: "u16" } , { name: "maxRate" ; type: "u16" } , { name: "liqFee" ; type: "u16" } , { name: "ogFee" ; type: "u16" } , { name: "maxDeposit" ; type: "u64" } , { name: "dustThreshold" ; type: "u16" } ] ; kind: "struct" } } , { name: "OracleSource" ; type: { fields: [ { name: "ty" ; type: { defined: "OracleType" } } , { name: "key" ; type: "publicKey" } ] ; kind: "struct" } } , { name: "OraclePrice" ; type: { fields: [ { name: "price" ; type: { defined: "WrappedI80F48" } } , { name: "twap" ; type: { defined: "WrappedI80F48" } } ] ; kind: "struct" } } , { name: "BorrowCache" ; type: { fields: [ { name: "supply" ; type: { defined: "WrappedI80F48" } } , { name: "borrows" ; type: { defined: "WrappedI80F48" } } , { name: "supplyMultiplier" ; type: { defined: "WrappedI80F48" } } , { name: "borrowMultiplier" ; type: { defined: "WrappedI80F48" } } , { name: "lastUpdated" ; type: "u64" } ] ; kind: "struct" } } , { name: "OracleCache" ; type: { fields: [ { name: "symbol" ; type: { defined: "Symbol" } } , { name: "sources" ; type: { array: [ { defined: "OracleSource" } , 3 ] } } , { name: "lastUpdated" ; type: "u64" } , { name: "price" ; type: { defined: "WrappedI80F48" } } , { name: "twap" ; type: { defined: "WrappedI80F48" } } , { name: "baseDecimals" ; type: "u8" } , { name: "quoteDecimals" ; type: "u8" } ] ; kind: "struct" } } , { name: "MarkCache" ; type: { fields: [ { name: "price" ; type: { defined: "WrappedI80F48" } } , { name: "twap" ; type: { defined: "TwapInfo" } } ] ; kind: "struct" } } , { name: "TwapInfo" ; type: { fields: [ { name: "cumulAvg" ; type: { defined: "WrappedI80F48" } } , { name: "open" ; type: { defined: "WrappedI80F48" } } , { name: "high" ; type: { defined: "WrappedI80F48" } } , { name: "low" ; type: { defined: "WrappedI80F48" } } , { name: "close" ; type: { defined: "WrappedI80F48" } } , { name: "lastSampleStartTime" ; type: "u64" } ] ; kind: "struct" } } , { name: "OpenOrdersInfo" ; type: { fields: [ { name: "key" ; type: "publicKey" } , { name: "nativePcTotal" ; type: "i64" } , { name: "posSize" ; type: "i64" } , { name: "realizedPnl" ; type: "i64" } , { name: "coinOnBids" ; type: "u64" } , { name: "coinOnAsks" ; type: "u64" } , { name: "orderCount" ; type: "u8" } , { name: "fundingIndex" ; type: "i128" } ] ; kind: "struct" } } , { name: "SpecialOrdersInfo" ; type: { fields: [ { name: "id" ; type: "u16" } , { name: "market" ; type: "publicKey" } , { name: "ty" ; type: { defined: "SpecialOrderType" } } , { name: "isLong" ; type: "bool" } , { name: "triggerPrice" ; type: "u64" } , { name: "limitPrice" ; type: "u64" } , { name: "size" ; type: "u64" } , { name: "fee" ; type: "u64" } ] ; kind: "struct" } } , { name: "CollateralInfo" ; type: { fields: [ { name: "mint" ; type: "publicKey" } , { name: "oracleSymbol" ; type: { defined: "Symbol" } } , { name: "decimals" ; type: "u8" } , { name: "weight" ; type: "u16" } , { name: "liqFee" ; type: "u16" } , { name: "isBorrowable" ; type: "bool" } , { name: "optimalUtil" ; type: "u16" } , { name: "optimalRate" ; type: "u16" } , { name: "maxRate" ; type: "u16" } , { name: "ogFee" ; type: "u16" } , { name: "isSwappable" ; type: "bool" } , { name: "serumOpenOrders" ; type: "publicKey" } , { name: "maxDeposit" ; type: "u64" } , { name: "dustThreshold" ; type: "u16" } , { name: "padding" ; type: { array: [ "u8" , 384 ] } } ] ; kind: "struct" } } , { name: "PerpMarketInfo" ; type: { fields: [ { name: "symbol" ; type: { defined: "Symbol" } } , { name: "oracleSymbol" ; type: { defined: "Symbol" } } , { name: "perpType" ; type: { defined: "PerpType" } } , { name: "assetDecimals" ; type: "u8" } , { name: "assetLotSize" ; type: "u64" } , { name: "quoteLotSize" ; type: "u64" } , { name: "strike" ; type: "u64" } , { name: "baseImf" ; type: "u16" } , { name: "liqFee" ; type: "u16" } , { name: "dexMarket" ; type: "publicKey" } , { name: "padding" ; type: { array: [ "u8" , 320 ] } } ] ; kind: "struct" } } , { name: "Symbol" ; type: { fields: [ { name: "data" ; type: { array: [ "u8" , 24 ] } } ] ; kind: "struct" } } , { name: "WrappedI80F48" ; type: { fields: [ { name: "data" ; type: "i128" } ] ; kind: "struct" } } , { name: "LiquidationEvent" ; type: { kind: "enum" ; variants: [ { name: "Perp" } , { name: "Spot" } ] } } , { name: "MfReturnOption" ; type: { kind: "enum" ; variants: [ { name: "Imf" } , { name: "Mmf" } , { name: "Cancel" } , { name: "Both" } ] } } , { name: "OracleType" ; type: { kind: "enum" ; variants: [ { name: "Nil" } , { name: "Pyth" } , { name: "Switchboard" } ] } } , { name: "FractionType" ; type: { kind: "enum" ; variants: [ { name: "Maintenance" } , { name: "Initial" } , { name: "Cancel" } ] } } , { name: "OrderType" ; type: { kind: "enum" ; variants: [ { name: "Limit" } , { name: "ImmediateOrCancel" } , { name: "PostOnly" } , { name: "ReduceOnlyIoc" } , { name: "ReduceOnlyLimit" } , { name: "FillOrKill" } ] } } , { name: "SpecialOrderType" ; type: { kind: "enum" ; variants: [ { name: "TakeProfitMarket" } , { name: "TakeProfitLimit" } , { name: "StopLossMarket" } , { name: "StopLossLimit" } ] } } , { name: "PerpType" ; type: { kind: "enum" ; variants: [ { name: "Future" } , { name: "CallOption" } , { name: "PutOption" } , { name: "Square" } ] } } , { name: "Side" ; type: { kind: "enum" ; variants: [ { name: "Bid" } , { name: "Ask" } ] } } ] version: "0.7.0"