{
  "version": "0.1.0",
  "name": "psyoptions_american_instrument",
  "instructions": [
    {
      "name": "validateData",
      "accounts": [
        {
          "name": "protocol",
          "isMut": false,
          "isSigner": true,
          "docs": [
            "protocol provided"
          ]
        },
        {
          "name": "americanMeta",
          "isMut": false,
          "isSigner": false,
          "docs": [
            "user provided"
          ]
        },
        {
          "name": "underlyingAssetMint",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "stableAssetMint",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "instrumentData",
          "type": "bytes"
        },
        {
          "name": "baseAssetIndex",
          "type": {
            "option": "u16"
          }
        },
        {
          "name": "instrumentDecimals",
          "type": "u8"
        }
      ]
    },
    {
      "name": "prepareToSettle",
      "accounts": [
        {
          "name": "protocol",
          "isMut": false,
          "isSigner": true,
          "docs": [
            "protocol provided"
          ]
        },
        {
          "name": "rfq",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "response",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "caller",
          "isMut": true,
          "isSigner": true,
          "docs": [
            "user provided"
          ]
        },
        {
          "name": "callerTokenAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "mint",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "escrow",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "rent",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "input",
          "type": {
            "array": [
              "u8",
              3
            ]
          }
        }
      ]
    },
    {
      "name": "settle",
      "accounts": [
        {
          "name": "protocol",
          "isMut": false,
          "isSigner": true,
          "docs": [
            "protocol provided"
          ]
        },
        {
          "name": "rfq",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "response",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "escrow",
          "isMut": true,
          "isSigner": false,
          "docs": [
            "user provided"
          ]
        },
        {
          "name": "receiverTokenAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "input",
          "type": {
            "array": [
              "u8",
              2
            ]
          }
        }
      ]
    },
    {
      "name": "revertPreparation",
      "accounts": [
        {
          "name": "protocol",
          "isMut": false,
          "isSigner": true,
          "docs": [
            "protocol provided"
          ]
        },
        {
          "name": "rfq",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "response",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "escrow",
          "isMut": true,
          "isSigner": false,
          "docs": [
            "user provided"
          ]
        },
        {
          "name": "tokens",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "input",
          "type": {
            "array": [
              "u8",
              3
            ]
          }
        }
      ]
    },
    {
      "name": "cleanUp",
      "accounts": [
        {
          "name": "protocol",
          "isMut": false,
          "isSigner": true,
          "docs": [
            "protocol provided"
          ]
        },
        {
          "name": "rfq",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "response",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "firstToPrepare",
          "isMut": true,
          "isSigner": false,
          "docs": [
            "user provided"
          ]
        },
        {
          "name": "escrow",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "backupReceiver",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "input",
          "type": {
            "array": [
              "u8",
              2
            ]
          }
        }
      ]
    }
  ],
  "types": [
    {
      "name": "OptionMarket",
      "docs": [
        "Data structure that contains all the information needed to maintain an open",
        "option market."
      ],
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "optionMint",
            "docs": [
              "The SPL Token mint address for the tokens that denote an option"
            ],
            "type": "publicKey"
          },
          {
            "name": "writerTokenMint",
            "docs": [
              "The SPL Token mint address for Writer Tokens that denote a written option"
            ],
            "type": "publicKey"
          },
          {
            "name": "underlyingAssetMint",
            "docs": [
              "The SPL Token Address that is held in the program's pool when an option is written"
            ],
            "type": "publicKey"
          },
          {
            "name": "quoteAssetMint",
            "docs": [
              "The SPL Token Address that denominates the strike price"
            ],
            "type": "publicKey"
          },
          {
            "name": "underlyingAmountPerContract",
            "docs": [
              "The amount of the **underlying asset** that derives a single option"
            ],
            "type": "u64"
          },
          {
            "name": "quoteAmountPerContract",
            "docs": [
              "The amount of **quote asset** that must be transfered when an option is exercised"
            ],
            "type": "u64"
          },
          {
            "name": "expirationUnixTimestamp",
            "docs": [
              "The Unix timestamp at which the contracts in this market expire"
            ],
            "type": "i64"
          },
          {
            "name": "underlyingAssetPool",
            "docs": [
              "Address for the liquidity pool that contains the underlying assset"
            ],
            "type": "publicKey"
          },
          {
            "name": "quoteAssetPool",
            "docs": [
              "Address for the liquidity pool that contains the quote asset when",
              "options are exercised"
            ],
            "type": "publicKey"
          },
          {
            "name": "mintFeeAccount",
            "docs": [
              "The SPL Token account (from the Associated Token Program) that collects",
              "fees on mint."
            ],
            "type": "publicKey"
          },
          {
            "name": "exerciseFeeAccount",
            "docs": [
              "The SPL Token account (from the Associated Token Program) that collects",
              "fees on exercise."
            ],
            "type": "publicKey"
          },
          {
            "name": "expired",
            "docs": [
              "A flag to set and use to when running a memcmp query.",
              "This will be set when Serum markets are closed and expiration is validated"
            ],
            "type": "bool"
          },
          {
            "name": "bumpSeed",
            "docs": [
              "Bump seed for the market PDA"
            ],
            "type": "u8"
          }
        ]
      }
    }
  ],
  "errors": [
    {
      "code": 6000,
      "name": "InvalidDataSize",
      "msg": "Invalid data size"
    },
    {
      "code": 6001,
      "name": "PassedMintDoesNotMatch",
      "msg": "Passed mint account does not match"
    },
    {
      "code": 6002,
      "name": "InvalidReceiver",
      "msg": "Passed account is not an associated token account of a receiver"
    },
    {
      "code": 6003,
      "name": "NotFirstToPrepare",
      "msg": "Passed address is not of a party first to prepare for settlement"
    },
    {
      "code": 6004,
      "name": "PassedAmericanMetaDoesNotMatch",
      "msg": "Passed metadata account does not match"
    },
    {
      "code": 6005,
      "name": "PassedUnderlyingAmountPerContractDoesNotMatch",
      "msg": "Passed underlying amount per contract does not match"
    },
    {
      "code": 6006,
      "name": "PassedUnderlyingAmountPerContractDecimalsDoesNotMatch",
      "msg": "Passed underlying amount per contract decimals does not match"
    },
    {
      "code": 6007,
      "name": "PassedStrikePriceDoesNotMatch",
      "msg": "Passed strike price does not match"
    },
    {
      "code": 6008,
      "name": "PassedStrikePriceDecimalsDoesNotMatch",
      "msg": "Passed strike price decimals does not match"
    },
    {
      "code": 6009,
      "name": "PassedExpirationTimestampDoesNotMatch",
      "msg": "Passed expiration timestamp does not match"
    },
    {
      "code": 6010,
      "name": "StablecoinAsBaseAssetIsNotSupported",
      "msg": "Stablecoin as base asset is not supported"
    },
    {
      "code": 6011,
      "name": "DecimalsAmountDoesNotMatch",
      "msg": "Passed decimals does not match"
    },
    {
      "code": 6012,
      "name": "BaseAssetDoesNotMatch",
      "msg": "Base Asset doesnt match"
    }
  ],
  "metadata": {
    "address": "HpmyVA3t3uNGgdx86AuwZww7gnAWB57vepnk3732vEr9",
    "origin": "anchor",
    "binaryVersion": "0.28.0",
    "libVersion": "0.28.0"
  }
}