{
  "version": "2.59.0",
  "name": "drift",
  "instructions": [
    {
      "name": "initializeUser",
      "accounts": [
        {
          "name": "user",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "userStats",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "state",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "payer",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "rent",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "subAccountId",
          "type": "u16"
        },
        {
          "name": "name",
          "type": {
            "array": [
              "u8",
              32
            ]
          }
        }
      ]
    },
    {
      "name": "initializeUserStats",
      "accounts": [
        {
          "name": "userStats",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "state",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "payer",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "rent",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "initializeReferrerName",
      "accounts": [
        {
          "name": "referrerName",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "user",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "userStats",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "payer",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "rent",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "name",
          "type": {
            "array": [
              "u8",
              32
            ]
          }
        }
      ]
    },
    {
      "name": "deposit",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "user",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "userStats",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "spotMarketVault",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "userTokenAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "marketIndex",
          "type": "u16"
        },
        {
          "name": "amount",
          "type": "u64"
        },
        {
          "name": "reduceOnly",
          "type": "bool"
        }
      ]
    },
    {
      "name": "withdraw",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "user",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "userStats",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "spotMarketVault",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "driftSigner",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "userTokenAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "marketIndex",
          "type": "u16"
        },
        {
          "name": "amount",
          "type": "u64"
        },
        {
          "name": "reduceOnly",
          "type": "bool"
        }
      ]
    },
    {
      "name": "transferDeposit",
      "accounts": [
        {
          "name": "fromUser",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "toUser",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "userStats",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "spotMarketVault",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "marketIndex",
          "type": "u16"
        },
        {
          "name": "amount",
          "type": "u64"
        }
      ]
    },
    {
      "name": "placePerpOrder",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "user",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        }
      ],
      "args": [
        {
          "name": "params",
          "type": {
            "defined": "OrderParams"
          }
        }
      ]
    },
    {
      "name": "cancelOrder",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "user",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        }
      ],
      "args": [
        {
          "name": "orderId",
          "type": {
            "option": "u32"
          }
        }
      ]
    },
    {
      "name": "cancelOrderByUserId",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "user",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        }
      ],
      "args": [
        {
          "name": "userOrderId",
          "type": "u8"
        }
      ]
    },
    {
      "name": "cancelOrders",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "user",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        }
      ],
      "args": [
        {
          "name": "marketType",
          "type": {
            "option": {
              "defined": "MarketType"
            }
          }
        },
        {
          "name": "marketIndex",
          "type": {
            "option": "u16"
          }
        },
        {
          "name": "direction",
          "type": {
            "option": {
              "defined": "PositionDirection"
            }
          }
        }
      ]
    },
    {
      "name": "cancelOrdersByIds",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "user",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        }
      ],
      "args": [
        {
          "name": "orderIds",
          "type": {
            "vec": "u32"
          }
        }
      ]
    },
    {
      "name": "modifyOrder",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "user",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        }
      ],
      "args": [
        {
          "name": "orderId",
          "type": {
            "option": "u32"
          }
        },
        {
          "name": "modifyOrderParams",
          "type": {
            "defined": "ModifyOrderParams"
          }
        }
      ]
    },
    {
      "name": "modifyOrderByUserId",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "user",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        }
      ],
      "args": [
        {
          "name": "userOrderId",
          "type": "u8"
        },
        {
          "name": "modifyOrderParams",
          "type": {
            "defined": "ModifyOrderParams"
          }
        }
      ]
    },
    {
      "name": "placeAndTakePerpOrder",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "user",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "userStats",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        }
      ],
      "args": [
        {
          "name": "params",
          "type": {
            "defined": "OrderParams"
          }
        },
        {
          "name": "makerOrderId",
          "type": {
            "option": "u32"
          }
        }
      ]
    },
    {
      "name": "placeAndMakePerpOrder",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "user",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "userStats",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "taker",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "takerStats",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        }
      ],
      "args": [
        {
          "name": "params",
          "type": {
            "defined": "OrderParams"
          }
        },
        {
          "name": "takerOrderId",
          "type": "u32"
        }
      ]
    },
    {
      "name": "placeSpotOrder",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "user",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        }
      ],
      "args": [
        {
          "name": "params",
          "type": {
            "defined": "OrderParams"
          }
        }
      ]
    },
    {
      "name": "placeAndTakeSpotOrder",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "user",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "userStats",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        }
      ],
      "args": [
        {
          "name": "params",
          "type": {
            "defined": "OrderParams"
          }
        },
        {
          "name": "fulfillmentType",
          "type": {
            "option": {
              "defined": "SpotFulfillmentType"
            }
          }
        },
        {
          "name": "makerOrderId",
          "type": {
            "option": "u32"
          }
        }
      ]
    },
    {
      "name": "placeAndMakeSpotOrder",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "user",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "userStats",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "taker",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "takerStats",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        }
      ],
      "args": [
        {
          "name": "params",
          "type": {
            "defined": "OrderParams"
          }
        },
        {
          "name": "takerOrderId",
          "type": "u32"
        },
        {
          "name": "fulfillmentType",
          "type": {
            "option": {
              "defined": "SpotFulfillmentType"
            }
          }
        }
      ]
    },
    {
      "name": "placeOrders",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "user",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        }
      ],
      "args": [
        {
          "name": "params",
          "type": {
            "vec": {
              "defined": "OrderParams"
            }
          }
        }
      ]
    },
    {
      "name": "beginSwap",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "user",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "userStats",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "outSpotMarketVault",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "inSpotMarketVault",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "outTokenAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "inTokenAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "driftSigner",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "instructions",
          "isMut": false,
          "isSigner": false,
          "docs": [
            "Instructions Sysvar for instruction introspection"
          ]
        }
      ],
      "args": [
        {
          "name": "inMarketIndex",
          "type": "u16"
        },
        {
          "name": "outMarketIndex",
          "type": "u16"
        },
        {
          "name": "amountIn",
          "type": "u64"
        }
      ]
    },
    {
      "name": "endSwap",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "user",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "userStats",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "outSpotMarketVault",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "inSpotMarketVault",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "outTokenAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "inTokenAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "driftSigner",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "instructions",
          "isMut": false,
          "isSigner": false,
          "docs": [
            "Instructions Sysvar for instruction introspection"
          ]
        }
      ],
      "args": [
        {
          "name": "inMarketIndex",
          "type": "u16"
        },
        {
          "name": "outMarketIndex",
          "type": "u16"
        },
        {
          "name": "limitPrice",
          "type": {
            "option": "u64"
          }
        },
        {
          "name": "reduceOnly",
          "type": {
            "option": {
              "defined": "SwapReduceOnly"
            }
          }
        }
      ]
    },
    {
      "name": "addPerpLpShares",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "user",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        }
      ],
      "args": [
        {
          "name": "nShares",
          "type": "u64"
        },
        {
          "name": "marketIndex",
          "type": "u16"
        }
      ]
    },
    {
      "name": "removePerpLpShares",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "user",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        }
      ],
      "args": [
        {
          "name": "sharesToBurn",
          "type": "u64"
        },
        {
          "name": "marketIndex",
          "type": "u16"
        }
      ]
    },
    {
      "name": "removePerpLpSharesInExpiringMarket",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "user",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "sharesToBurn",
          "type": "u64"
        },
        {
          "name": "marketIndex",
          "type": "u16"
        }
      ]
    },
    {
      "name": "updateUserName",
      "accounts": [
        {
          "name": "user",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        }
      ],
      "args": [
        {
          "name": "subAccountId",
          "type": "u16"
        },
        {
          "name": "name",
          "type": {
            "array": [
              "u8",
              32
            ]
          }
        }
      ]
    },
    {
      "name": "updateUserCustomMarginRatio",
      "accounts": [
        {
          "name": "user",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        }
      ],
      "args": [
        {
          "name": "subAccountId",
          "type": "u16"
        },
        {
          "name": "marginRatio",
          "type": "u32"
        }
      ]
    },
    {
      "name": "updateUserMarginTradingEnabled",
      "accounts": [
        {
          "name": "user",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        }
      ],
      "args": [
        {
          "name": "subAccountId",
          "type": "u16"
        },
        {
          "name": "marginTradingEnabled",
          "type": "bool"
        }
      ]
    },
    {
      "name": "updateUserDelegate",
      "accounts": [
        {
          "name": "user",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        }
      ],
      "args": [
        {
          "name": "subAccountId",
          "type": "u16"
        },
        {
          "name": "delegate",
          "type": "publicKey"
        }
      ]
    },
    {
      "name": "updateUserReduceOnly",
      "accounts": [
        {
          "name": "user",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        }
      ],
      "args": [
        {
          "name": "subAccountId",
          "type": "u16"
        },
        {
          "name": "reduceOnly",
          "type": "bool"
        }
      ]
    },
    {
      "name": "deleteUser",
      "accounts": [
        {
          "name": "user",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "userStats",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "state",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        }
      ],
      "args": []
    },
    {
      "name": "reclaimRent",
      "accounts": [
        {
          "name": "user",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "userStats",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "rent",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "fillPerpOrder",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "filler",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "fillerStats",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "user",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "userStats",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "orderId",
          "type": {
            "option": "u32"
          }
        },
        {
          "name": "makerOrderId",
          "type": {
            "option": "u32"
          }
        }
      ]
    },
    {
      "name": "revertFill",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "filler",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "fillerStats",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "fillSpotOrder",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "filler",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "fillerStats",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "user",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "userStats",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "orderId",
          "type": {
            "option": "u32"
          }
        },
        {
          "name": "fulfillmentType",
          "type": {
            "option": {
              "defined": "SpotFulfillmentType"
            }
          }
        },
        {
          "name": "makerOrderId",
          "type": {
            "option": "u32"
          }
        }
      ]
    },
    {
      "name": "triggerOrder",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "filler",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "user",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "orderId",
          "type": "u32"
        }
      ]
    },
    {
      "name": "forceCancelOrders",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "filler",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "user",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "updateUserIdle",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "filler",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "user",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "updateUserOpenOrdersCount",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "filler",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "user",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "adminDisableUpdatePerpBidAskTwap",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "userStats",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "disable",
          "type": "bool"
        }
      ]
    },
    {
      "name": "settlePnl",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "user",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "spotMarketVault",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "marketIndex",
          "type": "u16"
        }
      ]
    },
    {
      "name": "settleFundingPayment",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "user",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "settleLp",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "user",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "marketIndex",
          "type": "u16"
        }
      ]
    },
    {
      "name": "settleExpiredMarket",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        }
      ],
      "args": [
        {
          "name": "marketIndex",
          "type": "u16"
        }
      ]
    },
    {
      "name": "liquidatePerp",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "liquidator",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "liquidatorStats",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "user",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "userStats",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "marketIndex",
          "type": "u16"
        },
        {
          "name": "liquidatorMaxBaseAssetAmount",
          "type": "u64"
        },
        {
          "name": "limitPrice",
          "type": {
            "option": "u64"
          }
        }
      ]
    },
    {
      "name": "liquidateSpot",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "liquidator",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "liquidatorStats",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "user",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "userStats",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "assetMarketIndex",
          "type": "u16"
        },
        {
          "name": "liabilityMarketIndex",
          "type": "u16"
        },
        {
          "name": "liquidatorMaxLiabilityTransfer",
          "type": "u128"
        },
        {
          "name": "limitPrice",
          "type": {
            "option": "u64"
          }
        }
      ]
    },
    {
      "name": "liquidateBorrowForPerpPnl",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "liquidator",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "liquidatorStats",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "user",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "userStats",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "perpMarketIndex",
          "type": "u16"
        },
        {
          "name": "spotMarketIndex",
          "type": "u16"
        },
        {
          "name": "liquidatorMaxLiabilityTransfer",
          "type": "u128"
        },
        {
          "name": "limitPrice",
          "type": {
            "option": "u64"
          }
        }
      ]
    },
    {
      "name": "liquidatePerpPnlForDeposit",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "liquidator",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "liquidatorStats",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "user",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "userStats",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "perpMarketIndex",
          "type": "u16"
        },
        {
          "name": "spotMarketIndex",
          "type": "u16"
        },
        {
          "name": "liquidatorMaxPnlTransfer",
          "type": "u128"
        },
        {
          "name": "limitPrice",
          "type": {
            "option": "u64"
          }
        }
      ]
    },
    {
      "name": "resolvePerpPnlDeficit",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "spotMarketVault",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "insuranceFundVault",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "driftSigner",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "spotMarketIndex",
          "type": "u16"
        },
        {
          "name": "perpMarketIndex",
          "type": "u16"
        }
      ]
    },
    {
      "name": "resolvePerpBankruptcy",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "liquidator",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "liquidatorStats",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "user",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "userStats",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "spotMarketVault",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "insuranceFundVault",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "driftSigner",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "quoteSpotMarketIndex",
          "type": "u16"
        },
        {
          "name": "marketIndex",
          "type": "u16"
        }
      ]
    },
    {
      "name": "resolveSpotBankruptcy",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "liquidator",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "liquidatorStats",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "user",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "userStats",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "spotMarketVault",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "insuranceFundVault",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "driftSigner",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "marketIndex",
          "type": "u16"
        }
      ]
    },
    {
      "name": "settleRevenueToInsuranceFund",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "spotMarket",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "spotMarketVault",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "driftSigner",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "insuranceFundVault",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "spotMarketIndex",
          "type": "u16"
        }
      ]
    },
    {
      "name": "updateFundingRate",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "perpMarket",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "oracle",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "marketIndex",
          "type": "u16"
        }
      ]
    },
    {
      "name": "updatePerpBidAskTwap",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "perpMarket",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "oracle",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "keeperStats",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        }
      ],
      "args": []
    },
    {
      "name": "updateSpotMarketCumulativeInterest",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "spotMarket",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "oracle",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "spotMarketVault",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "updateAmms",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        }
      ],
      "args": [
        {
          "name": "marketIndexes",
          "type": {
            "array": [
              "u16",
              5
            ]
          }
        }
      ]
    },
    {
      "name": "updateSpotMarketExpiry",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "spotMarket",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "expiryTs",
          "type": "i64"
        }
      ]
    },
    {
      "name": "updateUserQuoteAssetInsuranceStake",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "spotMarket",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "insuranceFundStake",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "userStats",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "insuranceFundVault",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "initializeInsuranceFundStake",
      "accounts": [
        {
          "name": "spotMarket",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "insuranceFundStake",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "userStats",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "payer",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "rent",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "marketIndex",
          "type": "u16"
        }
      ]
    },
    {
      "name": "addInsuranceFundStake",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "spotMarket",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "insuranceFundStake",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "userStats",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "spotMarketVault",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "insuranceFundVault",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "driftSigner",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "userTokenAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "marketIndex",
          "type": "u16"
        },
        {
          "name": "amount",
          "type": "u64"
        }
      ]
    },
    {
      "name": "requestRemoveInsuranceFundStake",
      "accounts": [
        {
          "name": "spotMarket",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "insuranceFundStake",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "userStats",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "insuranceFundVault",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "marketIndex",
          "type": "u16"
        },
        {
          "name": "amount",
          "type": "u64"
        }
      ]
    },
    {
      "name": "cancelRequestRemoveInsuranceFundStake",
      "accounts": [
        {
          "name": "spotMarket",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "insuranceFundStake",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "userStats",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "insuranceFundVault",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "marketIndex",
          "type": "u16"
        }
      ]
    },
    {
      "name": "removeInsuranceFundStake",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "spotMarket",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "insuranceFundStake",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "userStats",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "insuranceFundVault",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "driftSigner",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "userTokenAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "marketIndex",
          "type": "u16"
        }
      ]
    },
    {
      "name": "transferProtocolIfShares",
      "accounts": [
        {
          "name": "signer",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "transferConfig",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "spotMarket",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "insuranceFundStake",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "userStats",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "insuranceFundVault",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "marketIndex",
          "type": "u16"
        },
        {
          "name": "shares",
          "type": "u128"
        }
      ]
    },
    {
      "name": "initialize",
      "accounts": [
        {
          "name": "admin",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "quoteAssetMint",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "driftSigner",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "rent",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "initializeSpotMarket",
      "accounts": [
        {
          "name": "spotMarket",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "spotMarketMint",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "spotMarketVault",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "insuranceFundVault",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "driftSigner",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "state",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "oracle",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "admin",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "rent",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "optimalUtilization",
          "type": "u32"
        },
        {
          "name": "optimalBorrowRate",
          "type": "u32"
        },
        {
          "name": "maxBorrowRate",
          "type": "u32"
        },
        {
          "name": "oracleSource",
          "type": {
            "defined": "OracleSource"
          }
        },
        {
          "name": "initialAssetWeight",
          "type": "u32"
        },
        {
          "name": "maintenanceAssetWeight",
          "type": "u32"
        },
        {
          "name": "initialLiabilityWeight",
          "type": "u32"
        },
        {
          "name": "maintenanceLiabilityWeight",
          "type": "u32"
        },
        {
          "name": "imfFactor",
          "type": "u32"
        },
        {
          "name": "liquidatorFee",
          "type": "u32"
        },
        {
          "name": "activeStatus",
          "type": "bool"
        },
        {
          "name": "name",
          "type": {
            "array": [
              "u8",
              32
            ]
          }
        }
      ]
    },
    {
      "name": "initializeSerumFulfillmentConfig",
      "accounts": [
        {
          "name": "baseSpotMarket",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "quoteSpotMarket",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "state",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "serumProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "serumMarket",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "serumOpenOrders",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "driftSigner",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "serumFulfillmentConfig",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "admin",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "rent",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "marketIndex",
          "type": "u16"
        }
      ]
    },
    {
      "name": "updateSerumFulfillmentConfigStatus",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "serumFulfillmentConfig",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "admin",
          "isMut": true,
          "isSigner": true
        }
      ],
      "args": [
        {
          "name": "status",
          "type": {
            "defined": "SpotFulfillmentConfigStatus"
          }
        }
      ]
    },
    {
      "name": "initializePhoenixFulfillmentConfig",
      "accounts": [
        {
          "name": "baseSpotMarket",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "quoteSpotMarket",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "state",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "phoenixProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "phoenixMarket",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "driftSigner",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "phoenixFulfillmentConfig",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "admin",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "rent",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "marketIndex",
          "type": "u16"
        }
      ]
    },
    {
      "name": "phoenixFulfillmentConfigStatus",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "phoenixFulfillmentConfig",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "admin",
          "isMut": true,
          "isSigner": true
        }
      ],
      "args": [
        {
          "name": "status",
          "type": {
            "defined": "SpotFulfillmentConfigStatus"
          }
        }
      ]
    },
    {
      "name": "updateSerumVault",
      "accounts": [
        {
          "name": "state",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "admin",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "srmVault",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "initializePerpMarket",
      "accounts": [
        {
          "name": "admin",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "perpMarket",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "oracle",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "rent",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "marketIndex",
          "type": "u16"
        },
        {
          "name": "ammBaseAssetReserve",
          "type": "u128"
        },
        {
          "name": "ammQuoteAssetReserve",
          "type": "u128"
        },
        {
          "name": "ammPeriodicity",
          "type": "i64"
        },
        {
          "name": "ammPegMultiplier",
          "type": "u128"
        },
        {
          "name": "oracleSource",
          "type": {
            "defined": "OracleSource"
          }
        },
        {
          "name": "marginRatioInitial",
          "type": "u32"
        },
        {
          "name": "marginRatioMaintenance",
          "type": "u32"
        },
        {
          "name": "liquidatorFee",
          "type": "u32"
        },
        {
          "name": "activeStatus",
          "type": "bool"
        },
        {
          "name": "name",
          "type": {
            "array": [
              "u8",
              32
            ]
          }
        }
      ]
    },
    {
      "name": "deleteInitializedPerpMarket",
      "accounts": [
        {
          "name": "admin",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "perpMarket",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "marketIndex",
          "type": "u16"
        }
      ]
    },
    {
      "name": "moveAmmPrice",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "perpMarket",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "baseAssetReserve",
          "type": "u128"
        },
        {
          "name": "quoteAssetReserve",
          "type": "u128"
        },
        {
          "name": "sqrtK",
          "type": "u128"
        }
      ]
    },
    {
      "name": "recenterPerpMarketAmm",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "perpMarket",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "pegMultiplier",
          "type": "u128"
        },
        {
          "name": "sqrtK",
          "type": "u128"
        }
      ]
    },
    {
      "name": "updatePerpMarketExpiry",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "perpMarket",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "expiryTs",
          "type": "i64"
        }
      ]
    },
    {
      "name": "settleExpiredMarketPoolsToRevenuePool",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "spotMarket",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "perpMarket",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "depositIntoPerpMarketFeePool",
      "accounts": [
        {
          "name": "state",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "perpMarket",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "sourceVault",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "driftSigner",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "quoteSpotMarket",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "spotMarketVault",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "amount",
          "type": "u64"
        }
      ]
    },
    {
      "name": "depositIntoSpotMarketRevenuePool",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "spotMarket",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "spotMarketVault",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "userTokenAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "amount",
          "type": "u64"
        }
      ]
    },
    {
      "name": "repegAmmCurve",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "perpMarket",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "oracle",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        }
      ],
      "args": [
        {
          "name": "newPegCandidate",
          "type": "u128"
        }
      ]
    },
    {
      "name": "updatePerpMarketAmmOracleTwap",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "perpMarket",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "oracle",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        }
      ],
      "args": []
    },
    {
      "name": "resetPerpMarketAmmOracleTwap",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "perpMarket",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "oracle",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        }
      ],
      "args": []
    },
    {
      "name": "updateK",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "perpMarket",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "oracle",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "sqrtK",
          "type": "u128"
        }
      ]
    },
    {
      "name": "updatePerpMarketMarginRatio",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "perpMarket",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "marginRatioInitial",
          "type": "u32"
        },
        {
          "name": "marginRatioMaintenance",
          "type": "u32"
        }
      ]
    },
    {
      "name": "updatePerpMarketMaxImbalances",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "perpMarket",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "unrealizedMaxImbalance",
          "type": "u64"
        },
        {
          "name": "maxRevenueWithdrawPerPeriod",
          "type": "u64"
        },
        {
          "name": "quoteMaxInsurance",
          "type": "u64"
        }
      ]
    },
    {
      "name": "updatePerpMarketLiquidationFee",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "perpMarket",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "liquidatorFee",
          "type": "u32"
        },
        {
          "name": "ifLiquidationFee",
          "type": "u32"
        }
      ]
    },
    {
      "name": "updateInsuranceFundUnstakingPeriod",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "spotMarket",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "insuranceFundUnstakingPeriod",
          "type": "i64"
        }
      ]
    },
    {
      "name": "updateSpotMarketLiquidationFee",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "spotMarket",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "liquidatorFee",
          "type": "u32"
        },
        {
          "name": "ifLiquidationFee",
          "type": "u32"
        }
      ]
    },
    {
      "name": "updateWithdrawGuardThreshold",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "spotMarket",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "withdrawGuardThreshold",
          "type": "u64"
        }
      ]
    },
    {
      "name": "updateSpotMarketIfFactor",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "spotMarket",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "spotMarketIndex",
          "type": "u16"
        },
        {
          "name": "userIfFactor",
          "type": "u32"
        },
        {
          "name": "totalIfFactor",
          "type": "u32"
        }
      ]
    },
    {
      "name": "updateSpotMarketRevenueSettlePeriod",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "spotMarket",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "revenueSettlePeriod",
          "type": "i64"
        }
      ]
    },
    {
      "name": "updateSpotMarketStatus",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "spotMarket",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "status",
          "type": {
            "defined": "MarketStatus"
          }
        }
      ]
    },
    {
      "name": "updateSpotMarketPausedOperations",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "spotMarket",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "pausedOperations",
          "type": "u8"
        }
      ]
    },
    {
      "name": "updateSpotMarketAssetTier",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "spotMarket",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "assetTier",
          "type": {
            "defined": "AssetTier"
          }
        }
      ]
    },
    {
      "name": "updateSpotMarketMarginWeights",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "spotMarket",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "initialAssetWeight",
          "type": "u32"
        },
        {
          "name": "maintenanceAssetWeight",
          "type": "u32"
        },
        {
          "name": "initialLiabilityWeight",
          "type": "u32"
        },
        {
          "name": "maintenanceLiabilityWeight",
          "type": "u32"
        },
        {
          "name": "imfFactor",
          "type": "u32"
        }
      ]
    },
    {
      "name": "updateSpotMarketBorrowRate",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "spotMarket",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "optimalUtilization",
          "type": "u32"
        },
        {
          "name": "optimalBorrowRate",
          "type": "u32"
        },
        {
          "name": "maxBorrowRate",
          "type": "u32"
        }
      ]
    },
    {
      "name": "updateSpotMarketMaxTokenDeposits",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "spotMarket",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "maxTokenDeposits",
          "type": "u64"
        }
      ]
    },
    {
      "name": "updateSpotMarketScaleInitialAssetWeightStart",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "spotMarket",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "scaleInitialAssetWeightStart",
          "type": "u64"
        }
      ]
    },
    {
      "name": "updateSpotMarketOracle",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "spotMarket",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "oracle",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "oracle",
          "type": "publicKey"
        },
        {
          "name": "oracleSource",
          "type": {
            "defined": "OracleSource"
          }
        }
      ]
    },
    {
      "name": "updateSpotMarketStepSizeAndTickSize",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "spotMarket",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "stepSize",
          "type": "u64"
        },
        {
          "name": "tickSize",
          "type": "u64"
        }
      ]
    },
    {
      "name": "updateSpotMarketMinOrderSize",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "spotMarket",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "orderSize",
          "type": "u64"
        }
      ]
    },
    {
      "name": "updateSpotMarketOrdersEnabled",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "spotMarket",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "ordersEnabled",
          "type": "bool"
        }
      ]
    },
    {
      "name": "updateSpotMarketName",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "spotMarket",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "name",
          "type": {
            "array": [
              "u8",
              32
            ]
          }
        }
      ]
    },
    {
      "name": "updatePerpMarketStatus",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "perpMarket",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "status",
          "type": {
            "defined": "MarketStatus"
          }
        }
      ]
    },
    {
      "name": "updatePerpMarketPausedOperations",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "perpMarket",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "pausedOperations",
          "type": "u8"
        }
      ]
    },
    {
      "name": "updatePerpMarketContractTier",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "perpMarket",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "contractTier",
          "type": {
            "defined": "ContractTier"
          }
        }
      ]
    },
    {
      "name": "updatePerpMarketImfFactor",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "perpMarket",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "imfFactor",
          "type": "u32"
        },
        {
          "name": "unrealizedPnlImfFactor",
          "type": "u32"
        }
      ]
    },
    {
      "name": "updatePerpMarketUnrealizedAssetWeight",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "perpMarket",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "unrealizedInitialAssetWeight",
          "type": "u32"
        },
        {
          "name": "unrealizedMaintenanceAssetWeight",
          "type": "u32"
        }
      ]
    },
    {
      "name": "updatePerpMarketConcentrationCoef",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "perpMarket",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "concentrationScale",
          "type": "u128"
        }
      ]
    },
    {
      "name": "updatePerpMarketCurveUpdateIntensity",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "perpMarket",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "curveUpdateIntensity",
          "type": "u8"
        }
      ]
    },
    {
      "name": "updatePerpMarketTargetBaseAssetAmountPerLp",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "perpMarket",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "targetBaseAssetAmountPerLp",
          "type": "i32"
        }
      ]
    },
    {
      "name": "updatePerpMarketPerLpBase",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "perpMarket",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "perLpBase",
          "type": "i8"
        }
      ]
    },
    {
      "name": "updateLpCooldownTime",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "lpCooldownTime",
          "type": "u64"
        }
      ]
    },
    {
      "name": "updatePerpFeeStructure",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "feeStructure",
          "type": {
            "defined": "FeeStructure"
          }
        }
      ]
    },
    {
      "name": "updateSpotFeeStructure",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "feeStructure",
          "type": {
            "defined": "FeeStructure"
          }
        }
      ]
    },
    {
      "name": "updateInitialPctToLiquidate",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "initialPctToLiquidate",
          "type": "u16"
        }
      ]
    },
    {
      "name": "updateLiquidationDuration",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "liquidationDuration",
          "type": "u8"
        }
      ]
    },
    {
      "name": "updateLiquidationMarginBufferRatio",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "liquidationMarginBufferRatio",
          "type": "u32"
        }
      ]
    },
    {
      "name": "updateOracleGuardRails",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "oracleGuardRails",
          "type": {
            "defined": "OracleGuardRails"
          }
        }
      ]
    },
    {
      "name": "updateStateSettlementDuration",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "settlementDuration",
          "type": "u16"
        }
      ]
    },
    {
      "name": "updateStateMaxNumberOfSubAccounts",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "maxNumberOfSubAccounts",
          "type": "u16"
        }
      ]
    },
    {
      "name": "updateStateMaxInitializeUserFee",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "maxInitializeUserFee",
          "type": "u16"
        }
      ]
    },
    {
      "name": "updatePerpMarketOracle",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "perpMarket",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "oracle",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        }
      ],
      "args": [
        {
          "name": "oracle",
          "type": "publicKey"
        },
        {
          "name": "oracleSource",
          "type": {
            "defined": "OracleSource"
          }
        }
      ]
    },
    {
      "name": "updatePerpMarketBaseSpread",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "perpMarket",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "baseSpread",
          "type": "u32"
        }
      ]
    },
    {
      "name": "updateAmmJitIntensity",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "perpMarket",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "ammJitIntensity",
          "type": "u8"
        }
      ]
    },
    {
      "name": "updatePerpMarketMaxSpread",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "perpMarket",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "maxSpread",
          "type": "u32"
        }
      ]
    },
    {
      "name": "updatePerpMarketStepSizeAndTickSize",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "perpMarket",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "stepSize",
          "type": "u64"
        },
        {
          "name": "tickSize",
          "type": "u64"
        }
      ]
    },
    {
      "name": "updatePerpMarketName",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "perpMarket",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "name",
          "type": {
            "array": [
              "u8",
              32
            ]
          }
        }
      ]
    },
    {
      "name": "updatePerpMarketMinOrderSize",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "perpMarket",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "orderSize",
          "type": "u64"
        }
      ]
    },
    {
      "name": "updatePerpMarketMaxSlippageRatio",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "perpMarket",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "maxSlippageRatio",
          "type": "u16"
        }
      ]
    },
    {
      "name": "updatePerpMarketMaxFillReserveFraction",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "perpMarket",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "maxFillReserveFraction",
          "type": "u16"
        }
      ]
    },
    {
      "name": "updatePerpMarketMaxOpenInterest",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "perpMarket",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "maxOpenInterest",
          "type": "u128"
        }
      ]
    },
    {
      "name": "updatePerpMarketFeeAdjustment",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "perpMarket",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "feeAdjustment",
          "type": "i16"
        }
      ]
    },
    {
      "name": "updateAdmin",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "admin",
          "type": "publicKey"
        }
      ]
    },
    {
      "name": "updateWhitelistMint",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "whitelistMint",
          "type": "publicKey"
        }
      ]
    },
    {
      "name": "updateDiscountMint",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "discountMint",
          "type": "publicKey"
        }
      ]
    },
    {
      "name": "updateExchangeStatus",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "exchangeStatus",
          "type": "u8"
        }
      ]
    },
    {
      "name": "updatePerpAuctionDuration",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "minPerpAuctionDuration",
          "type": "u8"
        }
      ]
    },
    {
      "name": "updateSpotAuctionDuration",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "defaultSpotAuctionDuration",
          "type": "u8"
        }
      ]
    },
    {
      "name": "adminRemoveInsuranceFundStake",
      "accounts": [
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "spotMarket",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "insuranceFundVault",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "driftSigner",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "adminTokenAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "marketIndex",
          "type": "u16"
        },
        {
          "name": "amount",
          "type": "u64"
        }
      ]
    },
    {
      "name": "initializeProtocolIfSharesTransferConfig",
      "accounts": [
        {
          "name": "admin",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "protocolIfSharesTransferConfig",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "rent",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "updateProtocolIfSharesTransferConfig",
      "accounts": [
        {
          "name": "admin",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "protocolIfSharesTransferConfig",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "whitelistedSigners",
          "type": {
            "option": {
              "array": [
                "publicKey",
                4
              ]
            }
          }
        },
        {
          "name": "maxTransferPerEpoch",
          "type": {
            "option": "u128"
          }
        }
      ]
    }
  ],
  "accounts": [
    {
      "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": "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": "PerpMarket",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "pubkey",
            "docs": [
              "The perp market's address. It is a pda of the market index"
            ],
            "type": "publicKey"
          },
          {
            "name": "amm",
            "docs": [
              "The automated market maker"
            ],
            "type": {
              "defined": "AMM"
            }
          },
          {
            "name": "pnlPool",
            "docs": [
              "The market's pnl pool. When users settle negative pnl, the balance increases.",
              "When users settle positive pnl, the balance decreases. Can not go negative."
            ],
            "type": {
              "defined": "PoolBalance"
            }
          },
          {
            "name": "name",
            "docs": [
              "Encoded display name for the perp market e.g. SOL-PERP"
            ],
            "type": {
              "array": [
                "u8",
                32
              ]
            }
          },
          {
            "name": "insuranceClaim",
            "docs": [
              "The perp market's claim on the insurance fund"
            ],
            "type": {
              "defined": "InsuranceClaim"
            }
          },
          {
            "name": "unrealizedPnlMaxImbalance",
            "docs": [
              "The max pnl imbalance before positive pnl asset weight is discounted",
              "pnl imbalance is the difference between long and short pnl. When it's greater than 0,",
              "the amm has negative pnl and the initial asset weight for positive pnl is discounted",
              "precision = QUOTE_PRECISION"
            ],
            "type": "u64"
          },
          {
            "name": "expiryTs",
            "docs": [
              "The ts when the market will be expired. Only set if market is in reduce only mode"
            ],
            "type": "i64"
          },
          {
            "name": "expiryPrice",
            "docs": [
              "The price at which positions will be settled. Only set if market is expired",
              "precision = PRICE_PRECISION"
            ],
            "type": "i64"
          },
          {
            "name": "nextFillRecordId",
            "docs": [
              "Every trade has a fill record id. This is the next id to be used"
            ],
            "type": "u64"
          },
          {
            "name": "nextFundingRateRecordId",
            "docs": [
              "Every funding rate update has a record id. This is the next id to be used"
            ],
            "type": "u64"
          },
          {
            "name": "nextCurveRecordId",
            "docs": [
              "Every amm k updated has a record id. This is the next id to be used"
            ],
            "type": "u64"
          },
          {
            "name": "imfFactor",
            "docs": [
              "The initial margin fraction factor. Used to increase margin ratio for large positions",
              "precision: MARGIN_PRECISION"
            ],
            "type": "u32"
          },
          {
            "name": "unrealizedPnlImfFactor",
            "docs": [
              "The imf factor for unrealized pnl. Used to discount asset weight for large positive pnl",
              "precision: MARGIN_PRECISION"
            ],
            "type": "u32"
          },
          {
            "name": "liquidatorFee",
            "docs": [
              "The fee the liquidator is paid for taking over perp position",
              "precision: LIQUIDATOR_FEE_PRECISION"
            ],
            "type": "u32"
          },
          {
            "name": "ifLiquidationFee",
            "docs": [
              "The fee the insurance fund receives from liquidation",
              "precision: LIQUIDATOR_FEE_PRECISION"
            ],
            "type": "u32"
          },
          {
            "name": "marginRatioInitial",
            "docs": [
              "The margin ratio which determines how much collateral is required to open a position",
              "e.g. margin ratio of .1 means a user must have $100 of total collateral to open a $1000 position",
              "precision: MARGIN_PRECISION"
            ],
            "type": "u32"
          },
          {
            "name": "marginRatioMaintenance",
            "docs": [
              "The margin ratio which determines when a user will be liquidated",
              "e.g. margin ratio of .05 means a user must have $50 of total collateral to maintain a $1000 position",
              "else they will be liquidated",
              "precision: MARGIN_PRECISION"
            ],
            "type": "u32"
          },
          {
            "name": "unrealizedPnlInitialAssetWeight",
            "docs": [
              "The initial asset weight for positive pnl. Negative pnl always has an asset weight of 1",
              "precision: SPOT_WEIGHT_PRECISION"
            ],
            "type": "u32"
          },
          {
            "name": "unrealizedPnlMaintenanceAssetWeight",
            "docs": [
              "The maintenance asset weight for positive pnl. Negative pnl always has an asset weight of 1",
              "precision: SPOT_WEIGHT_PRECISION"
            ],
            "type": "u32"
          },
          {
            "name": "numberOfUsersWithBase",
            "docs": [
              "number of users in a position (base)"
            ],
            "type": "u32"
          },
          {
            "name": "numberOfUsers",
            "docs": [
              "number of users in a position (pnl) or pnl (quote)"
            ],
            "type": "u32"
          },
          {
            "name": "marketIndex",
            "type": "u16"
          },
          {
            "name": "status",
            "docs": [
              "Whether a market is active, reduce only, expired, etc",
              "Affects whether users can open/close positions"
            ],
            "type": {
              "defined": "MarketStatus"
            }
          },
          {
            "name": "contractType",
            "docs": [
              "Currently only Perpetual markets are supported"
            ],
            "type": {
              "defined": "ContractType"
            }
          },
          {
            "name": "contractTier",
            "docs": [
              "The contract tier determines how much insurance a market can receive, with more speculative markets receiving less insurance",
              "It also influences the order perp markets can be liquidated, with less speculative markets being liquidated first"
            ],
            "type": {
              "defined": "ContractTier"
            }
          },
          {
            "name": "pausedOperations",
            "type": "u8"
          },
          {
            "name": "quoteSpotMarketIndex",
            "docs": [
              "The spot market that pnl is settled in"
            ],
            "type": "u16"
          },
          {
            "name": "feeAdjustment",
            "docs": [
              "Between -100 and 100, represents what % to increase/decrease the fee by",
              "E.g. if this is -50 and the fee is 5bps, the new fee will be 2.5bps",
              "if this is 50 and the fee is 5bps, the new fee will be 7.5bps"
            ],
            "type": "i16"
          },
          {
            "name": "padding",
            "type": {
              "array": [
                "u8",
                46
              ]
            }
          }
        ]
      }
    },
    {
      "name": "SpotMarket",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "pubkey",
            "docs": [
              "The address of the spot market. It is a pda of the market index"
            ],
            "type": "publicKey"
          },
          {
            "name": "oracle",
            "docs": [
              "The oracle used to price the markets deposits/borrows"
            ],
            "type": "publicKey"
          },
          {
            "name": "mint",
            "docs": [
              "The token mint of the market"
            ],
            "type": "publicKey"
          },
          {
            "name": "vault",
            "docs": [
              "The vault used to store the market's deposits",
              "The amount in the vault should be equal to or greater than deposits - borrows"
            ],
            "type": "publicKey"
          },
          {
            "name": "name",
            "docs": [
              "The encoded display name for the market e.g. SOL"
            ],
            "type": {
              "array": [
                "u8",
                32
              ]
            }
          },
          {
            "name": "historicalOracleData",
            "type": {
              "defined": "HistoricalOracleData"
            }
          },
          {
            "name": "historicalIndexData",
            "type": {
              "defined": "HistoricalIndexData"
            }
          },
          {
            "name": "revenuePool",
            "docs": [
              "Revenue the protocol has collected in this markets token",
              "e.g. for SOL-PERP, funds can be settled in usdc and will flow into the USDC revenue pool"
            ],
            "type": {
              "defined": "PoolBalance"
            }
          },
          {
            "name": "spotFeePool",
            "docs": [
              "The fees collected from swaps between this market and the quote market",
              "Is settled to the quote markets revenue pool"
            ],
            "type": {
              "defined": "PoolBalance"
            }
          },
          {
            "name": "insuranceFund",
            "docs": [
              "Details on the insurance fund covering bankruptcies in this markets token",
              "Covers bankruptcies for borrows with this markets token and perps settling in this markets token"
            ],
            "type": {
              "defined": "InsuranceFund"
            }
          },
          {
            "name": "totalSpotFee",
            "docs": [
              "The total spot fees collected for this market",
              "precision: QUOTE_PRECISION"
            ],
            "type": "u128"
          },
          {
            "name": "depositBalance",
            "docs": [
              "The sum of the scaled balances for deposits across users and pool balances",
              "To convert to the deposit token amount, multiply by the cumulative deposit interest",
              "precision: SPOT_BALANCE_PRECISION"
            ],
            "type": "u128"
          },
          {
            "name": "borrowBalance",
            "docs": [
              "The sum of the scaled balances for borrows across users and pool balances",
              "To convert to the borrow token amount, multiply by the cumulative borrow interest",
              "precision: SPOT_BALANCE_PRECISION"
            ],
            "type": "u128"
          },
          {
            "name": "cumulativeDepositInterest",
            "docs": [
              "The cumulative interest earned by depositors",
              "Used to calculate the deposit token amount from the deposit balance",
              "precision: SPOT_CUMULATIVE_INTEREST_PRECISION"
            ],
            "type": "u128"
          },
          {
            "name": "cumulativeBorrowInterest",
            "docs": [
              "The cumulative interest earned by borrowers",
              "Used to calculate the borrow token amount from the borrow balance",
              "precision: SPOT_CUMULATIVE_INTEREST_PRECISION"
            ],
            "type": "u128"
          },
          {
            "name": "totalSocialLoss",
            "docs": [
              "The total socialized loss from borrows, in the mint's token",
              "precision: token mint precision"
            ],
            "type": "u128"
          },
          {
            "name": "totalQuoteSocialLoss",
            "docs": [
              "The total socialized loss from borrows, in the quote market's token",
              "preicision: QUOTE_PRECISION"
            ],
            "type": "u128"
          },
          {
            "name": "withdrawGuardThreshold",
            "docs": [
              "no withdraw limits/guards when deposits below this threshold",
              "precision: token mint precision"
            ],
            "type": "u64"
          },
          {
            "name": "maxTokenDeposits",
            "docs": [
              "The max amount of token deposits in this market",
              "0 if there is no limit",
              "precision: token mint precision"
            ],
            "type": "u64"
          },
          {
            "name": "depositTokenTwap",
            "docs": [
              "24hr average of deposit token amount",
              "precision: token mint precision"
            ],
            "type": "u64"
          },
          {
            "name": "borrowTokenTwap",
            "docs": [
              "24hr average of borrow token amount",
              "precision: token mint precision"
            ],
            "type": "u64"
          },
          {
            "name": "utilizationTwap",
            "docs": [
              "24hr average of utilization",
              "which is borrow amount over token amount",
              "precision: SPOT_UTILIZATION_PRECISION"
            ],
            "type": "u64"
          },
          {
            "name": "lastInterestTs",
            "docs": [
              "Last time the cumulative deposit and borrow interest was updated"
            ],
            "type": "u64"
          },
          {
            "name": "lastTwapTs",
            "docs": [
              "Last time the deposit/borrow/utilization averages were updated"
            ],
            "type": "u64"
          },
          {
            "name": "expiryTs",
            "docs": [
              "The time the market is set to expire. Only set if market is in reduce only mode"
            ],
            "type": "i64"
          },
          {
            "name": "orderStepSize",
            "docs": [
              "Spot orders must be a multiple of the step size",
              "precision: token mint precision"
            ],
            "type": "u64"
          },
          {
            "name": "orderTickSize",
            "docs": [
              "Spot orders must be a multiple of the tick size",
              "precision: PRICE_PRECISION"
            ],
            "type": "u64"
          },
          {
            "name": "minOrderSize",
            "docs": [
              "The minimum order size",
              "precision: token mint precision"
            ],
            "type": "u64"
          },
          {
            "name": "maxPositionSize",
            "docs": [
              "The maximum spot position size",
              "if the limit is 0, there is no limit",
              "precision: token mint precision"
            ],
            "type": "u64"
          },
          {
            "name": "nextFillRecordId",
            "docs": [
              "Every spot trade has a fill record id. This is the next id to use"
            ],
            "type": "u64"
          },
          {
            "name": "nextDepositRecordId",
            "docs": [
              "Every deposit has a deposit record id. This is the next id to use"
            ],
            "type": "u64"
          },
          {
            "name": "initialAssetWeight",
            "docs": [
              "The initial asset weight used to calculate a deposits contribution to a users initial total collateral",
              "e.g. if the asset weight is .8, $100 of deposits contributes $80 to the users initial total collateral",
              "precision: SPOT_WEIGHT_PRECISION"
            ],
            "type": "u32"
          },
          {
            "name": "maintenanceAssetWeight",
            "docs": [
              "The maintenance asset weight used to calculate a deposits contribution to a users maintenance total collateral",
              "e.g. if the asset weight is .9, $100 of deposits contributes $90 to the users maintenance total collateral",
              "precision: SPOT_WEIGHT_PRECISION"
            ],
            "type": "u32"
          },
          {
            "name": "initialLiabilityWeight",
            "docs": [
              "The initial liability weight used to calculate a borrows contribution to a users initial margin requirement",
              "e.g. if the liability weight is .9, $100 of borrows contributes $90 to the users initial margin requirement",
              "precision: SPOT_WEIGHT_PRECISION"
            ],
            "type": "u32"
          },
          {
            "name": "maintenanceLiabilityWeight",
            "docs": [
              "The maintenance liability weight used to calculate a borrows contribution to a users maintenance margin requirement",
              "e.g. if the liability weight is .8, $100 of borrows contributes $80 to the users maintenance margin requirement",
              "precision: SPOT_WEIGHT_PRECISION"
            ],
            "type": "u32"
          },
          {
            "name": "imfFactor",
            "docs": [
              "The initial margin fraction factor. Used to increase liability weight/decrease asset weight for large positions",
              "precision: MARGIN_PRECISION"
            ],
            "type": "u32"
          },
          {
            "name": "liquidatorFee",
            "docs": [
              "The fee the liquidator is paid for taking over borrow/deposit",
              "precision: LIQUIDATOR_FEE_PRECISION"
            ],
            "type": "u32"
          },
          {
            "name": "ifLiquidationFee",
            "docs": [
              "The fee the insurance fund receives from liquidation",
              "precision: LIQUIDATOR_FEE_PRECISION"
            ],
            "type": "u32"
          },
          {
            "name": "optimalUtilization",
            "docs": [
              "The optimal utilization rate for this market.",
              "Used to determine the markets borrow rate",
              "precision: SPOT_UTILIZATION_PRECISION"
            ],
            "type": "u32"
          },
          {
            "name": "optimalBorrowRate",
            "docs": [
              "The borrow rate for this market when the market has optimal utilization",
              "precision: SPOT_RATE_PRECISION"
            ],
            "type": "u32"
          },
          {
            "name": "maxBorrowRate",
            "docs": [
              "The borrow rate for this market when the market has 1000 utilization",
              "precision: SPOT_RATE_PRECISION"
            ],
            "type": "u32"
          },
          {
            "name": "decimals",
            "docs": [
              "The market's token mint's decimals. To from decimals to a precision, 10^decimals"
            ],
            "type": "u32"
          },
          {
            "name": "marketIndex",
            "type": "u16"
          },
          {
            "name": "ordersEnabled",
            "docs": [
              "Whether or not spot trading is enabled"
            ],
            "type": "bool"
          },
          {
            "name": "oracleSource",
            "type": {
              "defined": "OracleSource"
            }
          },
          {
            "name": "status",
            "type": {
              "defined": "MarketStatus"
            }
          },
          {
            "name": "assetTier",
            "docs": [
              "The asset tier affects how a deposit can be used as collateral and the priority for a borrow being liquidated"
            ],
            "type": {
              "defined": "AssetTier"
            }
          },
          {
            "name": "pausedOperations",
            "type": "u8"
          },
          {
            "name": "padding1",
            "type": {
              "array": [
                "u8",
                5
              ]
            }
          },
          {
            "name": "flashLoanAmount",
            "docs": [
              "For swaps, the amount of token loaned out in the begin_swap ix",
              "precision: token mint precision"
            ],
            "type": "u64"
          },
          {
            "name": "flashLoanInitialTokenAmount",
            "docs": [
              "For swaps, the amount in the users token account in the begin_swap ix",
              "Used to calculate how much of the token left the system in end_swap ix",
              "precision: token mint precision"
            ],
            "type": "u64"
          },
          {
            "name": "totalSwapFee",
            "docs": [
              "The total fees received from swaps",
              "precision: token mint precision"
            ],
            "type": "u64"
          },
          {
            "name": "scaleInitialAssetWeightStart",
            "docs": [
              "When to begin scaling down the initial asset weight",
              "disabled when 0",
              "precision: QUOTE_PRECISION"
            ],
            "type": "u64"
          },
          {
            "name": "padding",
            "type": {
              "array": [
                "u8",
                48
              ]
            }
          }
        ]
      }
    },
    {
      "name": "State",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "admin",
            "type": "publicKey"
          },
          {
            "name": "whitelistMint",
            "type": "publicKey"
          },
          {
            "name": "discountMint",
            "type": "publicKey"
          },
          {
            "name": "signer",
            "type": "publicKey"
          },
          {
            "name": "srmVault",
            "type": "publicKey"
          },
          {
            "name": "perpFeeStructure",
            "type": {
              "defined": "FeeStructure"
            }
          },
          {
            "name": "spotFeeStructure",
            "type": {
              "defined": "FeeStructure"
            }
          },
          {
            "name": "oracleGuardRails",
            "type": {
              "defined": "OracleGuardRails"
            }
          },
          {
            "name": "numberOfAuthorities",
            "type": "u64"
          },
          {
            "name": "numberOfSubAccounts",
            "type": "u64"
          },
          {
            "name": "lpCooldownTime",
            "type": "u64"
          },
          {
            "name": "liquidationMarginBufferRatio",
            "type": "u32"
          },
          {
            "name": "settlementDuration",
            "type": "u16"
          },
          {
            "name": "numberOfMarkets",
            "type": "u16"
          },
          {
            "name": "numberOfSpotMarkets",
            "type": "u16"
          },
          {
            "name": "signerNonce",
            "type": "u8"
          },
          {
            "name": "minPerpAuctionDuration",
            "type": "u8"
          },
          {
            "name": "defaultMarketOrderTimeInForce",
            "type": "u8"
          },
          {
            "name": "defaultSpotAuctionDuration",
            "type": "u8"
          },
          {
            "name": "exchangeStatus",
            "type": "u8"
          },
          {
            "name": "liquidationDuration",
            "type": "u8"
          },
          {
            "name": "initialPctToLiquidate",
            "type": "u16"
          },
          {
            "name": "maxNumberOfSubAccounts",
            "type": "u16"
          },
          {
            "name": "maxInitializeUserFee",
            "type": "u16"
          },
          {
            "name": "padding",
            "type": {
              "array": [
                "u8",
                10
              ]
            }
          }
        ]
      }
    },
    {
      "name": "User",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "authority",
            "docs": [
              "The owner/authority of the account"
            ],
            "type": "publicKey"
          },
          {
            "name": "delegate",
            "docs": [
              "An addresses that can control the account on the authority's behalf. Has limited power, cant withdraw"
            ],
            "type": "publicKey"
          },
          {
            "name": "name",
            "docs": [
              "Encoded display name e.g. \"toly\""
            ],
            "type": {
              "array": [
                "u8",
                32
              ]
            }
          },
          {
            "name": "spotPositions",
            "docs": [
              "The user's spot positions"
            ],
            "type": {
              "array": [
                {
                  "defined": "SpotPosition"
                },
                8
              ]
            }
          },
          {
            "name": "perpPositions",
            "docs": [
              "The user's perp positions"
            ],
            "type": {
              "array": [
                {
                  "defined": "PerpPosition"
                },
                8
              ]
            }
          },
          {
            "name": "orders",
            "docs": [
              "The user's orders"
            ],
            "type": {
              "array": [
                {
                  "defined": "Order"
                },
                32
              ]
            }
          },
          {
            "name": "lastAddPerpLpSharesTs",
            "docs": [
              "The last time the user added perp lp positions"
            ],
            "type": "i64"
          },
          {
            "name": "totalDeposits",
            "docs": [
              "The total values of deposits the user has made",
              "precision: QUOTE_PRECISION"
            ],
            "type": "u64"
          },
          {
            "name": "totalWithdraws",
            "docs": [
              "The total values of withdrawals the user has made",
              "precision: QUOTE_PRECISION"
            ],
            "type": "u64"
          },
          {
            "name": "totalSocialLoss",
            "docs": [
              "The total socialized loss the users has incurred upon the protocol",
              "precision: QUOTE_PRECISION"
            ],
            "type": "u64"
          },
          {
            "name": "settledPerpPnl",
            "docs": [
              "Fees (taker fees, maker rebate, referrer reward, filler reward) and pnl for perps",
              "precision: QUOTE_PRECISION"
            ],
            "type": "i64"
          },
          {
            "name": "cumulativeSpotFees",
            "docs": [
              "Fees (taker fees, maker rebate, filler reward) for spot",
              "precision: QUOTE_PRECISION"
            ],
            "type": "i64"
          },
          {
            "name": "cumulativePerpFunding",
            "docs": [
              "Cumulative funding paid/received for perps",
              "precision: QUOTE_PRECISION"
            ],
            "type": "i64"
          },
          {
            "name": "liquidationMarginFreed",
            "docs": [
              "The amount of margin freed during liquidation. Used to force the liquidation to occur over a period of time",
              "Defaults to zero when not being liquidated",
              "precision: QUOTE_PRECISION"
            ],
            "type": "u64"
          },
          {
            "name": "lastActiveSlot",
            "docs": [
              "The last slot a user was active. Used to determine if a user is idle"
            ],
            "type": "u64"
          },
          {
            "name": "nextOrderId",
            "docs": [
              "Every user order has an order id. This is the next order id to be used"
            ],
            "type": "u32"
          },
          {
            "name": "maxMarginRatio",
            "docs": [
              "Custom max initial margin ratio for the user"
            ],
            "type": "u32"
          },
          {
            "name": "nextLiquidationId",
            "docs": [
              "The next liquidation id to be used for user"
            ],
            "type": "u16"
          },
          {
            "name": "subAccountId",
            "docs": [
              "The sub account id for this user"
            ],
            "type": "u16"
          },
          {
            "name": "status",
            "docs": [
              "Whether the user is active, being liquidated or bankrupt"
            ],
            "type": "u8"
          },
          {
            "name": "isMarginTradingEnabled",
            "docs": [
              "Whether the user has enabled margin trading"
            ],
            "type": "bool"
          },
          {
            "name": "idle",
            "docs": [
              "User is idle if they haven't interacted with the protocol in 1 week and they have no orders, perp positions or borrows",
              "Off-chain keeper bots can ignore users that are idle"
            ],
            "type": "bool"
          },
          {
            "name": "openOrders",
            "docs": [
              "number of open orders"
            ],
            "type": "u8"
          },
          {
            "name": "hasOpenOrder",
            "docs": [
              "Whether or not user has open order"
            ],
            "type": "bool"
          },
          {
            "name": "openAuctions",
            "docs": [
              "number of open orders with auction"
            ],
            "type": "u8"
          },
          {
            "name": "hasOpenAuction",
            "docs": [
              "Whether or not user has open order with auction"
            ],
            "type": "bool"
          },
          {
            "name": "padding",
            "type": {
              "array": [
                "u8",
                21
              ]
            }
          }
        ]
      }
    },
    {
      "name": "UserStats",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "authority",
            "docs": [
              "The authority for all of a users sub accounts"
            ],
            "type": "publicKey"
          },
          {
            "name": "referrer",
            "docs": [
              "The address that referred this user"
            ],
            "type": "publicKey"
          },
          {
            "name": "fees",
            "docs": [
              "Stats on the fees paid by the user"
            ],
            "type": {
              "defined": "UserFees"
            }
          },
          {
            "name": "nextEpochTs",
            "docs": [
              "The timestamp of the next epoch",
              "Epoch is used to limit referrer rewards earned in single epoch"
            ],
            "type": "i64"
          },
          {
            "name": "makerVolume30d",
            "docs": [
              "Rolling 30day maker volume for user",
              "precision: QUOTE_PRECISION"
            ],
            "type": "u64"
          },
          {
            "name": "takerVolume30d",
            "docs": [
              "Rolling 30day taker volume for user",
              "precision: QUOTE_PRECISION"
            ],
            "type": "u64"
          },
          {
            "name": "fillerVolume30d",
            "docs": [
              "Rolling 30day filler volume for user",
              "precision: QUOTE_PRECISION"
            ],
            "type": "u64"
          },
          {
            "name": "lastMakerVolume30dTs",
            "docs": [
              "last time the maker volume was updated"
            ],
            "type": "i64"
          },
          {
            "name": "lastTakerVolume30dTs",
            "docs": [
              "last time the taker volume was updated"
            ],
            "type": "i64"
          },
          {
            "name": "lastFillerVolume30dTs",
            "docs": [
              "last time the filler volume was updated"
            ],
            "type": "i64"
          },
          {
            "name": "ifStakedQuoteAssetAmount",
            "docs": [
              "The amount of tokens staked in the quote spot markets if"
            ],
            "type": "u64"
          },
          {
            "name": "numberOfSubAccounts",
            "docs": [
              "The current number of sub accounts"
            ],
            "type": "u16"
          },
          {
            "name": "numberOfSubAccountsCreated",
            "docs": [
              "The number of sub accounts created. Can be greater than the number of sub accounts if user",
              "has deleted sub accounts"
            ],
            "type": "u16"
          },
          {
            "name": "isReferrer",
            "docs": [
              "Whether the user is a referrer. Sub account 0 can not be deleted if user is a referrer"
            ],
            "type": "bool"
          },
          {
            "name": "disableUpdatePerpBidAskTwap",
            "type": "bool"
          },
          {
            "name": "padding",
            "type": {
              "array": [
                "u8",
                50
              ]
            }
          }
        ]
      }
    },
    {
      "name": "ReferrerName",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "authority",
            "type": "publicKey"
          },
          {
            "name": "user",
            "type": "publicKey"
          },
          {
            "name": "userStats",
            "type": "publicKey"
          },
          {
            "name": "name",
            "type": {
              "array": [
                "u8",
                32
              ]
            }
          }
        ]
      }
    }
  ],
  "types": [
    {
      "name": "LiquidatePerpRecord",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "marketIndex",
            "type": "u16"
          },
          {
            "name": "oraclePrice",
            "type": "i64"
          },
          {
            "name": "baseAssetAmount",
            "type": "i64"
          },
          {
            "name": "quoteAssetAmount",
            "type": "i64"
          },
          {
            "name": "lpShares",
            "type": "u64"
          },
          {
            "name": "fillRecordId",
            "type": "u64"
          },
          {
            "name": "userOrderId",
            "type": "u32"
          },
          {
            "name": "liquidatorOrderId",
            "type": "u32"
          },
          {
            "name": "liquidatorFee",
            "type": "u64"
          },
          {
            "name": "ifFee",
            "type": "u64"
          }
        ]
      }
    },
    {
      "name": "LiquidateSpotRecord",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "assetMarketIndex",
            "type": "u16"
          },
          {
            "name": "assetPrice",
            "type": "i64"
          },
          {
            "name": "assetTransfer",
            "type": "u128"
          },
          {
            "name": "liabilityMarketIndex",
            "type": "u16"
          },
          {
            "name": "liabilityPrice",
            "type": "i64"
          },
          {
            "name": "liabilityTransfer",
            "type": "u128"
          },
          {
            "name": "ifFee",
            "type": "u64"
          }
        ]
      }
    },
    {
      "name": "LiquidateBorrowForPerpPnlRecord",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "perpMarketIndex",
            "type": "u16"
          },
          {
            "name": "marketOraclePrice",
            "type": "i64"
          },
          {
            "name": "pnlTransfer",
            "type": "u128"
          },
          {
            "name": "liabilityMarketIndex",
            "type": "u16"
          },
          {
            "name": "liabilityPrice",
            "type": "i64"
          },
          {
            "name": "liabilityTransfer",
            "type": "u128"
          }
        ]
      }
    },
    {
      "name": "LiquidatePerpPnlForDepositRecord",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "perpMarketIndex",
            "type": "u16"
          },
          {
            "name": "marketOraclePrice",
            "type": "i64"
          },
          {
            "name": "pnlTransfer",
            "type": "u128"
          },
          {
            "name": "assetMarketIndex",
            "type": "u16"
          },
          {
            "name": "assetPrice",
            "type": "i64"
          },
          {
            "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": "MarketIdentifier",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "marketType",
            "type": {
              "defined": "MarketType"
            }
          },
          {
            "name": "marketIndex",
            "type": "u16"
          }
        ]
      }
    },
    {
      "name": "HistoricalOracleData",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "lastOraclePrice",
            "docs": [
              "precision: PRICE_PRECISION"
            ],
            "type": "i64"
          },
          {
            "name": "lastOracleConf",
            "docs": [
              "precision: PRICE_PRECISION"
            ],
            "type": "u64"
          },
          {
            "name": "lastOracleDelay",
            "type": "i64"
          },
          {
            "name": "lastOraclePriceTwap",
            "docs": [
              "precision: PRICE_PRECISION"
            ],
            "type": "i64"
          },
          {
            "name": "lastOraclePriceTwap5min",
            "docs": [
              "precision: PRICE_PRECISION"
            ],
            "type": "i64"
          },
          {
            "name": "lastOraclePriceTwapTs",
            "type": "i64"
          }
        ]
      }
    },
    {
      "name": "HistoricalIndexData",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "lastIndexBidPrice",
            "docs": [
              "precision: PRICE_PRECISION"
            ],
            "type": "u64"
          },
          {
            "name": "lastIndexAskPrice",
            "docs": [
              "precision: PRICE_PRECISION"
            ],
            "type": "u64"
          },
          {
            "name": "lastIndexPriceTwap",
            "docs": [
              "precision: PRICE_PRECISION"
            ],
            "type": "u64"
          },
          {
            "name": "lastIndexPriceTwap5min",
            "docs": [
              "precision: PRICE_PRECISION"
            ],
            "type": "u64"
          },
          {
            "name": "lastIndexPriceTwapTs",
            "type": "i64"
          }
        ]
      }
    },
    {
      "name": "OrderParams",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "orderType",
            "type": {
              "defined": "OrderType"
            }
          },
          {
            "name": "marketType",
            "type": {
              "defined": "MarketType"
            }
          },
          {
            "name": "direction",
            "type": {
              "defined": "PositionDirection"
            }
          },
          {
            "name": "userOrderId",
            "type": "u8"
          },
          {
            "name": "baseAssetAmount",
            "type": "u64"
          },
          {
            "name": "price",
            "type": "u64"
          },
          {
            "name": "marketIndex",
            "type": "u16"
          },
          {
            "name": "reduceOnly",
            "type": "bool"
          },
          {
            "name": "postOnly",
            "type": {
              "defined": "PostOnlyParam"
            }
          },
          {
            "name": "immediateOrCancel",
            "type": "bool"
          },
          {
            "name": "maxTs",
            "type": {
              "option": "i64"
            }
          },
          {
            "name": "triggerPrice",
            "type": {
              "option": "u64"
            }
          },
          {
            "name": "triggerCondition",
            "type": {
              "defined": "OrderTriggerCondition"
            }
          },
          {
            "name": "oraclePriceOffset",
            "type": {
              "option": "i32"
            }
          },
          {
            "name": "auctionDuration",
            "type": {
              "option": "u8"
            }
          },
          {
            "name": "auctionStartPrice",
            "type": {
              "option": "i64"
            }
          },
          {
            "name": "auctionEndPrice",
            "type": {
              "option": "i64"
            }
          }
        ]
      }
    },
    {
      "name": "ModifyOrderParams",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "direction",
            "type": {
              "option": {
                "defined": "PositionDirection"
              }
            }
          },
          {
            "name": "baseAssetAmount",
            "type": {
              "option": "u64"
            }
          },
          {
            "name": "price",
            "type": {
              "option": "u64"
            }
          },
          {
            "name": "reduceOnly",
            "type": {
              "option": "bool"
            }
          },
          {
            "name": "postOnly",
            "type": {
              "option": {
                "defined": "PostOnlyParam"
              }
            }
          },
          {
            "name": "immediateOrCancel",
            "type": {
              "option": "bool"
            }
          },
          {
            "name": "maxTs",
            "type": {
              "option": "i64"
            }
          },
          {
            "name": "triggerPrice",
            "type": {
              "option": "u64"
            }
          },
          {
            "name": "triggerCondition",
            "type": {
              "option": {
                "defined": "OrderTriggerCondition"
              }
            }
          },
          {
            "name": "oraclePriceOffset",
            "type": {
              "option": "i32"
            }
          },
          {
            "name": "auctionDuration",
            "type": {
              "option": "u8"
            }
          },
          {
            "name": "auctionStartPrice",
            "type": {
              "option": "i64"
            }
          },
          {
            "name": "auctionEndPrice",
            "type": {
              "option": "i64"
            }
          },
          {
            "name": "policy",
            "type": {
              "option": {
                "defined": "ModifyOrderPolicy"
              }
            }
          }
        ]
      }
    },
    {
      "name": "InsuranceClaim",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "revenueWithdrawSinceLastSettle",
            "docs": [
              "The amount of revenue last settled",
              "Positive if funds left the perp market,",
              "negative if funds were pulled into the perp market",
              "precision: QUOTE_PRECISION"
            ],
            "type": "i64"
          },
          {
            "name": "maxRevenueWithdrawPerPeriod",
            "docs": [
              "The max amount of revenue that can be withdrawn per period",
              "precision: QUOTE_PRECISION"
            ],
            "type": "u64"
          },
          {
            "name": "quoteMaxInsurance",
            "docs": [
              "The max amount of insurance that perp market can use to resolve bankruptcy and pnl deficits",
              "precision: QUOTE_PRECISION"
            ],
            "type": "u64"
          },
          {
            "name": "quoteSettledInsurance",
            "docs": [
              "The amount of insurance that has been used to resolve bankruptcy and pnl deficits",
              "precision: QUOTE_PRECISION"
            ],
            "type": "u64"
          },
          {
            "name": "lastRevenueWithdrawTs",
            "docs": [
              "The last time revenue was settled in/out of market"
            ],
            "type": "i64"
          }
        ]
      }
    },
    {
      "name": "PoolBalance",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "scaledBalance",
            "docs": [
              "To get the pool's token amount, you must multiply the scaled balance by the market's cumulative",
              "deposit interest",
              "precision: SPOT_BALANCE_PRECISION"
            ],
            "type": "u128"
          },
          {
            "name": "marketIndex",
            "docs": [
              "The spot market the pool is for"
            ],
            "type": "u16"
          },
          {
            "name": "padding",
            "type": {
              "array": [
                "u8",
                6
              ]
            }
          }
        ]
      }
    },
    {
      "name": "AMM",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "oracle",
            "docs": [
              "oracle price data public key"
            ],
            "type": "publicKey"
          },
          {
            "name": "historicalOracleData",
            "docs": [
              "stores historically witnessed oracle data"
            ],
            "type": {
              "defined": "HistoricalOracleData"
            }
          },
          {
            "name": "baseAssetAmountPerLp",
            "docs": [
              "accumulated base asset amount since inception per lp share"
            ],
            "type": "i128"
          },
          {
            "name": "quoteAssetAmountPerLp",
            "docs": [
              "accumulated quote asset amount since inception per lp share"
            ],
            "type": "i128"
          },
          {
            "name": "feePool",
            "docs": [
              "partition of fees from perp market trading moved from pnl settlements"
            ],
            "type": {
              "defined": "PoolBalance"
            }
          },
          {
            "name": "baseAssetReserve",
            "docs": [
              "`x` reserves for constant product mm formula (x * y = k)"
            ],
            "type": "u128"
          },
          {
            "name": "quoteAssetReserve",
            "docs": [
              "`y` reserves for constant product mm formula (x * y = k)"
            ],
            "type": "u128"
          },
          {
            "name": "concentrationCoef",
            "docs": [
              "determines how close the min/max base asset reserve sit vs base reserves",
              "allow for decreasing slippage without increasing liquidity and v.v."
            ],
            "type": "u128"
          },
          {
            "name": "minBaseAssetReserve",
            "docs": [
              "minimum base_asset_reserve allowed before AMM is unavailable"
            ],
            "type": "u128"
          },
          {
            "name": "maxBaseAssetReserve",
            "docs": [
              "maximum base_asset_reserve allowed before AMM is unavailable"
            ],
            "type": "u128"
          },
          {
            "name": "sqrtK",
            "docs": [
              "`sqrt(k)` in constant product mm formula (x * y = k). stored to avoid drift caused by integer math issues"
            ],
            "type": "u128"
          },
          {
            "name": "pegMultiplier",
            "docs": [
              "normalizing numerical factor for y, its use offers lowest slippage in cp-curve when market is balanced"
            ],
            "type": "u128"
          },
          {
            "name": "terminalQuoteAssetReserve",
            "docs": [
              "y when market is balanced. stored to save computation"
            ],
            "type": "u128"
          },
          {
            "name": "baseAssetAmountLong",
            "docs": [
              "tracks number of total longs in market (regardless of counterparty)"
            ],
            "type": "i128"
          },
          {
            "name": "baseAssetAmountShort",
            "docs": [
              "tracks number of total shorts in market (regardless of counterparty)"
            ],
            "type": "i128"
          },
          {
            "name": "baseAssetAmountWithAmm",
            "docs": [
              "tracks net position (longs-shorts) in market with AMM as counterparty"
            ],
            "type": "i128"
          },
          {
            "name": "baseAssetAmountWithUnsettledLp",
            "docs": [
              "tracks net position (longs-shorts) in market with LPs as counterparty"
            ],
            "type": "i128"
          },
          {
            "name": "maxOpenInterest",
            "docs": [
              "max allowed open interest, blocks trades that breach this value"
            ],
            "type": "u128"
          },
          {
            "name": "quoteAssetAmount",
            "docs": [
              "sum of all user's perp quote_asset_amount in market"
            ],
            "type": "i128"
          },
          {
            "name": "quoteEntryAmountLong",
            "docs": [
              "sum of all long user's quote_entry_amount in market"
            ],
            "type": "i128"
          },
          {
            "name": "quoteEntryAmountShort",
            "docs": [
              "sum of all short user's quote_entry_amount in market"
            ],
            "type": "i128"
          },
          {
            "name": "quoteBreakEvenAmountLong",
            "docs": [
              "sum of all long user's quote_break_even_amount in market"
            ],
            "type": "i128"
          },
          {
            "name": "quoteBreakEvenAmountShort",
            "docs": [
              "sum of all short user's quote_break_even_amount in market"
            ],
            "type": "i128"
          },
          {
            "name": "userLpShares",
            "docs": [
              "total user lp shares of sqrt_k (protocol owned liquidity = sqrt_k - last_funding_rate)"
            ],
            "type": "u128"
          },
          {
            "name": "lastFundingRate",
            "docs": [
              "last funding rate in this perp market (unit is quote per base)"
            ],
            "type": "i64"
          },
          {
            "name": "lastFundingRateLong",
            "docs": [
              "last funding rate for longs in this perp market (unit is quote per base)"
            ],
            "type": "i64"
          },
          {
            "name": "lastFundingRateShort",
            "docs": [
              "last funding rate for shorts in this perp market (unit is quote per base)"
            ],
            "type": "i64"
          },
          {
            "name": "last24hAvgFundingRate",
            "docs": [
              "estimate of last 24h of funding rate perp market (unit is quote per base)"
            ],
            "type": "i64"
          },
          {
            "name": "totalFee",
            "docs": [
              "total fees collected by this perp market"
            ],
            "type": "i128"
          },
          {
            "name": "totalMmFee",
            "docs": [
              "total fees collected by the vAMM's bid/ask spread"
            ],
            "type": "i128"
          },
          {
            "name": "totalExchangeFee",
            "docs": [
              "total fees collected by exchange fee schedule"
            ],
            "type": "u128"
          },
          {
            "name": "totalFeeMinusDistributions",
            "docs": [
              "total fees minus any recognized upnl and pool withdraws"
            ],
            "type": "i128"
          },
          {
            "name": "totalFeeWithdrawn",
            "docs": [
              "sum of all fees from fee pool withdrawn to revenue pool"
            ],
            "type": "u128"
          },
          {
            "name": "totalLiquidationFee",
            "docs": [
              "all fees collected by market for liquidations"
            ],
            "type": "u128"
          },
          {
            "name": "cumulativeFundingRateLong",
            "docs": [
              "accumulated funding rate for longs since inception in market"
            ],
            "type": "i128"
          },
          {
            "name": "cumulativeFundingRateShort",
            "docs": [
              "accumulated funding rate for shorts since inception in market"
            ],
            "type": "i128"
          },
          {
            "name": "totalSocialLoss",
            "docs": [
              "accumulated social loss paid by users since inception in market"
            ],
            "type": "u128"
          },
          {
            "name": "askBaseAssetReserve",
            "docs": [
              "transformed base_asset_reserve for users going long"
            ],
            "type": "u128"
          },
          {
            "name": "askQuoteAssetReserve",
            "docs": [
              "transformed quote_asset_reserve for users going long"
            ],
            "type": "u128"
          },
          {
            "name": "bidBaseAssetReserve",
            "docs": [
              "transformed base_asset_reserve for users going short"
            ],
            "type": "u128"
          },
          {
            "name": "bidQuoteAssetReserve",
            "docs": [
              "transformed quote_asset_reserve for users going short"
            ],
            "type": "u128"
          },
          {
            "name": "lastOracleNormalisedPrice",
            "docs": [
              "the last seen oracle price partially shrunk toward the amm reserve price",
              "precision: PRICE_PRECISION"
            ],
            "type": "i64"
          },
          {
            "name": "lastOracleReservePriceSpreadPct",
            "docs": [
              "the gap between the oracle price and the reserve price = y * peg_multiplier / x"
            ],
            "type": "i64"
          },
          {
            "name": "lastBidPriceTwap",
            "docs": [
              "average estimate of bid price over funding_period",
              "precision: PRICE_PRECISION"
            ],
            "type": "u64"
          },
          {
            "name": "lastAskPriceTwap",
            "docs": [
              "average estimate of ask price over funding_period",
              "precision: PRICE_PRECISION"
            ],
            "type": "u64"
          },
          {
            "name": "lastMarkPriceTwap",
            "docs": [
              "average estimate of (bid+ask)/2 price over funding_period",
              "precision: PRICE_PRECISION"
            ],
            "type": "u64"
          },
          {
            "name": "lastMarkPriceTwap5min",
            "docs": [
              "average estimate of (bid+ask)/2 price over FIVE_MINUTES"
            ],
            "type": "u64"
          },
          {
            "name": "lastUpdateSlot",
            "docs": [
              "the last blockchain slot the amm was updated"
            ],
            "type": "u64"
          },
          {
            "name": "lastOracleConfPct",
            "docs": [
              "the pct size of the oracle confidence interval",
              "precision: PERCENTAGE_PRECISION"
            ],
            "type": "u64"
          },
          {
            "name": "netRevenueSinceLastFunding",
            "docs": [
              "the total_fee_minus_distribution change since the last funding update",
              "precision: QUOTE_PRECISION"
            ],
            "type": "i64"
          },
          {
            "name": "lastFundingRateTs",
            "docs": [
              "the last funding rate update unix_timestamp"
            ],
            "type": "i64"
          },
          {
            "name": "fundingPeriod",
            "docs": [
              "the peridocity of the funding rate updates"
            ],
            "type": "i64"
          },
          {
            "name": "orderStepSize",
            "docs": [
              "the base step size (increment) of orders",
              "precision: BASE_PRECISION"
            ],
            "type": "u64"
          },
          {
            "name": "orderTickSize",
            "docs": [
              "the price tick size of orders",
              "precision: PRICE_PRECISION"
            ],
            "type": "u64"
          },
          {
            "name": "minOrderSize",
            "docs": [
              "the minimum base size of an order",
              "precision: BASE_PRECISION"
            ],
            "type": "u64"
          },
          {
            "name": "maxPositionSize",
            "docs": [
              "the max base size a single user can have",
              "precision: BASE_PRECISION"
            ],
            "type": "u64"
          },
          {
            "name": "volume24h",
            "docs": [
              "estimated total of volume in market",
              "QUOTE_PRECISION"
            ],
            "type": "u64"
          },
          {
            "name": "longIntensityVolume",
            "docs": [
              "the volume intensity of long fills against AMM"
            ],
            "type": "u64"
          },
          {
            "name": "shortIntensityVolume",
            "docs": [
              "the volume intensity of short fills against AMM"
            ],
            "type": "u64"
          },
          {
            "name": "lastTradeTs",
            "docs": [
              "the blockchain unix timestamp at the time of the last trade"
            ],
            "type": "i64"
          },
          {
            "name": "markStd",
            "docs": [
              "estimate of standard deviation of the fill (mark) prices",
              "precision: PRICE_PRECISION"
            ],
            "type": "u64"
          },
          {
            "name": "oracleStd",
            "docs": [
              "estimate of standard deviation of the oracle price at each update",
              "precision: PRICE_PRECISION"
            ],
            "type": "u64"
          },
          {
            "name": "lastMarkPriceTwapTs",
            "docs": [
              "the last unix_timestamp the mark twap was updated"
            ],
            "type": "i64"
          },
          {
            "name": "baseSpread",
            "docs": [
              "the minimum spread the AMM can quote. also used as step size for some spread logic increases."
            ],
            "type": "u32"
          },
          {
            "name": "maxSpread",
            "docs": [
              "the maximum spread the AMM can quote"
            ],
            "type": "u32"
          },
          {
            "name": "longSpread",
            "docs": [
              "the spread for asks vs the reserve price"
            ],
            "type": "u32"
          },
          {
            "name": "shortSpread",
            "docs": [
              "the spread for bids vs the reserve price"
            ],
            "type": "u32"
          },
          {
            "name": "longIntensityCount",
            "docs": [
              "the count intensity of long fills against AMM"
            ],
            "type": "u32"
          },
          {
            "name": "shortIntensityCount",
            "docs": [
              "the count intensity of short fills against AMM"
            ],
            "type": "u32"
          },
          {
            "name": "maxFillReserveFraction",
            "docs": [
              "the fraction of total available liquidity a single fill on the AMM can consume"
            ],
            "type": "u16"
          },
          {
            "name": "maxSlippageRatio",
            "docs": [
              "the maximum slippage a single fill on the AMM can push"
            ],
            "type": "u16"
          },
          {
            "name": "curveUpdateIntensity",
            "docs": [
              "the update intensity of AMM formulaic updates (adjusting k). 0-100"
            ],
            "type": "u8"
          },
          {
            "name": "ammJitIntensity",
            "docs": [
              "the jit intensity of AMM. larger intensity means larger participation in jit. 0 means no jit participation.",
              "(0, 100] is intensity for protocol-owned AMM. (100, 200] is intensity for user LP-owned AMM."
            ],
            "type": "u8"
          },
          {
            "name": "oracleSource",
            "docs": [
              "the oracle provider information. used to decode/scale the oracle public key"
            ],
            "type": {
              "defined": "OracleSource"
            }
          },
          {
            "name": "lastOracleValid",
            "docs": [
              "tracks whether the oracle was considered valid at the last AMM update"
            ],
            "type": "bool"
          },
          {
            "name": "targetBaseAssetAmountPerLp",
            "docs": [
              "the target value for `base_asset_amount_per_lp`, used during AMM JIT with LP split",
              "precision: BASE_PRECISION"
            ],
            "type": "i32"
          },
          {
            "name": "perLpBase",
            "docs": [
              "expo for unit of per_lp, base 10 (if per_lp_base=X, then per_lp unit is 10^X)"
            ],
            "type": "i8"
          },
          {
            "name": "padding1",
            "type": "u8"
          },
          {
            "name": "padding2",
            "type": "u16"
          },
          {
            "name": "totalFeeEarnedPerLp",
            "type": "u64"
          },
          {
            "name": "netUnsettledFundingPnl",
            "type": "i64"
          },
          {
            "name": "quoteAssetAmountWithUnsettledLp",
            "type": "i64"
          },
          {
            "name": "referencePriceOffset",
            "type": "i32"
          },
          {
            "name": "padding",
            "type": {
              "array": [
                "u8",
                12
              ]
            }
          }
        ]
      }
    },
    {
      "name": "InsuranceFund",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "vault",
            "type": "publicKey"
          },
          {
            "name": "totalShares",
            "type": "u128"
          },
          {
            "name": "userShares",
            "type": "u128"
          },
          {
            "name": "sharesBase",
            "type": "u128"
          },
          {
            "name": "unstakingPeriod",
            "type": "i64"
          },
          {
            "name": "lastRevenueSettleTs",
            "type": "i64"
          },
          {
            "name": "revenueSettlePeriod",
            "type": "i64"
          },
          {
            "name": "totalFactor",
            "type": "u32"
          },
          {
            "name": "userFactor",
            "type": "u32"
          }
        ]
      }
    },
    {
      "name": "OracleGuardRails",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "priceDivergence",
            "type": {
              "defined": "PriceDivergenceGuardRails"
            }
          },
          {
            "name": "validity",
            "type": {
              "defined": "ValidityGuardRails"
            }
          }
        ]
      }
    },
    {
      "name": "PriceDivergenceGuardRails",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "markOraclePercentDivergence",
            "type": "u64"
          },
          {
            "name": "oracleTwap5minPercentDivergence",
            "type": "u64"
          }
        ]
      }
    },
    {
      "name": "ValidityGuardRails",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "slotsBeforeStaleForAmm",
            "type": "i64"
          },
          {
            "name": "slotsBeforeStaleForMargin",
            "type": "i64"
          },
          {
            "name": "confidenceIntervalMaxSize",
            "type": "u64"
          },
          {
            "name": "tooVolatileRatio",
            "type": "i64"
          }
        ]
      }
    },
    {
      "name": "FeeStructure",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "feeTiers",
            "type": {
              "array": [
                {
                  "defined": "FeeTier"
                },
                10
              ]
            }
          },
          {
            "name": "fillerRewardStructure",
            "type": {
              "defined": "OrderFillerRewardStructure"
            }
          },
          {
            "name": "referrerRewardEpochUpperBound",
            "type": "u64"
          },
          {
            "name": "flatFillerFee",
            "type": "u64"
          }
        ]
      }
    },
    {
      "name": "FeeTier",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "feeNumerator",
            "type": "u32"
          },
          {
            "name": "feeDenominator",
            "type": "u32"
          },
          {
            "name": "makerRebateNumerator",
            "type": "u32"
          },
          {
            "name": "makerRebateDenominator",
            "type": "u32"
          },
          {
            "name": "referrerRewardNumerator",
            "type": "u32"
          },
          {
            "name": "referrerRewardDenominator",
            "type": "u32"
          },
          {
            "name": "refereeFeeNumerator",
            "type": "u32"
          },
          {
            "name": "refereeFeeDenominator",
            "type": "u32"
          }
        ]
      }
    },
    {
      "name": "OrderFillerRewardStructure",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "rewardNumerator",
            "type": "u32"
          },
          {
            "name": "rewardDenominator",
            "type": "u32"
          },
          {
            "name": "timeBasedRewardLowerBound",
            "type": "u128"
          }
        ]
      }
    },
    {
      "name": "UserFees",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "totalFeePaid",
            "docs": [
              "Total taker fee paid",
              "precision: QUOTE_PRECISION"
            ],
            "type": "u64"
          },
          {
            "name": "totalFeeRebate",
            "docs": [
              "Total maker fee rebate",
              "precision: QUOTE_PRECISION"
            ],
            "type": "u64"
          },
          {
            "name": "totalTokenDiscount",
            "docs": [
              "Total discount from holding token",
              "precision: QUOTE_PRECISION"
            ],
            "type": "u64"
          },
          {
            "name": "totalRefereeDiscount",
            "docs": [
              "Total discount from being referred",
              "precision: QUOTE_PRECISION"
            ],
            "type": "u64"
          },
          {
            "name": "totalReferrerReward",
            "docs": [
              "Total reward to referrer",
              "precision: QUOTE_PRECISION"
            ],
            "type": "u64"
          },
          {
            "name": "currentEpochReferrerReward",
            "docs": [
              "Total reward to referrer this epoch",
              "precision: QUOTE_PRECISION"
            ],
            "type": "u64"
          }
        ]
      }
    },
    {
      "name": "SpotPosition",
      "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: SPOT_BALANCE_PRECISION"
            ],
            "type": "u64"
          },
          {
            "name": "openBids",
            "docs": [
              "How many spot bids the user has open",
              "precision: token mint precision"
            ],
            "type": "i64"
          },
          {
            "name": "openAsks",
            "docs": [
              "How many spot asks the user has open",
              "precision: token mint precision"
            ],
            "type": "i64"
          },
          {
            "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": "openOrders",
            "docs": [
              "Number of open orders"
            ],
            "type": "u8"
          },
          {
            "name": "padding",
            "type": {
              "array": [
                "u8",
                4
              ]
            }
          }
        ]
      }
    },
    {
      "name": "PerpPosition",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "lastCumulativeFundingRate",
            "docs": [
              "The perp market's last cumulative funding rate. Used to calculate the funding payment owed to user",
              "precision: FUNDING_RATE_PRECISION"
            ],
            "type": "i64"
          },
          {
            "name": "baseAssetAmount",
            "docs": [
              "the size of the users perp position",
              "precision: BASE_PRECISION"
            ],
            "type": "i64"
          },
          {
            "name": "quoteAssetAmount",
            "docs": [
              "Used to calculate the users pnl. Upon entry, is equal to base_asset_amount * avg entry price - fees",
              "Updated when the user open/closes position or settles pnl. Includes fees/funding",
              "precision: QUOTE_PRECISION"
            ],
            "type": "i64"
          },
          {
            "name": "quoteBreakEvenAmount",
            "docs": [
              "The amount of quote the user would need to exit their position at to break even",
              "Updated when the user open/closes position or settles pnl. Includes fees/funding",
              "precision: QUOTE_PRECISION"
            ],
            "type": "i64"
          },
          {
            "name": "quoteEntryAmount",
            "docs": [
              "The amount quote the user entered the position with. Equal to base asset amount * avg entry price",
              "Updated when the user open/closes position. Excludes fees/funding",
              "precision: QUOTE_PRECISION"
            ],
            "type": "i64"
          },
          {
            "name": "openBids",
            "docs": [
              "The amount of open bids the user has in this perp market",
              "precision: BASE_PRECISION"
            ],
            "type": "i64"
          },
          {
            "name": "openAsks",
            "docs": [
              "The amount of open asks the user has in this perp market",
              "precision: BASE_PRECISION"
            ],
            "type": "i64"
          },
          {
            "name": "settledPnl",
            "docs": [
              "The amount of pnl settled in this market since opening the position",
              "precision: QUOTE_PRECISION"
            ],
            "type": "i64"
          },
          {
            "name": "lpShares",
            "docs": [
              "The number of lp (liquidity provider) shares the user has in this perp market",
              "LP shares allow users to provide liquidity via the AMM",
              "precision: BASE_PRECISION"
            ],
            "type": "u64"
          },
          {
            "name": "lastBaseAssetAmountPerLp",
            "docs": [
              "The last base asset amount per lp the amm had",
              "Used to settle the users lp position",
              "precision: BASE_PRECISION"
            ],
            "type": "i64"
          },
          {
            "name": "lastQuoteAssetAmountPerLp",
            "docs": [
              "The last quote asset amount per lp the amm had",
              "Used to settle the users lp position",
              "precision: QUOTE_PRECISION"
            ],
            "type": "i64"
          },
          {
            "name": "remainderBaseAssetAmount",
            "docs": [
              "Settling LP position can lead to a small amount of base asset being left over smaller than step size",
              "This records that remainder so it can be settled later on",
              "precision: BASE_PRECISION"
            ],
            "type": "i32"
          },
          {
            "name": "marketIndex",
            "docs": [
              "The market index for the perp market"
            ],
            "type": "u16"
          },
          {
            "name": "openOrders",
            "docs": [
              "The number of open orders"
            ],
            "type": "u8"
          },
          {
            "name": "perLpBase",
            "type": "i8"
          }
        ]
      }
    },
    {
      "name": "Order",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "slot",
            "docs": [
              "The slot the order was placed"
            ],
            "type": "u64"
          },
          {
            "name": "price",
            "docs": [
              "The limit price for the order (can be 0 for market orders)",
              "For orders with an auction, this price isn't used until the auction is complete",
              "precision: PRICE_PRECISION"
            ],
            "type": "u64"
          },
          {
            "name": "baseAssetAmount",
            "docs": [
              "The size of the order",
              "precision for perps: BASE_PRECISION",
              "precision for spot: token mint precision"
            ],
            "type": "u64"
          },
          {
            "name": "baseAssetAmountFilled",
            "docs": [
              "The amount of the order filled",
              "precision for perps: BASE_PRECISION",
              "precision for spot: token mint precision"
            ],
            "type": "u64"
          },
          {
            "name": "quoteAssetAmountFilled",
            "docs": [
              "The amount of quote filled for the order",
              "precision: QUOTE_PRECISION"
            ],
            "type": "u64"
          },
          {
            "name": "triggerPrice",
            "docs": [
              "At what price the order will be triggered. Only relevant for trigger orders",
              "precision: PRICE_PRECISION"
            ],
            "type": "u64"
          },
          {
            "name": "auctionStartPrice",
            "docs": [
              "The start price for the auction. Only relevant for market/oracle orders",
              "precision: PRICE_PRECISION"
            ],
            "type": "i64"
          },
          {
            "name": "auctionEndPrice",
            "docs": [
              "The end price for the auction. Only relevant for market/oracle orders",
              "precision: PRICE_PRECISION"
            ],
            "type": "i64"
          },
          {
            "name": "maxTs",
            "docs": [
              "The time when the order will expire"
            ],
            "type": "i64"
          },
          {
            "name": "oraclePriceOffset",
            "docs": [
              "If set, the order limit price is the oracle price + this offset",
              "precision: PRICE_PRECISION"
            ],
            "type": "i32"
          },
          {
            "name": "orderId",
            "docs": [
              "The id for the order. Each users has their own order id space"
            ],
            "type": "u32"
          },
          {
            "name": "marketIndex",
            "docs": [
              "The perp/spot market index"
            ],
            "type": "u16"
          },
          {
            "name": "status",
            "docs": [
              "Whether the order is open or unused"
            ],
            "type": {
              "defined": "OrderStatus"
            }
          },
          {
            "name": "orderType",
            "docs": [
              "The type of order"
            ],
            "type": {
              "defined": "OrderType"
            }
          },
          {
            "name": "marketType",
            "docs": [
              "Whether market is spot or perp"
            ],
            "type": {
              "defined": "MarketType"
            }
          },
          {
            "name": "userOrderId",
            "docs": [
              "User generated order id. Can make it easier to place/cancel orders"
            ],
            "type": "u8"
          },
          {
            "name": "existingPositionDirection",
            "docs": [
              "What the users position was when the order was placed"
            ],
            "type": {
              "defined": "PositionDirection"
            }
          },
          {
            "name": "direction",
            "docs": [
              "Whether the user is going long or short. LONG = bid, SHORT = ask"
            ],
            "type": {
              "defined": "PositionDirection"
            }
          },
          {
            "name": "reduceOnly",
            "docs": [
              "Whether the order is allowed to only reduce position size"
            ],
            "type": "bool"
          },
          {
            "name": "postOnly",
            "docs": [
              "Whether the order must be a maker"
            ],
            "type": "bool"
          },
          {
            "name": "immediateOrCancel",
            "docs": [
              "Whether the order must be canceled the same slot it is placed"
            ],
            "type": "bool"
          },
          {
            "name": "triggerCondition",
            "docs": [
              "Whether the order is triggered above or below the trigger price. Only relevant for trigger orders"
            ],
            "type": {
              "defined": "OrderTriggerCondition"
            }
          },
          {
            "name": "auctionDuration",
            "docs": [
              "How many slots the auction lasts"
            ],
            "type": "u8"
          },
          {
            "name": "padding",
            "type": {
              "array": [
                "u8",
                3
              ]
            }
          }
        ]
      }
    },
    {
      "name": "SwapDirection",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "Add"
          },
          {
            "name": "Remove"
          }
        ]
      }
    },
    {
      "name": "ModifyOrderId",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "UserOrderId",
            "fields": [
              "u8"
            ]
          },
          {
            "name": "OrderId",
            "fields": [
              "u32"
            ]
          }
        ]
      }
    },
    {
      "name": "PositionDirection",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "Long"
          },
          {
            "name": "Short"
          }
        ]
      }
    },
    {
      "name": "SpotFulfillmentType",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "SerumV3"
          },
          {
            "name": "Match"
          },
          {
            "name": "PhoenixV1"
          }
        ]
      }
    },
    {
      "name": "SwapReduceOnly",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "In"
          },
          {
            "name": "Out"
          }
        ]
      }
    },
    {
      "name": "TwapPeriod",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "FundingPeriod"
          },
          {
            "name": "FiveMin"
          }
        ]
      }
    },
    {
      "name": "LiquidationMultiplierType",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "Discount"
          },
          {
            "name": "Premium"
          }
        ]
      }
    },
    {
      "name": "MarginRequirementType",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "Initial"
          },
          {
            "name": "Fill"
          },
          {
            "name": "Maintenance"
          }
        ]
      }
    },
    {
      "name": "OracleValidity",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "Invalid"
          },
          {
            "name": "TooVolatile"
          },
          {
            "name": "TooUncertain"
          },
          {
            "name": "StaleForMargin"
          },
          {
            "name": "InsufficientDataPoints"
          },
          {
            "name": "StaleForAMM"
          },
          {
            "name": "Valid"
          }
        ]
      }
    },
    {
      "name": "DriftAction",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "UpdateFunding"
          },
          {
            "name": "SettlePnl"
          },
          {
            "name": "TriggerOrder"
          },
          {
            "name": "FillOrderMatch"
          },
          {
            "name": "FillOrderAmm"
          },
          {
            "name": "Liquidate"
          },
          {
            "name": "MarginCalc"
          },
          {
            "name": "UpdateTwap"
          },
          {
            "name": "UpdateAMMCurve"
          }
        ]
      }
    },
    {
      "name": "PositionUpdateType",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "Open"
          },
          {
            "name": "Increase"
          },
          {
            "name": "Reduce"
          },
          {
            "name": "Close"
          },
          {
            "name": "Flip"
          }
        ]
      }
    },
    {
      "name": "DepositExplanation",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "None"
          },
          {
            "name": "Transfer"
          },
          {
            "name": "Borrow"
          }
        ]
      }
    },
    {
      "name": "DepositDirection",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "Deposit"
          },
          {
            "name": "Withdraw"
          }
        ]
      }
    },
    {
      "name": "OrderAction",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "Place"
          },
          {
            "name": "Cancel"
          },
          {
            "name": "Fill"
          },
          {
            "name": "Trigger"
          },
          {
            "name": "Expire"
          }
        ]
      }
    },
    {
      "name": "OrderActionExplanation",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "None"
          },
          {
            "name": "InsufficientFreeCollateral"
          },
          {
            "name": "OraclePriceBreachedLimitPrice"
          },
          {
            "name": "MarketOrderFilledToLimitPrice"
          },
          {
            "name": "OrderExpired"
          },
          {
            "name": "Liquidation"
          },
          {
            "name": "OrderFilledWithAMM"
          },
          {
            "name": "OrderFilledWithAMMJit"
          },
          {
            "name": "OrderFilledWithMatch"
          },
          {
            "name": "OrderFilledWithMatchJit"
          },
          {
            "name": "MarketExpired"
          },
          {
            "name": "RiskingIncreasingOrder"
          },
          {
            "name": "ReduceOnlyOrderIncreasedPosition"
          },
          {
            "name": "OrderFillWithSerum"
          },
          {
            "name": "NoBorrowLiquidity"
          },
          {
            "name": "OrderFillWithPhoenix"
          },
          {
            "name": "OrderFilledWithAMMJitLPSplit"
          },
          {
            "name": "OrderFilledWithLPJit"
          }
        ]
      }
    },
    {
      "name": "LPAction",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "AddLiquidity"
          },
          {
            "name": "RemoveLiquidity"
          },
          {
            "name": "SettleLiquidity"
          }
        ]
      }
    },
    {
      "name": "LiquidationType",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "LiquidatePerp"
          },
          {
            "name": "LiquidateSpot"
          },
          {
            "name": "LiquidateBorrowForPerpPnl"
          },
          {
            "name": "LiquidatePerpPnlForDeposit"
          },
          {
            "name": "PerpBankruptcy"
          },
          {
            "name": "SpotBankruptcy"
          }
        ]
      }
    },
    {
      "name": "SettlePnlExplanation",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "None"
          },
          {
            "name": "ExpiredPosition"
          }
        ]
      }
    },
    {
      "name": "StakeAction",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "Stake"
          },
          {
            "name": "UnstakeRequest"
          },
          {
            "name": "UnstakeCancelRequest"
          },
          {
            "name": "Unstake"
          },
          {
            "name": "UnstakeTransfer"
          },
          {
            "name": "StakeTransfer"
          }
        ]
      }
    },
    {
      "name": "FillMode",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "Fill"
          },
          {
            "name": "PlaceAndMake"
          },
          {
            "name": "PlaceAndTake"
          }
        ]
      }
    },
    {
      "name": "PerpFulfillmentMethod",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "AMM",
            "fields": [
              {
                "option": "u64"
              }
            ]
          },
          {
            "name": "Match",
            "fields": [
              "publicKey",
              "u16"
            ]
          }
        ]
      }
    },
    {
      "name": "SpotFulfillmentMethod",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "ExternalMarket"
          },
          {
            "name": "Match"
          }
        ]
      }
    },
    {
      "name": "MarginCalculationMode",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "Standard",
            "fields": [
              {
                "name": "track_open_orders_fraction",
                "type": "bool"
              }
            ]
          },
          {
            "name": "Liquidation",
            "fields": [
              {
                "name": "margin_buffer",
                "type": "u128"
              },
              {
                "name": "market_to_track_margin_requirement",
                "type": {
                  "option": {
                    "defined": "MarketIdentifier"
                  }
                }
              }
            ]
          }
        ]
      }
    },
    {
      "name": "OracleSource",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "Pyth"
          },
          {
            "name": "Switchboard"
          },
          {
            "name": "QuoteAsset"
          },
          {
            "name": "Pyth1K"
          },
          {
            "name": "Pyth1M"
          },
          {
            "name": "PythStableCoin"
          }
        ]
      }
    },
    {
      "name": "PostOnlyParam",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "None"
          },
          {
            "name": "MustPostOnly"
          },
          {
            "name": "TryPostOnly"
          },
          {
            "name": "Slide"
          }
        ]
      }
    },
    {
      "name": "ModifyOrderPolicy",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "TryModify"
          },
          {
            "name": "MustModify"
          }
        ]
      }
    },
    {
      "name": "PerpOperation",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "UpdateFunding"
          },
          {
            "name": "AmmFill"
          },
          {
            "name": "Fill"
          },
          {
            "name": "SettlePnl"
          },
          {
            "name": "SettlePnlWithPosition"
          }
        ]
      }
    },
    {
      "name": "SpotOperation",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "UpdateCumulativeInterest"
          },
          {
            "name": "Fill"
          },
          {
            "name": "Withdraw"
          }
        ]
      }
    },
    {
      "name": "MarketStatus",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "Initialized"
          },
          {
            "name": "Active"
          },
          {
            "name": "FundingPaused"
          },
          {
            "name": "AmmPaused"
          },
          {
            "name": "FillPaused"
          },
          {
            "name": "WithdrawPaused"
          },
          {
            "name": "ReduceOnly"
          },
          {
            "name": "Settlement"
          },
          {
            "name": "Delisted"
          }
        ]
      }
    },
    {
      "name": "ContractType",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "Perpetual"
          },
          {
            "name": "Future"
          }
        ]
      }
    },
    {
      "name": "ContractTier",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "A"
          },
          {
            "name": "B"
          },
          {
            "name": "C"
          },
          {
            "name": "Speculative"
          },
          {
            "name": "Isolated"
          }
        ]
      }
    },
    {
      "name": "AMMLiquiditySplit",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "ProtocolOwned"
          },
          {
            "name": "LPOwned"
          },
          {
            "name": "Shared"
          }
        ]
      }
    },
    {
      "name": "SpotBalanceType",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "Deposit"
          },
          {
            "name": "Borrow"
          }
        ]
      }
    },
    {
      "name": "SpotFulfillmentConfigStatus",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "Enabled"
          },
          {
            "name": "Disabled"
          }
        ]
      }
    },
    {
      "name": "AssetTier",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "Collateral"
          },
          {
            "name": "Protected"
          },
          {
            "name": "Cross"
          },
          {
            "name": "Isolated"
          },
          {
            "name": "Unlisted"
          }
        ]
      }
    },
    {
      "name": "ExchangeStatus",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "DepositPaused"
          },
          {
            "name": "WithdrawPaused"
          },
          {
            "name": "AmmPaused"
          },
          {
            "name": "FillPaused"
          },
          {
            "name": "LiqPaused"
          },
          {
            "name": "FundingPaused"
          },
          {
            "name": "SettlePnlPaused"
          }
        ]
      }
    },
    {
      "name": "UserStatus",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "BeingLiquidated"
          },
          {
            "name": "Bankrupt"
          },
          {
            "name": "ReduceOnly"
          }
        ]
      }
    },
    {
      "name": "AssetType",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "Base"
          },
          {
            "name": "Quote"
          }
        ]
      }
    },
    {
      "name": "OrderStatus",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "Init"
          },
          {
            "name": "Open"
          },
          {
            "name": "Filled"
          },
          {
            "name": "Canceled"
          }
        ]
      }
    },
    {
      "name": "OrderType",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "Market"
          },
          {
            "name": "Limit"
          },
          {
            "name": "TriggerMarket"
          },
          {
            "name": "TriggerLimit"
          },
          {
            "name": "Oracle"
          }
        ]
      }
    },
    {
      "name": "OrderTriggerCondition",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "Above"
          },
          {
            "name": "Below"
          },
          {
            "name": "TriggeredAbove"
          },
          {
            "name": "TriggeredBelow"
          }
        ]
      }
    },
    {
      "name": "MarketType",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "Spot"
          },
          {
            "name": "Perp"
          }
        ]
      }
    }
  ],
  "events": [
    {
      "name": "NewUserRecord",
      "fields": [
        {
          "name": "ts",
          "type": "i64",
          "index": false
        },
        {
          "name": "userAuthority",
          "type": "publicKey",
          "index": false
        },
        {
          "name": "user",
          "type": "publicKey",
          "index": false
        },
        {
          "name": "subAccountId",
          "type": "u16",
          "index": false
        },
        {
          "name": "name",
          "type": {
            "array": [
              "u8",
              32
            ]
          },
          "index": false
        },
        {
          "name": "referrer",
          "type": "publicKey",
          "index": false
        }
      ]
    },
    {
      "name": "DepositRecord",
      "fields": [
        {
          "name": "ts",
          "type": "i64",
          "index": false
        },
        {
          "name": "userAuthority",
          "type": "publicKey",
          "index": false
        },
        {
          "name": "user",
          "type": "publicKey",
          "index": false
        },
        {
          "name": "direction",
          "type": {
            "defined": "DepositDirection"
          },
          "index": false
        },
        {
          "name": "depositRecordId",
          "type": "u64",
          "index": false
        },
        {
          "name": "amount",
          "type": "u64",
          "index": false
        },
        {
          "name": "marketIndex",
          "type": "u16",
          "index": false
        },
        {
          "name": "oraclePrice",
          "type": "i64",
          "index": false
        },
        {
          "name": "marketDepositBalance",
          "type": "u128",
          "index": false
        },
        {
          "name": "marketWithdrawBalance",
          "type": "u128",
          "index": false
        },
        {
          "name": "marketCumulativeDepositInterest",
          "type": "u128",
          "index": false
        },
        {
          "name": "marketCumulativeBorrowInterest",
          "type": "u128",
          "index": false
        },
        {
          "name": "totalDepositsAfter",
          "type": "u64",
          "index": false
        },
        {
          "name": "totalWithdrawsAfter",
          "type": "u64",
          "index": false
        },
        {
          "name": "explanation",
          "type": {
            "defined": "DepositExplanation"
          },
          "index": false
        },
        {
          "name": "transferUser",
          "type": {
            "option": "publicKey"
          },
          "index": false
        }
      ]
    },
    {
      "name": "SpotInterestRecord",
      "fields": [
        {
          "name": "ts",
          "type": "i64",
          "index": false
        },
        {
          "name": "marketIndex",
          "type": "u16",
          "index": false
        },
        {
          "name": "depositBalance",
          "type": "u128",
          "index": false
        },
        {
          "name": "cumulativeDepositInterest",
          "type": "u128",
          "index": false
        },
        {
          "name": "borrowBalance",
          "type": "u128",
          "index": false
        },
        {
          "name": "cumulativeBorrowInterest",
          "type": "u128",
          "index": false
        },
        {
          "name": "optimalUtilization",
          "type": "u32",
          "index": false
        },
        {
          "name": "optimalBorrowRate",
          "type": "u32",
          "index": false
        },
        {
          "name": "maxBorrowRate",
          "type": "u32",
          "index": false
        }
      ]
    },
    {
      "name": "FundingPaymentRecord",
      "fields": [
        {
          "name": "ts",
          "type": "i64",
          "index": false
        },
        {
          "name": "userAuthority",
          "type": "publicKey",
          "index": false
        },
        {
          "name": "user",
          "type": "publicKey",
          "index": false
        },
        {
          "name": "marketIndex",
          "type": "u16",
          "index": false
        },
        {
          "name": "fundingPayment",
          "type": "i64",
          "index": false
        },
        {
          "name": "baseAssetAmount",
          "type": "i64",
          "index": false
        },
        {
          "name": "userLastCumulativeFunding",
          "type": "i64",
          "index": false
        },
        {
          "name": "ammCumulativeFundingLong",
          "type": "i128",
          "index": false
        },
        {
          "name": "ammCumulativeFundingShort",
          "type": "i128",
          "index": false
        }
      ]
    },
    {
      "name": "FundingRateRecord",
      "fields": [
        {
          "name": "ts",
          "type": "i64",
          "index": false
        },
        {
          "name": "recordId",
          "type": "u64",
          "index": false
        },
        {
          "name": "marketIndex",
          "type": "u16",
          "index": false
        },
        {
          "name": "fundingRate",
          "type": "i64",
          "index": false
        },
        {
          "name": "fundingRateLong",
          "type": "i128",
          "index": false
        },
        {
          "name": "fundingRateShort",
          "type": "i128",
          "index": false
        },
        {
          "name": "cumulativeFundingRateLong",
          "type": "i128",
          "index": false
        },
        {
          "name": "cumulativeFundingRateShort",
          "type": "i128",
          "index": false
        },
        {
          "name": "oraclePriceTwap",
          "type": "i64",
          "index": false
        },
        {
          "name": "markPriceTwap",
          "type": "u64",
          "index": false
        },
        {
          "name": "periodRevenue",
          "type": "i64",
          "index": false
        },
        {
          "name": "baseAssetAmountWithAmm",
          "type": "i128",
          "index": false
        },
        {
          "name": "baseAssetAmountWithUnsettledLp",
          "type": "i128",
          "index": false
        }
      ]
    },
    {
      "name": "CurveRecord",
      "fields": [
        {
          "name": "ts",
          "type": "i64",
          "index": false
        },
        {
          "name": "recordId",
          "type": "u64",
          "index": false
        },
        {
          "name": "pegMultiplierBefore",
          "type": "u128",
          "index": false
        },
        {
          "name": "baseAssetReserveBefore",
          "type": "u128",
          "index": false
        },
        {
          "name": "quoteAssetReserveBefore",
          "type": "u128",
          "index": false
        },
        {
          "name": "sqrtKBefore",
          "type": "u128",
          "index": false
        },
        {
          "name": "pegMultiplierAfter",
          "type": "u128",
          "index": false
        },
        {
          "name": "baseAssetReserveAfter",
          "type": "u128",
          "index": false
        },
        {
          "name": "quoteAssetReserveAfter",
          "type": "u128",
          "index": false
        },
        {
          "name": "sqrtKAfter",
          "type": "u128",
          "index": false
        },
        {
          "name": "baseAssetAmountLong",
          "type": "u128",
          "index": false
        },
        {
          "name": "baseAssetAmountShort",
          "type": "u128",
          "index": false
        },
        {
          "name": "baseAssetAmountWithAmm",
          "type": "i128",
          "index": false
        },
        {
          "name": "totalFee",
          "type": "i128",
          "index": false
        },
        {
          "name": "totalFeeMinusDistributions",
          "type": "i128",
          "index": false
        },
        {
          "name": "adjustmentCost",
          "type": "i128",
          "index": false
        },
        {
          "name": "oraclePrice",
          "type": "i64",
          "index": false
        },
        {
          "name": "fillRecord",
          "type": "u128",
          "index": false
        },
        {
          "name": "numberOfUsers",
          "type": "u32",
          "index": false
        },
        {
          "name": "marketIndex",
          "type": "u16",
          "index": false
        }
      ]
    },
    {
      "name": "OrderRecord",
      "fields": [
        {
          "name": "ts",
          "type": "i64",
          "index": false
        },
        {
          "name": "user",
          "type": "publicKey",
          "index": false
        },
        {
          "name": "order",
          "type": {
            "defined": "Order"
          },
          "index": false
        }
      ]
    },
    {
      "name": "OrderActionRecord",
      "fields": [
        {
          "name": "ts",
          "type": "i64",
          "index": false
        },
        {
          "name": "action",
          "type": {
            "defined": "OrderAction"
          },
          "index": false
        },
        {
          "name": "actionExplanation",
          "type": {
            "defined": "OrderActionExplanation"
          },
          "index": false
        },
        {
          "name": "marketIndex",
          "type": "u16",
          "index": false
        },
        {
          "name": "marketType",
          "type": {
            "defined": "MarketType"
          },
          "index": false
        },
        {
          "name": "filler",
          "type": {
            "option": "publicKey"
          },
          "index": false
        },
        {
          "name": "fillerReward",
          "type": {
            "option": "u64"
          },
          "index": false
        },
        {
          "name": "fillRecordId",
          "type": {
            "option": "u64"
          },
          "index": false
        },
        {
          "name": "baseAssetAmountFilled",
          "type": {
            "option": "u64"
          },
          "index": false
        },
        {
          "name": "quoteAssetAmountFilled",
          "type": {
            "option": "u64"
          },
          "index": false
        },
        {
          "name": "takerFee",
          "type": {
            "option": "u64"
          },
          "index": false
        },
        {
          "name": "makerFee",
          "type": {
            "option": "i64"
          },
          "index": false
        },
        {
          "name": "referrerReward",
          "type": {
            "option": "u32"
          },
          "index": false
        },
        {
          "name": "quoteAssetAmountSurplus",
          "type": {
            "option": "i64"
          },
          "index": false
        },
        {
          "name": "spotFulfillmentMethodFee",
          "type": {
            "option": "u64"
          },
          "index": false
        },
        {
          "name": "taker",
          "type": {
            "option": "publicKey"
          },
          "index": false
        },
        {
          "name": "takerOrderId",
          "type": {
            "option": "u32"
          },
          "index": false
        },
        {
          "name": "takerOrderDirection",
          "type": {
            "option": {
              "defined": "PositionDirection"
            }
          },
          "index": false
        },
        {
          "name": "takerOrderBaseAssetAmount",
          "type": {
            "option": "u64"
          },
          "index": false
        },
        {
          "name": "takerOrderCumulativeBaseAssetAmountFilled",
          "type": {
            "option": "u64"
          },
          "index": false
        },
        {
          "name": "takerOrderCumulativeQuoteAssetAmountFilled",
          "type": {
            "option": "u64"
          },
          "index": false
        },
        {
          "name": "maker",
          "type": {
            "option": "publicKey"
          },
          "index": false
        },
        {
          "name": "makerOrderId",
          "type": {
            "option": "u32"
          },
          "index": false
        },
        {
          "name": "makerOrderDirection",
          "type": {
            "option": {
              "defined": "PositionDirection"
            }
          },
          "index": false
        },
        {
          "name": "makerOrderBaseAssetAmount",
          "type": {
            "option": "u64"
          },
          "index": false
        },
        {
          "name": "makerOrderCumulativeBaseAssetAmountFilled",
          "type": {
            "option": "u64"
          },
          "index": false
        },
        {
          "name": "makerOrderCumulativeQuoteAssetAmountFilled",
          "type": {
            "option": "u64"
          },
          "index": false
        },
        {
          "name": "oraclePrice",
          "type": "i64",
          "index": false
        }
      ]
    },
    {
      "name": "LPRecord",
      "fields": [
        {
          "name": "ts",
          "type": "i64",
          "index": false
        },
        {
          "name": "user",
          "type": "publicKey",
          "index": false
        },
        {
          "name": "action",
          "type": {
            "defined": "LPAction"
          },
          "index": false
        },
        {
          "name": "nShares",
          "type": "u64",
          "index": false
        },
        {
          "name": "marketIndex",
          "type": "u16",
          "index": false
        },
        {
          "name": "deltaBaseAssetAmount",
          "type": "i64",
          "index": false
        },
        {
          "name": "deltaQuoteAssetAmount",
          "type": "i64",
          "index": false
        },
        {
          "name": "pnl",
          "type": "i64",
          "index": false
        }
      ]
    },
    {
      "name": "LiquidationRecord",
      "fields": [
        {
          "name": "ts",
          "type": "i64",
          "index": false
        },
        {
          "name": "liquidationType",
          "type": {
            "defined": "LiquidationType"
          },
          "index": false
        },
        {
          "name": "user",
          "type": "publicKey",
          "index": false
        },
        {
          "name": "liquidator",
          "type": "publicKey",
          "index": false
        },
        {
          "name": "marginRequirement",
          "type": "u128",
          "index": false
        },
        {
          "name": "totalCollateral",
          "type": "i128",
          "index": false
        },
        {
          "name": "marginFreed",
          "type": "u64",
          "index": false
        },
        {
          "name": "liquidationId",
          "type": "u16",
          "index": false
        },
        {
          "name": "bankrupt",
          "type": "bool",
          "index": false
        },
        {
          "name": "canceledOrderIds",
          "type": {
            "vec": "u32"
          },
          "index": false
        },
        {
          "name": "liquidatePerp",
          "type": {
            "defined": "LiquidatePerpRecord"
          },
          "index": false
        },
        {
          "name": "liquidateSpot",
          "type": {
            "defined": "LiquidateSpotRecord"
          },
          "index": false
        },
        {
          "name": "liquidateBorrowForPerpPnl",
          "type": {
            "defined": "LiquidateBorrowForPerpPnlRecord"
          },
          "index": false
        },
        {
          "name": "liquidatePerpPnlForDeposit",
          "type": {
            "defined": "LiquidatePerpPnlForDepositRecord"
          },
          "index": false
        },
        {
          "name": "perpBankruptcy",
          "type": {
            "defined": "PerpBankruptcyRecord"
          },
          "index": false
        },
        {
          "name": "spotBankruptcy",
          "type": {
            "defined": "SpotBankruptcyRecord"
          },
          "index": false
        }
      ]
    },
    {
      "name": "SettlePnlRecord",
      "fields": [
        {
          "name": "ts",
          "type": "i64",
          "index": false
        },
        {
          "name": "user",
          "type": "publicKey",
          "index": false
        },
        {
          "name": "marketIndex",
          "type": "u16",
          "index": false
        },
        {
          "name": "pnl",
          "type": "i128",
          "index": false
        },
        {
          "name": "baseAssetAmount",
          "type": "i64",
          "index": false
        },
        {
          "name": "quoteAssetAmountAfter",
          "type": "i64",
          "index": false
        },
        {
          "name": "quoteEntryAmount",
          "type": "i64",
          "index": false
        },
        {
          "name": "settlePrice",
          "type": "i64",
          "index": false
        },
        {
          "name": "explanation",
          "type": {
            "defined": "SettlePnlExplanation"
          },
          "index": false
        }
      ]
    },
    {
      "name": "InsuranceFundRecord",
      "fields": [
        {
          "name": "ts",
          "type": "i64",
          "index": false
        },
        {
          "name": "spotMarketIndex",
          "type": "u16",
          "index": false
        },
        {
          "name": "perpMarketIndex",
          "type": "u16",
          "index": false
        },
        {
          "name": "userIfFactor",
          "type": "u32",
          "index": false
        },
        {
          "name": "totalIfFactor",
          "type": "u32",
          "index": false
        },
        {
          "name": "vaultAmountBefore",
          "type": "u64",
          "index": false
        },
        {
          "name": "insuranceVaultAmountBefore",
          "type": "u64",
          "index": false
        },
        {
          "name": "totalIfSharesBefore",
          "type": "u128",
          "index": false
        },
        {
          "name": "totalIfSharesAfter",
          "type": "u128",
          "index": false
        },
        {
          "name": "amount",
          "type": "i64",
          "index": false
        }
      ]
    },
    {
      "name": "InsuranceFundStakeRecord",
      "fields": [
        {
          "name": "ts",
          "type": "i64",
          "index": false
        },
        {
          "name": "userAuthority",
          "type": "publicKey",
          "index": false
        },
        {
          "name": "action",
          "type": {
            "defined": "StakeAction"
          },
          "index": false
        },
        {
          "name": "amount",
          "type": "u64",
          "index": false
        },
        {
          "name": "marketIndex",
          "type": "u16",
          "index": false
        },
        {
          "name": "insuranceVaultAmountBefore",
          "type": "u64",
          "index": false
        },
        {
          "name": "ifSharesBefore",
          "type": "u128",
          "index": false
        },
        {
          "name": "userIfSharesBefore",
          "type": "u128",
          "index": false
        },
        {
          "name": "totalIfSharesBefore",
          "type": "u128",
          "index": false
        },
        {
          "name": "ifSharesAfter",
          "type": "u128",
          "index": false
        },
        {
          "name": "userIfSharesAfter",
          "type": "u128",
          "index": false
        },
        {
          "name": "totalIfSharesAfter",
          "type": "u128",
          "index": false
        }
      ]
    },
    {
      "name": "SwapRecord",
      "fields": [
        {
          "name": "ts",
          "type": "i64",
          "index": false
        },
        {
          "name": "user",
          "type": "publicKey",
          "index": false
        },
        {
          "name": "amountOut",
          "type": "u64",
          "index": false
        },
        {
          "name": "amountIn",
          "type": "u64",
          "index": false
        },
        {
          "name": "outMarketIndex",
          "type": "u16",
          "index": false
        },
        {
          "name": "inMarketIndex",
          "type": "u16",
          "index": false
        },
        {
          "name": "outOraclePrice",
          "type": "i64",
          "index": false
        },
        {
          "name": "inOraclePrice",
          "type": "i64",
          "index": false
        },
        {
          "name": "fee",
          "type": "u64",
          "index": false
        }
      ]
    }
  ],
  "errors": [
    {
      "code": 6000,
      "name": "InvalidSpotMarketAuthority",
      "msg": "Invalid Spot Market Authority"
    },
    {
      "code": 6001,
      "name": "InvalidInsuranceFundAuthority",
      "msg": "Clearing house not insurance fund authority"
    },
    {
      "code": 6002,
      "name": "InsufficientDeposit",
      "msg": "Insufficient deposit"
    },
    {
      "code": 6003,
      "name": "InsufficientCollateral",
      "msg": "Insufficient collateral"
    },
    {
      "code": 6004,
      "name": "SufficientCollateral",
      "msg": "Sufficient collateral"
    },
    {
      "code": 6005,
      "name": "MaxNumberOfPositions",
      "msg": "Max number of positions taken"
    },
    {
      "code": 6006,
      "name": "AdminControlsPricesDisabled",
      "msg": "Admin Controls Prices Disabled"
    },
    {
      "code": 6007,
      "name": "MarketDelisted",
      "msg": "Market Delisted"
    },
    {
      "code": 6008,
      "name": "MarketIndexAlreadyInitialized",
      "msg": "Market Index Already Initialized"
    },
    {
      "code": 6009,
      "name": "UserAccountAndUserPositionsAccountMismatch",
      "msg": "User Account And User Positions Account Mismatch"
    },
    {
      "code": 6010,
      "name": "UserHasNoPositionInMarket",
      "msg": "User Has No Position In Market"
    },
    {
      "code": 6011,
      "name": "InvalidInitialPeg",
      "msg": "Invalid Initial Peg"
    },
    {
      "code": 6012,
      "name": "InvalidRepegRedundant",
      "msg": "AMM repeg already configured with amt given"
    },
    {
      "code": 6013,
      "name": "InvalidRepegDirection",
      "msg": "AMM repeg incorrect repeg direction"
    },
    {
      "code": 6014,
      "name": "InvalidRepegProfitability",
      "msg": "AMM repeg out of bounds pnl"
    },
    {
      "code": 6015,
      "name": "SlippageOutsideLimit",
      "msg": "Slippage Outside Limit Price"
    },
    {
      "code": 6016,
      "name": "OrderSizeTooSmall",
      "msg": "Order Size Too Small"
    },
    {
      "code": 6017,
      "name": "InvalidUpdateK",
      "msg": "Price change too large when updating K"
    },
    {
      "code": 6018,
      "name": "AdminWithdrawTooLarge",
      "msg": "Admin tried to withdraw amount larger than fees collected"
    },
    {
      "code": 6019,
      "name": "MathError",
      "msg": "Math Error"
    },
    {
      "code": 6020,
      "name": "BnConversionError",
      "msg": "Conversion to u128/u64 failed with an overflow or underflow"
    },
    {
      "code": 6021,
      "name": "ClockUnavailable",
      "msg": "Clock unavailable"
    },
    {
      "code": 6022,
      "name": "UnableToLoadOracle",
      "msg": "Unable To Load Oracles"
    },
    {
      "code": 6023,
      "name": "PriceBandsBreached",
      "msg": "Price Bands Breached"
    },
    {
      "code": 6024,
      "name": "ExchangePaused",
      "msg": "Exchange is paused"
    },
    {
      "code": 6025,
      "name": "InvalidWhitelistToken",
      "msg": "Invalid whitelist token"
    },
    {
      "code": 6026,
      "name": "WhitelistTokenNotFound",
      "msg": "Whitelist token not found"
    },
    {
      "code": 6027,
      "name": "InvalidDiscountToken",
      "msg": "Invalid discount token"
    },
    {
      "code": 6028,
      "name": "DiscountTokenNotFound",
      "msg": "Discount token not found"
    },
    {
      "code": 6029,
      "name": "ReferrerNotFound",
      "msg": "Referrer not found"
    },
    {
      "code": 6030,
      "name": "ReferrerStatsNotFound",
      "msg": "ReferrerNotFound"
    },
    {
      "code": 6031,
      "name": "ReferrerMustBeWritable",
      "msg": "ReferrerMustBeWritable"
    },
    {
      "code": 6032,
      "name": "ReferrerStatsMustBeWritable",
      "msg": "ReferrerMustBeWritable"
    },
    {
      "code": 6033,
      "name": "ReferrerAndReferrerStatsAuthorityUnequal",
      "msg": "ReferrerAndReferrerStatsAuthorityUnequal"
    },
    {
      "code": 6034,
      "name": "InvalidReferrer",
      "msg": "InvalidReferrer"
    },
    {
      "code": 6035,
      "name": "InvalidOracle",
      "msg": "InvalidOracle"
    },
    {
      "code": 6036,
      "name": "OracleNotFound",
      "msg": "OracleNotFound"
    },
    {
      "code": 6037,
      "name": "LiquidationsBlockedByOracle",
      "msg": "Liquidations Blocked By Oracle"
    },
    {
      "code": 6038,
      "name": "MaxDeposit",
      "msg": "Can not deposit more than max deposit"
    },
    {
      "code": 6039,
      "name": "CantDeleteUserWithCollateral",
      "msg": "Can not delete user that still has collateral"
    },
    {
      "code": 6040,
      "name": "InvalidFundingProfitability",
      "msg": "AMM funding out of bounds pnl"
    },
    {
      "code": 6041,
      "name": "CastingFailure",
      "msg": "Casting Failure"
    },
    {
      "code": 6042,
      "name": "InvalidOrder",
      "msg": "InvalidOrder"
    },
    {
      "code": 6043,
      "name": "InvalidOrderMaxTs",
      "msg": "InvalidOrderMaxTs"
    },
    {
      "code": 6044,
      "name": "InvalidOrderMarketType",
      "msg": "InvalidOrderMarketType"
    },
    {
      "code": 6045,
      "name": "InvalidOrderForInitialMarginReq",
      "msg": "InvalidOrderForInitialMarginReq"
    },
    {
      "code": 6046,
      "name": "InvalidOrderNotRiskReducing",
      "msg": "InvalidOrderNotRiskReducing"
    },
    {
      "code": 6047,
      "name": "InvalidOrderSizeTooSmall",
      "msg": "InvalidOrderSizeTooSmall"
    },
    {
      "code": 6048,
      "name": "InvalidOrderNotStepSizeMultiple",
      "msg": "InvalidOrderNotStepSizeMultiple"
    },
    {
      "code": 6049,
      "name": "InvalidOrderBaseQuoteAsset",
      "msg": "InvalidOrderBaseQuoteAsset"
    },
    {
      "code": 6050,
      "name": "InvalidOrderIOC",
      "msg": "InvalidOrderIOC"
    },
    {
      "code": 6051,
      "name": "InvalidOrderPostOnly",
      "msg": "InvalidOrderPostOnly"
    },
    {
      "code": 6052,
      "name": "InvalidOrderIOCPostOnly",
      "msg": "InvalidOrderIOCPostOnly"
    },
    {
      "code": 6053,
      "name": "InvalidOrderTrigger",
      "msg": "InvalidOrderTrigger"
    },
    {
      "code": 6054,
      "name": "InvalidOrderAuction",
      "msg": "InvalidOrderAuction"
    },
    {
      "code": 6055,
      "name": "InvalidOrderOracleOffset",
      "msg": "InvalidOrderOracleOffset"
    },
    {
      "code": 6056,
      "name": "InvalidOrderMinOrderSize",
      "msg": "InvalidOrderMinOrderSize"
    },
    {
      "code": 6057,
      "name": "PlacePostOnlyLimitFailure",
      "msg": "Failed to Place Post-Only Limit Order"
    },
    {
      "code": 6058,
      "name": "UserHasNoOrder",
      "msg": "User has no order"
    },
    {
      "code": 6059,
      "name": "OrderAmountTooSmall",
      "msg": "Order Amount Too Small"
    },
    {
      "code": 6060,
      "name": "MaxNumberOfOrders",
      "msg": "Max number of orders taken"
    },
    {
      "code": 6061,
      "name": "OrderDoesNotExist",
      "msg": "Order does not exist"
    },
    {
      "code": 6062,
      "name": "OrderNotOpen",
      "msg": "Order not open"
    },
    {
      "code": 6063,
      "name": "FillOrderDidNotUpdateState",
      "msg": "FillOrderDidNotUpdateState"
    },
    {
      "code": 6064,
      "name": "ReduceOnlyOrderIncreasedRisk",
      "msg": "Reduce only order increased risk"
    },
    {
      "code": 6065,
      "name": "UnableToLoadAccountLoader",
      "msg": "Unable to load AccountLoader"
    },
    {
      "code": 6066,
      "name": "TradeSizeTooLarge",
      "msg": "Trade Size Too Large"
    },
    {
      "code": 6067,
      "name": "UserCantReferThemselves",
      "msg": "User cant refer themselves"
    },
    {
      "code": 6068,
      "name": "DidNotReceiveExpectedReferrer",
      "msg": "Did not receive expected referrer"
    },
    {
      "code": 6069,
      "name": "CouldNotDeserializeReferrer",
      "msg": "Could not deserialize referrer"
    },
    {
      "code": 6070,
      "name": "CouldNotDeserializeReferrerStats",
      "msg": "Could not deserialize referrer stats"
    },
    {
      "code": 6071,
      "name": "UserOrderIdAlreadyInUse",
      "msg": "User Order Id Already In Use"
    },
    {
      "code": 6072,
      "name": "NoPositionsLiquidatable",
      "msg": "No positions liquidatable"
    },
    {
      "code": 6073,
      "name": "InvalidMarginRatio",
      "msg": "Invalid Margin Ratio"
    },
    {
      "code": 6074,
      "name": "CantCancelPostOnlyOrder",
      "msg": "Cant Cancel Post Only Order"
    },
    {
      "code": 6075,
      "name": "InvalidOracleOffset",
      "msg": "InvalidOracleOffset"
    },
    {
      "code": 6076,
      "name": "CantExpireOrders",
      "msg": "CantExpireOrders"
    },
    {
      "code": 6077,
      "name": "CouldNotLoadMarketData",
      "msg": "CouldNotLoadMarketData"
    },
    {
      "code": 6078,
      "name": "PerpMarketNotFound",
      "msg": "PerpMarketNotFound"
    },
    {
      "code": 6079,
      "name": "InvalidMarketAccount",
      "msg": "InvalidMarketAccount"
    },
    {
      "code": 6080,
      "name": "UnableToLoadPerpMarketAccount",
      "msg": "UnableToLoadMarketAccount"
    },
    {
      "code": 6081,
      "name": "MarketWrongMutability",
      "msg": "MarketWrongMutability"
    },
    {
      "code": 6082,
      "name": "UnableToCastUnixTime",
      "msg": "UnableToCastUnixTime"
    },
    {
      "code": 6083,
      "name": "CouldNotFindSpotPosition",
      "msg": "CouldNotFindSpotPosition"
    },
    {
      "code": 6084,
      "name": "NoSpotPositionAvailable",
      "msg": "NoSpotPositionAvailable"
    },
    {
      "code": 6085,
      "name": "InvalidSpotMarketInitialization",
      "msg": "InvalidSpotMarketInitialization"
    },
    {
      "code": 6086,
      "name": "CouldNotLoadSpotMarketData",
      "msg": "CouldNotLoadSpotMarketData"
    },
    {
      "code": 6087,
      "name": "SpotMarketNotFound",
      "msg": "SpotMarketNotFound"
    },
    {
      "code": 6088,
      "name": "InvalidSpotMarketAccount",
      "msg": "InvalidSpotMarketAccount"
    },
    {
      "code": 6089,
      "name": "UnableToLoadSpotMarketAccount",
      "msg": "UnableToLoadSpotMarketAccount"
    },
    {
      "code": 6090,
      "name": "SpotMarketWrongMutability",
      "msg": "SpotMarketWrongMutability"
    },
    {
      "code": 6091,
      "name": "SpotMarketInterestNotUpToDate",
      "msg": "SpotInterestNotUpToDate"
    },
    {
      "code": 6092,
      "name": "SpotMarketInsufficientDeposits",
      "msg": "SpotMarketInsufficientDeposits"
    },
    {
      "code": 6093,
      "name": "UserMustSettleTheirOwnPositiveUnsettledPNL",
      "msg": "UserMustSettleTheirOwnPositiveUnsettledPNL"
    },
    {
      "code": 6094,
      "name": "CantUpdatePoolBalanceType",
      "msg": "CantUpdatePoolBalanceType"
    },
    {
      "code": 6095,
      "name": "InsufficientCollateralForSettlingPNL",
      "msg": "InsufficientCollateralForSettlingPNL"
    },
    {
      "code": 6096,
      "name": "AMMNotUpdatedInSameSlot",
      "msg": "AMMNotUpdatedInSameSlot"
    },
    {
      "code": 6097,
      "name": "AuctionNotComplete",
      "msg": "AuctionNotComplete"
    },
    {
      "code": 6098,
      "name": "MakerNotFound",
      "msg": "MakerNotFound"
    },
    {
      "code": 6099,
      "name": "MakerStatsNotFound",
      "msg": "MakerNotFound"
    },
    {
      "code": 6100,
      "name": "MakerMustBeWritable",
      "msg": "MakerMustBeWritable"
    },
    {
      "code": 6101,
      "name": "MakerStatsMustBeWritable",
      "msg": "MakerMustBeWritable"
    },
    {
      "code": 6102,
      "name": "MakerOrderNotFound",
      "msg": "MakerOrderNotFound"
    },
    {
      "code": 6103,
      "name": "CouldNotDeserializeMaker",
      "msg": "CouldNotDeserializeMaker"
    },
    {
      "code": 6104,
      "name": "CouldNotDeserializeMakerStats",
      "msg": "CouldNotDeserializeMaker"
    },
    {
      "code": 6105,
      "name": "AuctionPriceDoesNotSatisfyMaker",
      "msg": "AuctionPriceDoesNotSatisfyMaker"
    },
    {
      "code": 6106,
      "name": "MakerCantFulfillOwnOrder",
      "msg": "MakerCantFulfillOwnOrder"
    },
    {
      "code": 6107,
      "name": "MakerOrderMustBePostOnly",
      "msg": "MakerOrderMustBePostOnly"
    },
    {
      "code": 6108,
      "name": "CantMatchTwoPostOnlys",
      "msg": "CantMatchTwoPostOnlys"
    },
    {
      "code": 6109,
      "name": "OrderBreachesOraclePriceLimits",
      "msg": "OrderBreachesOraclePriceLimits"
    },
    {
      "code": 6110,
      "name": "OrderMustBeTriggeredFirst",
      "msg": "OrderMustBeTriggeredFirst"
    },
    {
      "code": 6111,
      "name": "OrderNotTriggerable",
      "msg": "OrderNotTriggerable"
    },
    {
      "code": 6112,
      "name": "OrderDidNotSatisfyTriggerCondition",
      "msg": "OrderDidNotSatisfyTriggerCondition"
    },
    {
      "code": 6113,
      "name": "PositionAlreadyBeingLiquidated",
      "msg": "PositionAlreadyBeingLiquidated"
    },
    {
      "code": 6114,
      "name": "PositionDoesntHaveOpenPositionOrOrders",
      "msg": "PositionDoesntHaveOpenPositionOrOrders"
    },
    {
      "code": 6115,
      "name": "AllOrdersAreAlreadyLiquidations",
      "msg": "AllOrdersAreAlreadyLiquidations"
    },
    {
      "code": 6116,
      "name": "CantCancelLiquidationOrder",
      "msg": "CantCancelLiquidationOrder"
    },
    {
      "code": 6117,
      "name": "UserIsBeingLiquidated",
      "msg": "UserIsBeingLiquidated"
    },
    {
      "code": 6118,
      "name": "LiquidationsOngoing",
      "msg": "LiquidationsOngoing"
    },
    {
      "code": 6119,
      "name": "WrongSpotBalanceType",
      "msg": "WrongSpotBalanceType"
    },
    {
      "code": 6120,
      "name": "UserCantLiquidateThemself",
      "msg": "UserCantLiquidateThemself"
    },
    {
      "code": 6121,
      "name": "InvalidPerpPositionToLiquidate",
      "msg": "InvalidPerpPositionToLiquidate"
    },
    {
      "code": 6122,
      "name": "InvalidBaseAssetAmountForLiquidatePerp",
      "msg": "InvalidBaseAssetAmountForLiquidatePerp"
    },
    {
      "code": 6123,
      "name": "InvalidPositionLastFundingRate",
      "msg": "InvalidPositionLastFundingRate"
    },
    {
      "code": 6124,
      "name": "InvalidPositionDelta",
      "msg": "InvalidPositionDelta"
    },
    {
      "code": 6125,
      "name": "UserBankrupt",
      "msg": "UserBankrupt"
    },
    {
      "code": 6126,
      "name": "UserNotBankrupt",
      "msg": "UserNotBankrupt"
    },
    {
      "code": 6127,
      "name": "UserHasInvalidBorrow",
      "msg": "UserHasInvalidBorrow"
    },
    {
      "code": 6128,
      "name": "DailyWithdrawLimit",
      "msg": "DailyWithdrawLimit"
    },
    {
      "code": 6129,
      "name": "DefaultError",
      "msg": "DefaultError"
    },
    {
      "code": 6130,
      "name": "InsufficientLPTokens",
      "msg": "Insufficient LP tokens"
    },
    {
      "code": 6131,
      "name": "CantLPWithPerpPosition",
      "msg": "Cant LP with a market position"
    },
    {
      "code": 6132,
      "name": "UnableToBurnLPTokens",
      "msg": "Unable to burn LP tokens"
    },
    {
      "code": 6133,
      "name": "TryingToRemoveLiquidityTooFast",
      "msg": "Trying to remove liqudity too fast after adding it"
    },
    {
      "code": 6134,
      "name": "InvalidSpotMarketVault",
      "msg": "Invalid Spot Market Vault"
    },
    {
      "code": 6135,
      "name": "InvalidSpotMarketState",
      "msg": "Invalid Spot Market State"
    },
    {
      "code": 6136,
      "name": "InvalidSerumProgram",
      "msg": "InvalidSerumProgram"
    },
    {
      "code": 6137,
      "name": "InvalidSerumMarket",
      "msg": "InvalidSerumMarket"
    },
    {
      "code": 6138,
      "name": "InvalidSerumBids",
      "msg": "InvalidSerumBids"
    },
    {
      "code": 6139,
      "name": "InvalidSerumAsks",
      "msg": "InvalidSerumAsks"
    },
    {
      "code": 6140,
      "name": "InvalidSerumOpenOrders",
      "msg": "InvalidSerumOpenOrders"
    },
    {
      "code": 6141,
      "name": "FailedSerumCPI",
      "msg": "FailedSerumCPI"
    },
    {
      "code": 6142,
      "name": "FailedToFillOnExternalMarket",
      "msg": "FailedToFillOnExternalMarket"
    },
    {
      "code": 6143,
      "name": "InvalidFulfillmentConfig",
      "msg": "InvalidFulfillmentConfig"
    },
    {
      "code": 6144,
      "name": "InvalidFeeStructure",
      "msg": "InvalidFeeStructure"
    },
    {
      "code": 6145,
      "name": "InsufficientIFShares",
      "msg": "Insufficient IF shares"
    },
    {
      "code": 6146,
      "name": "MarketActionPaused",
      "msg": "the Market has paused this action"
    },
    {
      "code": 6147,
      "name": "MarketPlaceOrderPaused",
      "msg": "the Market status doesnt allow placing orders"
    },
    {
      "code": 6148,
      "name": "MarketFillOrderPaused",
      "msg": "the Market status doesnt allow filling orders"
    },
    {
      "code": 6149,
      "name": "MarketWithdrawPaused",
      "msg": "the Market status doesnt allow withdraws"
    },
    {
      "code": 6150,
      "name": "ProtectedAssetTierViolation",
      "msg": "Action violates the Protected Asset Tier rules"
    },
    {
      "code": 6151,
      "name": "IsolatedAssetTierViolation",
      "msg": "Action violates the Isolated Asset Tier rules"
    },
    {
      "code": 6152,
      "name": "UserCantBeDeleted",
      "msg": "User Cant Be Deleted"
    },
    {
      "code": 6153,
      "name": "ReduceOnlyWithdrawIncreasedRisk",
      "msg": "Reduce Only Withdraw Increased Risk"
    },
    {
      "code": 6154,
      "name": "MaxOpenInterest",
      "msg": "Max Open Interest"
    },
    {
      "code": 6155,
      "name": "CantResolvePerpBankruptcy",
      "msg": "Cant Resolve Perp Bankruptcy"
    },
    {
      "code": 6156,
      "name": "LiquidationDoesntSatisfyLimitPrice",
      "msg": "Liquidation Doesnt Satisfy Limit Price"
    },
    {
      "code": 6157,
      "name": "MarginTradingDisabled",
      "msg": "Margin Trading Disabled"
    },
    {
      "code": 6158,
      "name": "InvalidMarketStatusToSettlePnl",
      "msg": "Invalid Market Status to Settle Perp Pnl"
    },
    {
      "code": 6159,
      "name": "PerpMarketNotInSettlement",
      "msg": "PerpMarketNotInSettlement"
    },
    {
      "code": 6160,
      "name": "PerpMarketNotInReduceOnly",
      "msg": "PerpMarketNotInReduceOnly"
    },
    {
      "code": 6161,
      "name": "PerpMarketSettlementBufferNotReached",
      "msg": "PerpMarketSettlementBufferNotReached"
    },
    {
      "code": 6162,
      "name": "PerpMarketSettlementUserHasOpenOrders",
      "msg": "PerpMarketSettlementUserHasOpenOrders"
    },
    {
      "code": 6163,
      "name": "PerpMarketSettlementUserHasActiveLP",
      "msg": "PerpMarketSettlementUserHasActiveLP"
    },
    {
      "code": 6164,
      "name": "UnableToSettleExpiredUserPosition",
      "msg": "UnableToSettleExpiredUserPosition"
    },
    {
      "code": 6165,
      "name": "UnequalMarketIndexForSpotTransfer",
      "msg": "UnequalMarketIndexForSpotTransfer"
    },
    {
      "code": 6166,
      "name": "InvalidPerpPositionDetected",
      "msg": "InvalidPerpPositionDetected"
    },
    {
      "code": 6167,
      "name": "InvalidSpotPositionDetected",
      "msg": "InvalidSpotPositionDetected"
    },
    {
      "code": 6168,
      "name": "InvalidAmmDetected",
      "msg": "InvalidAmmDetected"
    },
    {
      "code": 6169,
      "name": "InvalidAmmForFillDetected",
      "msg": "InvalidAmmForFillDetected"
    },
    {
      "code": 6170,
      "name": "InvalidAmmLimitPriceOverride",
      "msg": "InvalidAmmLimitPriceOverride"
    },
    {
      "code": 6171,
      "name": "InvalidOrderFillPrice",
      "msg": "InvalidOrderFillPrice"
    },
    {
      "code": 6172,
      "name": "SpotMarketBalanceInvariantViolated",
      "msg": "SpotMarketBalanceInvariantViolated"
    },
    {
      "code": 6173,
      "name": "SpotMarketVaultInvariantViolated",
      "msg": "SpotMarketVaultInvariantViolated"
    },
    {
      "code": 6174,
      "name": "InvalidPDA",
      "msg": "InvalidPDA"
    },
    {
      "code": 6175,
      "name": "InvalidPDASigner",
      "msg": "InvalidPDASigner"
    },
    {
      "code": 6176,
      "name": "RevenueSettingsCannotSettleToIF",
      "msg": "RevenueSettingsCannotSettleToIF"
    },
    {
      "code": 6177,
      "name": "NoRevenueToSettleToIF",
      "msg": "NoRevenueToSettleToIF"
    },
    {
      "code": 6178,
      "name": "NoAmmPerpPnlDeficit",
      "msg": "NoAmmPerpPnlDeficit"
    },
    {
      "code": 6179,
      "name": "SufficientPerpPnlPool",
      "msg": "SufficientPerpPnlPool"
    },
    {
      "code": 6180,
      "name": "InsufficientPerpPnlPool",
      "msg": "InsufficientPerpPnlPool"
    },
    {
      "code": 6181,
      "name": "PerpPnlDeficitBelowThreshold",
      "msg": "PerpPnlDeficitBelowThreshold"
    },
    {
      "code": 6182,
      "name": "MaxRevenueWithdrawPerPeriodReached",
      "msg": "MaxRevenueWithdrawPerPeriodReached"
    },
    {
      "code": 6183,
      "name": "MaxIFWithdrawReached",
      "msg": "InvalidSpotPositionDetected"
    },
    {
      "code": 6184,
      "name": "NoIFWithdrawAvailable",
      "msg": "NoIFWithdrawAvailable"
    },
    {
      "code": 6185,
      "name": "InvalidIFUnstake",
      "msg": "InvalidIFUnstake"
    },
    {
      "code": 6186,
      "name": "InvalidIFUnstakeSize",
      "msg": "InvalidIFUnstakeSize"
    },
    {
      "code": 6187,
      "name": "InvalidIFUnstakeCancel",
      "msg": "InvalidIFUnstakeCancel"
    },
    {
      "code": 6188,
      "name": "InvalidIFForNewStakes",
      "msg": "InvalidIFForNewStakes"
    },
    {
      "code": 6189,
      "name": "InvalidIFRebase",
      "msg": "InvalidIFRebase"
    },
    {
      "code": 6190,
      "name": "InvalidInsuranceUnstakeSize",
      "msg": "InvalidInsuranceUnstakeSize"
    },
    {
      "code": 6191,
      "name": "InvalidOrderLimitPrice",
      "msg": "InvalidOrderLimitPrice"
    },
    {
      "code": 6192,
      "name": "InvalidIFDetected",
      "msg": "InvalidIFDetected"
    },
    {
      "code": 6193,
      "name": "InvalidAmmMaxSpreadDetected",
      "msg": "InvalidAmmMaxSpreadDetected"
    },
    {
      "code": 6194,
      "name": "InvalidConcentrationCoef",
      "msg": "InvalidConcentrationCoef"
    },
    {
      "code": 6195,
      "name": "InvalidSrmVault",
      "msg": "InvalidSrmVault"
    },
    {
      "code": 6196,
      "name": "InvalidVaultOwner",
      "msg": "InvalidVaultOwner"
    },
    {
      "code": 6197,
      "name": "InvalidMarketStatusForFills",
      "msg": "InvalidMarketStatusForFills"
    },
    {
      "code": 6198,
      "name": "IFWithdrawRequestInProgress",
      "msg": "IFWithdrawRequestInProgress"
    },
    {
      "code": 6199,
      "name": "NoIFWithdrawRequestInProgress",
      "msg": "NoIFWithdrawRequestInProgress"
    },
    {
      "code": 6200,
      "name": "IFWithdrawRequestTooSmall",
      "msg": "IFWithdrawRequestTooSmall"
    },
    {
      "code": 6201,
      "name": "IncorrectSpotMarketAccountPassed",
      "msg": "IncorrectSpotMarketAccountPassed"
    },
    {
      "code": 6202,
      "name": "BlockchainClockInconsistency",
      "msg": "BlockchainClockInconsistency"
    },
    {
      "code": 6203,
      "name": "InvalidIFSharesDetected",
      "msg": "InvalidIFSharesDetected"
    },
    {
      "code": 6204,
      "name": "NewLPSizeTooSmall",
      "msg": "NewLPSizeTooSmall"
    },
    {
      "code": 6205,
      "name": "MarketStatusInvalidForNewLP",
      "msg": "MarketStatusInvalidForNewLP"
    },
    {
      "code": 6206,
      "name": "InvalidMarkTwapUpdateDetected",
      "msg": "InvalidMarkTwapUpdateDetected"
    },
    {
      "code": 6207,
      "name": "MarketSettlementAttemptOnActiveMarket",
      "msg": "MarketSettlementAttemptOnActiveMarket"
    },
    {
      "code": 6208,
      "name": "MarketSettlementRequiresSettledLP",
      "msg": "MarketSettlementRequiresSettledLP"
    },
    {
      "code": 6209,
      "name": "MarketSettlementAttemptTooEarly",
      "msg": "MarketSettlementAttemptTooEarly"
    },
    {
      "code": 6210,
      "name": "MarketSettlementTargetPriceInvalid",
      "msg": "MarketSettlementTargetPriceInvalid"
    },
    {
      "code": 6211,
      "name": "UnsupportedSpotMarket",
      "msg": "UnsupportedSpotMarket"
    },
    {
      "code": 6212,
      "name": "SpotOrdersDisabled",
      "msg": "SpotOrdersDisabled"
    },
    {
      "code": 6213,
      "name": "MarketBeingInitialized",
      "msg": "Market Being Initialized"
    },
    {
      "code": 6214,
      "name": "InvalidUserSubAccountId",
      "msg": "Invalid Sub Account Id"
    },
    {
      "code": 6215,
      "name": "InvalidTriggerOrderCondition",
      "msg": "Invalid Trigger Order Condition"
    },
    {
      "code": 6216,
      "name": "InvalidSpotPosition",
      "msg": "Invalid Spot Position"
    },
    {
      "code": 6217,
      "name": "CantTransferBetweenSameUserAccount",
      "msg": "Cant transfer between same user account"
    },
    {
      "code": 6218,
      "name": "InvalidPerpPosition",
      "msg": "Invalid Perp Position"
    },
    {
      "code": 6219,
      "name": "UnableToGetLimitPrice",
      "msg": "Unable To Get Limit Price"
    },
    {
      "code": 6220,
      "name": "InvalidLiquidation",
      "msg": "Invalid Liquidation"
    },
    {
      "code": 6221,
      "name": "SpotFulfillmentConfigDisabled",
      "msg": "Spot Fulfillment Config Disabled"
    },
    {
      "code": 6222,
      "name": "InvalidMaker",
      "msg": "Invalid Maker"
    },
    {
      "code": 6223,
      "name": "FailedUnwrap",
      "msg": "Failed Unwrap"
    },
    {
      "code": 6224,
      "name": "MaxNumberOfUsers",
      "msg": "Max Number Of Users"
    },
    {
      "code": 6225,
      "name": "InvalidOracleForSettlePnl",
      "msg": "InvalidOracleForSettlePnl"
    },
    {
      "code": 6226,
      "name": "MarginOrdersOpen",
      "msg": "MarginOrdersOpen"
    },
    {
      "code": 6227,
      "name": "TierViolationLiquidatingPerpPnl",
      "msg": "TierViolationLiquidatingPerpPnl"
    },
    {
      "code": 6228,
      "name": "CouldNotLoadUserData",
      "msg": "CouldNotLoadUserData"
    },
    {
      "code": 6229,
      "name": "UserWrongMutability",
      "msg": "UserWrongMutability"
    },
    {
      "code": 6230,
      "name": "InvalidUserAccount",
      "msg": "InvalidUserAccount"
    },
    {
      "code": 6231,
      "name": "CouldNotLoadUserStatsData",
      "msg": "CouldNotLoadUserData"
    },
    {
      "code": 6232,
      "name": "UserStatsWrongMutability",
      "msg": "UserWrongMutability"
    },
    {
      "code": 6233,
      "name": "InvalidUserStatsAccount",
      "msg": "InvalidUserAccount"
    },
    {
      "code": 6234,
      "name": "UserNotFound",
      "msg": "UserNotFound"
    },
    {
      "code": 6235,
      "name": "UnableToLoadUserAccount",
      "msg": "UnableToLoadUserAccount"
    },
    {
      "code": 6236,
      "name": "UserStatsNotFound",
      "msg": "UserStatsNotFound"
    },
    {
      "code": 6237,
      "name": "UnableToLoadUserStatsAccount",
      "msg": "UnableToLoadUserStatsAccount"
    },
    {
      "code": 6238,
      "name": "UserNotInactive",
      "msg": "User Not Inactive"
    },
    {
      "code": 6239,
      "name": "RevertFill",
      "msg": "RevertFill"
    },
    {
      "code": 6240,
      "name": "InvalidMarketAccountforDeletion",
      "msg": "Invalid MarketAccount for Deletion"
    },
    {
      "code": 6241,
      "name": "InvalidSpotFulfillmentParams",
      "msg": "Invalid Spot Fulfillment Params"
    },
    {
      "code": 6242,
      "name": "FailedToGetMint",
      "msg": "Failed to Get Mint"
    },
    {
      "code": 6243,
      "name": "FailedPhoenixCPI",
      "msg": "FailedPhoenixCPI"
    },
    {
      "code": 6244,
      "name": "FailedToDeserializePhoenixMarket",
      "msg": "FailedToDeserializePhoenixMarket"
    },
    {
      "code": 6245,
      "name": "InvalidPricePrecision",
      "msg": "InvalidPricePrecision"
    },
    {
      "code": 6246,
      "name": "InvalidPhoenixProgram",
      "msg": "InvalidPhoenixProgram"
    },
    {
      "code": 6247,
      "name": "InvalidPhoenixMarket",
      "msg": "InvalidPhoenixMarket"
    },
    {
      "code": 6248,
      "name": "InvalidSwap",
      "msg": "InvalidSwap"
    },
    {
      "code": 6249,
      "name": "SwapLimitPriceBreached",
      "msg": "SwapLimitPriceBreached"
    },
    {
      "code": 6250,
      "name": "SpotMarketReduceOnly",
      "msg": "SpotMarketReduceOnly"
    },
    {
      "code": 6251,
      "name": "FundingWasNotUpdated",
      "msg": "FundingWasNotUpdated"
    },
    {
      "code": 6252,
      "name": "ImpossibleFill",
      "msg": "ImpossibleFill"
    },
    {
      "code": 6253,
      "name": "CantUpdatePerpBidAskTwap",
      "msg": "CantUpdatePerpBidAskTwap"
    },
    {
      "code": 6254,
      "name": "UserReduceOnly",
      "msg": "UserReduceOnly"
    },
    {
      "code": 6255,
      "name": "InvalidMarginCalculation",
      "msg": "InvalidMarginCalculation"
    },
    {
      "code": 6256,
      "name": "CantPayUserInitFee",
      "msg": "CantPayUserInitFee"
    },
    {
      "code": 6257,
      "name": "CantReclaimRent",
      "msg": "CantReclaimRent"
    }
  ],
  "metadata": {
    "address": "DYZw72FjDn7jDdFDciCWxWYxyAcTatKJY3rSpvUETAxJ"
  }
}