{
    "version": "0.1.0",
    "name": "protobook",
    "metadata": {  "origin": "anchor" },
    "instructions": [
      {
        "name": "cancel",
        "accounts": [
          { "name": "signer", "isMut": false, "isSigner": true },
          { "name": "order", "isMut": true, "isSigner": false }
        ],
        "args": []
      },
      {
        "name": "close",
        "accounts": [
          { "name": "signer", "isMut": false, "isSigner": true },
          { "name": "order", "isMut": true, "isSigner": false },
          { "name": "vaultA", "isMut": true, "isSigner": false },
          { "name": "vaultB", "isMut": true, "isSigner": false },
          { "name": "systemProgram", "isMut": false, "isSigner": false },
          { "name": "tokenProgram", "isMut": false, "isSigner": false }
        ],
        "args": []
      },
      {
        "name": "collect",
        "accounts": [
          { "name": "signer", "isMut": false, "isSigner": true },
          { "name": "beneficiary", "isMut": true, "isSigner": false },
          { "name": "feeCollector", "isMut": true, "isSigner": false },
          { "name": "order", "isMut": true, "isSigner": false },
          { "name": "vault", "isMut": true, "isSigner": false },
          { "name": "tokenProgram", "isMut": false, "isSigner": false }
        ],
        "args": []
      },
      {
        "name": "fill",
        "accounts": [
          { "name": "signer", "isMut": false, "isSigner": true },
          { "name": "order", "isMut": true, "isSigner": false },
          { "name": "receipt", "isMut": true, "isSigner": false },
          { "name": "sender", "isMut": true, "isSigner": false },
          { "name": "vaultB", "isMut": true, "isSigner": false },
          { "name": "systemProgram", "isMut": false, "isSigner": false },
          { "name": "tokenProgram", "isMut": false, "isSigner": false }
        ],
        "args": [
          { "name": "amount", "type": "u64" }
        ]
      },
      {
        "name": "open",
        "accounts": [
          { "name": "signer", "isMut": false, "isSigner": true },
          { "name": "feeCollector", "isMut": false, "isSigner": false },
          { "name": "mintA", "isMut": false, "isSigner": false },
          { "name": "mintB", "isMut": false, "isSigner": false },
          { "name": "order", "isMut": true, "isSigner": false },
          { "name": "sender", "isMut": true, "isSigner": false },
          { "name": "vaultA", "isMut": true, "isSigner": false },
          { "name": "vaultB", "isMut": true, "isSigner": false },
          { "name": "systemProgram", "isMut": false, "isSigner": false },
          { "name": "tokenProgram", "isMut": false, "isSigner": false },
          { "name": "associatedTokenProgram", "isMut": false, "isSigner": false }
        ],
        "args": [
          { "name": "amountA", "type": "u64" },
          { "name": "amountB", "type": "u64" },
          { "name": "expiresAt", "type": "i64" },
          { "name": "fee", "type": "u64" },
          { "name": "id", "type": { "array": ["u8", 32] } }
        ]
      },
      {
        "name": "redeem",
        "accounts": [
          { "name": "signer", "isMut": false, "isSigner": true },
          { "name": "beneficiary", "isMut": true, "isSigner": false },
          { "name": "order", "isMut": true, "isSigner": false },
          { "name": "receipt", "isMut": true, "isSigner": false },
          { "name": "vault", "isMut": true, "isSigner": false },
          { "name": "systemProgram", "isMut": false, "isSigner": false },
          { "name": "tokenProgram", "isMut": false, "isSigner": false }
        ],
        "args": []
      }
    ],
    "accounts": [
      {
        "name": "Order",
        "type": {
          "kind": "struct",
          "fields": [
            { "name": "authority", "type": "publicKey" },
            { "name": "amountA", "type": "u64" },
            { "name": "amountB", "type": "u64" },
            { "name": "expiresAt", "type": "i64" },
            { "name": "fee", "type": "u64" },
            { "name": "feeCollector", "type": "publicKey" },
            { "name": "id", "type": { "array": ["u8", 32] } },
            { "name": "mintA", "type": "publicKey" },
            { "name": "mintB", "type": "publicKey" },
            { "name": "totalDeposits", "type": "u64" }
          ]
        }
      },
      {
        "name": "Receipt",
        "type": {
          "kind": "struct",
          "fields": [
            { "name": "authority", "type": "publicKey" },
            { "name": "deposit", "type": "u64" },
            { "name": "order", "type": "publicKey" }
          ]
        }
      }
    ],
    "types": [
      {
        "name": "ProtobookInstruction",
        "type": {
          "kind": "enum",
          "variants": [
            { "name": "Cancel" },
            { "name": "Close" },
            { "name": "Collect" },
            { "name": "Fill" },
            { "name": "Open" },
            { "name": "Redeem" }
          ]
        }
      },
      {
        "name": "Open",
        "type": {
          "kind": "struct",
          "fields": [
            { "name": "amountA", "type": "u64" },
            { "name": "amountB", "type": "u64" },
            { "name": "expiresAt", "type": "i64" },
            { "name": "fee", "type": "u64" },
            { "name": "id", "type": { "array": ["u8", 32] } }
          ]
        }
      },
      {
        "name": "Fill",
        "type": {
          "kind": "struct",
          "fields": [
            { "name": "amount", "type": "u64" }
          ]
        }
      }
    ]
}