{
  "address": "9ATDq9dpDcM517hncjHnbWsBXzsNxKvqdfJ4L5qHJYy2",
  "metadata": {
    "name": "ibc_solray",
    "version": "0.2.0",
    "spec": "0.1.0",
    "description": "IBC on Solana for the Nolus Protocol: IBC core (client, connection, channels) plus two applications - ICS-20 token transfer (escrow/mirror-mint) and Remote Lease (margin positions executed on Solana). Native program; this IDL is hand-authored and pinned to the deployed wire format."
  },
  "docs": [
    "WIRE FRAMING: instruction data is [domain: u8][variant: u8][payload]. The two leading bytes form each instruction's discriminator below. Domains: 0=Config, 1=Core, 2=Program, 3=Transfer, 4=RemoteLease. An unknown domain or variant byte is rejected at decode.",
    "The payload is the Borsh serialization of the instruction's args in the order listed. All integers are Borsh little-endian; strings and byte vectors carry u32 LE length prefixes; options carry a 1-byte tag.",
    "ORDINALS: 'channel_ordinal'-style u16 fields in payloads are Borsh little-endian. The same ordinals appear big-endian inside PDA seeds - the two encodings never mix: LE on the wire, BE in seeds.",
    "PDA SCHEME: every program-owned account is a PDA under this program id. Seeds are 2-byte designators (see constants) chained parent-to-child, with 2-byte big-endian ordinals for numbered entities. The production instance ordinal is 0, so every path starts with ['pr', 0u16be]. Escrows append the SPL mint pubkey, mirror mints append sha256(symbol), leases append the 32-byte Nolus lease address, and in-flight transfer counters append the packet sender's 32-byte Solana pubkey.",
    "REMAINING ACCOUNTS: swap (from slot 18) and swap_two (from slot 20) forward a caller-supplied engine account tail verbatim into the swap-engine CPI; the tail is not part of this IDL's fixed account lists. For swap_two the tail is leg A's accounts immediately followed by leg B's, split at the payload's leg_a_engine_account_count.",
    "SECOND-LAYER ENVELOPE: on the four RemoteLease receive instructions, packet.data inside the recv message is itself Borsh: the PacketEnvelope type below (version tag 0x01, lease address, operation). Its Operation enum order differs from the instruction variant order.",
    "ERRORS: the program returns six disposition CLASSES (codes 72-77), not per-cause codes. The precise cause is logged on one line prefixed 'Solray instruction processing has ended with error: ' followed by the Rust Debug rendering of the typed error.",
    "ACCOUNT STATE: program-owned accounts carry NO discriminators; identify them by deriving the PDA address, never by a data prefix. Borsh layouts for the decodable states are in types (ProgramState, ChannelTokenCensus, ClientConnections, ConnectionChannels, LeaseChannelBinding, RelayerAllowlist, StaticsTablePointer, Lease, NextPacketSequence, InFlightTransfers). Client/Connection/Channel ends store Borsh images of ibc-rs types, and the three packet stores (commitments, receipts, acknowledgements) use the program's own B-tree wire format - neither is decodable from this IDL alone.",
    "Deployed on Solana mainnet."
  ],
  "instructions": [
    {
      "name": "new_source_mint",
      "docs": [
        "Register a Solana-native (source) mint on a channel and create its escrow token account at the derived PDA. Bootstrap-admin only. The mint's Token-2022 extensions must pass the safety allow-list. Increments the channel census escrow count. Exactly 8 accounts."
      ],
      "discriminator": [
        0,
        0
      ],
      "accounts": [
        {
          "name": "bootstrap_user",
          "writable": true,
          "signer": true,
          "docs": [
            "Recorded admin; fee payer."
          ]
        },
        {
          "name": "program",
          "docs": [
            "Program singleton PDA, read-only; carries the recorded admin."
          ]
        },
        {
          "name": "mint",
          "docs": [
            "The Solana-native SPL mint being registered, read-only."
          ]
        },
        {
          "name": "escrow",
          "writable": true,
          "docs": [
            "Blank escrow token account PDA, created here."
          ]
        },
        {
          "name": "vault_authority",
          "writable": true,
          "docs": [
            "VaultAuthority PDA; rent sponsor and escrow owner."
          ]
        },
        {
          "name": "channel_token_census",
          "writable": true,
          "docs": [
            "Per-channel census; live_escrows incremented."
          ]
        },
        {
          "name": "system_program",
          "address": "11111111111111111111111111111111",
          "docs": [
            "Required by the create_account CPI."
          ]
        },
        {
          "name": "spl_token_program",
          "docs": [
            "Classic SPL Token or Token-2022; must own the mint."
          ]
        }
      ],
      "args": [
        {
          "name": "channel_ordinal",
          "type": "u16"
        },
        {
          "name": "bumps",
          "type": {
            "defined": {
              "name": "NewSourceMintBumps"
            }
          }
        }
      ]
    },
    {
      "name": "new_sink_mint",
      "docs": [
        "Register a mirror (voucher) mint on a channel for a remote-chain currency: creates the classic SPL mint at the symbol-derived PDA with the vault authority as mint authority. Bootstrap-admin only. Increments the channel census mint count. Exactly 7 accounts."
      ],
      "discriminator": [
        0,
        1
      ],
      "accounts": [
        {
          "name": "bootstrap_user",
          "writable": true,
          "signer": true,
          "docs": [
            "Recorded admin; fee payer."
          ]
        },
        {
          "name": "program",
          "docs": [
            "Program singleton PDA, read-only."
          ]
        },
        {
          "name": "mint",
          "writable": true,
          "docs": [
            "Blank mirror-mint PDA, created here at channel seeds + ['mt', sha256(symbol)]."
          ]
        },
        {
          "name": "vault_authority",
          "writable": true,
          "docs": [
            "VaultAuthority PDA; rent sponsor and the new mint's authority."
          ]
        },
        {
          "name": "channel_token_census",
          "writable": true,
          "docs": [
            "Per-channel census; live_mints incremented."
          ]
        },
        {
          "name": "system_program",
          "address": "11111111111111111111111111111111"
        },
        {
          "name": "spl_token_program",
          "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
          "docs": [
            "Classic SPL Token only; mirror mints are classic by construction."
          ]
        }
      ],
      "args": [
        {
          "name": "channel_ordinal",
          "type": "u16"
        },
        {
          "name": "remote_token_symbol",
          "type": "string"
        },
        {
          "name": "remote_token_decimals",
          "type": "u8"
        },
        {
          "name": "bumps",
          "type": {
            "defined": {
              "name": "NewSinkMintBumps"
            }
          }
        }
      ]
    },
    {
      "name": "create_mint_metadata",
      "docs": [
        "Publish the Metaplex token metadata of a mirror mint this program issued: one CreateMetadataAccountV3 CPI signed by the vault authority as the mint's recorded mint authority, writing that same vault as the metadata's update authority (is_mutable). Bootstrap-admin only. Metaplex levies the metadata rent and its create fee from the payer (~0.0156 SOL). Exactly 7 accounts."
      ],
      "discriminator": [
        0,
        2
      ],
      "accounts": [
        {
          "name": "bootstrap_user",
          "writable": true,
          "signer": true,
          "docs": [
            "Recorded admin; transaction fee payer, and the payer Metaplex levies the metadata rent and create fee from."
          ]
        },
        {
          "name": "program",
          "docs": [
            "Program singleton PDA, read-only; carries the recorded admin."
          ]
        },
        {
          "name": "mint",
          "docs": [
            "Mirror mint (existing, classic SPL); must record the canonical vault authority as its mint authority, else MintNotProgramIssued."
          ]
        },
        {
          "name": "vault_authority",
          "writable": true,
          "docs": [
            "VaultAuthority PDA; signs the CPI as mint authority and is written into the metadata as its durable update authority. Writable as the skeleton type's contract."
          ]
        },
        {
          "name": "metadata",
          "writable": true,
          "docs": [
            "Blank metadata account at Metaplex's ['metadata', token-metadata program, mint] PDA; caller-supplied, re-derived and validated by Metaplex, never derived on chain here."
          ]
        },
        {
          "name": "system_program",
          "address": "11111111111111111111111111111111",
          "docs": [
            "Required for the levy transfer and the metadata account's creation."
          ]
        },
        {
          "name": "token_metadata_program",
          "address": "metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s",
          "docs": [
            "Metaplex Token Metadata; the CPI target. No rent sysvar slot - Metaplex never reads it."
          ]
        }
      ],
      "args": [
        {
          "name": "data",
          "type": {
            "defined": {
              "name": "MintMetadataData"
            }
          }
        },
        {
          "name": "bumps",
          "type": {
            "defined": {
              "name": "MintMetadataBumps"
            }
          }
        }
      ]
    },
    {
      "name": "update_mint_metadata",
      "docs": [
        "Rewrite a mirror mint's published metadata, hand its update authority to another key, or both, through one UpdateMetadataAccountV2 CPI signed by the vault authority as the recorded update authority. An update carrying neither field is refused (MetadataUpdateEmpty) before the CPI. Handing the authority to a key outside this program is irreversible from here. Works over a retired mint whose mint authority CloseRemoteTokenMint revoked. Bootstrap-admin only. Exactly 6 accounts."
      ],
      "discriminator": [
        0,
        3
      ],
      "accounts": [
        {
          "name": "bootstrap_user",
          "writable": true,
          "signer": true,
          "docs": [
            "Recorded admin; transaction fee payer."
          ]
        },
        {
          "name": "program",
          "docs": [
            "Program singleton PDA, read-only; carries the recorded admin."
          ]
        },
        {
          "name": "mint",
          "docs": [
            "Mirror mint (existing); its key alone is cross-checked against the metadata account's recorded mint field. The create's issuer screen is not re-run."
          ]
        },
        {
          "name": "vault_authority",
          "writable": true,
          "docs": [
            "VaultAuthority PDA; signs the CPI as the metadata's recorded update authority."
          ]
        },
        {
          "name": "metadata",
          "writable": true,
          "docs": [
            "Existing Metaplex-owned metadata account; must open with Key::MetadataV1 and name the mint at slot 2."
          ]
        },
        {
          "name": "token_metadata_program",
          "address": "metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s",
          "docs": [
            "Metaplex Token Metadata; the CPI target."
          ]
        }
      ],
      "args": [
        {
          "name": "data",
          "type": {
            "option": {
              "defined": {
                "name": "MintMetadataData"
              }
            }
          }
        },
        {
          "name": "new_update_authority",
          "type": {
            "option": "pubkey"
          }
        },
        {
          "name": "bumps",
          "type": {
            "defined": {
              "name": "MintMetadataBumps"
            }
          }
        }
      ]
    },
    {
      "name": "create_client",
      "docs": [
        "Create an inert trusted-relayer IBC client at the next client ordinal, together with its empty ClientConnections list. Gated on the relayer allowlist. Exactly 7 accounts."
      ],
      "discriminator": [
        1,
        0
      ],
      "accounts": [
        {
          "name": "payer",
          "writable": true,
          "signer": true,
          "docs": [
            "Fee payer; must be an allowlist member."
          ]
        },
        {
          "name": "program",
          "writable": true,
          "docs": [
            "Program singleton PDA; client ordinal counter advanced."
          ]
        },
        {
          "name": "client",
          "writable": true,
          "docs": [
            "Blank Client PDA, created for the ordinal."
          ]
        },
        {
          "name": "client_connections",
          "writable": true,
          "docs": [
            "Blank ClientConnections list PDA, created alongside."
          ]
        },
        {
          "name": "vault_authority",
          "writable": true,
          "docs": [
            "VaultAuthority PDA; rent sponsor."
          ]
        },
        {
          "name": "system_program",
          "address": "11111111111111111111111111111111"
        },
        {
          "name": "relayer_allowlist",
          "docs": [
            "RelayerAllowlist singleton PDA, read-only; the membership gate."
          ]
        }
      ],
      "args": [
        {
          "name": "client_ordinal",
          "type": "u16"
        },
        {
          "name": "bumps",
          "type": {
            "defined": {
              "name": "CreateClientBumps"
            }
          }
        }
      ]
    },
    {
      "name": "close_client",
      "docs": [
        "Admin teardown of a client and its ClientConnections list; refuses while the connection list is non-empty. The client PDA closes last so a partial failure stays replayable. Exactly 5 accounts."
      ],
      "discriminator": [
        1,
        1
      ],
      "accounts": [
        {
          "name": "bootstrap_user",
          "writable": true,
          "signer": true,
          "docs": [
            "Recorded admin; fee payer."
          ]
        },
        {
          "name": "program",
          "writable": true,
          "docs": [
            "Program singleton PDA; live-client counter retreated."
          ]
        },
        {
          "name": "client",
          "writable": true,
          "docs": [
            "The Client PDA being closed."
          ]
        },
        {
          "name": "client_connections",
          "writable": true,
          "docs": [
            "Its ClientConnections list; must be empty."
          ]
        },
        {
          "name": "vault_authority",
          "writable": true,
          "docs": [
            "Reclaimed rent destination."
          ]
        }
      ],
      "args": [
        {
          "name": "client_ordinal",
          "type": "u16"
        },
        {
          "name": "bumps",
          "type": {
            "defined": {
              "name": "CloseClientBumps"
            }
          }
        }
      ]
    },
    {
      "name": "open_try_connection",
      "docs": [
        "ICS-03 ConnOpenTry responder: opens a connection at the next ordinal under the client the message names (canonical client-name gate). Allowlist-gated. Exactly 9 accounts."
      ],
      "discriminator": [
        1,
        2
      ],
      "accounts": [
        {
          "name": "payer",
          "writable": true,
          "signer": true,
          "docs": [
            "Fee payer; allowlist member."
          ]
        },
        {
          "name": "program",
          "writable": true,
          "docs": [
            "Connection ordinal counter advanced."
          ]
        },
        {
          "name": "client",
          "docs": [
            "The Client PDA the connection opens under, read-only."
          ]
        },
        {
          "name": "client_connections",
          "writable": true,
          "docs": [
            "The client's connection list; the new ordinal is appended."
          ]
        },
        {
          "name": "connection",
          "writable": true,
          "docs": [
            "Blank Connection PDA, created for the ordinal."
          ]
        },
        {
          "name": "vault_authority",
          "writable": true,
          "docs": [
            "Rent sponsor."
          ]
        },
        {
          "name": "connection_channels",
          "writable": true,
          "docs": [
            "Blank ConnectionChannels list PDA, created alongside."
          ]
        },
        {
          "name": "system_program",
          "address": "11111111111111111111111111111111"
        },
        {
          "name": "relayer_allowlist",
          "docs": [
            "Read-only membership gate."
          ]
        }
      ],
      "args": [
        {
          "name": "msg",
          "type": {
            "defined": {
              "name": "MsgConnectionOpenTry"
            }
          }
        },
        {
          "name": "connection_ordinal",
          "type": "u16"
        },
        {
          "name": "bumps",
          "type": {
            "defined": {
              "name": "OpenTryConnectionBumps"
            }
          }
        }
      ]
    },
    {
      "name": "open_confirm_connection",
      "docs": [
        "ICS-03 ConnOpenConfirm responder; transitions the connection to OPEN. The client identity travels side-band (client_id_on_b) because the IBC message carries none. Allowlist-gated. Exactly 6 accounts."
      ],
      "discriminator": [
        1,
        3
      ],
      "accounts": [
        {
          "name": "payer",
          "writable": true,
          "signer": true,
          "docs": [
            "Fee payer; allowlist member."
          ]
        },
        {
          "name": "program",
          "docs": [
            "Program singleton PDA, read-only."
          ]
        },
        {
          "name": "client",
          "docs": [
            "The Client PDA, read-only."
          ]
        },
        {
          "name": "connection",
          "writable": true,
          "docs": [
            "Transitioned to OPEN."
          ]
        },
        {
          "name": "vault_authority",
          "writable": true,
          "docs": [
            "Rent sponsor for the resize."
          ]
        },
        {
          "name": "relayer_allowlist",
          "docs": [
            "Read-only membership gate."
          ]
        }
      ],
      "args": [
        {
          "name": "msg",
          "type": {
            "defined": {
              "name": "MsgConnectionOpenConfirm"
            }
          }
        },
        {
          "name": "client_id_on_b",
          "type": "string",
          "docs": [
            "Admitted only in the canonical 07-tendermint-N rendering."
          ]
        },
        {
          "name": "bumps",
          "type": {
            "defined": {
              "name": "OpenConfirmConnectionBumps"
            }
          }
        }
      ]
    },
    {
      "name": "close_connection",
      "docs": [
        "Admin teardown of a connection and its ConnectionChannels list; refuses while channels remain. Exactly 6 accounts."
      ],
      "discriminator": [
        1,
        4
      ],
      "accounts": [
        {
          "name": "bootstrap_user",
          "writable": true,
          "signer": true,
          "docs": [
            "Recorded admin; fee payer."
          ]
        },
        {
          "name": "program",
          "writable": true,
          "docs": [
            "Live-connection counter retreated."
          ]
        },
        {
          "name": "client_connections",
          "writable": true,
          "docs": [
            "Parent client's list; the entry is removed."
          ]
        },
        {
          "name": "connection",
          "writable": true,
          "docs": [
            "The Connection PDA being closed (closed last)."
          ]
        },
        {
          "name": "connection_channels",
          "writable": true,
          "docs": [
            "Its channel list; must be empty, closed first."
          ]
        },
        {
          "name": "vault_authority",
          "writable": true,
          "docs": [
            "Reclaimed rent destination."
          ]
        }
      ],
      "args": [
        {
          "name": "client_ordinal",
          "type": "u16"
        },
        {
          "name": "connection_ordinal",
          "type": "u16"
        },
        {
          "name": "bumps",
          "type": {
            "defined": {
              "name": "CloseConnectionBumps"
            }
          }
        }
      ]
    },
    {
      "name": "open_try_channel",
      "docs": [
        "ICS-04 ChanOpenTry responder; the local connection comes from msg.connection_hops_on_b[0] and the port selects the module: 'transfer' binds ICS-20 (14 accounts), an 'nls-remote-lease.<dex>' port binds the Remote Lease app and appends the three optional trailing slots (17 accounts). Creates the channel, its four packet stores and its token census. Allowlist-gated."
      ],
      "discriminator": [
        1,
        5
      ],
      "accounts": [
        {
          "name": "payer",
          "writable": true,
          "signer": true,
          "docs": [
            "Fee payer; allowlist member."
          ]
        },
        {
          "name": "program",
          "writable": true,
          "docs": [
            "Channel ordinal counter advanced."
          ]
        },
        {
          "name": "client",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "connection",
          "docs": [
            "Named by connection_hops_on_b[0], read-only."
          ]
        },
        {
          "name": "channel",
          "writable": true,
          "docs": [
            "Blank Channel PDA, created for the ordinal."
          ]
        },
        {
          "name": "vault_authority",
          "writable": true,
          "docs": [
            "Rent sponsor."
          ]
        },
        {
          "name": "next_seq_send",
          "writable": true,
          "docs": [
            "Blank NextPacketSequence PDA."
          ]
        },
        {
          "name": "packet_commitment",
          "writable": true,
          "docs": [
            "Blank PacketCommitments B-tree PDA."
          ]
        },
        {
          "name": "packet_receipt",
          "writable": true,
          "docs": [
            "Blank PacketReceipts B-tree PDA."
          ]
        },
        {
          "name": "packet_acknowledgement",
          "writable": true,
          "docs": [
            "Blank PacketAcknowledgements B-tree PDA."
          ]
        },
        {
          "name": "connection_channels",
          "writable": true,
          "docs": [
            "The connection's channel list; the new ordinal is appended."
          ]
        },
        {
          "name": "channel_token_census",
          "writable": true,
          "docs": [
            "This channel's own blank census PDA."
          ]
        },
        {
          "name": "system_program",
          "address": "11111111111111111111111111111111"
        },
        {
          "name": "relayer_allowlist",
          "docs": [
            "Read-only membership gate; last slot of the base block."
          ]
        },
        {
          "name": "lease_channel_binding",
          "writable": true,
          "optional": true,
          "docs": [
            "Lease ports only: blank LeaseChannelBinding PDA for this lease channel."
          ]
        },
        {
          "name": "transfer_channel",
          "optional": true,
          "docs": [
            "Lease ports only: the bound ICS-20 transfer channel's Channel PDA, read-only."
          ]
        },
        {
          "name": "transfer_channel_token_census",
          "writable": true,
          "optional": true,
          "docs": [
            "Lease ports only: the TRANSFER channel's census (a different address from slot 11); bound-lease-channel count incremented."
          ]
        }
      ],
      "args": [
        {
          "name": "msg",
          "type": {
            "defined": {
              "name": "MsgChannelOpenTry"
            }
          }
        },
        {
          "name": "channel_ordinal",
          "type": "u16"
        },
        {
          "name": "bumps",
          "type": {
            "defined": {
              "name": "OpenTryChannelBumps"
            }
          }
        }
      ]
    },
    {
      "name": "open_confirm_channel",
      "docs": [
        "ICS-04 ChanOpenConfirm responder; transitions the channel to OPEN. Client and connection ordinals travel side-band. Allowlist-gated. Exactly 7 accounts."
      ],
      "discriminator": [
        1,
        6
      ],
      "accounts": [
        {
          "name": "payer",
          "writable": true,
          "signer": true,
          "docs": [
            "Fee payer; allowlist member."
          ]
        },
        {
          "name": "program",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "client",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "connection",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "channel",
          "writable": true,
          "docs": [
            "Transitioned to OPEN."
          ]
        },
        {
          "name": "vault_authority",
          "writable": true,
          "docs": [
            "Rent sponsor."
          ]
        },
        {
          "name": "relayer_allowlist",
          "docs": [
            "Read-only membership gate."
          ]
        }
      ],
      "args": [
        {
          "name": "msg",
          "type": {
            "defined": {
              "name": "MsgChannelOpenConfirm"
            }
          }
        },
        {
          "name": "client_ordinal",
          "type": "u16"
        },
        {
          "name": "connection_ordinal",
          "type": "u16"
        },
        {
          "name": "bumps",
          "type": {
            "defined": {
              "name": "OpenConfirmChannelBumps"
            }
          }
        }
      ]
    },
    {
      "name": "close_confirm_channel",
      "docs": [
        "ICS-04 ChanCloseConfirm responder; transitions the channel to CLOSED and tears down its sequence/receipt/ack stores. Refuses a transfer channel that still has lease channels bound to it (CloseOverBoundLeaseChannels, code 75). Allowlist-gated. Exactly 12 accounts."
      ],
      "discriminator": [
        1,
        7
      ],
      "accounts": [
        {
          "name": "payer",
          "writable": true,
          "signer": true,
          "docs": [
            "Fee payer; allowlist member."
          ]
        },
        {
          "name": "program",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "client",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "connection",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "channel",
          "writable": true,
          "docs": [
            "Transitioned to CLOSED."
          ]
        },
        {
          "name": "vault_authority",
          "writable": true,
          "docs": [
            "Reclaim destination for the closed stores."
          ]
        },
        {
          "name": "next_seq_send",
          "writable": true,
          "docs": [
            "Closed in teardown."
          ]
        },
        {
          "name": "packet_receipt",
          "writable": true,
          "docs": [
            "Closed in teardown."
          ]
        },
        {
          "name": "packet_acknowledgement",
          "writable": true,
          "docs": [
            "Closed in teardown."
          ]
        },
        {
          "name": "connection_channels",
          "writable": true,
          "docs": [
            "The connection's channel list."
          ]
        },
        {
          "name": "relayer_allowlist",
          "docs": [
            "Read-only membership gate."
          ]
        },
        {
          "name": "channel_token_census",
          "docs": [
            "READ-ONLY here (writable in open_try_channel): the bound-lease-channel gate only reads it."
          ]
        }
      ],
      "args": [
        {
          "name": "msg",
          "type": {
            "defined": {
              "name": "MsgChannelCloseConfirm"
            }
          }
        },
        {
          "name": "client_ordinal",
          "type": "u16"
        },
        {
          "name": "connection_ordinal",
          "type": "u16"
        },
        {
          "name": "bumps",
          "type": {
            "defined": {
              "name": "CloseConfirmChannelBumps"
            }
          }
        }
      ]
    },
    {
      "name": "purge_stale_entries",
      "docs": [
        "Permissionless crank pruning packet receipts and acknowledgements older than the staleness horizon (MAX_LIFETIME_BLOCKS + GRACE_BLOCKS). Any funded key may crank it; reclaimed rent credits the vault authority. NOTE: vault_authority precedes program here, unlike every other instruction. Exactly 5 accounts."
      ],
      "discriminator": [
        1,
        8
      ],
      "accounts": [
        {
          "name": "payer",
          "writable": true,
          "signer": true,
          "docs": [
            "Any funded key; no allowlist or admin gate."
          ]
        },
        {
          "name": "vault_authority",
          "writable": true,
          "docs": [
            "Reclaimed rent destination for the shrinking stores."
          ]
        },
        {
          "name": "program",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "packet_receipt",
          "writable": true,
          "docs": [
            "Swept."
          ]
        },
        {
          "name": "packet_acknowledgement",
          "writable": true,
          "docs": [
            "Swept."
          ]
        }
      ],
      "args": [
        {
          "name": "channel_ordinal",
          "type": "u16"
        },
        {
          "name": "purge_limit",
          "type": "u16",
          "docs": [
            "Per-store cap on removed entries; zero is rejected."
          ]
        },
        {
          "name": "bumps",
          "type": {
            "defined": {
              "name": "PurgeStaleEntriesBumps"
            }
          }
        }
      ]
    },
    {
      "name": "finalize_channel",
      "docs": [
        "Admin teardown of a CLOSED channel: refuses while the census counts any live escrow, mirror mint, lease or bound lease channel, or while the commitment batch is non-empty. 7 accounts for a transfer channel; a lease channel appends the optional trailing slot (8) - the runtime owner of the lease_channel_binding account keys which shape applies."
      ],
      "discriminator": [
        1,
        9
      ],
      "accounts": [
        {
          "name": "bootstrap_user",
          "writable": true,
          "signer": true,
          "docs": [
            "Recorded admin; fee payer."
          ]
        },
        {
          "name": "program",
          "writable": true,
          "docs": [
            "Live-channel counter retreated."
          ]
        },
        {
          "name": "channel",
          "writable": true,
          "docs": [
            "The CLOSED Channel PDA; closed last."
          ]
        },
        {
          "name": "packet_commitment",
          "writable": true,
          "docs": [
            "Must be an empty batch; closed first."
          ]
        },
        {
          "name": "vault_authority",
          "writable": true,
          "docs": [
            "Reclaimed rent destination."
          ]
        },
        {
          "name": "channel_token_census",
          "writable": true,
          "docs": [
            "Must count nothing live; closed."
          ]
        },
        {
          "name": "lease_channel_binding",
          "writable": true,
          "docs": [
            "Program-owned means the lease shape (8 accounts); System-owned/blank means the transfer shape (7)."
          ]
        },
        {
          "name": "transfer_channel_token_census",
          "writable": true,
          "optional": true,
          "docs": [
            "Lease channels only: the bound TRANSFER channel's census, whose bound-lease-channel count this teardown releases."
          ]
        }
      ],
      "args": [
        {
          "name": "channel_ordinal",
          "type": "u16"
        },
        {
          "name": "bumps",
          "type": {
            "defined": {
              "name": "FinalizeChannelBumps"
            }
          }
        }
      ]
    },
    {
      "name": "close_escrow",
      "docs": [
        "Admin close of a registered source token's escrow account at zero balance; decrements the census escrow count. Exactly 6 accounts, token program mid-list."
      ],
      "discriminator": [
        1,
        10
      ],
      "accounts": [
        {
          "name": "bootstrap_user",
          "writable": true,
          "signer": true,
          "docs": [
            "Recorded admin; fee payer."
          ]
        },
        {
          "name": "program",
          "writable": true
        },
        {
          "name": "escrow",
          "writable": true,
          "docs": [
            "The escrow token account PDA; must hold zero."
          ]
        },
        {
          "name": "vault_authority",
          "writable": true,
          "docs": [
            "Token close authority and rent destination."
          ]
        },
        {
          "name": "token_program",
          "docs": [
            "Classic SPL Token or Token-2022; must match the escrow's runtime owner."
          ]
        },
        {
          "name": "channel_token_census",
          "writable": true,
          "docs": [
            "live_escrows decremented."
          ]
        }
      ],
      "args": [
        {
          "name": "channel_ordinal",
          "type": "u16"
        },
        {
          "name": "mint",
          "type": "pubkey"
        },
        {
          "name": "bumps",
          "type": {
            "defined": {
              "name": "CloseEscrowBumps"
            }
          }
        }
      ]
    },
    {
      "name": "close_remote_token_mint",
      "docs": [
        "Admin retire of a mirror mint at zero supply: the vault authority's mint authority is revoked (a classic mint is never rent-closed); decrements the census mint count. Exactly 6 accounts."
      ],
      "discriminator": [
        1,
        11
      ],
      "accounts": [
        {
          "name": "bootstrap_user",
          "writable": true,
          "signer": true,
          "docs": [
            "Recorded admin; fee payer."
          ]
        },
        {
          "name": "program",
          "writable": true
        },
        {
          "name": "mint",
          "writable": true,
          "docs": [
            "The mirror mint being retired; live authority over zero supply."
          ]
        },
        {
          "name": "vault_authority",
          "writable": true,
          "docs": [
            "The authority being revoked; rent destination."
          ]
        },
        {
          "name": "token_program",
          "docs": [
            "Accepts classic or Token-2022 on-chain; mirror mints are classic in practice."
          ]
        },
        {
          "name": "channel_token_census",
          "writable": true,
          "docs": [
            "live_mints decremented."
          ]
        }
      ],
      "args": [
        {
          "name": "channel_ordinal",
          "type": "u16"
        },
        {
          "name": "remote_token_symbol",
          "type": "string"
        },
        {
          "name": "bumps",
          "type": {
            "defined": {
              "name": "CloseRemoteTokenMintBumps"
            }
          }
        }
      ]
    },
    {
      "name": "add_relayer",
      "docs": [
        "Bootstrap-admin insertion of an address into the program-wide relayer allowlist; the list PDA is created on first insertion and grown thereafter. Any 32-byte address is accepted by stated policy. Exactly 5 accounts."
      ],
      "discriminator": [
        1,
        12
      ],
      "accounts": [
        {
          "name": "bootstrap_user",
          "writable": true,
          "signer": true,
          "docs": [
            "Recorded admin; the only roster authority."
          ]
        },
        {
          "name": "program",
          "docs": [
            "Read-only; carries the recorded admin."
          ]
        },
        {
          "name": "relayer_allowlist",
          "writable": true,
          "docs": [
            "Created or grown."
          ]
        },
        {
          "name": "vault_authority",
          "writable": true,
          "docs": [
            "Rent sponsor."
          ]
        },
        {
          "name": "system_program",
          "address": "11111111111111111111111111111111"
        }
      ],
      "args": [
        {
          "name": "relayer",
          "type": "pubkey"
        },
        {
          "name": "bumps",
          "type": {
            "defined": {
              "name": "AddRelayerBumps"
            }
          }
        }
      ]
    },
    {
      "name": "remove_relayer",
      "docs": [
        "Bootstrap-admin removal of an address from the relayer allowlist; the account shrinks and the freed rent credits the vault. No System-program slot - a shrink needs none. Exactly 4 accounts."
      ],
      "discriminator": [
        1,
        13
      ],
      "accounts": [
        {
          "name": "bootstrap_user",
          "writable": true,
          "signer": true,
          "docs": [
            "Recorded admin."
          ]
        },
        {
          "name": "program",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "relayer_allowlist",
          "writable": true,
          "docs": [
            "The entry is removed."
          ]
        },
        {
          "name": "vault_authority",
          "writable": true,
          "docs": [
            "Reclaimed rent destination."
          ]
        }
      ],
      "args": [
        {
          "name": "relayer",
          "type": "pubkey"
        },
        {
          "name": "bumps",
          "type": {
            "defined": {
              "name": "RemoveRelayerBumps"
            }
          }
        }
      ]
    },
    {
      "name": "create_statics_table",
      "docs": [
        "Bootstrap-gated, once-per-deployment creation of the statics address lookup table at the address derived from (vault_authority, origin_slot); the handler derives the fixed 14-address roster on-chain and records the table address in the statics pointer PDA. The vault authority is the table's permanent, never-frozen authority. Exactly 7 accounts."
      ],
      "discriminator": [
        1,
        14
      ],
      "accounts": [
        {
          "name": "bootstrap_user",
          "writable": true,
          "signer": true,
          "docs": [
            "Recorded admin; fee payer."
          ]
        },
        {
          "name": "program",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "statics_table",
          "writable": true,
          "docs": [
            "Blank ALT account; the create CPI assigns it."
          ]
        },
        {
          "name": "statics_pointer",
          "writable": true,
          "docs": [
            "Blank StaticsTablePointer PDA created to record the table address."
          ]
        },
        {
          "name": "vault_authority",
          "writable": true,
          "docs": [
            "ALT authority (signs the CPI via seeds) and rent sponsor."
          ]
        },
        {
          "name": "alt_program",
          "address": "AddressLookupTab1e1111111111111111111111111"
        },
        {
          "name": "system_program",
          "address": "11111111111111111111111111111111"
        }
      ],
      "args": [
        {
          "name": "origin_slot",
          "type": "u64",
          "docs": [
            "Recent slot inside the SlotHashes window; the table address derives from it."
          ]
        },
        {
          "name": "client_ordinal",
          "type": "u16"
        },
        {
          "name": "connection_ordinal",
          "type": "u16"
        },
        {
          "name": "channel_ordinal",
          "type": "u16",
          "docs": [
            "The lease channel the roster is derived around."
          ]
        },
        {
          "name": "bumps",
          "type": {
            "defined": {
              "name": "CreateStaticsTableBumps"
            }
          }
        }
      ]
    },
    {
      "name": "close_deactivated_table",
      "docs": [
        "Permissionless rent-reclaim crank closing a deactivated, cooled-down per-lease lookup table; the statics table is refused by address. Reclaimed rent credits the vault authority, not the cranking key. Exactly 5 accounts."
      ],
      "discriminator": [
        1,
        15
      ],
      "accounts": [
        {
          "name": "payer",
          "writable": true,
          "signer": true,
          "docs": [
            "Any funded key."
          ]
        },
        {
          "name": "table",
          "writable": true,
          "docs": [
            "The deactivated lookup table being closed."
          ]
        },
        {
          "name": "vault_authority",
          "writable": true,
          "docs": [
            "ALT authority (signs via seeds) and rent destination."
          ]
        },
        {
          "name": "alt_program",
          "address": "AddressLookupTab1e1111111111111111111111111"
        },
        {
          "name": "statics_pointer",
          "docs": [
            "Read-only; read solely to refuse the never-closable statics table by address."
          ]
        }
      ],
      "args": [
        {
          "name": "bumps",
          "type": {
            "defined": {
              "name": "CloseDeactivatedTableBumps"
            }
          }
        }
      ]
    },
    {
      "name": "extend_statics_table",
      "docs": [
        "Bootstrap-gated append-only growth of the statics lookup table (256-address lifetime cap; nothing removes an appended address). The passed table is validated against the statics pointer. Exactly 7 accounts."
      ],
      "discriminator": [
        1,
        16
      ],
      "accounts": [
        {
          "name": "bootstrap_user",
          "writable": true,
          "signer": true,
          "docs": [
            "Recorded admin; fee payer."
          ]
        },
        {
          "name": "program",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "statics_table",
          "writable": true,
          "docs": [
            "The standing table, appended to."
          ]
        },
        {
          "name": "statics_pointer",
          "docs": [
            "READ-ONLY here (writable in create_statics_table); names the table the append must target."
          ]
        },
        {
          "name": "vault_authority",
          "writable": true,
          "docs": [
            "ALT authority and rent sponsor for the growth."
          ]
        },
        {
          "name": "alt_program",
          "address": "AddressLookupTab1e1111111111111111111111111"
        },
        {
          "name": "system_program",
          "address": "11111111111111111111111111111111"
        }
      ],
      "args": [
        {
          "name": "addresses",
          "type": {
            "vec": "pubkey"
          }
        },
        {
          "name": "bumps",
          "type": {
            "defined": {
              "name": "ExtendStaticsTableBumps"
            }
          }
        }
      ]
    },
    {
      "name": "rotate_bootstrap_user",
      "docs": [
        "Upgrade-authority-signed replacement of the recorded admin: authorises against the loader's ProgramData account, never against the admin being replaced. Slot 3 is a SECOND signer. Exactly 5 accounts."
      ],
      "discriminator": [
        1,
        17
      ],
      "accounts": [
        {
          "name": "payer",
          "writable": true,
          "signer": true,
          "docs": [
            "Fee payer only; carries no authority."
          ]
        },
        {
          "name": "program",
          "writable": true,
          "docs": [
            "The recorded bootstrap_user field is replaced."
          ]
        },
        {
          "name": "vault_authority",
          "writable": true,
          "docs": [
            "Rent sponsor."
          ]
        },
        {
          "name": "upgrade_authority",
          "signer": true,
          "docs": [
            "The program's on-chain upgrade authority; the authorising signer."
          ]
        },
        {
          "name": "program_data",
          "docs": [
            "This program's ProgramData under BPFLoaderUpgradeab1e11111111111111111111111, read-only; address and loader ownership both checked."
          ]
        }
      ],
      "args": [
        {
          "name": "new_bootstrap_user",
          "type": "pubkey"
        },
        {
          "name": "bumps",
          "type": {
            "defined": {
              "name": "RotateBootstrapUserBumps"
            }
          }
        }
      ]
    },
    {
      "name": "new_instance",
      "docs": [
        "Create a program instance: the Program PDA (admin + entity counters) and the funded vault authority. The on-chain upgrade authority must sign (slot 4, second signer) and designates the recorded admin as a params field rather than becoming it. Exactly 6 accounts."
      ],
      "discriminator": [
        2,
        0
      ],
      "accounts": [
        {
          "name": "payer",
          "writable": true,
          "signer": true,
          "docs": [
            "Fee payer; funds the vault."
          ]
        },
        {
          "name": "program",
          "writable": true,
          "docs": [
            "Blank Program singleton PDA, created for the instance ordinal."
          ]
        },
        {
          "name": "vault_authority",
          "writable": true,
          "docs": [
            "Blank System-owned VaultAuthority PDA, funded here."
          ]
        },
        {
          "name": "system_program",
          "address": "11111111111111111111111111111111"
        },
        {
          "name": "upgrade_authority",
          "signer": true,
          "docs": [
            "The program's on-chain upgrade authority; the authorising signer."
          ]
        },
        {
          "name": "program_data",
          "docs": [
            "This program's ProgramData account, read-only."
          ]
        }
      ],
      "args": [
        {
          "name": "instance_ordinal",
          "type": "u16"
        },
        {
          "name": "bootstrap_user",
          "type": "pubkey",
          "docs": [
            "The admin recorded in the Program PDA."
          ]
        },
        {
          "name": "funds_lamports",
          "type": "u64",
          "docs": [
            "Initial vault funding."
          ]
        },
        {
          "name": "program_bump",
          "type": "u8"
        },
        {
          "name": "vault_authority_bump",
          "type": "u8"
        }
      ]
    },
    {
      "name": "send_source_tokens",
      "docs": [
        "ICS-20 send of a Solana-native token: escrows the amount and commits the packet. Signed by the sending user - the send legs are NOT allowlist-gated. Requires the published compute-unit limit and heap-frame requests beside it. Exactly 14 accounts."
      ],
      "discriminator": [
        3,
        0
      ],
      "accounts": [
        {
          "name": "payer",
          "writable": true,
          "signer": true,
          "docs": [
            "The sending end user."
          ]
        },
        {
          "name": "sender",
          "writable": true,
          "docs": [
            "The sender's token account, debited."
          ]
        },
        {
          "name": "escrow",
          "writable": true,
          "docs": [
            "The channel's escrow token account PDA, credited."
          ]
        },
        {
          "name": "vault_authority",
          "writable": true,
          "docs": [
            "Escrow authority; rent sponsor for the commitment store."
          ]
        },
        {
          "name": "spl_token_program",
          "docs": [
            "Classic SPL Token or Token-2022; must own the mint."
          ]
        },
        {
          "name": "mint",
          "docs": [
            "The source mint, read-only."
          ]
        },
        {
          "name": "program",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "client",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "connection",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "channel",
          "writable": true,
          "docs": [
            "The ICS-20 channel (a lease-bound channel is refused)."
          ]
        },
        {
          "name": "next_packet_sequence",
          "writable": true,
          "docs": [
            "Advanced."
          ]
        },
        {
          "name": "packet_commitments",
          "writable": true,
          "docs": [
            "The send commitment is stored."
          ]
        },
        {
          "name": "system_program",
          "address": "11111111111111111111111111111111"
        },
        {
          "name": "in_flight_transfers",
          "writable": true,
          "docs": [
            "Sender's in-flight transfer counter PDA (['pr', ordinal, 'in', sender pubkey]); created payer-funded at count 1 on the sender's first counted send, else advanced. At the u16::MAX ceiling the send is refused (class 75, cause InFlightTransfersOverflow; clears as settlements land). No caller-supplied bump anywhere - the address is derived on chain."
          ]
        }
      ],
      "args": [
        {
          "name": "details",
          "type": {
            "defined": {
              "name": "SendSourceDetails"
            }
          }
        },
        {
          "name": "timeout",
          "type": {
            "defined": {
              "name": "Timeout"
            }
          },
          "docs": [
            "Bounded to 24h past the host clock."
          ]
        },
        {
          "name": "bumps",
          "type": {
            "defined": {
              "name": "SendSourceBumps"
            }
          }
        }
      ]
    },
    {
      "name": "send_sink_tokens",
      "docs": [
        "ICS-20 send returning a mirror voucher to its origin chain: burns the voucher and commits the packet. User-signed, not allowlist-gated. Exactly 13 accounts."
      ],
      "discriminator": [
        3,
        1
      ],
      "accounts": [
        {
          "name": "payer",
          "writable": true,
          "signer": true,
          "docs": [
            "The sending end user."
          ]
        },
        {
          "name": "sender",
          "writable": true,
          "docs": [
            "The sender's voucher token account, burned from."
          ]
        },
        {
          "name": "mint",
          "writable": true,
          "docs": [
            "The mirror mint itself; supply reduced."
          ]
        },
        {
          "name": "vault_authority",
          "writable": true,
          "docs": [
            "Mint authority; rent sponsor."
          ]
        },
        {
          "name": "spl_token_program",
          "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
          "docs": [
            "Classic only; mirror mints are classic."
          ]
        },
        {
          "name": "program",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "client",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "connection",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "channel",
          "writable": true
        },
        {
          "name": "next_packet_sequence",
          "writable": true,
          "docs": [
            "Advanced."
          ]
        },
        {
          "name": "packet_commitments",
          "writable": true
        },
        {
          "name": "system_program",
          "address": "11111111111111111111111111111111"
        },
        {
          "name": "in_flight_transfers",
          "writable": true,
          "docs": [
            "Sender's in-flight transfer counter PDA (['pr', ordinal, 'in', sender pubkey]); created payer-funded at count 1 on the sender's first counted send, else advanced. At the u16::MAX ceiling the send is refused (class 75, cause InFlightTransfersOverflow; clears as settlements land). No caller-supplied bump anywhere - the address is derived on chain."
          ]
        }
      ],
      "args": [
        {
          "name": "details",
          "type": {
            "defined": {
              "name": "SendSinkDetails"
            }
          }
        },
        {
          "name": "timeout",
          "type": {
            "defined": {
              "name": "Timeout"
            }
          }
        },
        {
          "name": "bumps",
          "type": {
            "defined": {
              "name": "SendSinkBumps"
            }
          }
        }
      ]
    },
    {
      "name": "receive_source_tokens",
      "docs": [
        "ICS-20 receive returning a Solana-native token out of escrow to the recipient's canonical ATA (created idempotently). Relayer-signed, allowlist-gated. Exactly 16 accounts."
      ],
      "discriminator": [
        3,
        2
      ],
      "accounts": [
        {
          "name": "payer",
          "writable": true,
          "signer": true,
          "docs": [
            "The relayer; allowlist member."
          ]
        },
        {
          "name": "escrow",
          "writable": true,
          "docs": [
            "Debited (un-escrow)."
          ]
        },
        {
          "name": "receiver",
          "writable": true,
          "docs": [
            "The recipient's ATA, created idempotently and credited."
          ]
        },
        {
          "name": "vault_authority",
          "writable": true,
          "docs": [
            "Escrow authority; ATA rent sponsor."
          ]
        },
        {
          "name": "program",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "client",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "spl_token_program",
          "docs": [
            "Classic or Token-2022; part of the ATA derivation."
          ]
        },
        {
          "name": "mint",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "connection",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "channel",
          "docs": [
            "Read-only on the receive legs."
          ]
        },
        {
          "name": "packet_receipt",
          "writable": true,
          "docs": [
            "The receipt is written."
          ]
        },
        {
          "name": "packet_acknowledgement",
          "writable": true,
          "docs": [
            "The acknowledgement is committed."
          ]
        },
        {
          "name": "system_program",
          "address": "11111111111111111111111111111111"
        },
        {
          "name": "receiver_owner",
          "docs": [
            "The recipient wallet; the ATA owner, guarded against the packet recipient."
          ]
        },
        {
          "name": "ata_program",
          "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"
        },
        {
          "name": "relayer_allowlist",
          "docs": [
            "Read-only membership gate."
          ]
        }
      ],
      "args": [
        {
          "name": "msg",
          "type": {
            "defined": {
              "name": "WireRecvMsg"
            }
          }
        },
        {
          "name": "bumps",
          "type": {
            "defined": {
              "name": "ReceiveSourceBumps"
            }
          }
        }
      ]
    },
    {
      "name": "receive_sink_tokens",
      "docs": [
        "ICS-20 receive minting a mirror voucher to the recipient's classic ATA (created idempotently). Relayer-signed, allowlist-gated. Exactly 15 accounts."
      ],
      "discriminator": [
        3,
        3
      ],
      "accounts": [
        {
          "name": "payer",
          "writable": true,
          "signer": true,
          "docs": [
            "The relayer; allowlist member."
          ]
        },
        {
          "name": "mint",
          "writable": true,
          "docs": [
            "The mirror mint; supply increased."
          ]
        },
        {
          "name": "receiver",
          "writable": true,
          "docs": [
            "The recipient's voucher ATA, created idempotently and credited."
          ]
        },
        {
          "name": "vault_authority",
          "writable": true,
          "docs": [
            "Mint authority; rent sponsor."
          ]
        },
        {
          "name": "program",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "client",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "connection",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "channel",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "packet_receipt",
          "writable": true
        },
        {
          "name": "packet_acknowledgement",
          "writable": true
        },
        {
          "name": "system_program",
          "address": "11111111111111111111111111111111"
        },
        {
          "name": "spl_token_program",
          "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
          "docs": [
            "Classic only; the mint_to CPI target."
          ]
        },
        {
          "name": "receiver_owner",
          "docs": [
            "The recipient wallet; ATA owner."
          ]
        },
        {
          "name": "ata_program",
          "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"
        },
        {
          "name": "relayer_allowlist",
          "docs": [
            "Read-only membership gate."
          ]
        }
      ],
      "args": [
        {
          "name": "msg",
          "type": {
            "defined": {
              "name": "WireRecvMsg"
            }
          }
        },
        {
          "name": "bumps",
          "type": {
            "defined": {
              "name": "ReceiveSinkBumps"
            }
          }
        }
      ]
    },
    {
      "name": "acknowledge_source_tokens",
      "docs": [
        "ICS-20 acknowledgement of a sent source packet: deletes the commitment; an error ack additionally refunds the escrowed amount to the original sender. Relayer-signed, allowlist-gated. Exactly 13 accounts (byte-identical list to the two source timeout legs - only the discriminator distinguishes them)."
      ],
      "discriminator": [
        3,
        4
      ],
      "accounts": [
        {
          "name": "payer",
          "writable": true,
          "signer": true,
          "docs": [
            "The relayer; allowlist member."
          ]
        },
        {
          "name": "escrow",
          "writable": true,
          "docs": [
            "Debited on an error-ack refund."
          ]
        },
        {
          "name": "recipient",
          "writable": true,
          "docs": [
            "The original sender's token account; refund destination."
          ]
        },
        {
          "name": "vault_authority",
          "writable": true,
          "docs": [
            "Escrow authority."
          ]
        },
        {
          "name": "spl_token_program",
          "docs": [
            "Classic or Token-2022; must own the mint."
          ]
        },
        {
          "name": "mint",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "program",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "client",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "connection",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "channel",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "packet_commitments",
          "writable": true,
          "docs": [
            "The settled commitment is deleted."
          ]
        },
        {
          "name": "relayer_allowlist",
          "docs": [
            "Read-only membership gate."
          ]
        },
        {
          "name": "in_flight_transfers",
          "writable": true,
          "docs": [
            "Packet sender's in-flight transfer counter PDA; retreated after the token arm succeeds - the draining retreat closes the PDA, crediting its rent to the slot-0 payer. A System-owned blank at the derived address is a legitimate no-op (packets sent before v0.2.0, or a counter an earlier settlement already drained). Address derived on chain; no bump in the payload."
          ]
        }
      ],
      "args": [
        {
          "name": "msg",
          "type": {
            "defined": {
              "name": "WireAckMsg"
            }
          }
        },
        {
          "name": "bumps",
          "type": {
            "defined": {
              "name": "AcknowledgeSourceBumps"
            }
          }
        }
      ]
    },
    {
      "name": "acknowledge_sink_tokens",
      "docs": [
        "ICS-20 acknowledgement of a sent voucher packet: deletes the commitment; an error ack re-mints the burned voucher to the original sender. Relayer-signed, allowlist-gated. Exactly 12 accounts (byte-identical list to the two sink timeout legs)."
      ],
      "discriminator": [
        3,
        5
      ],
      "accounts": [
        {
          "name": "payer",
          "writable": true,
          "signer": true,
          "docs": [
            "The relayer; allowlist member."
          ]
        },
        {
          "name": "mint",
          "writable": true,
          "docs": [
            "Re-minted on an error-ack refund."
          ]
        },
        {
          "name": "recipient",
          "writable": true,
          "docs": [
            "The original sender's voucher token account."
          ]
        },
        {
          "name": "vault_authority",
          "writable": true,
          "docs": [
            "Mint authority."
          ]
        },
        {
          "name": "program",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "client",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "connection",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "channel",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "packet_commitments",
          "writable": true,
          "docs": [
            "The settled commitment is deleted."
          ]
        },
        {
          "name": "spl_token_program",
          "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
          "docs": [
            "Classic only; after the commitments slot on the sink settlement legs."
          ]
        },
        {
          "name": "relayer_allowlist",
          "docs": [
            "Read-only membership gate."
          ]
        },
        {
          "name": "in_flight_transfers",
          "writable": true,
          "docs": [
            "Packet sender's in-flight transfer counter PDA; retreated after the token arm succeeds - the draining retreat closes the PDA, crediting its rent to the slot-0 payer. A System-owned blank at the derived address is a legitimate no-op (packets sent before v0.2.0, or a counter an earlier settlement already drained). Address derived on chain; no bump in the payload."
          ]
        }
      ],
      "args": [
        {
          "name": "msg",
          "type": {
            "defined": {
              "name": "WireAckMsg"
            }
          }
        },
        {
          "name": "bumps",
          "type": {
            "defined": {
              "name": "AcknowledgeSinkBumps"
            }
          }
        }
      ]
    },
    {
      "name": "timeout_source_tokens",
      "docs": [
        "ICS-20 timeout of a sent source packet: refunds the escrowed amount and deletes the commitment. Relayer-signed, allowlist-gated. Exactly 13 accounts."
      ],
      "discriminator": [
        3,
        6
      ],
      "accounts": [
        {
          "name": "payer",
          "writable": true,
          "signer": true,
          "docs": [
            "The relayer; allowlist member."
          ]
        },
        {
          "name": "escrow",
          "writable": true,
          "docs": [
            "Debited for the refund."
          ]
        },
        {
          "name": "recipient",
          "writable": true,
          "docs": [
            "The original sender's token account."
          ]
        },
        {
          "name": "vault_authority",
          "writable": true,
          "docs": [
            "Escrow authority."
          ]
        },
        {
          "name": "spl_token_program",
          "docs": [
            "Classic or Token-2022."
          ]
        },
        {
          "name": "mint",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "program",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "client",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "connection",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "channel",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "packet_commitments",
          "writable": true,
          "docs": [
            "The timed-out commitment is deleted."
          ]
        },
        {
          "name": "relayer_allowlist",
          "docs": [
            "Read-only membership gate."
          ]
        },
        {
          "name": "in_flight_transfers",
          "writable": true,
          "docs": [
            "Packet sender's in-flight transfer counter PDA; retreated after the token arm succeeds - the draining retreat closes the PDA, crediting its rent to the slot-0 payer. A System-owned blank at the derived address is a legitimate no-op (packets sent before v0.2.0, or a counter an earlier settlement already drained). Address derived on chain; no bump in the payload."
          ]
        }
      ],
      "args": [
        {
          "name": "msg",
          "type": {
            "defined": {
              "name": "WireTimeoutMsg"
            }
          }
        },
        {
          "name": "bumps",
          "type": {
            "defined": {
              "name": "TimeoutSourceBumps"
            }
          }
        }
      ]
    },
    {
      "name": "timeout_sink_tokens",
      "docs": [
        "ICS-20 timeout of a sent voucher packet: re-mints the burned voucher and deletes the commitment. Relayer-signed, allowlist-gated. Exactly 12 accounts."
      ],
      "discriminator": [
        3,
        7
      ],
      "accounts": [
        {
          "name": "payer",
          "writable": true,
          "signer": true,
          "docs": [
            "The relayer; allowlist member."
          ]
        },
        {
          "name": "mint",
          "writable": true,
          "docs": [
            "Re-minted for the refund."
          ]
        },
        {
          "name": "recipient",
          "writable": true,
          "docs": [
            "The original sender's voucher token account."
          ]
        },
        {
          "name": "vault_authority",
          "writable": true,
          "docs": [
            "Mint authority."
          ]
        },
        {
          "name": "program",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "client",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "connection",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "channel",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "packet_commitments",
          "writable": true
        },
        {
          "name": "spl_token_program",
          "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
        },
        {
          "name": "relayer_allowlist",
          "docs": [
            "Read-only membership gate."
          ]
        },
        {
          "name": "in_flight_transfers",
          "writable": true,
          "docs": [
            "Packet sender's in-flight transfer counter PDA; retreated after the token arm succeeds - the draining retreat closes the PDA, crediting its rent to the slot-0 payer. A System-owned blank at the derived address is a legitimate no-op (packets sent before v0.2.0, or a counter an earlier settlement already drained). Address derived on chain; no bump in the payload."
          ]
        }
      ],
      "args": [
        {
          "name": "msg",
          "type": {
            "defined": {
              "name": "WireTimeoutMsg"
            }
          }
        },
        {
          "name": "bumps",
          "type": {
            "defined": {
              "name": "TimeoutSinkBumps"
            }
          }
        }
      ]
    },
    {
      "name": "timeout_on_close_source_tokens",
      "docs": [
        "ICS-20 timeout-on-close of a sent source packet: refunds from escrow given the counterparty's channel-closed evidence (carried in the payload; the account list is byte-identical to timeout_source_tokens). Relayer-signed, allowlist-gated. Exactly 13 accounts."
      ],
      "discriminator": [
        3,
        8
      ],
      "accounts": [
        {
          "name": "payer",
          "writable": true,
          "signer": true,
          "docs": [
            "The relayer; allowlist member."
          ]
        },
        {
          "name": "escrow",
          "writable": true,
          "docs": [
            "Debited for the refund."
          ]
        },
        {
          "name": "recipient",
          "writable": true,
          "docs": [
            "The original sender's token account."
          ]
        },
        {
          "name": "vault_authority",
          "writable": true,
          "docs": [
            "Escrow authority."
          ]
        },
        {
          "name": "spl_token_program",
          "docs": [
            "Classic or Token-2022."
          ]
        },
        {
          "name": "mint",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "program",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "client",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "connection",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "channel",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "packet_commitments",
          "writable": true
        },
        {
          "name": "relayer_allowlist",
          "docs": [
            "Read-only membership gate."
          ]
        },
        {
          "name": "in_flight_transfers",
          "writable": true,
          "docs": [
            "Packet sender's in-flight transfer counter PDA; retreated after the token arm succeeds - the draining retreat closes the PDA, crediting its rent to the slot-0 payer. A System-owned blank at the derived address is a legitimate no-op (packets sent before v0.2.0, or a counter an earlier settlement already drained). Address derived on chain; no bump in the payload."
          ]
        }
      ],
      "args": [
        {
          "name": "msg",
          "type": {
            "defined": {
              "name": "WireTimeoutOnCloseMsg"
            }
          }
        },
        {
          "name": "bumps",
          "type": {
            "defined": {
              "name": "TimeoutOnCloseSourceBumps"
            }
          }
        }
      ]
    },
    {
      "name": "timeout_on_close_sink_tokens",
      "docs": [
        "ICS-20 timeout-on-close of a sent voucher packet: re-mints given the counterparty's channel-closed evidence. Relayer-signed, allowlist-gated. Exactly 12 accounts."
      ],
      "discriminator": [
        3,
        9
      ],
      "accounts": [
        {
          "name": "payer",
          "writable": true,
          "signer": true,
          "docs": [
            "The relayer; allowlist member."
          ]
        },
        {
          "name": "mint",
          "writable": true,
          "docs": [
            "Re-minted for the refund."
          ]
        },
        {
          "name": "recipient",
          "writable": true,
          "docs": [
            "The original sender's voucher token account."
          ]
        },
        {
          "name": "vault_authority",
          "writable": true,
          "docs": [
            "Mint authority."
          ]
        },
        {
          "name": "program",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "client",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "connection",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "channel",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "packet_commitments",
          "writable": true
        },
        {
          "name": "spl_token_program",
          "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
        },
        {
          "name": "relayer_allowlist",
          "docs": [
            "Read-only membership gate."
          ]
        },
        {
          "name": "in_flight_transfers",
          "writable": true,
          "docs": [
            "Packet sender's in-flight transfer counter PDA; retreated after the token arm succeeds - the draining retreat closes the PDA, crediting its rent to the slot-0 payer. A System-owned blank at the derived address is a legitimate no-op (packets sent before v0.2.0, or a counter an earlier settlement already drained). Address derived on chain; no bump in the payload."
          ]
        }
      ],
      "args": [
        {
          "name": "msg",
          "type": {
            "defined": {
              "name": "WireTimeoutOnCloseMsg"
            }
          }
        },
        {
          "name": "bumps",
          "type": {
            "defined": {
              "name": "TimeoutOnCloseSinkBumps"
            }
          }
        }
      ]
    },
    {
      "name": "open_lease",
      "docs": [
        "Remote-Lease receive opening a lease (margin position): creates the lease-authority ATAs for the three currencies, the per-lease lookup table, and - written last as the lifecycle marker - the Lease PDA. packet.data carries the Borsh PacketEnvelope with an OpenLease operation. Relayer-signed, allowlist-gated. Exactly 26 accounts."
      ],
      "discriminator": [
        4,
        0
      ],
      "accounts": [
        {
          "name": "payer",
          "writable": true,
          "signer": true,
          "docs": [
            "The relayer; allowlist member."
          ]
        },
        {
          "name": "lease",
          "writable": true,
          "docs": [
            "Blank Lease PDA keyed by (lease channel, Nolus lease address); created LAST."
          ]
        },
        {
          "name": "lease_authority",
          "docs": [
            "LeaseAuthority PDA, read-only; owner of the three ATAs."
          ]
        },
        {
          "name": "collateral_mint",
          "docs": [
            "The collateral currency's mint, read-only."
          ]
        },
        {
          "name": "debt_mint",
          "docs": [
            "The debt currency's mint, read-only."
          ]
        },
        {
          "name": "position_mint",
          "docs": [
            "The position currency's mint, read-only."
          ]
        },
        {
          "name": "collateral_tokens",
          "writable": true,
          "docs": [
            "Lease-authority ATA for the collateral mint, created idempotently."
          ]
        },
        {
          "name": "debt_tokens",
          "writable": true,
          "docs": [
            "Lease-authority ATA for the debt mint; equals slot 6 when the mints coincide."
          ]
        },
        {
          "name": "position_tokens",
          "writable": true,
          "docs": [
            "Lease-authority ATA for the position mint; same sharing rule."
          ]
        },
        {
          "name": "vault_authority",
          "writable": true,
          "docs": [
            "Sponsors the ATAs, the Lease PDA and the recv stores."
          ]
        },
        {
          "name": "program",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "client",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "lease_channel_binding",
          "docs": [
            "Read-only; names the engine and the bound transfer channel."
          ]
        },
        {
          "name": "collateral_token_program",
          "docs": [
            "Token program owning the collateral mint."
          ]
        },
        {
          "name": "debt_token_program",
          "docs": [
            "Token program owning the debt mint."
          ]
        },
        {
          "name": "position_token_program",
          "docs": [
            "Token program owning the position mint."
          ]
        },
        {
          "name": "system_program",
          "address": "11111111111111111111111111111111"
        },
        {
          "name": "connection",
          "docs": [
            "The lease channel's connection, read-only."
          ]
        },
        {
          "name": "channel",
          "docs": [
            "The lease channel, read-only."
          ]
        },
        {
          "name": "packet_receipt",
          "writable": true
        },
        {
          "name": "packet_acknowledgement",
          "writable": true
        },
        {
          "name": "ata_program",
          "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"
        },
        {
          "name": "relayer_allowlist",
          "docs": [
            "Read-only membership gate."
          ]
        },
        {
          "name": "alt_program",
          "address": "AddressLookupTab1e1111111111111111111111111"
        },
        {
          "name": "lease_table",
          "writable": true,
          "docs": [
            "Blank per-lease lookup table at lookup_table_address(vault_authority, table_origin_slot)."
          ]
        },
        {
          "name": "channel_token_census",
          "writable": true,
          "docs": [
            "live_leases incremented."
          ]
        }
      ],
      "args": [
        {
          "name": "recv_packet",
          "type": {
            "defined": {
              "name": "WireRecvMsg"
            }
          }
        },
        {
          "name": "lease_bumps",
          "type": {
            "defined": {
              "name": "LeaseBumps"
            }
          }
        },
        {
          "name": "mint_bumps",
          "type": {
            "defined": {
              "name": "MintBumps"
            }
          }
        },
        {
          "name": "token_bumps",
          "type": {
            "defined": {
              "name": "TokenBumps"
            }
          }
        },
        {
          "name": "vault_authority_bump",
          "type": "u8"
        },
        {
          "name": "ibc_host_bumps",
          "type": {
            "defined": {
              "name": "IBCHostBumps"
            }
          }
        },
        {
          "name": "recv_storage_bumps",
          "type": {
            "defined": {
              "name": "RecvStorageBumps"
            }
          }
        },
        {
          "name": "table_origin_slot",
          "type": "u64",
          "docs": [
            "Recent slot the per-lease table address derives from."
          ]
        },
        {
          "name": "census_bump",
          "type": "u8"
        }
      ]
    },
    {
      "name": "swap",
      "docs": [
        "Remote-Lease receive performing a one-input swap through the bound engine (Jupiter), signed by the LeaseAuthority PDA. 18 fixed accounts; slot 18 onward is the engine account tail, forwarded verbatim into the CPI (remaining accounts, not listed here). A two-input wire payload is rejected on this path. Post-CPI failures revert the whole instruction. Relayer-signed, allowlist-gated."
      ],
      "discriminator": [
        4,
        1
      ],
      "accounts": [
        {
          "name": "payer",
          "writable": true,
          "signer": true,
          "docs": [
            "The relayer; allowlist member."
          ]
        },
        {
          "name": "lease",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "lease_authority",
          "docs": [
            "Read-only; signs the swap CPI via seeds."
          ]
        },
        {
          "name": "from_tokens",
          "writable": true,
          "docs": [
            "Debited by the swap; exact-debit checked."
          ]
        },
        {
          "name": "to_tokens",
          "writable": true,
          "docs": [
            "Credited by the swap; min_out checked."
          ]
        },
        {
          "name": "engine_program",
          "docs": [
            "The swap engine program the binding names, read-only."
          ]
        },
        {
          "name": "lease_channel_binding",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "program",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "client",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "system_program",
          "address": "11111111111111111111111111111111"
        },
        {
          "name": "connection",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "channel",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "packet_receipt",
          "writable": true
        },
        {
          "name": "packet_acknowledgement",
          "writable": true
        },
        {
          "name": "vault_authority",
          "writable": true,
          "docs": [
            "Sponsors the recv-store writes."
          ]
        },
        {
          "name": "from_mint",
          "docs": [
            "Read-only; Token-2022 allow-list re-checked."
          ]
        },
        {
          "name": "to_mint",
          "docs": [
            "Read-only; same re-check."
          ]
        },
        {
          "name": "relayer_allowlist",
          "docs": [
            "Read-only; deliberately the last fixed slot, below the engine tail."
          ]
        }
      ],
      "args": [
        {
          "name": "recv_packet",
          "type": {
            "defined": {
              "name": "WireRecvMsg"
            }
          }
        },
        {
          "name": "lease_bumps",
          "type": {
            "defined": {
              "name": "LeaseBumps"
            }
          }
        },
        {
          "name": "mint_bumps",
          "type": {
            "defined": {
              "name": "SwapMintBumps"
            }
          }
        },
        {
          "name": "token_bumps",
          "type": {
            "defined": {
              "name": "SwapTokenBumps"
            }
          }
        },
        {
          "name": "ibc_host_bumps",
          "type": {
            "defined": {
              "name": "IBCHostBumps"
            }
          }
        },
        {
          "name": "recv_storage_bumps",
          "type": {
            "defined": {
              "name": "RecvStorageBumps"
            }
          }
        },
        {
          "name": "vault_authority_bump",
          "type": "u8"
        },
        {
          "name": "swap_instruction_data",
          "type": "bytes",
          "docs": [
            "Engine instruction data, forwarded verbatim; route parsed and cross-checked pre-CPI."
          ]
        }
      ]
    },
    {
      "name": "transfer_out",
      "docs": [
        "Remote-Lease receive nesting an ICS-20 send over the bound transfer channel, signed by the LeaseAuthority PDA; the packet timeout derives from the host clock. Slots 4 (mint) and 6 (escrow) swap effective writability with the sent denom's provenance: a source send writes the escrow, a sink send writes the mint. Post-escrow send failures revert the instruction. Relayer-signed, allowlist-gated. Exactly 22 accounts."
      ],
      "discriminator": [
        4,
        2
      ],
      "accounts": [
        {
          "name": "payer",
          "writable": true,
          "signer": true,
          "docs": [
            "The relayer; allowlist member."
          ]
        },
        {
          "name": "lease",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "lease_authority",
          "docs": [
            "Read-only; signs the debit via seeds."
          ]
        },
        {
          "name": "lease_token",
          "writable": true,
          "docs": [
            "Debited for the outbound transfer."
          ]
        },
        {
          "name": "mint",
          "writable": true,
          "docs": [
            "The sent currency's mint; effectively writable only on a sink send (voucher burned)."
          ]
        },
        {
          "name": "spl_token_program",
          "docs": [
            "Classic or Token-2022; must own the mint."
          ]
        },
        {
          "name": "escrow",
          "writable": true,
          "docs": [
            "The transfer channel's escrow; effectively writable only on a source send (escrow credited)."
          ]
        },
        {
          "name": "vault_authority",
          "writable": true,
          "docs": [
            "Escrow/mint authority and rent sponsor."
          ]
        },
        {
          "name": "lease_channel_binding",
          "docs": [
            "Read-only; names the bound transfer channel."
          ]
        },
        {
          "name": "program",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "client",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "connection",
          "docs": [
            "The SEND leg's connection (the transfer channel's), read-only."
          ]
        },
        {
          "name": "transfer_channel",
          "writable": true,
          "docs": [
            "The ICS-20 channel the nested send uses."
          ]
        },
        {
          "name": "next_packet_sequence",
          "writable": true,
          "docs": [
            "The transfer channel's, advanced."
          ]
        },
        {
          "name": "packet_commitments",
          "writable": true,
          "docs": [
            "The transfer channel's; the send commitment is stored."
          ]
        },
        {
          "name": "system_program",
          "address": "11111111111111111111111111111111"
        },
        {
          "name": "recv_connection",
          "docs": [
            "The RECV leg's connection (the lease channel's) - distinct from slot 11."
          ]
        },
        {
          "name": "recv_channel",
          "docs": [
            "The lease channel - distinct from slot 12."
          ]
        },
        {
          "name": "packet_receipt",
          "writable": true,
          "docs": [
            "The lease channel's."
          ]
        },
        {
          "name": "packet_acknowledgement",
          "writable": true,
          "docs": [
            "The lease channel's."
          ]
        },
        {
          "name": "relayer_allowlist",
          "docs": [
            "Read-only membership gate."
          ]
        },
        {
          "name": "in_flight_transfers",
          "writable": true,
          "docs": [
            "The lease authority's in-flight transfer counter PDA - the ICS-20 sender of lease-flow sends - advanced inside the nested send leg. In the per-lease lookup table only for leases opened at v0.2.0 or later. Address derived on chain; no bump in the payload."
          ]
        }
      ],
      "args": [
        {
          "name": "recv_packet",
          "type": {
            "defined": {
              "name": "WireRecvMsg"
            }
          }
        },
        {
          "name": "lease_bumps",
          "type": {
            "defined": {
              "name": "LeaseBumps"
            }
          }
        },
        {
          "name": "mint_bump",
          "type": "u8"
        },
        {
          "name": "token_bump",
          "type": "u8"
        },
        {
          "name": "send_bumps",
          "type": {
            "defined": {
              "name": "TransferOutSendBumps"
            }
          }
        },
        {
          "name": "recv_storage_bumps",
          "type": {
            "defined": {
              "name": "RecvStorageBumps"
            }
          }
        }
      ]
    },
    {
      "name": "close_lease",
      "docs": [
        "Remote-Lease receive performing terminal lease teardown: closes the primary token accounts (residual balances become error acks), deactivates the per-lease lookup table, decrements the census, and closes the Lease PDA LAST so a partial failure stays replayable. Relayer-signed, allowlist-gated. Exactly 23 accounts."
      ],
      "discriminator": [
        4,
        3
      ],
      "accounts": [
        {
          "name": "payer",
          "writable": true,
          "signer": true,
          "docs": [
            "The relayer; allowlist member."
          ]
        },
        {
          "name": "lease",
          "writable": true,
          "docs": [
            "Closed LAST."
          ]
        },
        {
          "name": "lease_authority",
          "docs": [
            "Read-only; token close authority via seeds."
          ]
        },
        {
          "name": "collateral_tokens",
          "writable": true,
          "docs": [
            "Closed; a residual balance yields an error ack naming the mint."
          ]
        },
        {
          "name": "debt_tokens",
          "writable": true,
          "docs": [
            "Closed if a primary slot; a shared-mint duplicate is ignored."
          ]
        },
        {
          "name": "position_tokens",
          "writable": true,
          "docs": [
            "Same primary-slot rule."
          ]
        },
        {
          "name": "collateral_token_program",
          "docs": [
            "Cross-checked against the account's runtime owner."
          ]
        },
        {
          "name": "debt_token_program",
          "docs": [
            "Ignored on a non-primary slot."
          ]
        },
        {
          "name": "position_token_program",
          "docs": [
            "Ignored on a non-primary slot."
          ]
        },
        {
          "name": "vault_authority",
          "writable": true,
          "docs": [
            "Reclaimed rent destination; recv-store sponsor."
          ]
        },
        {
          "name": "program",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "client",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "lease_channel_binding",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "system_program",
          "address": "11111111111111111111111111111111"
        },
        {
          "name": "connection",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "channel",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "packet_receipt",
          "writable": true
        },
        {
          "name": "packet_acknowledgement",
          "writable": true
        },
        {
          "name": "relayer_allowlist",
          "docs": [
            "Read-only membership gate."
          ]
        },
        {
          "name": "alt_program",
          "address": "AddressLookupTab1e1111111111111111111111111"
        },
        {
          "name": "lease_table",
          "writable": true,
          "docs": [
            "The per-lease lookup table, deactivated before the Lease close; key-checked against the lease's recorded table."
          ]
        },
        {
          "name": "channel_token_census",
          "writable": true,
          "docs": [
            "live_leases retreated."
          ]
        },
        {
          "name": "in_flight_transfers",
          "docs": [
            "The lease authority's in-flight transfer counter, read as the close gate before any write: a System-owned blank at the derived address admits the close; a program-owned counter refuses it (class 75, cause CloseOverInFlightTransfers) with the packet left re-deliverable - it clears with no operator action as settlements land. Address derived on chain; no bump in the payload."
          ]
        }
      ],
      "args": [
        {
          "name": "recv_packet",
          "type": {
            "defined": {
              "name": "WireRecvMsg"
            }
          }
        },
        {
          "name": "lease_bumps",
          "type": {
            "defined": {
              "name": "LeaseBumps"
            }
          }
        },
        {
          "name": "token_bumps",
          "type": {
            "defined": {
              "name": "TokenBumps"
            }
          }
        },
        {
          "name": "vault_authority_bump",
          "type": "u8"
        },
        {
          "name": "ibc_host_bumps",
          "type": {
            "defined": {
              "name": "IBCHostBumps"
            }
          }
        },
        {
          "name": "recv_storage_bumps",
          "type": {
            "defined": {
              "name": "RecvStorageBumps"
            }
          }
        },
        {
          "name": "census_bump",
          "type": "u8"
        }
      ]
    },
    {
      "name": "swap_two",
      "docs": [
        "Remote-Lease receive swapping two input currencies into one shared output through the bound engine, one CPI per leg; the combined output credit is floored on the packet's min_out. 20 fixed accounts; slot 20 onward is leg A's engine tail immediately followed by leg B's (remaining accounts, split at the payload's leg_a_engine_account_count - which is the LAST payload field, after both instruction-data blobs). The three resolved mints must be pairwise distinct. Post-CPI failures revert the instruction. Relayer-signed, allowlist-gated."
      ],
      "discriminator": [
        4,
        4
      ],
      "accounts": [
        {
          "name": "payer",
          "writable": true,
          "signer": true,
          "docs": [
            "The relayer; allowlist member, validated first."
          ]
        },
        {
          "name": "lease",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "lease_authority",
          "docs": [
            "Read-only; signs both leg CPIs via seeds."
          ]
        },
        {
          "name": "from_tokens",
          "writable": true,
          "docs": [
            "Leg A's debited token account."
          ]
        },
        {
          "name": "from_tokens_2",
          "writable": true,
          "docs": [
            "Leg B's debited token account."
          ]
        },
        {
          "name": "to_tokens",
          "writable": true,
          "docs": [
            "The shared output account, credited by both legs."
          ]
        },
        {
          "name": "engine_program",
          "docs": [
            "Read-only; shared by both legs."
          ]
        },
        {
          "name": "lease_channel_binding",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "program",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "client",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "system_program",
          "address": "11111111111111111111111111111111"
        },
        {
          "name": "connection",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "channel",
          "docs": [
            "Read-only."
          ]
        },
        {
          "name": "packet_receipt",
          "writable": true
        },
        {
          "name": "packet_acknowledgement",
          "writable": true
        },
        {
          "name": "vault_authority",
          "writable": true,
          "docs": [
            "Sponsors the recv-store writes."
          ]
        },
        {
          "name": "from_mint",
          "docs": [
            "Leg A's debited mint, read-only; Token-2022 allow-list re-checked per distinct mint."
          ]
        },
        {
          "name": "from_mint_2",
          "docs": [
            "Leg B's debited mint, read-only."
          ]
        },
        {
          "name": "to_mint",
          "docs": [
            "The shared output mint, read-only."
          ]
        },
        {
          "name": "relayer_allowlist",
          "docs": [
            "Read-only; the last fixed slot, below the two tails."
          ]
        }
      ],
      "args": [
        {
          "name": "recv_packet",
          "type": {
            "defined": {
              "name": "WireRecvMsg"
            }
          }
        },
        {
          "name": "lease_bumps",
          "type": {
            "defined": {
              "name": "LeaseBumps"
            }
          }
        },
        {
          "name": "mint_bumps",
          "type": {
            "defined": {
              "name": "SwapTwoMintBumps"
            }
          }
        },
        {
          "name": "token_bumps",
          "type": {
            "defined": {
              "name": "SwapTwoTokenBumps"
            }
          }
        },
        {
          "name": "ibc_host_bumps",
          "type": {
            "defined": {
              "name": "IBCHostBumps"
            }
          }
        },
        {
          "name": "recv_storage_bumps",
          "type": {
            "defined": {
              "name": "RecvStorageBumps"
            }
          }
        },
        {
          "name": "vault_authority_bump",
          "type": "u8"
        },
        {
          "name": "leg_a_instruction_data",
          "type": "bytes"
        },
        {
          "name": "leg_b_instruction_data",
          "type": "bytes"
        },
        {
          "name": "leg_a_engine_account_count",
          "type": "u16",
          "docs": [
            "Split point of the concatenated engine account tails; last on the wire."
          ]
        }
      ]
    }
  ],
  "accounts": [
    {
      "name": "ProgramState",
      "discriminator": [],
      "docs": [
        "The Program singleton PDA (seeds ['pr', ordinal]): recorded admin plus next/live entity counters. No data discriminator - identify by address."
      ]
    },
    {
      "name": "ChannelTokenCensus",
      "discriminator": [],
      "docs": [
        "Per-channel census PDA (channel seeds + 'tc'); the teardown gates read it."
      ]
    },
    {
      "name": "ClientConnections",
      "discriminator": [],
      "docs": [
        "Per-client connection-ordinal list PDA (client seeds + 'cc')."
      ]
    },
    {
      "name": "ConnectionChannels",
      "discriminator": [],
      "docs": [
        "Per-connection channel-ordinal list PDA (connection seeds + 'co')."
      ]
    },
    {
      "name": "NextPacketSequence",
      "discriminator": [],
      "docs": [
        "Per-channel next send sequence PDA (channel seeds + 'ns'); a bare Borsh u64."
      ]
    },
    {
      "name": "LeaseChannelBinding",
      "discriminator": [],
      "docs": [
        "Per-lease-channel binding PDA (channel seeds + 'le'): bound transfer channel, counterparty channel, engine label."
      ]
    },
    {
      "name": "RelayerAllowlist",
      "discriminator": [],
      "docs": [
        "Program-wide relayer roster PDA (['pr', ordinal, 'ra']); a Borsh Vec<Pubkey>."
      ]
    },
    {
      "name": "StaticsTablePointer",
      "discriminator": [],
      "docs": [
        "Program-wide pointer PDA (['pr', ordinal, 'st']) holding the statics lookup table's address."
      ]
    },
    {
      "name": "Lease",
      "discriminator": [],
      "docs": [
        "Per-lease PDA (channel seeds + ['ls', nolus lease address]); exists if and only if the lease is open."
      ]
    },
    {
      "name": "InFlightTransfers",
      "discriminator": [],
      "docs": [
        "Per-sender in-flight ICS-20 transfer counter PDA (['pr', ordinal, 'in', sender pubkey]): a single Borsh u16 LE, exactly 2 bytes, never resized. Existence is the whole signal - created at count 1 on the sender's first counted send, closed when the count returns to zero. Probe existence first: absence is the common healthy reading, and a zero image is corruption, not a reading. The sender key is the LeaseAuthority PDA for lease-flow sends and the funding wallet for wallet sends."
      ]
    }
  ],
  "types": [
    {
      "name": "ProgramState",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "bootstrap_user",
            "type": "pubkey",
            "docs": [
              "The recorded admin."
            ]
          },
          {
            "name": "instance_ordinal",
            "type": "u16"
          },
          {
            "name": "counts",
            "type": {
              "defined": {
                "name": "UsedOrdinals"
              }
            }
          }
        ]
      }
    },
    {
      "name": "UsedOrdinals",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "clients",
            "type": "u16"
          },
          {
            "name": "connections",
            "type": "u16"
          },
          {
            "name": "channels",
            "type": "u16"
          },
          {
            "name": "live_clients",
            "type": "u16"
          },
          {
            "name": "live_connections",
            "type": "u16"
          },
          {
            "name": "live_channels",
            "type": "u16"
          }
        ]
      }
    },
    {
      "name": "ChannelTokenCensus",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "live_escrows",
            "type": "u16"
          },
          {
            "name": "live_mints",
            "type": "u16"
          },
          {
            "name": "live_leases",
            "type": "u16"
          },
          {
            "name": "bound_lease_channels",
            "type": "u16"
          }
        ]
      }
    },
    {
      "name": "ClientConnections",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "ordinals",
            "type": {
              "vec": "u16"
            }
          }
        ]
      }
    },
    {
      "name": "ConnectionChannels",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "ordinals",
            "type": {
              "vec": "u16"
            }
          }
        ]
      }
    },
    {
      "name": "NextPacketSequence",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "next_sequence",
            "type": "u64"
          }
        ]
      }
    },
    {
      "name": "LeaseChannelBinding",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "transfer_channel",
            "type": "u16",
            "docs": [
              "Ordinal of the bound ICS-20 transfer channel."
            ]
          },
          {
            "name": "counterparty_channel",
            "type": "u64",
            "docs": [
              "The counterparty channel ordinal."
            ]
          },
          {
            "name": "engine",
            "type": "string",
            "docs": [
              "Swap engine label, e.g. 'jupiter'."
            ]
          }
        ]
      }
    },
    {
      "name": "RelayerAllowlist",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "relayers",
            "type": {
              "vec": "pubkey"
            }
          }
        ]
      }
    },
    {
      "name": "StaticsTablePointer",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "table",
            "type": "pubkey"
          }
        ]
      }
    },
    {
      "name": "Lease",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "cosmos_lease_addr",
            "type": "string",
            "docs": [
              "The Nolus lease contract's bech32 address."
            ]
          },
          {
            "name": "collateral_mint",
            "type": "pubkey"
          },
          {
            "name": "debt_mint",
            "type": "pubkey"
          },
          {
            "name": "position_mint",
            "type": "pubkey"
          },
          {
            "name": "table",
            "type": "pubkey",
            "docs": [
              "The per-lease lookup table's address."
            ]
          }
        ]
      }
    },
    {
      "name": "InFlightTransfers",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "count",
            "type": "u16"
          }
        ]
      }
    },
    {
      "name": "NewSourceMintBumps",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "program",
            "type": "u8"
          },
          {
            "name": "escrow",
            "type": "u8"
          },
          {
            "name": "vault_authority",
            "type": "u8"
          },
          {
            "name": "census",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "NewSinkMintBumps",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "program",
            "type": "u8"
          },
          {
            "name": "mint",
            "type": "u8"
          },
          {
            "name": "vault_authority",
            "type": "u8"
          },
          {
            "name": "census",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "MintMetadataData",
      "docs": [
        "The three strings a Metaplex DataV2 publishes; caps 32/10/200 bytes (name/symbol/uri), refused as MetadataFieldTooLong ahead of the CPI."
      ],
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "name",
            "type": "string"
          },
          {
            "name": "symbol",
            "type": "string"
          },
          {
            "name": "uri",
            "type": "string"
          }
        ]
      }
    },
    {
      "name": "MintMetadataBumps",
      "docs": [
        "Bumps for the solray PDAs both metadata instructions read. The Metaplex metadata PDA carries no bump here - Metaplex derives and checks that address itself. vault_authority is pinned to the canonical bump on chain."
      ],
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "program",
            "type": "u8"
          },
          {
            "name": "vault_authority",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "CreateClientBumps",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "program",
            "type": "u8"
          },
          {
            "name": "client",
            "type": "u8"
          },
          {
            "name": "client_connections",
            "type": "u8"
          },
          {
            "name": "vault_authority",
            "type": "u8"
          },
          {
            "name": "relayer_allowlist",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "CloseClientBumps",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "program",
            "type": "u8"
          },
          {
            "name": "client",
            "type": "u8"
          },
          {
            "name": "client_connections",
            "type": "u8"
          },
          {
            "name": "vault_authority",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "OpenTryConnectionBumps",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "program",
            "type": "u8"
          },
          {
            "name": "client",
            "type": "u8"
          },
          {
            "name": "client_connections",
            "type": "u8"
          },
          {
            "name": "connection",
            "type": "u8"
          },
          {
            "name": "vault_authority",
            "type": "u8"
          },
          {
            "name": "connection_channels",
            "type": "u8"
          },
          {
            "name": "relayer_allowlist",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "OpenConfirmConnectionBumps",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "program",
            "type": "u8"
          },
          {
            "name": "client",
            "type": "u8"
          },
          {
            "name": "connection",
            "type": "u8"
          },
          {
            "name": "vault_authority",
            "type": "u8"
          },
          {
            "name": "relayer_allowlist",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "CloseConnectionBumps",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "program",
            "type": "u8"
          },
          {
            "name": "client_connections",
            "type": "u8"
          },
          {
            "name": "connection",
            "type": "u8"
          },
          {
            "name": "connection_channels",
            "type": "u8"
          },
          {
            "name": "vault_authority",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "OpenTryChannelBumps",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "program",
            "type": "u8"
          },
          {
            "name": "client",
            "type": "u8"
          },
          {
            "name": "connection",
            "type": "u8"
          },
          {
            "name": "channel",
            "type": "u8"
          },
          {
            "name": "vault_authority",
            "type": "u8"
          },
          {
            "name": "next_seq_send",
            "type": "u8"
          },
          {
            "name": "packet_commitment",
            "type": "u8"
          },
          {
            "name": "packet_receipt",
            "type": "u8"
          },
          {
            "name": "packet_acknowledgement",
            "type": "u8"
          },
          {
            "name": "connection_channels",
            "type": "u8"
          },
          {
            "name": "channel_token_census",
            "type": "u8"
          },
          {
            "name": "channel_binding",
            "type": "u8"
          },
          {
            "name": "transfer_channel",
            "type": "u8"
          },
          {
            "name": "relayer_allowlist",
            "type": "u8"
          },
          {
            "name": "transfer_channel_token_census",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "OpenConfirmChannelBumps",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "program",
            "type": "u8"
          },
          {
            "name": "client",
            "type": "u8"
          },
          {
            "name": "connection",
            "type": "u8"
          },
          {
            "name": "channel",
            "type": "u8"
          },
          {
            "name": "vault_authority",
            "type": "u8"
          },
          {
            "name": "relayer_allowlist",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "CloseConfirmChannelBumps",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "program",
            "type": "u8"
          },
          {
            "name": "client",
            "type": "u8"
          },
          {
            "name": "connection",
            "type": "u8"
          },
          {
            "name": "channel",
            "type": "u8"
          },
          {
            "name": "vault_authority",
            "type": "u8"
          },
          {
            "name": "next_seq_send",
            "type": "u8"
          },
          {
            "name": "packet_receipt",
            "type": "u8"
          },
          {
            "name": "packet_acknowledgement",
            "type": "u8"
          },
          {
            "name": "connection_channels",
            "type": "u8"
          },
          {
            "name": "relayer_allowlist",
            "type": "u8"
          },
          {
            "name": "channel_token_census",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "PurgeStaleEntriesBumps",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "program",
            "type": "u8"
          },
          {
            "name": "vault_authority",
            "type": "u8"
          },
          {
            "name": "packet_receipt",
            "type": "u8"
          },
          {
            "name": "packet_acknowledgement",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "FinalizeChannelBumps",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "program",
            "type": "u8"
          },
          {
            "name": "channel",
            "type": "u8"
          },
          {
            "name": "packet_commitment",
            "type": "u8"
          },
          {
            "name": "vault_authority",
            "type": "u8"
          },
          {
            "name": "channel_token_census",
            "type": "u8"
          },
          {
            "name": "lease_channel_binding",
            "type": "u8"
          },
          {
            "name": "transfer_channel_token_census",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "CloseEscrowBumps",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "program",
            "type": "u8"
          },
          {
            "name": "escrow",
            "type": "u8"
          },
          {
            "name": "vault_authority",
            "type": "u8"
          },
          {
            "name": "channel_token_census",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "CloseRemoteTokenMintBumps",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "program",
            "type": "u8"
          },
          {
            "name": "remote_token_mint",
            "type": "u8"
          },
          {
            "name": "vault_authority",
            "type": "u8"
          },
          {
            "name": "channel_token_census",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "AddRelayerBumps",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "program",
            "type": "u8"
          },
          {
            "name": "relayer_allowlist",
            "type": "u8"
          },
          {
            "name": "vault_authority",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "RemoveRelayerBumps",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "program",
            "type": "u8"
          },
          {
            "name": "relayer_allowlist",
            "type": "u8"
          },
          {
            "name": "vault_authority",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "CreateStaticsTableBumps",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "program",
            "type": "u8"
          },
          {
            "name": "statics_pointer",
            "type": "u8"
          },
          {
            "name": "vault_authority",
            "type": "u8"
          },
          {
            "name": "client",
            "type": "u8"
          },
          {
            "name": "connection",
            "type": "u8"
          },
          {
            "name": "channel",
            "type": "u8"
          },
          {
            "name": "packet_receipt",
            "type": "u8"
          },
          {
            "name": "packet_acknowledgement",
            "type": "u8"
          },
          {
            "name": "relayer_allowlist",
            "type": "u8"
          },
          {
            "name": "lease_channel_binding",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "CloseDeactivatedTableBumps",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "vault_authority",
            "type": "u8",
            "docs": [
              "NOTE: vault_authority comes first in this carrier, unlike every other."
            ]
          },
          {
            "name": "statics_pointer",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "ExtendStaticsTableBumps",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "program",
            "type": "u8"
          },
          {
            "name": "statics_pointer",
            "type": "u8"
          },
          {
            "name": "vault_authority",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "RotateBootstrapUserBumps",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "program",
            "type": "u8"
          },
          {
            "name": "vault_authority",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "SendSourceBumps",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "from_token_account",
            "type": "u8"
          },
          {
            "name": "escrow",
            "type": "u8"
          },
          {
            "name": "vault_authority",
            "type": "u8"
          },
          {
            "name": "program",
            "type": "u8"
          },
          {
            "name": "client",
            "type": "u8"
          },
          {
            "name": "connection",
            "type": "u8"
          },
          {
            "name": "channel",
            "type": "u8"
          },
          {
            "name": "next_packet_sequence",
            "type": "u8"
          },
          {
            "name": "packet_commitments",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "SendSinkBumps",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "from_token_account",
            "type": "u8"
          },
          {
            "name": "mint",
            "type": "u8"
          },
          {
            "name": "vault_authority",
            "type": "u8"
          },
          {
            "name": "program",
            "type": "u8"
          },
          {
            "name": "client",
            "type": "u8"
          },
          {
            "name": "connection",
            "type": "u8"
          },
          {
            "name": "channel",
            "type": "u8"
          },
          {
            "name": "next_packet_sequence",
            "type": "u8"
          },
          {
            "name": "packet_commitments",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "ReceiveSourceBumps",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "escrow",
            "type": "u8"
          },
          {
            "name": "to_token_account",
            "type": "u8"
          },
          {
            "name": "vault_authority",
            "type": "u8"
          },
          {
            "name": "program",
            "type": "u8"
          },
          {
            "name": "client",
            "type": "u8"
          },
          {
            "name": "connection",
            "type": "u8"
          },
          {
            "name": "channel",
            "type": "u8"
          },
          {
            "name": "packet_receipt",
            "type": "u8"
          },
          {
            "name": "packet_acknowledgement",
            "type": "u8"
          },
          {
            "name": "relayer_allowlist",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "ReceiveSinkBumps",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "mint",
            "type": "u8"
          },
          {
            "name": "to_token_account",
            "type": "u8"
          },
          {
            "name": "vault_authority",
            "type": "u8"
          },
          {
            "name": "program",
            "type": "u8"
          },
          {
            "name": "client",
            "type": "u8"
          },
          {
            "name": "connection",
            "type": "u8"
          },
          {
            "name": "channel",
            "type": "u8"
          },
          {
            "name": "packet_receipt",
            "type": "u8"
          },
          {
            "name": "packet_acknowledgement",
            "type": "u8"
          },
          {
            "name": "relayer_allowlist",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "AcknowledgeSourceBumps",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "escrow",
            "type": "u8"
          },
          {
            "name": "to_token_account",
            "type": "u8"
          },
          {
            "name": "vault_authority",
            "type": "u8"
          },
          {
            "name": "program",
            "type": "u8"
          },
          {
            "name": "client",
            "type": "u8"
          },
          {
            "name": "connection",
            "type": "u8"
          },
          {
            "name": "channel",
            "type": "u8"
          },
          {
            "name": "packet_commitments",
            "type": "u8"
          },
          {
            "name": "relayer_allowlist",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "AcknowledgeSinkBumps",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "mint",
            "type": "u8"
          },
          {
            "name": "to_token_account",
            "type": "u8"
          },
          {
            "name": "vault_authority",
            "type": "u8"
          },
          {
            "name": "program",
            "type": "u8"
          },
          {
            "name": "client",
            "type": "u8"
          },
          {
            "name": "connection",
            "type": "u8"
          },
          {
            "name": "channel",
            "type": "u8"
          },
          {
            "name": "packet_commitments",
            "type": "u8"
          },
          {
            "name": "relayer_allowlist",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "TimeoutSourceBumps",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "escrow",
            "type": "u8"
          },
          {
            "name": "to_token_account",
            "type": "u8"
          },
          {
            "name": "vault_authority",
            "type": "u8"
          },
          {
            "name": "program",
            "type": "u8"
          },
          {
            "name": "client",
            "type": "u8"
          },
          {
            "name": "connection",
            "type": "u8"
          },
          {
            "name": "channel",
            "type": "u8"
          },
          {
            "name": "packet_commitments",
            "type": "u8"
          },
          {
            "name": "relayer_allowlist",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "TimeoutSinkBumps",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "mint",
            "type": "u8"
          },
          {
            "name": "to_token_account",
            "type": "u8"
          },
          {
            "name": "vault_authority",
            "type": "u8"
          },
          {
            "name": "program",
            "type": "u8"
          },
          {
            "name": "client",
            "type": "u8"
          },
          {
            "name": "connection",
            "type": "u8"
          },
          {
            "name": "channel",
            "type": "u8"
          },
          {
            "name": "packet_commitments",
            "type": "u8"
          },
          {
            "name": "relayer_allowlist",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "TimeoutOnCloseSourceBumps",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "escrow",
            "type": "u8"
          },
          {
            "name": "to_token_account",
            "type": "u8"
          },
          {
            "name": "vault_authority",
            "type": "u8"
          },
          {
            "name": "program",
            "type": "u8"
          },
          {
            "name": "client",
            "type": "u8"
          },
          {
            "name": "connection",
            "type": "u8"
          },
          {
            "name": "channel",
            "type": "u8"
          },
          {
            "name": "packet_commitments",
            "type": "u8"
          },
          {
            "name": "relayer_allowlist",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "TimeoutOnCloseSinkBumps",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "mint",
            "type": "u8"
          },
          {
            "name": "to_token_account",
            "type": "u8"
          },
          {
            "name": "vault_authority",
            "type": "u8"
          },
          {
            "name": "program",
            "type": "u8"
          },
          {
            "name": "client",
            "type": "u8"
          },
          {
            "name": "connection",
            "type": "u8"
          },
          {
            "name": "channel",
            "type": "u8"
          },
          {
            "name": "packet_commitments",
            "type": "u8"
          },
          {
            "name": "relayer_allowlist",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "SendSourceDetails",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "at_channel",
            "type": "u16",
            "docs": [
              "Local channel ordinal (little-endian on the wire)."
            ]
          },
          {
            "name": "recipient",
            "type": "string",
            "docs": [
              "Remote-chain recipient address."
            ]
          },
          {
            "name": "mint_key",
            "type": "pubkey"
          },
          {
            "name": "amount",
            "type": "u64"
          },
          {
            "name": "memo",
            "type": "string"
          }
        ]
      }
    },
    {
      "name": "SendSinkDetails",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "at_channel",
            "type": "u16"
          },
          {
            "name": "recipient",
            "type": "string"
          },
          {
            "name": "remote_token_denom",
            "type": "string",
            "docs": [
              "The remote denom the voucher wraps."
            ]
          },
          {
            "name": "amount",
            "type": "u64"
          },
          {
            "name": "memo",
            "type": "string"
          }
        ]
      }
    },
    {
      "name": "WirePacket",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "at_channel",
            "type": "u16",
            "docs": [
              "Local channel ordinal; the four ICS-24 identity strings do not travel."
            ]
          },
          {
            "name": "sequence",
            "type": "u64"
          },
          {
            "name": "data",
            "type": "bytes",
            "docs": [
              "ICS-20 JSON body on the transfer paths; the Borsh PacketEnvelope on the RemoteLease paths."
            ]
          },
          {
            "name": "timeout",
            "type": {
              "defined": {
                "name": "Timeout"
              }
            }
          }
        ]
      }
    },
    {
      "name": "WireRecvMsg",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "packet",
            "type": {
              "defined": {
                "name": "WirePacket"
              }
            }
          },
          {
            "name": "proof_commitment_on_a",
            "type": "bytes",
            "docs": [
              "A 1-byte placeholder under the trusted-relayer model."
            ]
          },
          {
            "name": "proof_height_on_a",
            "type": {
              "defined": {
                "name": "Height"
              }
            }
          }
        ]
      }
    },
    {
      "name": "WireAckMsg",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "packet",
            "type": {
              "defined": {
                "name": "WirePacket"
              }
            }
          },
          {
            "name": "acknowledgement",
            "type": "bytes"
          },
          {
            "name": "proof_acked_on_b",
            "type": "bytes"
          },
          {
            "name": "proof_height_on_b",
            "type": {
              "defined": {
                "name": "Height"
              }
            }
          }
        ]
      }
    },
    {
      "name": "WireTimeoutMsg",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "packet",
            "type": {
              "defined": {
                "name": "WirePacket"
              }
            }
          },
          {
            "name": "next_seq_recv_on_b",
            "type": "u64"
          },
          {
            "name": "proof_unreceived_on_b",
            "type": "bytes"
          },
          {
            "name": "proof_height_on_b",
            "type": {
              "defined": {
                "name": "Height"
              }
            }
          }
        ]
      }
    },
    {
      "name": "WireTimeoutOnCloseMsg",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "packet",
            "type": {
              "defined": {
                "name": "WirePacket"
              }
            }
          },
          {
            "name": "next_seq_recv_on_b",
            "type": "u64"
          },
          {
            "name": "proof_unreceived_on_b",
            "type": "bytes"
          },
          {
            "name": "proof_close_on_b",
            "type": "bytes"
          },
          {
            "name": "proof_height_on_b",
            "type": {
              "defined": {
                "name": "Height"
              }
            }
          },
          {
            "name": "upgrade_sequence_on_a",
            "type": "u64"
          }
        ]
      }
    },
    {
      "name": "Timeout",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "height",
            "type": {
              "defined": {
                "name": "TimeoutHeight"
              }
            }
          },
          {
            "name": "time",
            "type": {
              "defined": {
                "name": "TimeoutTimestamp"
              }
            }
          }
        ]
      }
    },
    {
      "name": "TimeoutHeight",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "Never"
          },
          {
            "name": "At",
            "fields": [
              {
                "defined": {
                  "name": "Height"
                }
              }
            ]
          }
        ]
      }
    },
    {
      "name": "TimeoutTimestamp",
      "docs": [
        "The At payload is written as u64 little-endian nanoseconds (manual Borsh impl in ibc-rs Timestamp)."
      ],
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "Never"
          },
          {
            "name": "At",
            "fields": [
              "u64"
            ]
          }
        ]
      }
    },
    {
      "name": "Height",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "revision_number",
            "type": "u64"
          },
          {
            "name": "revision_height",
            "type": "u64"
          }
        ]
      }
    },
    {
      "name": "MsgConnectionOpenTry",
      "docs": [
        "ibc-rs ConnOpenTry; manual Borsh impl. delay_period is written as u64 nanoseconds. The deprecated fields are all still on the wire."
      ],
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "client_id_on_b",
            "type": "string"
          },
          {
            "name": "client_state_of_b_on_a",
            "type": {
              "defined": {
                "name": "Any"
              }
            }
          },
          {
            "name": "counterparty",
            "type": {
              "defined": {
                "name": "ConnectionCounterparty"
              }
            }
          },
          {
            "name": "versions_on_a",
            "type": {
              "vec": {
                "defined": {
                  "name": "ConnectionVersion"
                }
              }
            }
          },
          {
            "name": "proof_conn_end_on_a",
            "type": "bytes"
          },
          {
            "name": "proof_client_state_of_b_on_a",
            "type": "bytes"
          },
          {
            "name": "proof_consensus_state_of_b_on_a",
            "type": "bytes"
          },
          {
            "name": "proofs_height_on_a",
            "type": {
              "defined": {
                "name": "Height"
              }
            }
          },
          {
            "name": "consensus_height_of_b_on_a",
            "type": {
              "defined": {
                "name": "Height"
              }
            }
          },
          {
            "name": "delay_period_nanos",
            "type": "u64"
          },
          {
            "name": "signer",
            "type": "string"
          },
          {
            "name": "proof_consensus_state_of_b",
            "type": {
              "option": "bytes"
            }
          },
          {
            "name": "previous_connection_id",
            "type": "string"
          }
        ]
      }
    },
    {
      "name": "MsgConnectionOpenConfirm",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "conn_id_on_b",
            "type": "string"
          },
          {
            "name": "proof_conn_end_on_a",
            "type": "bytes"
          },
          {
            "name": "proof_height_on_a",
            "type": {
              "defined": {
                "name": "Height"
              }
            }
          },
          {
            "name": "signer",
            "type": "string"
          }
        ]
      }
    },
    {
      "name": "MsgChannelOpenTry",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "port_id_on_b",
            "type": "string"
          },
          {
            "name": "connection_hops_on_b",
            "type": {
              "vec": "string"
            }
          },
          {
            "name": "port_id_on_a",
            "type": "string"
          },
          {
            "name": "chan_id_on_a",
            "type": "string"
          },
          {
            "name": "version_supported_on_a",
            "type": "string"
          },
          {
            "name": "proof_chan_end_on_a",
            "type": "bytes"
          },
          {
            "name": "proof_height_on_a",
            "type": {
              "defined": {
                "name": "Height"
              }
            }
          },
          {
            "name": "ordering",
            "type": {
              "defined": {
                "name": "Order"
              }
            }
          },
          {
            "name": "signer",
            "type": "string"
          },
          {
            "name": "version_proposal",
            "type": "string",
            "docs": [
              "Deprecated upstream but still on the wire."
            ]
          }
        ]
      }
    },
    {
      "name": "MsgChannelOpenConfirm",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "port_id_on_b",
            "type": "string"
          },
          {
            "name": "chan_id_on_b",
            "type": "string"
          },
          {
            "name": "proof_chan_end_on_a",
            "type": "bytes"
          },
          {
            "name": "proof_height_on_a",
            "type": {
              "defined": {
                "name": "Height"
              }
            }
          },
          {
            "name": "signer",
            "type": "string"
          }
        ]
      }
    },
    {
      "name": "MsgChannelCloseConfirm",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "port_id_on_b",
            "type": "string"
          },
          {
            "name": "chan_id_on_b",
            "type": "string"
          },
          {
            "name": "proof_chan_end_on_a",
            "type": "bytes"
          },
          {
            "name": "proof_height_on_a",
            "type": {
              "defined": {
                "name": "Height"
              }
            }
          },
          {
            "name": "signer",
            "type": "string"
          },
          {
            "name": "upgrade_sequence_on_a",
            "type": "u64"
          }
        ]
      }
    },
    {
      "name": "ConnectionCounterparty",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "client_id",
            "type": "string"
          },
          {
            "name": "connection_id",
            "type": {
              "option": "string"
            }
          },
          {
            "name": "prefix",
            "type": "bytes"
          }
        ]
      }
    },
    {
      "name": "ConnectionVersion",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "identifier",
            "type": "string"
          },
          {
            "name": "features",
            "type": {
              "vec": "string"
            }
          }
        ]
      }
    },
    {
      "name": "Order",
      "docs": [
        "Positional Borsh discriminant: 0=None, 1=Unordered, 2=Ordered."
      ],
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "None"
          },
          {
            "name": "Unordered"
          },
          {
            "name": "Ordered"
          }
        ]
      }
    },
    {
      "name": "Any",
      "docs": [
        "google.protobuf.Any (tendermint-proto manual Borsh impl)."
      ],
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "type_url",
            "type": "string"
          },
          {
            "name": "value",
            "type": "bytes"
          }
        ]
      }
    },
    {
      "name": "LeaseBumps",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "lease",
            "type": "u8"
          },
          {
            "name": "lease_authority",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "MintBumps",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "collateral",
            "type": "u8"
          },
          {
            "name": "debt",
            "type": "u8"
          },
          {
            "name": "position",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "TokenBumps",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "collateral",
            "type": "u8"
          },
          {
            "name": "debt",
            "type": "u8"
          },
          {
            "name": "position",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "IBCHostBumps",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "program",
            "type": "u8"
          },
          {
            "name": "client",
            "type": "u8"
          },
          {
            "name": "binding",
            "type": "u8"
          },
          {
            "name": "relayer_allowlist",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "RecvStorageBumps",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "connection",
            "type": "u8"
          },
          {
            "name": "channel",
            "type": "u8"
          },
          {
            "name": "packet_receipt",
            "type": "u8"
          },
          {
            "name": "packet_acknowledgement",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "SwapMintBumps",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "from",
            "type": "u8"
          },
          {
            "name": "to",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "SwapTokenBumps",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "from",
            "type": "u8"
          },
          {
            "name": "to",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "SwapTwoMintBumps",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "from_a",
            "type": "u8"
          },
          {
            "name": "from_b",
            "type": "u8"
          },
          {
            "name": "to",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "SwapTwoTokenBumps",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "from_a",
            "type": "u8"
          },
          {
            "name": "from_b",
            "type": "u8"
          },
          {
            "name": "to",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "TransferOutSendBumps",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "program",
            "type": "u8"
          },
          {
            "name": "client",
            "type": "u8"
          },
          {
            "name": "connection",
            "type": "u8"
          },
          {
            "name": "binding",
            "type": "u8"
          },
          {
            "name": "escrow",
            "type": "u8"
          },
          {
            "name": "vault_authority",
            "type": "u8"
          },
          {
            "name": "channel",
            "type": "u8"
          },
          {
            "name": "next_packet_sequence",
            "type": "u8"
          },
          {
            "name": "packet_commitments",
            "type": "u8"
          },
          {
            "name": "relayer_allowlist",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "PacketEnvelope",
      "docs": [
        "SECOND LAYER, not instruction data: the Borsh content of WirePacket.data on the four RemoteLease receive paths. Trailing bytes are rejected."
      ],
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "version",
            "type": "u8",
            "docs": [
              "Always the single byte 0x01 (VERSION_TAG); any other byte fails the decode."
            ]
          },
          {
            "name": "lease",
            "type": "string",
            "docs": [
              "Nolus bech32 lease contract address."
            ]
          },
          {
            "name": "operation",
            "type": {
              "defined": {
                "name": "Operation"
              }
            }
          }
        ]
      }
    },
    {
      "name": "Operation",
      "docs": [
        "Envelope operation. NOTE: this discriminant order (OpenLease, CloseLease, Swap, TransferOut) differs from the instruction variant order."
      ],
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "OpenLease",
            "fields": [
              {
                "defined": {
                  "name": "OpenLeaseParams"
                }
              }
            ]
          },
          {
            "name": "CloseLease",
            "fields": [
              {
                "defined": {
                  "name": "CloseLeaseParams"
                }
              }
            ]
          },
          {
            "name": "Swap",
            "fields": [
              {
                "defined": {
                  "name": "SwapParams"
                }
              }
            ]
          },
          {
            "name": "TransferOut",
            "fields": [
              {
                "defined": {
                  "name": "TransferOutParams"
                }
              }
            ]
          }
        ]
      }
    },
    {
      "name": "OpenLeaseParams",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "expected_instance_ordinal",
            "type": "u16"
          },
          {
            "name": "downpayment_currency",
            "type": "string"
          },
          {
            "name": "lpn_currency",
            "type": "string"
          },
          {
            "name": "asset_currency",
            "type": "string"
          }
        ]
      }
    },
    {
      "name": "CloseLeaseParams",
      "type": {
        "kind": "struct",
        "fields": []
      }
    },
    {
      "name": "SwapParams",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "One",
            "fields": [
              {
                "name": "coin_in",
                "type": {
                  "defined": {
                    "name": "WireCoin"
                  }
                }
              },
              {
                "name": "min_out",
                "type": {
                  "defined": {
                    "name": "WireCoin"
                  }
                }
              }
            ]
          },
          {
            "name": "Two",
            "fields": [
              {
                "name": "coin_in_1",
                "type": {
                  "defined": {
                    "name": "WireCoin"
                  }
                }
              },
              {
                "name": "coin_in_2",
                "type": {
                  "defined": {
                    "name": "WireCoin"
                  }
                }
              },
              {
                "name": "min_out",
                "type": {
                  "defined": {
                    "name": "WireCoin"
                  }
                }
              }
            ]
          }
        ]
      }
    },
    {
      "name": "TransferOutParams",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "amount",
            "type": {
              "defined": {
                "name": "WireCoin"
              }
            }
          }
        ]
      }
    },
    {
      "name": "WireCoin",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "amount",
            "type": "u128"
          },
          {
            "name": "denom",
            "type": "string",
            "docs": [
              "Capped at 67 bytes (MAX_DENOM_BYTES)."
            ]
          }
        ]
      }
    }
  ],
  "errors": [
    {
      "code": 72,
      "name": "Unclassified",
      "msg": "No disposition class applies; stop and alert. Also the fallback for an unrecognised future class."
    },
    {
      "code": 73,
      "name": "AlreadyDone",
      "msg": "The requested transition is already in effect - a terminal success, not a failure to retry."
    },
    {
      "code": 74,
      "name": "Stale",
      "msg": "The submission raced a newer chain view; a re-read may let it through."
    },
    {
      "code": 75,
      "name": "PermanentInput",
      "msg": "The input is refused whatever the chain state; retrying the same bytes can only fail again."
    },
    {
      "code": 76,
      "name": "Unauthorized",
      "msg": "The signer is not permitted to drive this instruction."
    },
    {
      "code": 77,
      "name": "Funds",
      "msg": "On-chain balances block the operation until an operator moves funds."
    }
  ],
  "constants": [
    {
      "name": "SEED_PROGRAM",
      "type": "bytes",
      "value": "[112, 114]"
    },
    {
      "name": "SEED_CLIENT",
      "type": "bytes",
      "value": "[99, 108]"
    },
    {
      "name": "SEED_CLIENT_CONNECTIONS",
      "type": "bytes",
      "value": "[99, 99]"
    },
    {
      "name": "SEED_CONNECTION",
      "type": "bytes",
      "value": "[99, 110]"
    },
    {
      "name": "SEED_CONNECTION_CHANNELS",
      "type": "bytes",
      "value": "[99, 111]"
    },
    {
      "name": "SEED_CHANNEL",
      "type": "bytes",
      "value": "[99, 104]"
    },
    {
      "name": "SEED_MINT",
      "type": "bytes",
      "value": "[109, 116]"
    },
    {
      "name": "SEED_ESCROW",
      "type": "bytes",
      "value": "[101, 115]"
    },
    {
      "name": "SEED_VAULT_AUTHORITY",
      "type": "bytes",
      "value": "[118, 97]"
    },
    {
      "name": "SEED_NEXT_PACKET_SEQUENCE",
      "type": "bytes",
      "value": "[110, 115]"
    },
    {
      "name": "SEED_PACKET_COMMITMENTS",
      "type": "bytes",
      "value": "[112, 113]"
    },
    {
      "name": "SEED_PACKET_RECEIPTS",
      "type": "bytes",
      "value": "[114, 99]"
    },
    {
      "name": "SEED_PACKET_ACKNOWLEDGEMENTS",
      "type": "bytes",
      "value": "[112, 97]"
    },
    {
      "name": "SEED_LEASE",
      "type": "bytes",
      "value": "[108, 115]"
    },
    {
      "name": "SEED_LEASE_AUTHORITY",
      "type": "bytes",
      "value": "[108, 97]"
    },
    {
      "name": "SEED_LEASE_CHANNEL_BINDING",
      "type": "bytes",
      "value": "[108, 101]"
    },
    {
      "name": "SEED_CHANNEL_TOKEN_CENSUS",
      "type": "bytes",
      "value": "[116, 99]"
    },
    {
      "name": "SEED_RELAYER_ALLOWLIST",
      "type": "bytes",
      "value": "[114, 97]"
    },
    {
      "name": "SEED_STATICS_TABLE_POINTER",
      "type": "bytes",
      "value": "[115, 116]"
    },
    {
      "name": "SEED_IN_FLIGHT_TRANSFERS",
      "type": "bytes",
      "value": "[105, 110]"
    }
  ]
}
