{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "RuntimeCall_for_ConfigurableSpec",
  "description": "This enum is generated from the underlying Runtime, the variants correspond to call messages from the relevant modules",
  "oneOf": [
    {
      "description": "Module call message.",
      "type": "object",
      "required": [
        "accounts"
      ],
      "properties": {
        "accounts": {
          "$ref": "#/definitions/CallMessage"
        }
      },
      "additionalProperties": false
    },
    {
      "description": "Module call message.",
      "type": "object",
      "required": [
        "uniqueness"
      ],
      "properties": {
        "uniqueness": {
          "$ref": "#/definitions/NotInstantiable"
        }
      },
      "additionalProperties": false
    },
    {
      "description": "Module call message.",
      "type": "object",
      "required": [
        "bank"
      ],
      "properties": {
        "bank": {
          "$ref": "#/definitions/CallMessage2"
        }
      },
      "additionalProperties": false
    },
    {
      "description": "Module call message.",
      "type": "object",
      "required": [
        "sequencer_registry"
      ],
      "properties": {
        "sequencer_registry": {
          "$ref": "#/definitions/CallMessage3"
        }
      },
      "additionalProperties": false
    },
    {
      "description": "Module call message.",
      "type": "object",
      "required": [
        "operator_incentives"
      ],
      "properties": {
        "operator_incentives": {
          "$ref": "#/definitions/CallMessage4"
        }
      },
      "additionalProperties": false
    },
    {
      "description": "Module call message.",
      "type": "object",
      "required": [
        "attester_incentives"
      ],
      "properties": {
        "attester_incentives": {
          "$ref": "#/definitions/CallMessage5"
        }
      },
      "additionalProperties": false
    },
    {
      "description": "Module call message.",
      "type": "object",
      "required": [
        "prover_incentives"
      ],
      "properties": {
        "prover_incentives": {
          "$ref": "#/definitions/CallMessage6"
        }
      },
      "additionalProperties": false
    },
    {
      "description": "Module call message.",
      "type": "object",
      "required": [
        "chain_state"
      ],
      "properties": {
        "chain_state": {
          "$ref": "#/definitions/CallMessage7"
        }
      },
      "additionalProperties": false
    },
    {
      "description": "Module call message.",
      "type": "object",
      "required": [
        "blob_storage"
      ],
      "properties": {
        "blob_storage": {
          "$ref": "#/definitions/NotInstantiable"
        }
      },
      "additionalProperties": false
    },
    {
      "description": "Module call message.",
      "type": "object",
      "required": [
        "paymaster"
      ],
      "properties": {
        "paymaster": {
          "$ref": "#/definitions/CallMessage8"
        }
      },
      "additionalProperties": false
    },
    {
      "description": "Module call message.",
      "type": "object",
      "required": [
        "revenue_share"
      ],
      "properties": {
        "revenue_share": {
          "$ref": "#/definitions/CallMessage9"
        }
      },
      "additionalProperties": false
    },
    {
      "description": "Module call message.",
      "type": "object",
      "required": [
        "mailbox"
      ],
      "properties": {
        "mailbox": {
          "$ref": "#/definitions/CallMessage10"
        }
      },
      "additionalProperties": false
    },
    {
      "description": "Module call message.",
      "type": "object",
      "required": [
        "interchain_gas_paymaster"
      ],
      "properties": {
        "interchain_gas_paymaster": {
          "$ref": "#/definitions/CallMessage11"
        }
      },
      "additionalProperties": false
    },
    {
      "description": "Module call message.",
      "type": "object",
      "required": [
        "merkle_tree_hook"
      ],
      "properties": {
        "merkle_tree_hook": {
          "type": "null"
        }
      },
      "additionalProperties": false
    },
    {
      "description": "Module call message.",
      "type": "object",
      "required": [
        "warp"
      ],
      "properties": {
        "warp": {
          "$ref": "#/definitions/CallMessage12"
        }
      },
      "additionalProperties": false
    },
    {
      "description": "Module call message.",
      "type": "object",
      "required": [
        "blink_accounts"
      ],
      "properties": {
        "blink_accounts": {
          "$ref": "#/definitions/AccountsCallMessage"
        }
      },
      "additionalProperties": false
    },
    {
      "description": "Module call message.",
      "type": "object",
      "required": [
        "spot"
      ],
      "properties": {
        "spot": {
          "$ref": "#/definitions/CallMessage13"
        }
      },
      "additionalProperties": false
    },
    {
      "description": "Module call message.",
      "type": "object",
      "required": [
        "perps"
      ],
      "properties": {
        "perps": {
          "$ref": "#/definitions/CallMessage14"
        }
      },
      "additionalProperties": false
    },
    {
      "description": "Module call message.",
      "type": "object",
      "required": [
        "oracle"
      ],
      "properties": {
        "oracle": {
          "$ref": "#/definitions/CallMessage15"
        }
      },
      "additionalProperties": false
    },
    {
      "description": "Module call message.",
      "type": "object",
      "required": [
        "admin"
      ],
      "properties": {
        "admin": {
          "type": "null"
        }
      },
      "additionalProperties": false
    },
    {
      "description": "Module call message.",
      "type": "object",
      "required": [
        "evm"
      ],
      "properties": {
        "evm": {
          "$ref": "#/definitions/call_message"
        }
      },
      "additionalProperties": false
    }
  ],
  "definitions": {
    "AccountsCallMessage": {
      "description": "Call messages for the accounts module",
      "oneOf": [
        {
          "description": "Add a delegation to a subaccount",
          "type": "object",
          "required": [
            "add_delegation"
          ],
          "properties": {
            "add_delegation": {
              "type": "object",
              "required": [
                "delegate",
                "permissions",
                "subaccount_id"
              ],
              "properties": {
                "delegate": {
                  "description": "The address to delegate to",
                  "allOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    }
                  ]
                },
                "expiry": {
                  "description": "Optional expiry timestamp (Unix ms)",
                  "type": [
                    "integer",
                    "null"
                  ],
                  "format": "uint64",
                  "minimum": 0.0
                },
                "name": {
                  "description": "Optional user-defined name (max 12 chars, printable ASCII)",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/SizedSafeString_for_12"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "permissions": {
                  "description": "Permissions to grant (raw u32 bitflags)",
                  "type": "integer",
                  "format": "uint32",
                  "minimum": 0.0
                },
                "subaccount_id": {
                  "description": "The subaccount to add delegation to",
                  "allOf": [
                    {
                      "$ref": "#/definitions/SubAccountId"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Update an existing delegation",
          "type": "object",
          "required": [
            "update_delegation"
          ],
          "properties": {
            "update_delegation": {
              "type": "object",
              "required": [
                "delegate",
                "permissions",
                "subaccount_id"
              ],
              "properties": {
                "delegate": {
                  "description": "The delegate address to update",
                  "allOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    }
                  ]
                },
                "expiry": {
                  "description": "New expiry (replaces old)",
                  "type": [
                    "integer",
                    "null"
                  ],
                  "format": "uint64",
                  "minimum": 0.0
                },
                "name": {
                  "description": "New name (replaces old)",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/SizedSafeString_for_12"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "permissions": {
                  "description": "New permissions (raw u32 bitflags)",
                  "type": "integer",
                  "format": "uint32",
                  "minimum": 0.0
                },
                "subaccount_id": {
                  "description": "The subaccount the delegation belongs to",
                  "allOf": [
                    {
                      "$ref": "#/definitions/SubAccountId"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Remove a delegation from a subaccount",
          "type": "object",
          "required": [
            "remove_delegation"
          ],
          "properties": {
            "remove_delegation": {
              "type": "object",
              "required": [
                "delegate",
                "subaccount_id"
              ],
              "properties": {
                "delegate": {
                  "description": "The delegate address to remove",
                  "allOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    }
                  ]
                },
                "subaccount_id": {
                  "description": "The subaccount to remove delegation from",
                  "allOf": [
                    {
                      "$ref": "#/definitions/SubAccountId"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Deposit tokens to a subaccount's spot balance",
          "type": "object",
          "required": [
            "deposit"
          ],
          "properties": {
            "deposit": {
              "type": "object",
              "required": [
                "amount",
                "subaccount_id",
                "token_id"
              ],
              "properties": {
                "address": {
                  "description": "Optional address to credit. Defaults to the transaction sender.",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "amount": {
                  "description": "Amount to deposit (in atoms)",
                  "type": "integer",
                  "format": "uint64",
                  "minimum": 0.0
                },
                "subaccount_id": {
                  "description": "The subaccount to deposit to",
                  "allOf": [
                    {
                      "$ref": "#/definitions/SubAccountId"
                    }
                  ]
                },
                "token_id": {
                  "description": "The token to deposit",
                  "allOf": [
                    {
                      "$ref": "#/definitions/TokenId"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Withdraw tokens from a subaccount's spot balance",
          "type": "object",
          "required": [
            "withdraw"
          ],
          "properties": {
            "withdraw": {
              "type": "object",
              "required": [
                "amount",
                "subaccount_id",
                "token_id"
              ],
              "properties": {
                "amount": {
                  "description": "Amount to withdraw (in atoms)",
                  "type": "integer",
                  "format": "uint64",
                  "minimum": 0.0
                },
                "subaccount_id": {
                  "description": "The subaccount to withdraw from",
                  "allOf": [
                    {
                      "$ref": "#/definitions/SubAccountId"
                    }
                  ]
                },
                "token_id": {
                  "description": "The token to withdraw",
                  "allOf": [
                    {
                      "$ref": "#/definitions/TokenId"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Transfer tokens between subaccounts of the same owner",
          "type": "object",
          "required": [
            "internal_transfer"
          ],
          "properties": {
            "internal_transfer": {
              "type": "object",
              "required": [
                "amount",
                "from_subaccount_id",
                "to_subaccount_id",
                "token_id"
              ],
              "properties": {
                "amount": {
                  "description": "Amount to transfer (in atoms)",
                  "type": "integer",
                  "format": "uint64",
                  "minimum": 0.0
                },
                "from_subaccount_id": {
                  "description": "Source subaccount",
                  "allOf": [
                    {
                      "$ref": "#/definitions/SubAccountId"
                    }
                  ]
                },
                "owner": {
                  "description": "Optional owner when signed by a delegate",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "to_subaccount_id": {
                  "description": "Destination subaccount",
                  "allOf": [
                    {
                      "$ref": "#/definitions/SubAccountId"
                    }
                  ]
                },
                "token_id": {
                  "description": "Token to transfer",
                  "allOf": [
                    {
                      "$ref": "#/definitions/TokenId"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Transfer tokens to another user's subaccount",
          "type": "object",
          "required": [
            "external_transfer"
          ],
          "properties": {
            "external_transfer": {
              "type": "object",
              "required": [
                "amount",
                "from_subaccount_id",
                "to_owner",
                "to_subaccount_id",
                "token_id"
              ],
              "properties": {
                "amount": {
                  "description": "Amount to transfer (in atoms)",
                  "type": "integer",
                  "format": "uint64",
                  "minimum": 0.0
                },
                "from_owner": {
                  "description": "Optional owner address when signed by a delegate",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "from_subaccount_id": {
                  "description": "Source subaccount (caller must be owner or delegate with EXTERNAL_TRANSFER)",
                  "allOf": [
                    {
                      "$ref": "#/definitions/SubAccountId"
                    }
                  ]
                },
                "to_owner": {
                  "description": "Destination owner address",
                  "allOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    }
                  ]
                },
                "to_subaccount_id": {
                  "description": "Destination subaccount",
                  "allOf": [
                    {
                      "$ref": "#/definitions/SubAccountId"
                    }
                  ]
                },
                "token_id": {
                  "description": "Token to transfer",
                  "allOf": [
                    {
                      "$ref": "#/definitions/TokenId"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Update account limits (admin only)",
          "type": "object",
          "required": [
            "set_limits"
          ],
          "properties": {
            "set_limits": {
              "type": "object",
              "required": [
                "max_delegations_per_subaccount",
                "max_spot_open_orders",
                "max_subaccounts_per_owner"
              ],
              "properties": {
                "max_delegations_per_subaccount": {
                  "description": "Maximum delegations per subaccount",
                  "type": "integer",
                  "format": "uint8",
                  "minimum": 0.0
                },
                "max_spot_open_orders": {
                  "description": "Maximum spot open orders per subaccount",
                  "type": "integer",
                  "format": "uint16",
                  "minimum": 0.0
                },
                "max_subaccounts_per_owner": {
                  "description": "Maximum subaccounts per owner",
                  "type": "integer",
                  "format": "uint16",
                  "minimum": 0.0
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Register a new spot asset (admin only)",
          "type": "object",
          "required": [
            "create_spot_asset"
          ],
          "properties": {
            "create_spot_asset": {
              "type": "object",
              "required": [
                "token_id"
              ],
              "properties": {
                "token_id": {
                  "description": "The token id to register",
                  "allOf": [
                    {
                      "$ref": "#/definitions/TokenId"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        }
      ]
    },
    "Admin": {
      "description": "The authority that can modify the route.",
      "oneOf": [
        {
          "description": "No admin - the route is immutable.",
          "type": "string",
          "enum": [
            "None"
          ]
        },
        {
          "description": "Allow the specified address to modify the route. This is extremely insecure, but it seems to be common practice in Hyperlane.",
          "type": "object",
          "required": [
            "InsecureOwner"
          ],
          "properties": {
            "InsecureOwner": {
              "$ref": "#/definitions/EthereumAddress"
            }
          },
          "additionalProperties": false
        }
      ]
    },
    "Amount": {
      "description": "A token amount.",
      "type": "integer",
      "format": "uint128",
      "minimum": 0.0
    },
    "AuthorizedSequencers": {
      "description": "The set of sequencers authorized to use a payer.",
      "oneOf": [
        {
          "description": "All sequencers are authorized to use this payer (according to its policy).",
          "type": "string",
          "enum": [
            "all"
          ]
        },
        {
          "description": "Only the specified sequencers may use this payer.",
          "type": "object",
          "required": [
            "some"
          ],
          "properties": {
            "some": {
              "$ref": "#/definitions/SafeVec_20_of_CelestiaAddress"
            }
          },
          "additionalProperties": false
        }
      ]
    },
    "BLPStatus": {
      "description": "BLP operational status - affects deposits/withdrawals, NOT backstop ability",
      "oneOf": [
        {
          "description": "Normal operations - all functions allowed",
          "type": "string",
          "enum": [
            "Normal"
          ]
        },
        {
          "description": "High utilization - restrict withdrawals to prevent bank run",
          "type": "string",
          "enum": [
            "Stress"
          ]
        },
        {
          "description": "Emergency - no deposits/withdrawals, but BLP still backstops",
          "type": "string",
          "enum": [
            "Halted"
          ]
        }
      ]
    },
    "BackstopRiskConfig": {
      "description": "Risk constraints for BLP backstop absorption.",
      "type": "object",
      "required": [
        "max_loss_pct",
        "max_market_concentration",
        "max_post_backstop_leverage",
        "min_post_backstop_mmr"
      ],
      "properties": {
        "max_loss_pct": {
          "description": "Max allowable loss as % of BLP equity (e.g., 10000 = 100%).",
          "type": "integer",
          "format": "uint16",
          "minimum": 0.0
        },
        "max_market_concentration": {
          "description": "Maximum exposure to a single market as % of BLP equity.",
          "type": "integer",
          "format": "uint16",
          "minimum": 0.0
        },
        "max_post_backstop_leverage": {
          "description": "Maximum allowed leverage for BLP post-absorb.",
          "type": "integer",
          "format": "uint8",
          "minimum": 0.0
        },
        "min_post_backstop_mmr": {
          "description": "Minimum MMR the BLP must maintain after absorbing.",
          "type": "integer",
          "format": "uint16",
          "minimum": 0.0
        }
      }
    },
    "CallMessage": {
      "description": "Represents the available call messages for interacting with the sov-accounts module.",
      "oneOf": [
        {
          "description": "Inserts a new credential id for the corresponding Account.",
          "type": "object",
          "required": [
            "insert_credential_id"
          ],
          "properties": {
            "insert_credential_id": {
              "$ref": "#/definitions/CredentialId"
            }
          },
          "additionalProperties": false
        }
      ]
    },
    "CallMessage10": {
      "description": "This enumeration represents the available call messages for interacting with the `sov-value-setter` module.",
      "oneOf": [
        {
          "description": "Sends an outbound message to the specified recipient.",
          "type": "object",
          "required": [
            "dispatch"
          ],
          "properties": {
            "dispatch": {
              "type": "object",
              "required": [
                "body",
                "domain",
                "gas_payment_limit",
                "recipient"
              ],
              "properties": {
                "body": {
                  "description": "The message body. For example, if the recipient is a warp route, this will encode the amount/type of funds being transferred",
                  "allOf": [
                    {
                      "$ref": "#/definitions/HexHash"
                    }
                  ]
                },
                "domain": {
                  "description": "The destination domain (aka \"Chain ID\")",
                  "type": "integer",
                  "format": "uint32",
                  "minimum": 0.0
                },
                "gas_payment_limit": {
                  "description": "A limit for the payment to relayer to cover gas needed for message delivery. If relayer demands more than this value of native gas token, dispatching message will fail. If it demands less than this, only needed amount will be paid.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/Amount"
                    }
                  ]
                },
                "metadata": {
                  "description": "The \"metadata\" which is used to verify the message or control hooks. Can be used to set the destination gas limit for a message using [`IGPMetadata`](crate::igp::IGPMetadata)",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/HexHash"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "recipient": {
                  "description": "The recipient address. Must implement the `handle` function - i.e. be a smart contract",
                  "allOf": [
                    {
                      "$ref": "#/definitions/HexHash"
                    }
                  ]
                },
                "relayer": {
                  "description": "Selected relayer",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Receive an inbound message. This is called *on the desitination chain* by the relayer after a `dispatch` call has been made on the source chain.\n\nPasses the message metadata and body to the security module (ISM) for verification, then calls the recipient's `handle` function with the message body.",
          "type": "object",
          "required": [
            "process"
          ],
          "properties": {
            "process": {
              "type": "object",
              "required": [
                "message",
                "metadata"
              ],
              "properties": {
                "message": {
                  "description": "The serialized [`Message`] struct",
                  "allOf": [
                    {
                      "$ref": "#/definitions/HexHash"
                    }
                  ]
                },
                "metadata": {
                  "description": "Metadata used to verify the message.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/HexHash"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Announce a validator and its signatures' storage.",
          "type": "object",
          "required": [
            "announce"
          ],
          "properties": {
            "announce": {
              "type": "object",
              "required": [
                "signature",
                "storage_location",
                "validator_address"
              ],
              "properties": {
                "signature": {
                  "description": "Signature of the announcement message for verification.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/HexHash"
                    }
                  ]
                },
                "storage_location": {
                  "description": "Location of validator's signatures.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/SizedSafeString_for_256"
                    }
                  ]
                },
                "validator_address": {
                  "description": "Address of a validator.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/HexHash"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        }
      ]
    },
    "CallMessage11": {
      "description": "InterchainGasPaymaster CallMessage",
      "oneOf": [
        {
          "description": "Set or update config for relayer (sender).\n\nThis could be used to clear values too.",
          "type": "object",
          "required": [
            "set_relayer_config"
          ],
          "properties": {
            "set_relayer_config": {
              "type": "object",
              "required": [
                "default_gas",
                "domain_default_gas",
                "domain_oracle_data"
              ],
              "properties": {
                "beneficiary": {
                  "description": "Beneficiary who can claim relayer rewards.",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "default_gas": {
                  "description": "Default gas used if custom one is not set.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/Amount"
                    }
                  ]
                },
                "domain_default_gas": {
                  "description": "Custom default gas per domain.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/SafeVec_100_of_DomainDefaultGas"
                    }
                  ]
                },
                "domain_oracle_data": {
                  "description": "Oracle data per domain.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/SafeVec_100_of_DomainOracleData"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Update oracle data for relayer (sender)",
          "type": "object",
          "required": [
            "update_oracle_data"
          ],
          "properties": {
            "update_oracle_data": {
              "type": "object",
              "required": [
                "domain",
                "oracle_data"
              ],
              "properties": {
                "domain": {
                  "description": "Domain or destination domain (i.e. chain id in hyperlane).",
                  "type": "integer",
                  "format": "uint32",
                  "minimum": 0.0
                },
                "oracle_data": {
                  "description": "Oracle data.\n\nRelayer is responsible to multiple token_rate_exchange by `TOKEN_EXCHANGE_RATE_SCALE`.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/ExchangeRateAndGasPrice"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Beneficiary (sender) claim all relayer rewards.",
          "type": "object",
          "required": [
            "claim_rewards"
          ],
          "properties": {
            "claim_rewards": {
              "type": "object",
              "required": [
                "relayer_address"
              ],
              "properties": {
                "relayer_address": {
                  "description": "Relayer to transfer tokens from.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        }
      ]
    },
    "CallMessage12": {
      "description": "Call messages for the test recipient module.",
      "oneOf": [
        {
          "description": "Register a route with the given token source and ISM.\n\nWarp routes should be rate-limited for security purposes. Its main purpose is to prevent draining a warp route in case an exploit is discovered or validators are malicious. Hyperlane uses \"token bucket\" algorithm for rate limitting. If rate limitting is not desired, the parameters that control it can be set to [`Amount::MAX`].",
          "type": "object",
          "required": [
            "register"
          ],
          "properties": {
            "register": {
              "type": "object",
              "required": [
                "admin",
                "inbound_limit_replenishment_per_slot",
                "inbound_transferrable_tokens_limit",
                "ism",
                "outbound_limit_replenishment_per_slot",
                "outbound_transferrable_tokens_limit",
                "remote_routers",
                "token_source"
              ],
              "properties": {
                "admin": {
                  "description": "The authority that can modify the route, if any.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/Admin"
                    }
                  ]
                },
                "inbound_limit_replenishment_per_slot": {
                  "description": "Defines how many tokens are added to the inbound transferrable limit at each visible slot.\n\nUsually this should be set to a value which allows full limit recovery each day, so `transferrable_tokens_limit / DA_SLOTS_PER_DAY`.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/Amount"
                    }
                  ]
                },
                "inbound_transferrable_tokens_limit": {
                  "description": "Defines how many tokens can be transferred to the route without any refills.\n\nNo more than this amount can be transferred in a single slot. Each transfer decreases current limit value until 0, at which point all new transfers are rejected. The limit recovers at each visible slot by a configured amount.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/Amount"
                    }
                  ]
                },
                "ism": {
                  "description": "The ISM for this route.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/Ism"
                    }
                  ]
                },
                "outbound_limit_replenishment_per_slot": {
                  "description": "Defines how many tokens are added to the outbound transferrable limit at each visible slot.\n\nUsually this should be set to a value which allows full limit recovery each day, so `transferrable_tokens_limit / DA_SLOTS_PER_DAY`.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/Amount"
                    }
                  ]
                },
                "outbound_transferrable_tokens_limit": {
                  "description": "Defines how many tokens can be transferred from the route without any refills.\n\nNo more than this amount can be transferred in a single slot. Each transfer decreases current limit value until 0, at which point all new transfers are rejected. The limit recovers at each visible slot by a configured amount.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/Amount"
                    }
                  ]
                },
                "remote_routers": {
                  "description": "Remote routers to enroll on route registration.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/SafeVec_64_of_Tuple_of_uint32_and_HexHash"
                    }
                  ]
                },
                "token_source": {
                  "description": "The token source for the route.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/TokenKind"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Update an existing route with new admin or ISM.",
          "type": "object",
          "required": [
            "update"
          ],
          "properties": {
            "update": {
              "type": "object",
              "required": [
                "warp_route"
              ],
              "properties": {
                "admin": {
                  "description": "New authority that can modify the route.",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/Admin"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "inbound_limit_replenishment_per_slot": {
                  "description": "Defines how many tokens are added to the inbound transferrable limit at each visible slot.",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/Amount"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "inbound_transferrable_tokens_limit": {
                  "description": "Defines how many tokens can be transferred to the route without any refills.",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/Amount"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "ism": {
                  "description": "New ISM for this route.",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/Ism"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "outbound_limit_replenishment_per_slot": {
                  "description": "Defines how many tokens are added to the outbound transferrable limit at each visible slot.",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/Amount"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "outbound_transferrable_tokens_limit": {
                  "description": "Defines how many tokens can be transferred from the route without any refills.",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/Amount"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "warp_route": {
                  "description": "The ID of the warp route on the local chain to update.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/HexHash"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Add a counterparty router on another chain. This router is trusted. A malicious remote router can steal funds. Each warp route can have at most one remote router for a given destination domain.",
          "type": "object",
          "required": [
            "enroll_remote_router"
          ],
          "properties": {
            "enroll_remote_router": {
              "type": "object",
              "required": [
                "remote_domain",
                "remote_router_address",
                "warp_route"
              ],
              "properties": {
                "remote_domain": {
                  "description": "The domain of the remote chain.",
                  "type": "integer",
                  "format": "uint32",
                  "minimum": 0.0
                },
                "remote_router_address": {
                  "description": "The router address on the remote chain.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/HexHash"
                    }
                  ]
                },
                "warp_route": {
                  "description": "The ID of the warp route on the local chain.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/HexHash"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Remove a counterparty router on another chain.",
          "type": "object",
          "required": [
            "un_enroll_remote_router"
          ],
          "properties": {
            "un_enroll_remote_router": {
              "type": "object",
              "required": [
                "remote_domain",
                "warp_route"
              ],
              "properties": {
                "remote_domain": {
                  "description": "The domain of the remote chain.",
                  "type": "integer",
                  "format": "uint32",
                  "minimum": 0.0
                },
                "warp_route": {
                  "description": "The ID of the warp route on the local chain.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/HexHash"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Transfer a token from the local chain to the remote chain.",
          "type": "object",
          "required": [
            "transfer_remote"
          ],
          "properties": {
            "transfer_remote": {
              "type": "object",
              "required": [
                "amount",
                "destination_domain",
                "gas_payment_limit",
                "recipient",
                "warp_route"
              ],
              "properties": {
                "amount": {
                  "description": "The amount to transfer.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/Amount"
                    }
                  ]
                },
                "destination_domain": {
                  "description": "The domain of the destination chain.",
                  "type": "integer",
                  "format": "uint32",
                  "minimum": 0.0
                },
                "gas_payment_limit": {
                  "description": "A limit for the payment to relayer to cover gas needed for message delivery.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/Amount"
                    }
                  ]
                },
                "recipient": {
                  "description": "The recipient on the destination chain.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/HexHash"
                    }
                  ]
                },
                "relayer": {
                  "description": "Selected relayer",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "warp_route": {
                  "description": "The route to use for the transfer.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/HexHash"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        }
      ]
    },
    "CallMessage13": {
      "description": "A message that can be sent to the module.",
      "oneOf": [
        {
          "description": "Create a new spot orderbook.",
          "type": "object",
          "required": [
            "create_spot_orderbook"
          ],
          "properties": {
            "create_spot_orderbook": {
              "type": "object",
              "required": [
                "base_decimals",
                "base_lot_size",
                "base_token",
                "default_maker_fee_bps",
                "default_taker_fee_bps",
                "fee_recipient",
                "tick_size"
              ],
              "properties": {
                "base_decimals": {
                  "description": "The decimal scale of the quantity of the orderbook. this should just be the decimals of the base token",
                  "type": "integer",
                  "format": "uint8",
                  "minimum": 0.0
                },
                "base_lot_size": {
                  "description": "base lot size in base units. If we call the smallest possible of a token an atom. the base lot size is the number of atoms in a base lot.",
                  "type": "integer",
                  "format": "uint64",
                  "minimum": 0.0
                },
                "base_token": {
                  "description": "The base token id for spot markets",
                  "allOf": [
                    {
                      "$ref": "#/definitions/TokenId"
                    }
                  ]
                },
                "default_maker_fee_bps": {
                  "description": "The default maker fee in basis points",
                  "type": "integer",
                  "format": "uint16",
                  "minimum": 0.0
                },
                "default_taker_fee_bps": {
                  "description": "The default taker fee in basis points",
                  "type": "integer",
                  "format": "uint16",
                  "minimum": 0.0
                },
                "fee_recipient": {
                  "description": "fee recipient",
                  "allOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    }
                  ]
                },
                "min_order_notional": {
                  "description": "Minimum order notional in quote lots. Orders below this value are rejected. 0 = disabled.",
                  "default": null,
                  "type": [
                    "integer",
                    "null"
                  ],
                  "format": "uint64",
                  "minimum": 0.0
                },
                "oracle_id": {
                  "description": "Optional oracle id for pegged orders",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/OracleId"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "tick_size": {
                  "description": "The tick size of the orderbook.",
                  "type": "integer",
                  "format": "uint64",
                  "minimum": 0.0
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Place an order.",
          "type": "object",
          "required": [
            "place_order"
          ],
          "properties": {
            "place_order": {
              "type": "object",
              "required": [
                "client_order_id",
                "market_id",
                "order_fill_method",
                "order_type",
                "quantity",
                "side"
              ],
              "properties": {
                "client_order_id": {
                  "description": "The optional client ID of the order. If client order id is provided it must be unique for each active order, or NULL",
                  "allOf": [
                    {
                      "$ref": "#/definitions/ClientOrderId"
                    }
                  ]
                },
                "market_id": {
                  "description": "The ID of the orderbook.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/MarketId"
                    }
                  ]
                },
                "max_price": {
                  "description": "Maximum price for pegged orders (price cap for buy, floor for sell)",
                  "type": [
                    "integer",
                    "null"
                  ],
                  "format": "uint64",
                  "minimum": 0.0
                },
                "offset": {
                  "description": "The optional price offset of the order for oracle peg orders",
                  "type": [
                    "integer",
                    "null"
                  ],
                  "format": "uint8",
                  "minimum": 0.0
                },
                "order_fill_method": {
                  "description": "fill method",
                  "allOf": [
                    {
                      "$ref": "#/definitions/TimeInForce"
                    }
                  ]
                },
                "order_type": {
                  "description": "The type of the order.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/OrderType"
                    }
                  ]
                },
                "owner": {
                  "description": "Optional owner when signed by a delegate",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "parent": {
                  "description": "The optional parent order id of the order for OCO orders",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/ClientOrderId"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "price": {
                  "description": "The limit price of the order. None for market orders and pegged orders (use offset instead). For stop orders, this is the limit price at which the order will execute.",
                  "type": [
                    "integer",
                    "null"
                  ],
                  "format": "uint64",
                  "minimum": 0.0
                },
                "quantity": {
                  "description": "The quantity of the order.",
                  "type": "integer",
                  "format": "uint64",
                  "minimum": 0.0
                },
                "side": {
                  "description": "The side of the order.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/Side"
                    }
                  ]
                },
                "subaccount_id": {
                  "description": "The subaccount to place the order from (defaults to 0)",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/SubAccountId"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "trigger_price": {
                  "description": "The optional trigger price of the order for stop orders",
                  "type": [
                    "integer",
                    "null"
                  ],
                  "format": "uint64",
                  "minimum": 0.0
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "type": "object",
          "required": [
            "place_oco_order"
          ],
          "properties": {
            "place_oco_order": {
              "type": "object",
              "required": [
                "order_1",
                "order_2"
              ],
              "properties": {
                "order_1": {
                  "description": "The first order",
                  "allOf": [
                    {
                      "$ref": "#/definitions/PlaceOrderParams"
                    }
                  ]
                },
                "order_2": {
                  "description": "The second order",
                  "allOf": [
                    {
                      "$ref": "#/definitions/PlaceOrderParams"
                    }
                  ]
                },
                "owner": {
                  "description": "Optional owner when signed by a delegate",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "subaccount_id": {
                  "description": "The subaccount to place orders from (defaults to 0)",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/SubAccountId"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Place multiple orders.",
          "type": "object",
          "required": [
            "place_multiple_orders"
          ],
          "properties": {
            "place_multiple_orders": {
              "type": "object",
              "required": [
                "orders"
              ],
              "properties": {
                "orders": {
                  "description": "The orders to place",
                  "allOf": [
                    {
                      "$ref": "#/definitions/SafeVec_512_of_PlaceOrderParams"
                    }
                  ]
                },
                "owner": {
                  "description": "Optional owner when signed by a delegate",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "subaccount_id": {
                  "description": "The subaccount to place orders from (defaults to 0)",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/SubAccountId"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Modify an order. Cancels and replaces with a new order allowing to keep the same client order id.",
          "type": "object",
          "required": [
            "modify_order"
          ],
          "properties": {
            "modify_order": {
              "type": "object",
              "required": [
                "client_order_id",
                "market_id",
                "order_fill_method",
                "order_type",
                "quantity",
                "side"
              ],
              "properties": {
                "client_order_id": {
                  "description": "The client ID of the order.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/ClientOrderId"
                    }
                  ]
                },
                "market_id": {
                  "description": "The new orderbook id.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/MarketId"
                    }
                  ]
                },
                "max_price": {
                  "description": "Maximum price for pegged orders",
                  "type": [
                    "integer",
                    "null"
                  ],
                  "format": "uint64",
                  "minimum": 0.0
                },
                "offset": {
                  "description": "The optional price offset of the order for oracle peg orders",
                  "type": [
                    "integer",
                    "null"
                  ],
                  "format": "uint8",
                  "minimum": 0.0
                },
                "order_fill_method": {
                  "description": "fill method",
                  "allOf": [
                    {
                      "$ref": "#/definitions/TimeInForce"
                    }
                  ]
                },
                "order_type": {
                  "description": "The new type of the order.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/OrderType"
                    }
                  ]
                },
                "owner": {
                  "description": "Optional owner when signed by a delegate",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "parent": {
                  "description": "The optional parent order id of the order for OCO orders",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/ClientOrderId"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "price": {
                  "description": "The new limit price. None for market/pegged orders.",
                  "type": [
                    "integer",
                    "null"
                  ],
                  "format": "uint64",
                  "minimum": 0.0
                },
                "quantity": {
                  "description": "The quantity of the order.",
                  "type": "integer",
                  "format": "uint64",
                  "minimum": 0.0
                },
                "side": {
                  "description": "The new side of the order.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/Side"
                    }
                  ]
                },
                "subaccount_id": {
                  "description": "The subaccount the order belongs to (defaults to 0)",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/SubAccountId"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "trigger_price": {
                  "description": "The optional trigger price of the order for stop orders",
                  "type": [
                    "integer",
                    "null"
                  ],
                  "format": "uint64",
                  "minimum": 0.0
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Cancel an order by client order ID.",
          "type": "object",
          "required": [
            "cancel_order"
          ],
          "properties": {
            "cancel_order": {
              "type": "object",
              "required": [
                "client_order_id"
              ],
              "properties": {
                "client_order_id": {
                  "description": "The client ID of the order.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/ClientOrderId"
                    }
                  ]
                },
                "owner": {
                  "description": "Optional owner when signed by a delegate",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "subaccount_id": {
                  "description": "The subaccount the order belongs to (defaults to 0)",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/SubAccountId"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Cancel a pegged order if its effective price exceeds its max price.",
          "type": "object",
          "required": [
            "cancel_pegged_order_if_beyond_max_price"
          ],
          "properties": {
            "cancel_pegged_order_if_beyond_max_price": {
              "type": "object",
              "required": [
                "client_order_id"
              ],
              "properties": {
                "client_order_id": {
                  "description": "The client ID of the order.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/ClientOrderId"
                    }
                  ]
                },
                "owner": {
                  "description": "Optional owner when signed by a delegate",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "subaccount_id": {
                  "description": "The subaccount the order belongs to (defaults to 0)",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/SubAccountId"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Cancel all orders for a user subaccount.",
          "type": "object",
          "required": [
            "cancel_all_orders"
          ],
          "properties": {
            "cancel_all_orders": {
              "type": "object",
              "properties": {
                "owner": {
                  "description": "Optional owner when signed by a delegate",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "subaccount_id": {
                  "description": "The subaccount to cancel all orders for (defaults to 0)",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/SubAccountId"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "type": "object",
          "required": [
            "crank_stop_orders"
          ],
          "properties": {
            "crank_stop_orders": {
              "type": "object",
              "required": [
                "market_id"
              ],
              "properties": {
                "market_id": {
                  "$ref": "#/definitions/MarketId"
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Pause a spot market — blocks new orders and cranks, allows cancellations.",
          "type": "object",
          "required": [
            "pause_market"
          ],
          "properties": {
            "pause_market": {
              "type": "object",
              "required": [
                "market_id"
              ],
              "properties": {
                "market_id": {
                  "$ref": "#/definitions/MarketId"
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Unpause a previously paused spot market.",
          "type": "object",
          "required": [
            "unpause_market"
          ],
          "properties": {
            "unpause_market": {
              "type": "object",
              "required": [
                "market_id"
              ],
              "properties": {
                "market_id": {
                  "$ref": "#/definitions/MarketId"
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Update the fee recipient for a spot market (admin only)",
          "type": "object",
          "required": [
            "update_spot_fee_recipient"
          ],
          "properties": {
            "update_spot_fee_recipient": {
              "type": "object",
              "required": [
                "fee_recipient",
                "market_id"
              ],
              "properties": {
                "fee_recipient": {
                  "$ref": "#/definitions/EthereumAddress"
                },
                "market_id": {
                  "$ref": "#/definitions/MarketId"
                }
              }
            }
          },
          "additionalProperties": false
        }
      ]
    },
    "CallMessage14": {
      "oneOf": [
        {
          "description": "Create a new perpetual orderbook",
          "type": "object",
          "required": [
            "create_perp_orderbook"
          ],
          "properties": {
            "create_perp_orderbook": {
              "type": "object",
              "required": [
                "base_decimals",
                "base_token_name",
                "default_maker_fee_100th_bps",
                "default_taker_fee_100th_bps",
                "impact_quantity",
                "margin_tiers",
                "max_limit_order_value",
                "max_mark_deviation_bps",
                "max_market_order_value",
                "oracle_id",
                "price_band_bps",
                "tick_size"
              ],
              "properties": {
                "base_decimals": {
                  "type": "integer",
                  "format": "uint8",
                  "minimum": 0.0
                },
                "base_token_name": {
                  "description": "the base token name/symbol",
                  "allOf": [
                    {
                      "$ref": "#/definitions/TokenName"
                    }
                  ]
                },
                "default_maker_fee_100th_bps": {
                  "description": "default maker fee in 100th bps (negative = rebate)",
                  "allOf": [
                    {
                      "$ref": "#/definitions/SignedBPS100thFee"
                    }
                  ]
                },
                "default_taker_fee_100th_bps": {
                  "description": "default taker fee in 100th bps (negative = rebate)",
                  "allOf": [
                    {
                      "$ref": "#/definitions/SignedBPS100thFee"
                    }
                  ]
                },
                "impact_quantity": {
                  "description": "quantity to use for impact price calculation",
                  "type": "integer",
                  "format": "uint64",
                  "minimum": 0.0
                },
                "margin_tiers": {
                  "description": "position size-based margin requirements",
                  "type": "array",
                  "items": {
                    "type": "array",
                    "items": [
                      {
                        "type": "integer",
                        "format": "uint64",
                        "minimum": 0.0
                      },
                      {
                        "type": "integer",
                        "format": "uint8",
                        "minimum": 0.0
                      }
                    ],
                    "maxItems": 2,
                    "minItems": 2
                  }
                },
                "max_limit_order_value": {
                  "description": "maximum single limit order notional value",
                  "type": "integer",
                  "format": "uint64",
                  "minimum": 0.0
                },
                "max_mark_deviation_bps": {
                  "description": "Maximum mark price deviation from oracle in basis points (e.g., 500 = 5%). 0 = disabled.",
                  "type": "integer",
                  "format": "uint16",
                  "minimum": 0.0
                },
                "max_market_order_value": {
                  "description": "maximum single market order notional value",
                  "type": "integer",
                  "format": "uint64",
                  "minimum": 0.0
                },
                "oracle_id": {
                  "description": "Oracle identifier for market",
                  "allOf": [
                    {
                      "$ref": "#/definitions/OracleId"
                    }
                  ]
                },
                "price_band_bps": {
                  "description": "Execution price-band half-width in bps: a fill must be within oracle ± this percentage (e.g. 500 = ±5%). 0 = disabled. (Distinct from the placement band.)",
                  "type": "integer",
                  "format": "uint16",
                  "minimum": 0.0
                },
                "tick_size": {
                  "description": "tick size in quote smallest units",
                  "type": "integer",
                  "format": "uint64",
                  "minimum": 0.0
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Deposit margin into a subaccount",
          "type": "object",
          "required": [
            "deposit_margin"
          ],
          "properties": {
            "deposit_margin": {
              "type": "object",
              "required": [
                "amount",
                "subaccount_id"
              ],
              "properties": {
                "address": {
                  "description": "Optional address to credit. Defaults to the transaction sender.",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "amount": {
                  "description": "amount in quote atoms",
                  "type": "integer",
                  "format": "uint64",
                  "minimum": 0.0
                },
                "subaccount_id": {
                  "description": "subaccount to deposit into",
                  "allOf": [
                    {
                      "$ref": "#/definitions/SubAccountId"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Withdraw margin from a subaccount",
          "type": "object",
          "required": [
            "withdraw_margin"
          ],
          "properties": {
            "withdraw_margin": {
              "type": "object",
              "required": [
                "amount",
                "subaccount_id"
              ],
              "properties": {
                "amount": {
                  "description": "amount in quote atoms",
                  "type": "integer",
                  "format": "uint64",
                  "minimum": 0.0
                },
                "owner": {
                  "description": "Optional owner when signed by a delegate",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "subaccount_id": {
                  "description": "subaccount to withdraw from",
                  "allOf": [
                    {
                      "$ref": "#/definitions/SubAccountId"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Transfer margin between subaccounts of the same user",
          "type": "object",
          "required": [
            "subaccount_transfer"
          ],
          "properties": {
            "subaccount_transfer": {
              "type": "object",
              "required": [
                "amount",
                "from_subaccount_id",
                "to_subaccount_id"
              ],
              "properties": {
                "amount": {
                  "description": "amount to transfer in quote atoms",
                  "type": "integer",
                  "format": "uint64",
                  "minimum": 0.0
                },
                "from_subaccount_id": {
                  "description": "source subaccount id",
                  "allOf": [
                    {
                      "$ref": "#/definitions/SubAccountId"
                    }
                  ]
                },
                "owner": {
                  "description": "Optional owner when signed by a delegate",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "to_subaccount_id": {
                  "description": "destination subaccount id",
                  "allOf": [
                    {
                      "$ref": "#/definitions/SubAccountId"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Place an order on a perp market",
          "type": "object",
          "required": [
            "place_order"
          ],
          "properties": {
            "place_order": {
              "type": "object",
              "required": [
                "client_order_id",
                "market_id",
                "order_fill_method",
                "order_type",
                "quantity",
                "side"
              ],
              "properties": {
                "client_order_id": {
                  "description": "client order id for tracking",
                  "allOf": [
                    {
                      "$ref": "#/definitions/ClientOrderId"
                    }
                  ]
                },
                "market_id": {
                  "description": "market to place order on",
                  "allOf": [
                    {
                      "$ref": "#/definitions/MarketId"
                    }
                  ]
                },
                "max_price": {
                  "description": "Maximum price for pegged orders (price cap for buy, floor for sell)",
                  "type": [
                    "integer",
                    "null"
                  ],
                  "format": "uint64",
                  "minimum": 0.0
                },
                "offset": {
                  "description": "The optional price offset of the order for oracle peg orders",
                  "type": [
                    "integer",
                    "null"
                  ],
                  "format": "uint8",
                  "minimum": 0.0
                },
                "order_fill_method": {
                  "description": "fill method",
                  "allOf": [
                    {
                      "$ref": "#/definitions/TimeInForce"
                    }
                  ]
                },
                "order_type": {
                  "description": "order type (Market, Limit, etc.)",
                  "allOf": [
                    {
                      "$ref": "#/definitions/OrderType"
                    }
                  ]
                },
                "owner": {
                  "description": "Optional owner when signed by a delegate",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "parent": {
                  "description": "The optional parent order id of the order for OCO orders",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/ClientOrderId"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "price": {
                  "description": "order price (ignored for market orders and pegged orders) For stop orders, this is the limit price at which the order will execute.",
                  "type": [
                    "integer",
                    "null"
                  ],
                  "format": "uint64",
                  "minimum": 0.0
                },
                "quantity": {
                  "description": "order quantity",
                  "type": "integer",
                  "format": "uint64",
                  "minimum": 0.0
                },
                "reduce_only": {
                  "description": "If true, this order can only reduce an existing position, not increase it. Reduce-only orders placed by accounts in Warning/Restrict tier are allowed. During matching, reduce-only maker orders that would increase position are cancelled.",
                  "type": [
                    "boolean",
                    "null"
                  ]
                },
                "side": {
                  "description": "order side (Bid = Long, Ask = Short)",
                  "allOf": [
                    {
                      "$ref": "#/definitions/Side"
                    }
                  ]
                },
                "subaccount_id": {
                  "description": "The subaccount to place order from (defaults to 0)",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/SubAccountId"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "trigger_price": {
                  "description": "The optional trigger price of the order for stop orders",
                  "type": [
                    "integer",
                    "null"
                  ],
                  "format": "uint64",
                  "minimum": 0.0
                },
                "vault_id": {
                  "description": "Optional vault ID — when set, sender must be vault manager/owner and the order routes to the vault's account",
                  "type": [
                    "integer",
                    "null"
                  ],
                  "format": "uint64",
                  "minimum": 0.0
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Cancel an order by client order ID",
          "type": "object",
          "required": [
            "cancel_order"
          ],
          "properties": {
            "cancel_order": {
              "type": "object",
              "required": [
                "client_order_id"
              ],
              "properties": {
                "client_order_id": {
                  "description": "The client order ID of the order to cancel",
                  "allOf": [
                    {
                      "$ref": "#/definitions/ClientOrderId"
                    }
                  ]
                },
                "owner": {
                  "description": "Optional owner when signed by a delegate",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "subaccount_id": {
                  "description": "The subaccount the order belongs to (defaults to 0)",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/SubAccountId"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "vault_id": {
                  "description": "Optional vault ID — when set, sender must be vault manager/owner",
                  "type": [
                    "integer",
                    "null"
                  ],
                  "format": "uint64",
                  "minimum": 0.0
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Cancel all orders for a subaccount",
          "type": "object",
          "required": [
            "cancel_all_orders"
          ],
          "properties": {
            "cancel_all_orders": {
              "type": "object",
              "properties": {
                "owner": {
                  "description": "Optional owner when signed by a delegate",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "subaccount_id": {
                  "description": "The subaccount to cancel all orders for (defaults to 0)",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/SubAccountId"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "vault_id": {
                  "description": "Optional vault ID — when set, sender must be vault manager/owner",
                  "type": [
                    "integer",
                    "null"
                  ],
                  "format": "uint64",
                  "minimum": 0.0
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Place an OCO (one-cancels-other) order pair (e.g. TP + SL bracket)",
          "type": "object",
          "required": [
            "place_oco_order"
          ],
          "properties": {
            "place_oco_order": {
              "type": "object",
              "required": [
                "order_1",
                "order_2"
              ],
              "properties": {
                "order_1": {
                  "description": "The first order (e.g. take-profit)",
                  "allOf": [
                    {
                      "$ref": "#/definitions/PlaceOrderParams"
                    }
                  ]
                },
                "order_2": {
                  "description": "The second order (e.g. stop-loss)",
                  "allOf": [
                    {
                      "$ref": "#/definitions/PlaceOrderParams"
                    }
                  ]
                },
                "owner": {
                  "description": "Optional owner when signed by a delegate",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "reduce_only": {
                  "description": "If true, both legs can only reduce an existing position",
                  "type": [
                    "boolean",
                    "null"
                  ]
                },
                "subaccount_id": {
                  "description": "The subaccount to place orders from (defaults to 0)",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/SubAccountId"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "vault_id": {
                  "description": "Optional vault ID — when set, sender must be vault manager/owner",
                  "type": [
                    "integer",
                    "null"
                  ],
                  "format": "uint64",
                  "minimum": 0.0
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Modify an order. Cancels and replaces with a new order keeping the same client order id.",
          "type": "object",
          "required": [
            "modify_order"
          ],
          "properties": {
            "modify_order": {
              "type": "object",
              "required": [
                "client_order_id",
                "market_id",
                "order_fill_method",
                "order_type",
                "quantity",
                "side"
              ],
              "properties": {
                "client_order_id": {
                  "description": "The client order id (must match existing order)",
                  "allOf": [
                    {
                      "$ref": "#/definitions/ClientOrderId"
                    }
                  ]
                },
                "market_id": {
                  "description": "The new market id",
                  "allOf": [
                    {
                      "$ref": "#/definitions/MarketId"
                    }
                  ]
                },
                "max_price": {
                  "description": "Maximum price for pegged orders",
                  "type": [
                    "integer",
                    "null"
                  ],
                  "format": "uint64",
                  "minimum": 0.0
                },
                "offset": {
                  "description": "The optional price offset for oracle peg orders",
                  "type": [
                    "integer",
                    "null"
                  ],
                  "format": "uint8",
                  "minimum": 0.0
                },
                "order_fill_method": {
                  "description": "The new fill method",
                  "allOf": [
                    {
                      "$ref": "#/definitions/TimeInForce"
                    }
                  ]
                },
                "order_type": {
                  "description": "The new order type",
                  "allOf": [
                    {
                      "$ref": "#/definitions/OrderType"
                    }
                  ]
                },
                "owner": {
                  "description": "Optional owner when signed by a delegate",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "parent": {
                  "description": "The optional parent order id for OCO orders",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/ClientOrderId"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "price": {
                  "description": "The new price (None for market/pegged orders)",
                  "type": [
                    "integer",
                    "null"
                  ],
                  "format": "uint64",
                  "minimum": 0.0
                },
                "quantity": {
                  "description": "The new quantity",
                  "type": "integer",
                  "format": "uint64",
                  "minimum": 0.0
                },
                "reduce_only": {
                  "description": "If true, this order can only reduce an existing position",
                  "type": [
                    "boolean",
                    "null"
                  ]
                },
                "side": {
                  "description": "The new side",
                  "allOf": [
                    {
                      "$ref": "#/definitions/Side"
                    }
                  ]
                },
                "subaccount_id": {
                  "description": "The subaccount the order belongs to (defaults to 0)",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/SubAccountId"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "trigger_price": {
                  "description": "The optional trigger price for stop orders",
                  "type": [
                    "integer",
                    "null"
                  ],
                  "format": "uint64",
                  "minimum": 0.0
                },
                "vault_id": {
                  "description": "Optional vault ID — when set, sender must be vault manager/owner",
                  "type": [
                    "integer",
                    "null"
                  ],
                  "format": "uint64",
                  "minimum": 0.0
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Place multiple orders in a single transaction",
          "type": "object",
          "required": [
            "place_multiple_orders"
          ],
          "properties": {
            "place_multiple_orders": {
              "type": "object",
              "required": [
                "orders"
              ],
              "properties": {
                "orders": {
                  "description": "The orders to place",
                  "allOf": [
                    {
                      "$ref": "#/definitions/SafeVec_512_of_PlaceOrderParams"
                    }
                  ]
                },
                "owner": {
                  "description": "Optional owner when signed by a delegate",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "subaccount_id": {
                  "description": "The subaccount to place orders from (defaults to 0)",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/SubAccountId"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "vault_id": {
                  "description": "Optional vault ID — when set, sender must be vault manager/owner",
                  "type": [
                    "integer",
                    "null"
                  ],
                  "format": "uint64",
                  "minimum": 0.0
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Cancel a pegged order if its effective price exceeds its max price",
          "type": "object",
          "required": [
            "cancel_pegged_order_if_beyond_max_price"
          ],
          "properties": {
            "cancel_pegged_order_if_beyond_max_price": {
              "type": "object",
              "required": [
                "client_order_id"
              ],
              "properties": {
                "client_order_id": {
                  "description": "The client order id of the pegged order",
                  "allOf": [
                    {
                      "$ref": "#/definitions/ClientOrderId"
                    }
                  ]
                },
                "owner": {
                  "description": "Optional owner when signed by a delegate",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "subaccount_id": {
                  "description": "The subaccount the order belongs to (defaults to 0)",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/SubAccountId"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "vault_id": {
                  "description": "Optional vault ID — when set, sender must be vault manager/owner",
                  "type": [
                    "integer",
                    "null"
                  ],
                  "format": "uint64",
                  "minimum": 0.0
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Cancel all orders for an account in Restrict health tier (permissionless keeper)\n\nAnyone can call this for any account that is at or below Restrict tier. BLP accounts are exempt.",
          "type": "object",
          "required": [
            "cancel_restricted_orders"
          ],
          "properties": {
            "cancel_restricted_orders": {
              "type": "object",
              "required": [
                "subaccount_id",
                "user"
              ],
              "properties": {
                "subaccount_id": {
                  "description": "The subaccount to cancel orders for",
                  "allOf": [
                    {
                      "$ref": "#/definitions/SubAccountId"
                    }
                  ]
                },
                "user": {
                  "description": "The user address whose orders should be cancelled",
                  "allOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Change leverage for a market",
          "type": "object",
          "required": [
            "change_leverage"
          ],
          "properties": {
            "change_leverage": {
              "type": "object",
              "required": [
                "market_id",
                "new_leverage",
                "subaccount_id"
              ],
              "properties": {
                "market_id": {
                  "description": "market to change leverage for",
                  "allOf": [
                    {
                      "$ref": "#/definitions/MarketId"
                    }
                  ]
                },
                "new_leverage": {
                  "description": "new leverage value",
                  "type": "integer",
                  "format": "uint8",
                  "minimum": 0.0
                },
                "owner": {
                  "description": "Optional owner when signed by a delegate",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "subaccount_id": {
                  "description": "subaccount to change leverage for",
                  "allOf": [
                    {
                      "$ref": "#/definitions/SubAccountId"
                    }
                  ]
                },
                "vault_id": {
                  "description": "Optional vault ID — when set, sender must be vault manager/owner",
                  "type": [
                    "integer",
                    "null"
                  ],
                  "format": "uint64",
                  "minimum": 0.0
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Change margin mode for a market (cross <-> isolated)",
          "type": "object",
          "required": [
            "change_margin_mode"
          ],
          "properties": {
            "change_margin_mode": {
              "type": "object",
              "required": [
                "market_id",
                "new_mode",
                "subaccount_id"
              ],
              "properties": {
                "market_id": {
                  "description": "market to change margin mode for",
                  "allOf": [
                    {
                      "$ref": "#/definitions/MarketId"
                    }
                  ]
                },
                "new_mode": {
                  "description": "new margin mode",
                  "allOf": [
                    {
                      "$ref": "#/definitions/MarginMode"
                    }
                  ]
                },
                "owner": {
                  "description": "Optional owner when signed by a delegate",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "subaccount_id": {
                  "description": "subaccount to change margin mode for",
                  "allOf": [
                    {
                      "$ref": "#/definitions/SubAccountId"
                    }
                  ]
                },
                "vault_id": {
                  "description": "Optional vault ID — when set, sender must be vault manager/owner",
                  "type": [
                    "integer",
                    "null"
                  ],
                  "format": "uint64",
                  "minimum": 0.0
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Adjust allocated margin for an isolated position",
          "type": "object",
          "required": [
            "adjust_isolated_margin"
          ],
          "properties": {
            "adjust_isolated_margin": {
              "type": "object",
              "required": [
                "margin_adjustment",
                "market_id",
                "subaccount_id"
              ],
              "properties": {
                "margin_adjustment": {
                  "description": "margin adjustment (positive = add margin, negative = remove margin)",
                  "type": "integer",
                  "format": "int128"
                },
                "market_id": {
                  "description": "market of the isolated position",
                  "allOf": [
                    {
                      "$ref": "#/definitions/MarketId"
                    }
                  ]
                },
                "owner": {
                  "description": "Optional owner when signed by a delegate",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "subaccount_id": {
                  "description": "subaccount of the isolated position",
                  "allOf": [
                    {
                      "$ref": "#/definitions/SubAccountId"
                    }
                  ]
                },
                "vault_id": {
                  "description": "Optional vault ID — when set, sender must be vault manager/owner",
                  "type": [
                    "integer",
                    "null"
                  ],
                  "format": "uint64",
                  "minimum": 0.0
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Crank the mark price for a market Updates EMA state and emits MarkPriceUpdated event Can be called a maximum of once every 500ms",
          "type": "object",
          "required": [
            "crank_mark_price"
          ],
          "properties": {
            "crank_mark_price": {
              "type": "object",
              "required": [
                "market_id"
              ],
              "properties": {
                "market_id": {
                  "$ref": "#/definitions/MarketId"
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Crank stop orders for a market",
          "type": "object",
          "required": [
            "crank_stop_orders"
          ],
          "properties": {
            "crank_stop_orders": {
              "type": "object",
              "required": [
                "market_id"
              ],
              "properties": {
                "market_id": {
                  "$ref": "#/definitions/MarketId"
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Sample premium rate for funding Should be called once every minute",
          "type": "object",
          "required": [
            "sample_premium"
          ],
          "properties": {
            "sample_premium": {
              "type": "object",
              "required": [
                "market_id"
              ],
              "properties": {
                "market_id": {
                  "$ref": "#/definitions/MarketId"
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Apply funding to market Should be called at the top of every hour",
          "type": "object",
          "required": [
            "apply_funding"
          ],
          "properties": {
            "apply_funding": {
              "type": "object",
              "required": [
                "market_id"
              ],
              "properties": {
                "market_id": {
                  "$ref": "#/definitions/MarketId"
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Crank mark price for all markets Should be called every 500ms",
          "type": "string",
          "enum": [
            "crank_all_mark_prices"
          ]
        },
        {
          "description": "Sample premium rate for all markets Should be called once every minute",
          "type": "string",
          "enum": [
            "sample_all_premiums"
          ]
        },
        {
          "description": "Apply funding to all markets Should be called at the top of every hour",
          "type": "string",
          "enum": [
            "apply_all_funding"
          ]
        },
        {
          "description": "Liquidate an account",
          "type": "object",
          "required": [
            "liquidate_account"
          ],
          "properties": {
            "liquidate_account": {
              "type": "object",
              "required": [
                "subaccount_id",
                "user"
              ],
              "properties": {
                "subaccount_id": {
                  "description": "The subaccount to liquidate",
                  "allOf": [
                    {
                      "$ref": "#/definitions/SubAccountId"
                    }
                  ]
                },
                "user": {
                  "description": "The user address to liquidate",
                  "allOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Liquidate a single isolated position",
          "type": "object",
          "required": [
            "liquidate_position"
          ],
          "properties": {
            "liquidate_position": {
              "type": "object",
              "required": [
                "market_id",
                "subaccount_id",
                "user"
              ],
              "properties": {
                "market_id": {
                  "description": "The market to liquidate",
                  "allOf": [
                    {
                      "$ref": "#/definitions/MarketId"
                    }
                  ]
                },
                "subaccount_id": {
                  "description": "The subaccount to liquidate",
                  "allOf": [
                    {
                      "$ref": "#/definitions/SubAccountId"
                    }
                  ]
                },
                "user": {
                  "description": "The user address to liquidate",
                  "allOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Auto-Deleverage a position against specified counterparties\n\nCalled by an offchain process when: 1. A liquidation failed and escalated to \"ADL required\" error 2. A flash crash makes an account directly have negative equity\n\nThe counterparties list should be sorted by the offchain process using: (mark_price / entry_price) * (notional_position / account_value)",
          "type": "object",
          "required": [
            "adl_position"
          ],
          "properties": {
            "adl_position": {
              "type": "object",
              "required": [
                "counterparties",
                "market_id",
                "subaccount_id",
                "user"
              ],
              "properties": {
                "counterparties": {
                  "description": "List of (address, subaccount) pairs to ADL against, in priority order These should be opposite-side positions with positive PnL",
                  "type": "array",
                  "items": {
                    "type": "array",
                    "items": [
                      {
                        "$ref": "#/definitions/EthereumAddress"
                      },
                      {
                        "$ref": "#/definitions/SubAccountId"
                      }
                    ],
                    "maxItems": 2,
                    "minItems": 2
                  }
                },
                "market_id": {
                  "description": "The market in which to ADL",
                  "allOf": [
                    {
                      "$ref": "#/definitions/MarketId"
                    }
                  ]
                },
                "subaccount_id": {
                  "description": "The subaccount to ADL",
                  "allOf": [
                    {
                      "$ref": "#/definitions/SubAccountId"
                    }
                  ]
                },
                "user": {
                  "description": "The user address whose position needs to be ADL'd",
                  "allOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Auto-deleverage all cross-margin positions with proportional deficit distribution\n\nThis is called by an offchain process when a cross-margin account has negative equity and cannot be handled by backstop liquidation. The deficit is distributed proportionally across all positions with negative uPnL.\n\nCounterparties must have zero prices that \"align\" with the bankruptcy prices, meaning ADL won't reduce their health.",
          "type": "object",
          "required": [
            "adl_cross_account"
          ],
          "properties": {
            "adl_cross_account": {
              "type": "object",
              "required": [
                "counterparties_by_market",
                "subaccount_id",
                "user"
              ],
              "properties": {
                "counterparties_by_market": {
                  "description": "Map of market_id to list of (address, subaccount) counterparty pairs Counterparties should be sorted by: (mark_price / entry_price) * (notional / account_value)",
                  "type": "array",
                  "items": {
                    "type": "array",
                    "items": [
                      {
                        "$ref": "#/definitions/MarketId"
                      },
                      {
                        "type": "array",
                        "items": {
                          "type": "array",
                          "items": [
                            {
                              "$ref": "#/definitions/EthereumAddress"
                            },
                            {
                              "$ref": "#/definitions/SubAccountId"
                            }
                          ],
                          "maxItems": 2,
                          "minItems": 2
                        }
                      }
                    ],
                    "maxItems": 2,
                    "minItems": 2
                  }
                },
                "subaccount_id": {
                  "description": "The subaccount to ADL",
                  "allOf": [
                    {
                      "$ref": "#/definitions/SubAccountId"
                    }
                  ]
                },
                "user": {
                  "description": "The user address whose account needs to be ADL'd",
                  "allOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Deposit margin into the BLP and receive shares",
          "type": "object",
          "required": [
            "deposit_to_b_l_p"
          ],
          "properties": {
            "deposit_to_b_l_p": {
              "type": "object",
              "required": [
                "quote_lots",
                "source"
              ],
              "properties": {
                "quote_lots": {
                  "description": "Amount of margin to deposit (quote lots)",
                  "type": "integer",
                  "format": "uint64",
                  "minimum": 0.0
                },
                "source": {
                  "description": "Source of funds (spot or margin)",
                  "allOf": [
                    {
                      "$ref": "#/definitions/VaultDepositSource"
                    }
                  ]
                },
                "subaccount_id": {
                  "description": "The subaccount to deposit from (defaults to 0)",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/SubAccountId"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Withdraw from the BLP by burning shares",
          "type": "object",
          "required": [
            "withdraw_from_b_l_p"
          ],
          "properties": {
            "withdraw_from_b_l_p": {
              "type": "object",
              "required": [
                "destination",
                "shares"
              ],
              "properties": {
                "destination": {
                  "description": "Destination of funds (spot or margin)",
                  "allOf": [
                    {
                      "$ref": "#/definitions/VaultWithdrawDestination"
                    }
                  ]
                },
                "shares": {
                  "description": "Amount of shares to withdraw",
                  "type": "integer",
                  "format": "uint128",
                  "minimum": 0.0
                },
                "subaccount_id": {
                  "description": "The subaccount to withdraw to (defaults to 0)",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/SubAccountId"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Add an BLP manager (admin only)",
          "type": "object",
          "required": [
            "add_b_l_p_manager"
          ],
          "properties": {
            "add_b_l_p_manager": {
              "type": "object",
              "required": [
                "manager"
              ],
              "properties": {
                "manager": {
                  "description": "The address to add as an BLP manager",
                  "allOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Remove an BLP manager (admin only)",
          "type": "object",
          "required": [
            "remove_b_l_p_manager"
          ],
          "properties": {
            "remove_b_l_p_manager": {
              "type": "object",
              "required": [
                "manager"
              ],
              "properties": {
                "manager": {
                  "description": "The address to remove as an BLP manager",
                  "allOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Create a new vault with a required initial deposit",
          "type": "object",
          "required": [
            "create_vault"
          ],
          "properties": {
            "create_vault": {
              "type": "object",
              "required": [
                "initial_deposit"
              ],
              "properties": {
                "initial_deposit": {
                  "description": "Initial deposit amount (quote atoms)",
                  "type": "integer",
                  "format": "uint64",
                  "minimum": 0.0
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Deposit margin into a vault and receive shares",
          "type": "object",
          "required": [
            "deposit_to_vault"
          ],
          "properties": {
            "deposit_to_vault": {
              "type": "object",
              "required": [
                "amount",
                "vault_id"
              ],
              "properties": {
                "amount": {
                  "description": "Amount of margin to deposit (quote atoms)",
                  "type": "integer",
                  "format": "uint64",
                  "minimum": 0.0
                },
                "source": {
                  "description": "Source of funds (spot or margin). Defaults to Spot if not specified.",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/VaultDepositSource"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "subaccount_id": {
                  "description": "The subaccount to deposit from (defaults to 0)",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/SubAccountId"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "vault_id": {
                  "description": "The vault ID to deposit into",
                  "type": "integer",
                  "format": "uint64",
                  "minimum": 0.0
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Withdraw from a vault by burning shares",
          "type": "object",
          "required": [
            "withdraw_from_vault"
          ],
          "properties": {
            "withdraw_from_vault": {
              "type": "object",
              "required": [
                "shares",
                "vault_id"
              ],
              "properties": {
                "destination": {
                  "description": "Destination for withdrawn funds (spot or margin). Defaults to Spot if not specified.",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/VaultWithdrawDestination"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "shares": {
                  "description": "Amount of shares to burn",
                  "type": "integer",
                  "format": "uint128",
                  "minimum": 0.0
                },
                "subaccount_id": {
                  "description": "The subaccount to withdraw to (defaults to 0)",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/SubAccountId"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "vault_id": {
                  "description": "The vault ID to withdraw from",
                  "type": "integer",
                  "format": "uint64",
                  "minimum": 0.0
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Add a vault manager (vault owner only)",
          "type": "object",
          "required": [
            "add_vault_manager"
          ],
          "properties": {
            "add_vault_manager": {
              "type": "object",
              "required": [
                "manager",
                "vault_id"
              ],
              "properties": {
                "manager": {
                  "description": "The address to add as a manager",
                  "allOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    }
                  ]
                },
                "vault_id": {
                  "description": "The vault ID",
                  "type": "integer",
                  "format": "uint64",
                  "minimum": 0.0
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Remove a vault manager (vault owner only)",
          "type": "object",
          "required": [
            "remove_vault_manager"
          ],
          "properties": {
            "remove_vault_manager": {
              "type": "object",
              "required": [
                "manager",
                "vault_id"
              ],
              "properties": {
                "manager": {
                  "description": "The address to remove as a manager",
                  "allOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    }
                  ]
                },
                "vault_id": {
                  "description": "The vault ID",
                  "type": "integer",
                  "format": "uint64",
                  "minimum": 0.0
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Propose ownership transfer for a vault (current owner only). The new owner must call AcceptVaultOwnershipTransfer to complete.",
          "type": "object",
          "required": [
            "propose_vault_ownership_transfer"
          ],
          "properties": {
            "propose_vault_ownership_transfer": {
              "type": "object",
              "required": [
                "new_owner",
                "vault_id"
              ],
              "properties": {
                "new_owner": {
                  "description": "The proposed new owner",
                  "allOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    }
                  ]
                },
                "vault_id": {
                  "description": "The vault ID",
                  "type": "integer",
                  "format": "uint64",
                  "minimum": 0.0
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Accept a pending vault ownership transfer (proposed new owner only).",
          "type": "object",
          "required": [
            "accept_vault_ownership_transfer"
          ],
          "properties": {
            "accept_vault_ownership_transfer": {
              "type": "object",
              "required": [
                "vault_id"
              ],
              "properties": {
                "vault_id": {
                  "description": "The vault ID",
                  "type": "integer",
                  "format": "uint64",
                  "minimum": 0.0
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Freeze a vault (admin only). Blocks deposits, withdrawals, and trading.",
          "type": "object",
          "required": [
            "freeze_vault"
          ],
          "properties": {
            "freeze_vault": {
              "type": "object",
              "required": [
                "vault_id"
              ],
              "properties": {
                "vault_id": {
                  "description": "The vault ID to freeze",
                  "type": "integer",
                  "format": "uint64",
                  "minimum": 0.0
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Unfreeze a vault (admin only)",
          "type": "object",
          "required": [
            "unfreeze_vault"
          ],
          "properties": {
            "unfreeze_vault": {
              "type": "object",
              "required": [
                "vault_id"
              ],
              "properties": {
                "vault_id": {
                  "description": "The vault ID to unfreeze",
                  "type": "integer",
                  "format": "uint64",
                  "minimum": 0.0
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Set BLP operational status (admin only)",
          "type": "object",
          "required": [
            "set_b_l_p_status"
          ],
          "properties": {
            "set_b_l_p_status": {
              "type": "object",
              "required": [
                "status"
              ],
              "properties": {
                "status": {
                  "description": "The new BLP status",
                  "allOf": [
                    {
                      "$ref": "#/definitions/BLPStatus"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Update the protocol fee recipient address (admin only) The fee recipient receives protocol fee shares from BLP profits",
          "type": "object",
          "required": [
            "update_fee_recipient"
          ],
          "properties": {
            "update_fee_recipient": {
              "type": "object",
              "required": [
                "fee_recipient"
              ],
              "properties": {
                "fee_recipient": {
                  "description": "New fee recipient address",
                  "allOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Update the BLP protocol fee rate (admin only) Fee is in 100ths of basis points (10000 = 1%)",
          "type": "object",
          "required": [
            "update_b_l_p_protocol_fee"
          ],
          "properties": {
            "update_b_l_p_protocol_fee": {
              "type": "object",
              "required": [
                "protocol_fee_100th_bps"
              ],
              "properties": {
                "protocol_fee_100th_bps": {
                  "description": "New protocol fee rate (max 50000 = 5%)",
                  "type": "integer",
                  "format": "uint16",
                  "minimum": 0.0
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Set fee override for an address (admin only)",
          "type": "object",
          "required": [
            "set_fee_override"
          ],
          "properties": {
            "set_fee_override": {
              "type": "object",
              "required": [
                "maker_fee_100th_bps",
                "taker_fee_100th_bps",
                "user"
              ],
              "properties": {
                "maker_fee_100th_bps": {
                  "$ref": "#/definitions/SignedBPS100thFee"
                },
                "taker_fee_100th_bps": {
                  "$ref": "#/definitions/SignedBPS100thFee"
                },
                "user": {
                  "$ref": "#/definitions/EthereumAddress"
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Update backstop risk configuration (admin only) Controls when the BLP can absorb liquidated positions",
          "type": "object",
          "required": [
            "update_backstop_risk_config"
          ],
          "properties": {
            "update_backstop_risk_config": {
              "type": "object",
              "required": [
                "config"
              ],
              "properties": {
                "config": {
                  "$ref": "#/definitions/BackstopRiskConfig"
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Remove fee override for an address (admin only)",
          "type": "object",
          "required": [
            "remove_fee_override"
          ],
          "properties": {
            "remove_fee_override": {
              "type": "object",
              "required": [
                "user"
              ],
              "properties": {
                "user": {
                  "$ref": "#/definitions/EthereumAddress"
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Withdraw accumulated trading fees to the fee_recipient (admin only)",
          "type": "object",
          "required": [
            "withdraw_accumulated_fees"
          ],
          "properties": {
            "withdraw_accumulated_fees": {
              "type": "object",
              "required": [
                "amount"
              ],
              "properties": {
                "amount": {
                  "description": "Amount to withdraw in quote atoms",
                  "type": "integer",
                  "format": "uint64",
                  "minimum": 0.0
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Update the vault withdrawal timelock duration (admin only) Controls how long users must wait after their last deposit before withdrawing",
          "type": "object",
          "required": [
            "update_vault_withdrawal_timelock"
          ],
          "properties": {
            "update_vault_withdrawal_timelock": {
              "type": "object",
              "required": [
                "timelock_ms"
              ],
              "properties": {
                "timelock_ms": {
                  "description": "New timelock duration in milliseconds (max 10 days = 864000000)",
                  "type": "integer",
                  "format": "uint64",
                  "minimum": 0.0
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Update the BLP withdrawal timelock duration (admin only) Controls how long users must wait after their last deposit before withdrawing",
          "type": "object",
          "required": [
            "update_blp_withdrawal_timelock"
          ],
          "properties": {
            "update_blp_withdrawal_timelock": {
              "type": "object",
              "required": [
                "timelock_ms"
              ],
              "properties": {
                "timelock_ms": {
                  "description": "New timelock duration in milliseconds (max 10 days = 864000000)",
                  "type": "integer",
                  "format": "uint64",
                  "minimum": 0.0
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Pause a perp market (admin only). Blocks new orders, cranks (mark price, stop triggers), and funding. Users can still cancel their own orders. On unpause, the first crank updates mark price from oracle and liquidations fire naturally.",
          "type": "object",
          "required": [
            "pause_market"
          ],
          "properties": {
            "pause_market": {
              "type": "object",
              "required": [
                "market_id"
              ],
              "properties": {
                "market_id": {
                  "description": "The market to pause",
                  "allOf": [
                    {
                      "$ref": "#/definitions/MarketId"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Unpause a paused perp market (admin only).",
          "type": "object",
          "required": [
            "unpause_market"
          ],
          "properties": {
            "unpause_market": {
              "type": "object",
              "required": [
                "market_id"
              ],
              "properties": {
                "market_id": {
                  "description": "The market to unpause",
                  "allOf": [
                    {
                      "$ref": "#/definitions/MarketId"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Delist a perp market and initiate final settlement (admin only). Blocks all new orders. Existing positions must be settled via SettleDelistedPositions.",
          "type": "object",
          "required": [
            "delist_market"
          ],
          "properties": {
            "delist_market": {
              "type": "object",
              "required": [
                "market_id"
              ],
              "properties": {
                "market_id": {
                  "description": "The market to delist",
                  "allOf": [
                    {
                      "$ref": "#/definitions/MarketId"
                    }
                  ]
                },
                "settlement_price": {
                  "description": "Settlement price. If None, uses current oracle price.",
                  "type": [
                    "integer",
                    "null"
                  ],
                  "format": "uint64",
                  "minimum": 0.0
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Settle a position in a delisted market at the settlement price.\n\nExpected keeper flow: 1. Identify all accounts whose margin would go negative at settlement price (margin_balance + PnL < 0 for cross, allocated + PnL < 0 for isolated) 2. ADL those accounts first via AdlPosition (socializes loss to counterparties) 3. Settle everyone else in batches with this call — includes profitable positions, losing positions with sufficient margin, and any remaining positions\n\nThis call rejects accounts that would go negative (must ADL first). Accounts with large losses but sufficient margin are settled normally.",
          "type": "object",
          "required": [
            "settle_delisted_position"
          ],
          "properties": {
            "settle_delisted_position": {
              "type": "object",
              "required": [
                "market_id",
                "subaccount_id",
                "user"
              ],
              "properties": {
                "market_id": {
                  "description": "The delisted market",
                  "allOf": [
                    {
                      "$ref": "#/definitions/MarketId"
                    }
                  ]
                },
                "subaccount_id": {
                  "description": "The subaccount",
                  "allOf": [
                    {
                      "$ref": "#/definitions/SubAccountId"
                    }
                  ]
                },
                "user": {
                  "description": "The user whose position to settle",
                  "allOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Add an authorized ADL keeper (admin only)\n\nADL keepers are authorized to call AdlPosition and AdlCrossAccount. This gates ADL operations to trusted off-chain processes.",
          "type": "object",
          "required": [
            "add_adl_keeper"
          ],
          "properties": {
            "add_adl_keeper": {
              "type": "object",
              "required": [
                "keeper"
              ],
              "properties": {
                "keeper": {
                  "description": "The address to authorize as an ADL keeper",
                  "allOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Remove an ADL keeper (admin only)",
          "type": "object",
          "required": [
            "remove_adl_keeper"
          ],
          "properties": {
            "remove_adl_keeper": {
              "type": "object",
              "required": [
                "keeper"
              ],
              "properties": {
                "keeper": {
                  "description": "The address to remove from ADL keepers",
                  "allOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        }
      ]
    },
    "CallMessage15": {
      "description": "A message that can be sent to the module.",
      "oneOf": [
        {
          "description": "Register a new oracle feed (admin only)",
          "type": "object",
          "required": [
            "register_oracle_feed"
          ],
          "properties": {
            "register_oracle_feed": {
              "type": "object",
              "required": [
                "exponent",
                "max_confidence_basis_points",
                "max_staleness_ms",
                "oracle_id",
                "symbol"
              ],
              "properties": {
                "exponent": {
                  "description": "Fixed decimal exponent for this feed",
                  "type": "integer",
                  "format": "int16"
                },
                "max_confidence_basis_points": {
                  "description": "Maximum confidence in basis points",
                  "type": "integer",
                  "format": "uint32",
                  "minimum": 0.0
                },
                "max_staleness_ms": {
                  "description": "Maximum allowed age in milliseconds before price is considered stale",
                  "type": "integer",
                  "format": "uint64",
                  "minimum": 0.0
                },
                "oracle_id": {
                  "description": "The oracle identifier (source + feed id)",
                  "allOf": [
                    {
                      "$ref": "#/definitions/OracleId"
                    }
                  ]
                },
                "symbol": {
                  "description": "Human-readable symbol as bytes (e.g., b\"BTC/USD\")",
                  "allOf": [
                    {
                      "$ref": "#/definitions/SafeVec_32_of_uint8"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Submit a price update for a specific oracle source",
          "type": "object",
          "required": [
            "submit_oracle_price_update"
          ],
          "properties": {
            "submit_oracle_price_update": {
              "type": "object",
              "required": [
                "source",
                "update"
              ],
              "properties": {
                "source": {
                  "description": "Oracle source",
                  "allOf": [
                    {
                      "$ref": "#/definitions/OracleSource"
                    }
                  ]
                },
                "update": {
                  "description": "Oracle update payload (source-specific)",
                  "allOf": [
                    {
                      "$ref": "#/definitions/SafeVec_5981_of_uint8"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Add a trusted signer for an oracle source (admin only)",
          "type": "object",
          "required": [
            "add_oracle_signer"
          ],
          "properties": {
            "add_oracle_signer": {
              "type": "object",
              "required": [
                "public_key",
                "source"
              ],
              "properties": {
                "public_key": {
                  "description": "Ed25519 public key to add to trusted signers",
                  "type": "array",
                  "items": {
                    "type": "integer",
                    "format": "uint8",
                    "minimum": 0.0
                  },
                  "maxItems": 32,
                  "minItems": 32
                },
                "source": {
                  "description": "Oracle source",
                  "allOf": [
                    {
                      "$ref": "#/definitions/OracleSource"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Remove a trusted signer for an oracle source (admin only)",
          "type": "object",
          "required": [
            "remove_oracle_signer"
          ],
          "properties": {
            "remove_oracle_signer": {
              "type": "object",
              "required": [
                "public_key",
                "source"
              ],
              "properties": {
                "public_key": {
                  "description": "Ed25519 public key to remove from trusted signers",
                  "type": "array",
                  "items": {
                    "type": "integer",
                    "format": "uint8",
                    "minimum": 0.0
                  },
                  "maxItems": 32,
                  "minItems": 32
                },
                "source": {
                  "description": "Oracle source",
                  "allOf": [
                    {
                      "$ref": "#/definitions/OracleSource"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Update oracle feed parameters (admin only)",
          "type": "object",
          "required": [
            "update_oracle_feed"
          ],
          "properties": {
            "update_oracle_feed": {
              "type": "object",
              "required": [
                "oracle_id"
              ],
              "properties": {
                "max_confidence_basis_points": {
                  "description": "New maximum confidence in basis points (if Some)",
                  "type": [
                    "integer",
                    "null"
                  ],
                  "format": "uint32",
                  "minimum": 0.0
                },
                "max_staleness_ms": {
                  "description": "New maximum staleness in milliseconds (if Some)",
                  "type": [
                    "integer",
                    "null"
                  ],
                  "format": "uint64",
                  "minimum": 0.0
                },
                "oracle_id": {
                  "description": "The oracle identifier (source + feed id)",
                  "allOf": [
                    {
                      "$ref": "#/definitions/OracleId"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        }
      ]
    },
    "CallMessage2": {
      "description": "This enumeration represents the available call messages for interacting with the sov-bank module.",
      "oneOf": [
        {
          "description": "Creates a new token with the specified name and initial balance.",
          "type": "object",
          "required": [
            "create_token"
          ],
          "properties": {
            "create_token": {
              "type": "object",
              "required": [
                "admins",
                "initial_balance",
                "mint_to_address",
                "token_name"
              ],
              "properties": {
                "admins": {
                  "description": "Admins list.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/SafeVec_20_of_EthereumAddress"
                    }
                  ]
                },
                "initial_balance": {
                  "description": "The initial balance of the new token.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/Amount"
                    }
                  ]
                },
                "mint_to_address": {
                  "description": "The address of the account that the new tokens are minted to.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    }
                  ]
                },
                "supply_cap": {
                  "description": "The supply cap of the new token, if any.",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/Amount"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "token_decimals": {
                  "description": "The number of decimal places this token's amounts will have.",
                  "type": [
                    "integer",
                    "null"
                  ],
                  "format": "uint8",
                  "minimum": 0.0
                },
                "token_name": {
                  "description": "The name of the new token.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/SizedSafeString_for_128"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Transfers a specified amount of tokens to the specified address.",
          "type": "object",
          "required": [
            "transfer"
          ],
          "properties": {
            "transfer": {
              "type": "object",
              "required": [
                "coins",
                "to"
              ],
              "properties": {
                "coins": {
                  "description": "The amount of tokens to transfer.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/Coins"
                    }
                  ]
                },
                "to": {
                  "description": "The address to which the tokens will be transferred.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Burns a specified amount of tokens.",
          "type": "object",
          "required": [
            "burn"
          ],
          "properties": {
            "burn": {
              "type": "object",
              "required": [
                "coins"
              ],
              "properties": {
                "coins": {
                  "description": "The amount of tokens to burn.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/Coins"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Mints a specified amount of tokens.",
          "type": "object",
          "required": [
            "mint"
          ],
          "properties": {
            "mint": {
              "type": "object",
              "required": [
                "coins",
                "mint_to_address"
              ],
              "properties": {
                "coins": {
                  "description": "The amount of tokens to mint.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/Coins"
                    }
                  ]
                },
                "mint_to_address": {
                  "description": "Address to mint tokens to",
                  "allOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Freezes a token so that the supply is frozen",
          "type": "object",
          "required": [
            "freeze"
          ],
          "properties": {
            "freeze": {
              "type": "object",
              "required": [
                "token_id"
              ],
              "properties": {
                "token_id": {
                  "description": "Address of the token to be frozen",
                  "allOf": [
                    {
                      "$ref": "#/definitions/TokenId"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Updates the list of admins for a specified token.",
          "type": "object",
          "required": [
            "update_admin"
          ],
          "properties": {
            "update_admin": {
              "type": "object",
              "required": [
                "token_id"
              ],
              "properties": {
                "new_admin": {
                  "description": "The new admin address. If `None`, the current admin entry for the transaction sender will be removed.",
                  "anyOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "token_id": {
                  "description": "The ID of the token whose admin list is being updated.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/TokenId"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Transfers a specified amount of tokens to the specified address.",
          "type": "object",
          "required": [
            "transfer_with_memo"
          ],
          "properties": {
            "transfer_with_memo": {
              "type": "object",
              "required": [
                "coins",
                "memo",
                "to"
              ],
              "properties": {
                "coins": {
                  "description": "The amount of tokens to transfer.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/Coins"
                    }
                  ]
                },
                "memo": {
                  "description": "The message included with the transfer",
                  "allOf": [
                    {
                      "$ref": "#/definitions/SizedSafeString_for_512"
                    }
                  ]
                },
                "to": {
                  "description": "The address to which the tokens will be transferred.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        }
      ]
    },
    "CallMessage3": {
      "description": "This enumeration represents the available call messages for interacting with the `sov-sequencer-registry` module.",
      "oneOf": [
        {
          "description": "Add a new sequencer to the sequencer registry.",
          "type": "object",
          "required": [
            "register"
          ],
          "properties": {
            "register": {
              "type": "object",
              "required": [
                "amount",
                "da_address"
              ],
              "properties": {
                "amount": {
                  "description": "The initial balance of the sequencer.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/Amount"
                    }
                  ]
                },
                "da_address": {
                  "description": "The Da address of the sequencer you're registering.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/CelestiaAddress"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Increases the balance of the sequencer, transferring the funds from the sequencer account to the rollup.",
          "type": "object",
          "required": [
            "deposit"
          ],
          "properties": {
            "deposit": {
              "type": "object",
              "required": [
                "amount",
                "da_address"
              ],
              "properties": {
                "amount": {
                  "description": "The amount to increase.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/Amount"
                    }
                  ]
                },
                "da_address": {
                  "description": "The DA address of the sequencer.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/CelestiaAddress"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Initiate a withdrawal of a sequencer's balance.",
          "type": "object",
          "required": [
            "initiate_withdrawal"
          ],
          "properties": {
            "initiate_withdrawal": {
              "type": "object",
              "required": [
                "da_address"
              ],
              "properties": {
                "da_address": {
                  "description": "The DA address of the sequencer you're removing.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/CelestiaAddress"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Withdraw a sequencer's balance after waiting for the withdrawal period.",
          "type": "object",
          "required": [
            "withdraw"
          ],
          "properties": {
            "withdraw": {
              "type": "object",
              "required": [
                "da_address"
              ],
              "properties": {
                "da_address": {
                  "description": "The DA address of the sequencer you're removing.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/CelestiaAddress"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        }
      ]
    },
    "CallMessage4": {
      "description": "This enumeration represents the available call messages for interacting with the sov-operator-incentives module.",
      "oneOf": [
        {
          "type": "object",
          "required": [
            "update_reward_address"
          ],
          "properties": {
            "update_reward_address": {
              "type": "object",
              "required": [
                "new_reward_address"
              ],
              "properties": {
                "new_reward_address": {
                  "description": "The new address that will receive rewards for operating the rollup. Note: We do not verify possession of the corresponding private key, so it's possible to set an address for which the `sender` does not control the private key.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        }
      ]
    },
    "CallMessage5": {
      "description": "This enumeration represents the available call messages for interacting with the `AttesterIncentives` module.",
      "oneOf": [
        {
          "description": "Register an attester, the parameter is the bond amount",
          "type": "object",
          "required": [
            "register_attester"
          ],
          "properties": {
            "register_attester": {
              "$ref": "#/definitions/Amount"
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Start the first phase of the two-phase exit process",
          "type": "string",
          "enum": [
            "begin_exit_attester"
          ]
        },
        {
          "description": "Finish the two phase exit",
          "type": "string",
          "enum": [
            "exit_attester"
          ]
        },
        {
          "description": "Register a challenger, the parameter is the bond amount",
          "type": "object",
          "required": [
            "register_challenger"
          ],
          "properties": {
            "register_challenger": {
              "$ref": "#/definitions/Amount"
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Exit a challenger",
          "type": "string",
          "enum": [
            "exit_challenger"
          ]
        },
        {
          "description": "Increases the balance of the attester.",
          "type": "object",
          "required": [
            "deposit_attester"
          ],
          "properties": {
            "deposit_attester": {
              "$ref": "#/definitions/Amount"
            }
          },
          "additionalProperties": false
        }
      ]
    },
    "CallMessage6": {
      "description": "This enumeration represents the available call messages for interacting with the `ExampleModule` module.",
      "oneOf": [
        {
          "description": "Add a new prover as a bonded prover.",
          "type": "object",
          "required": [
            "register"
          ],
          "properties": {
            "register": {
              "$ref": "#/definitions/Amount"
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Increases the balance of the prover, transferring the funds from the prover account to the rollup.",
          "type": "object",
          "required": [
            "deposit"
          ],
          "properties": {
            "deposit": {
              "$ref": "#/definitions/Amount"
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Unbonds the prover.",
          "type": "string",
          "enum": [
            "exit"
          ]
        }
      ]
    },
    "CallMessage7": {
      "description": "A message for the chain-state module",
      "oneOf": [
        {
          "description": "Terminates setup mode as of the next rollup block.",
          "type": "string",
          "enum": [
            "TerminateSetupMode"
          ]
        },
        {
          "description": "Sets the current time.",
          "type": "object",
          "required": [
            "SetOracleTime"
          ],
          "properties": {
            "SetOracleTime": {
              "type": "object",
              "required": [
                "milliseconds_since_epoch"
              ],
              "properties": {
                "milliseconds_since_epoch": {
                  "description": "The new time in milliseconds since the epoch",
                  "type": "integer",
                  "format": "int64"
                }
              }
            }
          },
          "additionalProperties": false
        }
      ]
    },
    "CallMessage8": {
      "description": "Call messages for interacting with the `Paymaster` module.\n\n## Note: These call messages are highly unusual in that they have different effects based on the address of the sequencer who places them on chain. See the docs on individual variants for more information.",
      "oneOf": [
        {
          "description": "Register a new payer with the given policy. If the sequencer who places this message on chain is present in the list of `authorized_sequencers` to use the payer, the payer address for that sequencer is set to the address of the newly registered payer.",
          "type": "object",
          "required": [
            "register_paymaster"
          ],
          "properties": {
            "register_paymaster": {
              "type": "object",
              "required": [
                "policy"
              ],
              "properties": {
                "policy": {
                  "$ref": "#/definitions/PaymasterPolicyInitializer"
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Set the payer address for the sequencer to the given address. This call message is highly unusual in that it executes regardless of the sender address on the rollup. Sequencers who do not wish to update their payer address should not sequence transactions containing this callmessage.",
          "type": "object",
          "required": [
            "set_payer_for_sequencer"
          ],
          "properties": {
            "set_payer_for_sequencer": {
              "type": "object",
              "required": [
                "payer"
              ],
              "properties": {
                "payer": {
                  "$ref": "#/definitions/EthereumAddress"
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Update the policy for a given payer. If the sequencer who places this message on chain is present in the list of `authorized_sequencers` to use the payer after the update, the payer address for that sequencer is set to the address of the newly registered paymaster.",
          "type": "object",
          "required": [
            "update_policy"
          ],
          "properties": {
            "update_policy": {
              "type": "object",
              "required": [
                "payer",
                "update"
              ],
              "properties": {
                "payer": {
                  "$ref": "#/definitions/EthereumAddress"
                },
                "update": {
                  "$ref": "#/definitions/policy_update"
                }
              }
            }
          },
          "additionalProperties": false
        }
      ]
    },
    "CallMessage9": {
      "description": "Call messages for the revenue share module",
      "oneOf": [
        {
          "description": "Activate revenue sharing (admin only)",
          "type": "string",
          "enum": [
            "activate_revenue_share"
          ]
        },
        {
          "description": "Deactivate revenue sharing (admin only)",
          "type": "string",
          "enum": [
            "deactivate_revenue_share"
          ]
        },
        {
          "description": "Lower the revenue share percentage (admin only)",
          "type": "object",
          "required": [
            "lower_revenue_percentage"
          ],
          "properties": {
            "lower_revenue_percentage": {
              "type": "object",
              "required": [
                "percentage_in_basis_points"
              ],
              "properties": {
                "percentage_in_basis_points": {
                  "description": "New percentage in basis points (e.g., 1000 = 10%)",
                  "type": "integer",
                  "format": "uint16",
                  "minimum": 0.0
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Update the sovereign admin address (current admin only)",
          "type": "object",
          "required": [
            "update_sovereign_admin"
          ],
          "properties": {
            "update_sovereign_admin": {
              "type": "object",
              "required": [
                "new_admin"
              ],
              "properties": {
                "new_admin": {
                  "description": "The new admin address",
                  "allOf": [
                    {
                      "$ref": "#/definitions/EthereumAddress"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Withdraw accumulated rewards to the admin address (admin only)",
          "type": "object",
          "required": [
            "withdraw_rewards"
          ],
          "properties": {
            "withdraw_rewards": {
              "type": "object",
              "required": [
                "token_id"
              ],
              "properties": {
                "token_id": {
                  "description": "The token ID to withdraw",
                  "allOf": [
                    {
                      "$ref": "#/definitions/TokenId"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        }
      ]
    },
    "CelestiaAddress": {
      "description": "A Celestia address",
      "type": "string",
      "pattern": "^celestia[a-z0-9]+$"
    },
    "ChainSpecUpdate": {
      "description": "An update to the chain spec.",
      "type": "object",
      "properties": {
        "new_block_gas_limit": {
          "description": "The new block gas limit. Must be greater than 5M to avoid censorship. None means \"no change\" Check that the limit is greater than 5M to avoid accidental complete shutdown.",
          "type": [
            "integer",
            "null"
          ],
          "format": "uint64",
          "minimum": 0.0
        },
        "new_limit_contract_code_size": {
          "description": "The new limit for contract code size. None means \"no change\"",
          "type": [
            "integer",
            "null"
          ],
          "format": "uint",
          "minimum": 0.0
        },
        "new_tx_gas_limit": {
          "description": "The new tx gas limit. Must be less than or equal to the effective block gas limit after applying the update. None means \"no change\"",
          "type": [
            "integer",
            "null"
          ],
          "format": "uint64",
          "minimum": 0.0
        }
      }
    },
    "ClientOrderId": {
      "description": "A client order identifier",
      "type": "integer",
      "format": "uint64",
      "minimum": 0.0
    },
    "Coins": {
      "description": "Structure that stores information specifying a given `amount` (type [`Amount`]) of coins stored at a `token_id` (type [`crate::TokenId`]).",
      "type": "object",
      "required": [
        "amount",
        "token_id"
      ],
      "properties": {
        "amount": {
          "description": "The number of tokens",
          "allOf": [
            {
              "$ref": "#/definitions/Amount"
            }
          ]
        },
        "token_id": {
          "description": "The ID of the token",
          "allOf": [
            {
              "$ref": "#/definitions/TokenId"
            }
          ]
        }
      }
    },
    "CredentialId": {
      "description": "32 bytes in hexadecimal format, with `0x` prefix.",
      "type": "string",
      "pattern": "^0x[a-fA-F0-9]{64}$"
    },
    "DomainDefaultGas": {
      "description": "Domain Default Gas used in `CallMessage::SetRelayerConfig`.",
      "type": "object",
      "required": [
        "default_gas",
        "domain"
      ],
      "properties": {
        "default_gas": {
          "description": "Default gas.",
          "allOf": [
            {
              "$ref": "#/definitions/Amount"
            }
          ]
        },
        "domain": {
          "description": "Domain.",
          "type": "integer",
          "format": "uint32",
          "minimum": 0.0
        }
      }
    },
    "DomainOracleData": {
      "description": "Domain Oracle Data used in `CallMessage::SetRelayerConfig`.",
      "type": "object",
      "required": [
        "data_value",
        "domain"
      ],
      "properties": {
        "data_value": {
          "description": "Oracle data value.",
          "allOf": [
            {
              "$ref": "#/definitions/ExchangeRateAndGasPrice"
            }
          ]
        },
        "domain": {
          "description": "Domain.",
          "type": "integer",
          "format": "uint32",
          "minimum": 0.0
        }
      }
    },
    "EthereumAddress": {
      "description": "20 bytes in hexadecimal format, with `0x` prefix.",
      "type": "string",
      "pattern": "^0x[a-fA-F0-9]{40}$"
    },
    "ExchangeRateAndGasPrice": {
      "description": "Oracle data used to calculate required gas.",
      "type": "object",
      "required": [
        "gas_price",
        "token_exchange_rate"
      ],
      "properties": {
        "gas_price": {
          "description": "Gas price.",
          "allOf": [
            {
              "$ref": "#/definitions/Amount"
            }
          ]
        },
        "token_exchange_rate": {
          "description": "Token exchange rate, calculated as local gas token price / remote gas token price.\n\nRelayer is responsible to multiply token_rate_exchange by `TOKEN_EXCHANGE_RATE_SCALE`.",
          "type": "integer",
          "format": "uint128",
          "minimum": 0.0
        }
      }
    },
    "GasPrice(2)": {
      "description": "GasPrice is an array of size 2",
      "type": "array",
      "items": {
        "type": "number"
      },
      "maxItems": 2,
      "minItems": 2
    },
    "GasUnit(2)": {
      "description": "GasUnit is an array of size 2",
      "type": "array",
      "items": {
        "type": "number"
      },
      "maxItems": 2,
      "minItems": 2
    },
    "HexHash": {
      "description": "32 bytes in hexadecimal format, with `0x` prefix.",
      "type": "string",
      "pattern": "^0x[a-fA-F0-9]{64}$"
    },
    "Ism": {
      "description": "Represents the available ISMs",
      "oneOf": [
        {
          "description": "Performs no validation. Will accept any message - useful for testing",
          "type": "string",
          "enum": [
            "AlwaysTrust"
          ]
        },
        {
          "description": "Accepts all messages from a trusted relayer",
          "type": "object",
          "required": [
            "TrustedRelayer"
          ],
          "properties": {
            "TrustedRelayer": {
              "type": "object",
              "required": [
                "relayer"
              ],
              "properties": {
                "relayer": {
                  "description": "The address of the trusted relayer, in [`HyperlaneAddress`] format",
                  "allOf": [
                    {
                      "$ref": "#/definitions/HexHash"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Accepts messages if signed by `threshold` or more of the provided `validators`",
          "type": "object",
          "required": [
            "MessageIdMultisig"
          ],
          "properties": {
            "MessageIdMultisig": {
              "type": "object",
              "required": [
                "threshold",
                "validators"
              ],
              "properties": {
                "threshold": {
                  "description": "The number of signatures required to accept a message",
                  "type": "integer",
                  "format": "uint32",
                  "minimum": 0.0
                },
                "validators": {
                  "description": "The addresses of the validators",
                  "allOf": [
                    {
                      "$ref": "#/definitions/SafeVec_128_of_HexHash"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        }
      ]
    },
    "MarginMode": {
      "description": "Margin mode for a position",
      "oneOf": [
        {
          "description": "Position shares margin with other cross-margin positions",
          "type": "string",
          "enum": [
            "Cross"
          ]
        },
        {
          "description": "Position has dedicated allocated margin, isolated from other positions",
          "type": "string",
          "enum": [
            "Isolated"
          ]
        }
      ]
    },
    "MarketId": {
      "type": "integer",
      "format": "uint32",
      "minimum": 0.0
    },
    "NotInstantiable": {
      "type": "null"
    },
    "OracleFeedId": {
      "description": "Fixed-length feed identifier (32 bytes).",
      "type": "array",
      "items": {
        "type": "integer",
        "format": "uint8",
        "minimum": 0.0
      },
      "maxItems": 32,
      "minItems": 32
    },
    "OracleId": {
      "description": "Oracle identifier (source + feed id).",
      "type": "object",
      "required": [
        "feed_id",
        "source"
      ],
      "properties": {
        "feed_id": {
          "description": "Feed identifier within the source.",
          "allOf": [
            {
              "$ref": "#/definitions/OracleFeedId"
            }
          ]
        },
        "source": {
          "description": "Oracle source.",
          "allOf": [
            {
              "$ref": "#/definitions/OracleSource"
            }
          ]
        }
      }
    },
    "OracleSource": {
      "description": "Supported oracle sources (Lazer-only for now).",
      "oneOf": [
        {
          "description": "Pyth Lazer (low-latency, signed updates)",
          "type": "string",
          "enum": [
            "pyth_lazer"
          ]
        }
      ]
    },
    "OrderType": {
      "type": "string",
      "enum": [
        "Market",
        "Limit",
        "StopLimit",
        "StopMarket",
        "OraclePeg",
        "DiscretionaryPeg",
        "StopOraclePeg",
        "StopDiscretionaryPeg",
        "TakeProfitLimit",
        "TakeProfitMarket"
      ]
    },
    "PayeePolicy": {
      "description": "The policy that the paymaster applies to a particular rollup user.",
      "oneOf": [
        {
          "description": "The paymaster pays the fees for a particular sender when the policy allows it... - If the policy specifies a `max_fee`, the transaction's max fee must be less than or equal to that value - if the policy specifies a `max_gas_price`, the current gas price must be less than or equal to that value - If the policy specifies a gas limit, the transaction must also specify a limit *and* that limit must be less than or equal to `gas_limit`.\n\n- If the policy specifies a transaction_limit, the policy can only cover that many transactions, after which it will expire and be replaced with a Deny policy\n\nIn all other cases, the sender pays their own fees.",
          "type": "object",
          "required": [
            "allow"
          ],
          "properties": {
            "allow": {
              "type": "object",
              "properties": {
                "gas_limit": {
                  "anyOf": [
                    {
                      "$ref": "#/definitions/GasUnit(2)"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "max_fee": {
                  "anyOf": [
                    {
                      "$ref": "#/definitions/Amount"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "max_gas_price": {
                  "anyOf": [
                    {
                      "$ref": "#/definitions/GasPrice(2)"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "transaction_limit": {
                  "type": [
                    "integer",
                    "null"
                  ],
                  "format": "uint64",
                  "minimum": 1.0
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "The payer does not pay fees for any transaction using this policy.",
          "type": "string",
          "enum": [
            "deny"
          ]
        }
      ]
    },
    "PaymasterPolicyInitializer": {
      "description": "An initial policy for a paymaster. This includes... - A set of sequencers that can use the paymaster - A set of users authorized to update this policy - A default policy for accepting/rejecting gas requests - Specific policies for accepting/rejecting gas requests from particular users",
      "type": "object",
      "required": [
        "authorized_sequencers",
        "authorized_updaters",
        "default_payee_policy",
        "payees"
      ],
      "properties": {
        "authorized_sequencers": {
          "description": "Sequencers who are authorized to use this payer.",
          "allOf": [
            {
              "$ref": "#/definitions/AuthorizedSequencers"
            }
          ]
        },
        "authorized_updaters": {
          "description": "Users who are authorized to update this policy.",
          "allOf": [
            {
              "$ref": "#/definitions/SafeVec_20_of_EthereumAddress"
            }
          ]
        },
        "default_payee_policy": {
          "description": "Default payee policy for users that are not in the balances map.",
          "allOf": [
            {
              "$ref": "#/definitions/PayeePolicy"
            }
          ]
        },
        "payees": {
          "description": "A mapping from user address to the policy for that user.",
          "allOf": [
            {
              "$ref": "#/definitions/SafeVec_20_of_Tuple_of_EthereumAddress_and_PayeePolicy"
            }
          ]
        }
      }
    },
    "PlaceOrderParams": {
      "description": "Parameters for placing an order",
      "type": "object",
      "required": [
        "client_order_id",
        "market_id",
        "order_fill_method",
        "order_type",
        "quantity",
        "side"
      ],
      "properties": {
        "client_order_id": {
          "$ref": "#/definitions/ClientOrderId"
        },
        "market_id": {
          "$ref": "#/definitions/MarketId"
        },
        "max_price": {
          "type": [
            "integer",
            "null"
          ],
          "format": "uint64",
          "minimum": 0.0
        },
        "offset": {
          "type": [
            "integer",
            "null"
          ],
          "format": "uint8",
          "minimum": 0.0
        },
        "order_fill_method": {
          "$ref": "#/definitions/TimeInForce"
        },
        "order_type": {
          "$ref": "#/definitions/OrderType"
        },
        "parent": {
          "anyOf": [
            {
              "$ref": "#/definitions/ClientOrderId"
            },
            {
              "type": "null"
            }
          ]
        },
        "price": {
          "type": [
            "integer",
            "null"
          ],
          "format": "uint64",
          "minimum": 0.0
        },
        "quantity": {
          "type": "integer",
          "format": "uint64",
          "minimum": 0.0
        },
        "sibling": {
          "anyOf": [
            {
              "$ref": "#/definitions/ClientOrderId"
            },
            {
              "type": "null"
            }
          ]
        },
        "side": {
          "$ref": "#/definitions/Side"
        },
        "trigger_price": {
          "type": [
            "integer",
            "null"
          ],
          "format": "uint64",
          "minimum": 0.0
        }
      }
    },
    "RlpEvmTransaction": {
      "description": "RLP encoded evm transaction.",
      "type": "object",
      "required": [
        "rlp"
      ],
      "properties": {
        "rlp": {
          "description": "Rlp data.",
          "type": "array",
          "items": {
            "type": "integer",
            "format": "uint8",
            "minimum": 0.0
          }
        }
      }
    },
    "SafeVec_100_of_DomainDefaultGas": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/DomainDefaultGas"
      },
      "maxItems": 100,
      "minItems": 0
    },
    "SafeVec_100_of_DomainOracleData": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/DomainOracleData"
      },
      "maxItems": 100,
      "minItems": 0
    },
    "SafeVec_128_of_HexHash": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/HexHash"
      },
      "maxItems": 128,
      "minItems": 0
    },
    "SafeVec_20_of_CelestiaAddress": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/CelestiaAddress"
      },
      "maxItems": 20,
      "minItems": 0
    },
    "SafeVec_20_of_EthereumAddress": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/EthereumAddress"
      },
      "maxItems": 20,
      "minItems": 0
    },
    "SafeVec_20_of_Tuple_of_EthereumAddress_and_PayeePolicy": {
      "type": "array",
      "items": {
        "type": "array",
        "items": [
          {
            "$ref": "#/definitions/EthereumAddress"
          },
          {
            "$ref": "#/definitions/PayeePolicy"
          }
        ],
        "maxItems": 2,
        "minItems": 2
      },
      "maxItems": 20,
      "minItems": 0
    },
    "SafeVec_32_of_HexHash": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/HexHash"
      },
      "maxItems": 32,
      "minItems": 0
    },
    "SafeVec_32_of_uint8": {
      "type": "array",
      "items": {
        "type": "integer",
        "format": "uint8",
        "minimum": 0.0
      },
      "maxItems": 32,
      "minItems": 0
    },
    "SafeVec_512_of_PlaceOrderParams": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/PlaceOrderParams"
      },
      "maxItems": 512,
      "minItems": 0
    },
    "SafeVec_5981_of_uint8": {
      "type": "array",
      "items": {
        "type": "integer",
        "format": "uint8",
        "minimum": 0.0
      },
      "maxItems": 5981,
      "minItems": 0
    },
    "SafeVec_64_of_Tuple_of_uint32_and_HexHash": {
      "type": "array",
      "items": {
        "type": "array",
        "items": [
          {
            "type": "integer",
            "format": "uint32",
            "minimum": 0.0
          },
          {
            "$ref": "#/definitions/HexHash"
          }
        ],
        "maxItems": 2,
        "minItems": 2
      },
      "maxItems": 64,
      "minItems": 0
    },
    "SequencerUpdate": {
      "description": "An update to the allowed sequencer set for a gas payer.",
      "oneOf": [
        {
          "description": "Authorizes any sequencer to use this payer.",
          "type": "string",
          "enum": [
            "allow_all"
          ]
        },
        {
          "description": "Sets the list of authorized sequencers to an explicit whitelist if it was previously `AllowAll`. Adds and removes the requested addresses from the sequencer whitelist.",
          "type": "object",
          "required": [
            "update"
          ],
          "properties": {
            "update": {
              "$ref": "#/definitions/SequencerUpdateList"
            }
          },
          "additionalProperties": false
        }
      ]
    },
    "SequencerUpdateList": {
      "description": "A list of updates to the `allowed_sequencers` list for a particular payer.",
      "type": "object",
      "properties": {
        "to_add": {
          "anyOf": [
            {
              "$ref": "#/definitions/SafeVec_20_of_CelestiaAddress"
            },
            {
              "type": "null"
            }
          ]
        },
        "to_remove": {
          "anyOf": [
            {
              "$ref": "#/definitions/SafeVec_20_of_CelestiaAddress"
            },
            {
              "type": "null"
            }
          ]
        }
      }
    },
    "Side": {
      "type": "string",
      "enum": [
        "Bid",
        "Ask"
      ]
    },
    "SignedBPS100thFee": {
      "description": "A signed fee rate in 100ths of a basis point\n\nStores a `BPS100thFee` (u16) with a sign flag (bool). This ensures type safety without the complexity of generic signed wrappers.\n\nExamples: - Positive funding rate: `SignedBPS100thFee::new(BPS100thFee::new(100), true)` = +0.01% - Negative funding rate: `SignedBPS100thFee::new(BPS100thFee::new(50), false)` = -0.005%",
      "type": "object",
      "required": [
        "is_positive",
        "magnitude"
      ],
      "properties": {
        "is_positive": {
          "description": "True if positive, false if negative",
          "type": "boolean"
        },
        "magnitude": {
          "description": "The absolute value of the fee",
          "type": "integer",
          "format": "uint16",
          "minimum": 0.0
        }
      }
    },
    "SizedSafeString_for_12": {
      "description": "A String wrapper which enforces certain constraints to ensure it is safely displayable as part of a transaction without confusing the user. Only printable ASCII is allowed, and the length is limited.\n\n`UniversalWallet` implementation is forbidden on `std::String` by default, to avoid the possibility of untrusted input supplying highly confusing text that tricks users into misunderstanding the transaction they are signing. `SafeString` enforces some constraints to mitigate this risk. If you need to encode a large data blob such as a hex string, use a `Vec<u8>` with the `[sov_wallet(display = \"hex\")]` attribute (or any of the other display styles). Avoid raw `String`s if possible. If an actual `String` is absolutely necessary, then a newtype wrapper can be used, on which `UniversalWallet` is derived manually.",
      "type": "string"
    },
    "SizedSafeString_for_128": {
      "description": "A String wrapper which enforces certain constraints to ensure it is safely displayable as part of a transaction without confusing the user. Only printable ASCII is allowed, and the length is limited.\n\n`UniversalWallet` implementation is forbidden on `std::String` by default, to avoid the possibility of untrusted input supplying highly confusing text that tricks users into misunderstanding the transaction they are signing. `SafeString` enforces some constraints to mitigate this risk. If you need to encode a large data blob such as a hex string, use a `Vec<u8>` with the `[sov_wallet(display = \"hex\")]` attribute (or any of the other display styles). Avoid raw `String`s if possible. If an actual `String` is absolutely necessary, then a newtype wrapper can be used, on which `UniversalWallet` is derived manually.",
      "type": "string"
    },
    "SizedSafeString_for_256": {
      "description": "A String wrapper which enforces certain constraints to ensure it is safely displayable as part of a transaction without confusing the user. Only printable ASCII is allowed, and the length is limited.\n\n`UniversalWallet` implementation is forbidden on `std::String` by default, to avoid the possibility of untrusted input supplying highly confusing text that tricks users into misunderstanding the transaction they are signing. `SafeString` enforces some constraints to mitigate this risk. If you need to encode a large data blob such as a hex string, use a `Vec<u8>` with the `[sov_wallet(display = \"hex\")]` attribute (or any of the other display styles). Avoid raw `String`s if possible. If an actual `String` is absolutely necessary, then a newtype wrapper can be used, on which `UniversalWallet` is derived manually.",
      "type": "string"
    },
    "SizedSafeString_for_512": {
      "description": "A String wrapper which enforces certain constraints to ensure it is safely displayable as part of a transaction without confusing the user. Only printable ASCII is allowed, and the length is limited.\n\n`UniversalWallet` implementation is forbidden on `std::String` by default, to avoid the possibility of untrusted input supplying highly confusing text that tricks users into misunderstanding the transaction they are signing. `SafeString` enforces some constraints to mitigate this risk. If you need to encode a large data blob such as a hex string, use a `Vec<u8>` with the `[sov_wallet(display = \"hex\")]` attribute (or any of the other display styles). Avoid raw `String`s if possible. If an actual `String` is absolutely necessary, then a newtype wrapper can be used, on which `UniversalWallet` is derived manually.",
      "type": "string"
    },
    "SubAccountId": {
      "description": "Subaccount identifier (max 1024 per owner)",
      "type": "integer",
      "format": "uint16",
      "minimum": 0.0
    },
    "TimeInForce": {
      "type": "string",
      "enum": [
        "Fok",
        "Ioc",
        "PostOnly",
        "Gtc"
      ]
    },
    "TokenId": {
      "description": "A bech32 string",
      "type": "string",
      "pattern": "token_1[a-zA-Z0-9]+$"
    },
    "TokenKind": {
      "description": "Represents the source of the token in Hyperlane",
      "oneOf": [
        {
          "description": "The token is natively issued on some remote chain, so the local representation is a synthetic token.",
          "type": "object",
          "required": [
            "Synthetic"
          ],
          "properties": {
            "Synthetic": {
              "type": "object",
              "required": [
                "remote_decimals",
                "remote_token_id"
              ],
              "properties": {
                "local_decimals": {
                  "description": "The number of decimal places for the local (synthetic) token.\n\nShould be set if remote token should be scaled locally, defaults to remote decimals.",
                  "type": [
                    "integer",
                    "null"
                  ],
                  "format": "uint8",
                  "minimum": 0.0
                },
                "remote_decimals": {
                  "description": "The number of decimal places of the remote token.",
                  "type": "integer",
                  "format": "uint8",
                  "minimum": 0.0
                },
                "remote_token_id": {
                  "description": "The ID of the remote token.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/HexHash"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "The token is natively issued on the local chain.",
          "type": "object",
          "required": [
            "Collateral"
          ],
          "properties": {
            "Collateral": {
              "type": "object",
              "required": [
                "token"
              ],
              "properties": {
                "token": {
                  "description": "The ID of the token on the local chain.",
                  "allOf": [
                    {
                      "$ref": "#/definitions/TokenId"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "description": "The token is the native token of the local chain.",
          "type": "string",
          "enum": [
            "Native"
          ]
        }
      ]
    },
    "TokenName": {
      "type": "array",
      "items": {
        "type": "integer",
        "format": "uint8",
        "minimum": 0.0
      },
      "maxItems": 8,
      "minItems": 8
    },
    "VaultDepositSource": {
      "description": "Source of funds for vault deposits (spot or margin balance)",
      "oneOf": [
        {
          "description": "Transfer from spot balance into perps escrow",
          "type": "string",
          "enum": [
            "spot"
          ]
        },
        {
          "description": "Transfer from perps margin balance into vault",
          "type": "string",
          "enum": [
            "margin"
          ]
        }
      ]
    },
    "VaultWithdrawDestination": {
      "description": "Destination for vault withdrawals (spot or margin balance)",
      "oneOf": [
        {
          "description": "Transfer from perps escrow to spot balance",
          "type": "string",
          "enum": [
            "spot"
          ]
        },
        {
          "description": "Transfer from vault to perps margin balance",
          "type": "string",
          "enum": [
            "margin"
          ]
        }
      ]
    },
    "call_message": {
      "description": "EVM call message.",
      "oneOf": [
        {
          "description": "RLP encoded transaction.",
          "type": "object",
          "required": [
            "call"
          ],
          "properties": {
            "call": {
              "$ref": "#/definitions/RlpEvmTransaction"
            }
          },
          "additionalProperties": false
        },
        {
          "description": "Update the runtime configuration",
          "type": "object",
          "required": [
            "update_runtime_config"
          ],
          "properties": {
            "update_runtime_config": {
              "$ref": "#/definitions/evm_runtime_config_update"
            }
          },
          "additionalProperties": false
        }
      ]
    },
    "contract_creation_policy_update": {
      "description": "Policy - who can create contracts. Everyone or allowlist",
      "oneOf": [
        {
          "description": "No restrictions on contract creation",
          "type": "string",
          "enum": [
            "everyone"
          ]
        },
        {
          "description": "Only allowed addresses can create contracts",
          "type": "object",
          "required": [
            "allowlist"
          ],
          "properties": {
            "allowlist": {
              "type": "object",
              "required": [
                "add",
                "remove"
              ],
              "properties": {
                "add": {
                  "description": "Addresses to add to the allowlist",
                  "allOf": [
                    {
                      "$ref": "#/definitions/SafeVec_32_of_HexHash"
                    }
                  ]
                },
                "remove": {
                  "description": "Addresses to remove from the allowlist",
                  "allOf": [
                    {
                      "$ref": "#/definitions/SafeVec_32_of_HexHash"
                    }
                  ]
                }
              }
            }
          },
          "additionalProperties": false
        }
      ]
    },
    "evm_runtime_config_update": {
      "description": "An update to the runtime configuration.",
      "type": "object",
      "properties": {
        "chain_spec_update": {
          "description": "A new chain spec to apply. None means \"no change\"",
          "anyOf": [
            {
              "$ref": "#/definitions/ChainSpecUpdate"
            },
            {
              "type": "null"
            }
          ]
        },
        "new_admin": {
          "description": "A new admin address to set. None means \"no change\"",
          "anyOf": [
            {
              "$ref": "#/definitions/EthereumAddress"
            },
            {
              "type": "null"
            }
          ]
        },
        "new_contract_creation_policy": {
          "description": "A new contract creation policy to apply. None means \"no change\"",
          "anyOf": [
            {
              "$ref": "#/definitions/contract_creation_policy_update"
            },
            {
              "type": "null"
            }
          ]
        },
        "new_hardfork": {
          "description": "A new hardfork to activate and the block number at which it activates",
          "type": [
            "array",
            "null"
          ],
          "items": [
            {
              "type": "integer",
              "format": "uint64",
              "minimum": 0.0
            },
            {
              "type": "string"
            }
          ],
          "maxItems": 2,
          "minItems": 2
        }
      }
    },
    "policy_update": {
      "description": "An update to the policy of a single gas payer",
      "type": "object",
      "properties": {
        "default_policy": {
          "anyOf": [
            {
              "$ref": "#/definitions/PayeePolicy"
            },
            {
              "type": "null"
            }
          ]
        },
        "payee_policies_to_delete": {
          "anyOf": [
            {
              "$ref": "#/definitions/SafeVec_20_of_EthereumAddress"
            },
            {
              "type": "null"
            }
          ]
        },
        "payee_policies_to_set": {
          "anyOf": [
            {
              "$ref": "#/definitions/SafeVec_20_of_Tuple_of_EthereumAddress_and_PayeePolicy"
            },
            {
              "type": "null"
            }
          ]
        },
        "sequencer_update": {
          "anyOf": [
            {
              "$ref": "#/definitions/SequencerUpdate"
            },
            {
              "type": "null"
            }
          ]
        },
        "updaters_to_add": {
          "anyOf": [
            {
              "$ref": "#/definitions/SafeVec_20_of_EthereumAddress"
            },
            {
              "type": "null"
            }
          ]
        },
        "updaters_to_remove": {
          "anyOf": [
            {
              "$ref": "#/definitions/SafeVec_20_of_EthereumAddress"
            },
            {
              "type": "null"
            }
          ]
        }
      }
    }
  }
}
