{
  "version": "0.1.0",
  "name": "spl_binary_oracle_pair",
  "instructions": [
    {
      "name": "initPool",
      "accounts": [
        {
          "name": "pool",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "decider",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "depositTokenMint",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "depositAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenPassMint",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenFailMint",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "rent",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "mintEndSlot",
          "type": "u64"
        },
        {
          "name": "decideEndSlot",
          "type": "u64"
        },
        {
          "name": "bumpSeed",
          "type": "u8"
        }
      ]
    },
    {
      "name": "deposit",
      "accounts": [
        {
          "name": "pool",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "userTransferAuthority",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "userTokenAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "poolDepositTokenAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenPassMint",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenFailMint",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenPassDestinationAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenFailDestinationAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "clock",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "arg",
          "type": "u64"
        }
      ]
    },
    {
      "name": "withdraw",
      "accounts": [
        {
          "name": "pool",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "userTransferAuthority",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "poolDepositTokenAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenPassUserAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenFailUserAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenPassMint",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenFailMint",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "userTokenDestinationAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "clock",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "arg",
          "type": "u64"
        }
      ]
    },
    {
      "name": "decide",
      "accounts": [
        {
          "name": "pool",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "decider",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "clock",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "arg",
          "type": "bool"
        }
      ]
    }
  ],
  "accounts": [
    {
      "name": "Pool",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "version",
            "type": "u8"
          },
          {
            "name": "bumpSeed",
            "type": "u8"
          },
          {
            "name": "tokenProgramId",
            "type": "publicKey"
          },
          {
            "name": "depositAccount",
            "type": "publicKey"
          },
          {
            "name": "tokenPassMint",
            "type": "publicKey"
          },
          {
            "name": "tokenFailMint",
            "type": "publicKey"
          },
          {
            "name": "decider",
            "type": "publicKey"
          },
          {
            "name": "mintEndSlot",
            "type": "u64"
          },
          {
            "name": "decideEndSlot",
            "type": "u64"
          },
          {
            "name": "decision",
            "type": {
              "defined": "Decision"
            }
          }
        ]
      }
    }
  ],
  "types": [
    {
      "name": "Decision",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "Undecided"
          },
          {
            "name": "Pass"
          },
          {
            "name": "Fail"
          }
        ]
      }
    }
  ],
  "errors": [
    {
      "code": 0,
      "name": "AlreadyInUse",
      "msg": "Pool account already in use"
    },
    {
      "code": 1,
      "name": "DepositAccountInUse",
      "msg": "Deposit account already in use"
    },
    {
      "code": 2,
      "name": "TokenMintInUse",
      "msg": "Token account already in use"
    },
    {
      "code": 3,
      "name": "InvalidAuthorityData",
      "msg": "Failed to generate program account because of invalid data"
    },
    {
      "code": 4,
      "name": "InvalidAuthorityAccount",
      "msg": "Invalid authority account provided"
    },
    {
      "code": 5,
      "name": "NotRentExempt",
      "msg": "Lamport balance below rent-exempt threshold"
    },
    {
      "code": 6,
      "name": "InvalidTokenMint",
      "msg": "Input token mint account is not valid"
    },
    {
      "code": 7,
      "name": "InvalidAmount",
      "msg": "Amount should be more than zero"
    },
    {
      "code": 8,
      "name": "WrongDeciderAccount",
      "msg": "Wrong decider account was sent"
    },
    {
      "code": 9,
      "name": "SignatureMissing",
      "msg": "Signature missing in transaction"
    },
    {
      "code": 10,
      "name": "DecisionAlreadyMade",
      "msg": "Decision was already made for this pool"
    },
    {
      "code": 11,
      "name": "InvalidSlotForDecision",
      "msg": "Decision can't be made in current slot"
    },
    {
      "code": 12,
      "name": "InvalidSlotForDeposit",
      "msg": "Deposit can't be made in current slot"
    },
    {
      "code": 13,
      "name": "NoDecisionMadeYet",
      "msg": "No decision has been made yet"
    }
  ]
}