{
  "version": "4.6.0",
  "name": "cardinal_token_manager",
  "instructions": [
    {
      "name": "init",
      "accounts": [
        {
          "name": "tokenManager",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "mintCounter",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "mint",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "issuer",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "payer",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "issuerTokenAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "ix",
          "type": {
            "defined": "InitIx"
          }
        }
      ]
    },
    {
      "name": "uninit",
      "accounts": [
        {
          "name": "tokenManager",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "issuer",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "issuerTokenAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "initMintCounter",
      "accounts": [
        {
          "name": "mintCounter",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "payer",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "mint",
          "type": "publicKey"
        }
      ]
    },
    {
      "name": "setClaimApprover",
      "accounts": [
        {
          "name": "tokenManager",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "issuer",
          "isMut": true,
          "isSigner": true
        }
      ],
      "args": [
        {
          "name": "claimApprover",
          "type": "publicKey"
        }
      ]
    },
    {
      "name": "setTransferAuthority",
      "accounts": [
        {
          "name": "tokenManager",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "issuer",
          "isMut": true,
          "isSigner": true
        }
      ],
      "args": [
        {
          "name": "transferAuthority",
          "type": "publicKey"
        }
      ]
    },
    {
      "name": "addInvalidator",
      "accounts": [
        {
          "name": "tokenManager",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "issuer",
          "isMut": true,
          "isSigner": true
        }
      ],
      "args": [
        {
          "name": "invalidator",
          "type": "publicKey"
        }
      ]
    },
    {
      "name": "replaceInvalidator",
      "accounts": [
        {
          "name": "tokenManager",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "invalidator",
          "isMut": false,
          "isSigner": true
        }
      ],
      "args": [
        {
          "name": "newInvalidator",
          "type": "publicKey"
        }
      ]
    },
    {
      "name": "createClaimReceipt",
      "accounts": [
        {
          "name": "tokenManager",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "claimApprover",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "claimReceipt",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "payer",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "target",
          "type": "publicKey"
        }
      ]
    },
    {
      "name": "claimReceiptMint",
      "accounts": [
        {
          "name": "tokenManager",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "issuer",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "receiptMint",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "receiptMintMetadata",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "recipientTokenAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "receiptMintManager",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "payer",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "tokenProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "associatedToken",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenMetadataProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "rent",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "name",
          "type": "string"
        }
      ]
    },
    {
      "name": "issue",
      "accounts": [
        {
          "name": "tokenManager",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenManagerTokenAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "issuer",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "issuerTokenAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "payer",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "tokenProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "unissue",
      "accounts": [
        {
          "name": "tokenManager",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenManagerTokenAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "issuer",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "issuerTokenAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "claim",
      "accounts": [
        {
          "name": "tokenManager",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenManagerTokenAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "mint",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "recipient",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "recipientTokenAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "invalidate",
      "accounts": [
        {
          "name": "tokenManager",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenManagerTokenAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "mint",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "recipientTokenAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "invalidator",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "collector",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "rent",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "updateInvalidationType",
      "accounts": [
        {
          "name": "tokenManager",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "issuer",
          "isMut": true,
          "isSigner": true
        }
      ],
      "args": [
        {
          "name": "invalidationType",
          "type": "u8"
        }
      ]
    },
    {
      "name": "createMintManager",
      "accounts": [
        {
          "name": "mintManager",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "mint",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "freezeAuthority",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "payer",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "tokenProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "closeMintManager",
      "accounts": [
        {
          "name": "mintManager",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "mint",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "freezeAuthority",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "payer",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "tokenProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "createTransferReceipt",
      "accounts": [
        {
          "name": "tokenManager",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "transferAuthority",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "transferReceipt",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "payer",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "target",
          "type": "publicKey"
        }
      ]
    },
    {
      "name": "updateTransferReceipt",
      "accounts": [
        {
          "name": "tokenManager",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "transferAuthority",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "transferReceipt",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "target",
          "type": "publicKey"
        }
      ]
    },
    {
      "name": "closeTransferReceipt",
      "accounts": [
        {
          "name": "tokenManager",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "transferAuthority",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "transferReceipt",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "recipient",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "transfer",
      "accounts": [
        {
          "name": "tokenManager",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "mint",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "currentHolderTokenAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "recipient",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "recipientTokenAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "send",
      "accounts": [
        {
          "name": "tokenManager",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "mint",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "mintManager",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "recipient",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "recipientTokenAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "target",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "targetTokenAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "payer",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "associatedTokenProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "rent",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "instructions",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "delegate",
      "accounts": [
        {
          "name": "tokenManager",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "mint",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "mintManager",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "recipient",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "recipientTokenAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "undelegate",
      "accounts": [
        {
          "name": "tokenManager",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "mint",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "mintManager",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "recipient",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "recipientTokenAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "migrate",
      "accounts": [
        {
          "name": "mintManager",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenManager",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenManagerTokenAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "mint",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "mintMetadata",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "mintEdition",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "holderTokenAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "invalidator",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "payer",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "collector",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "mplTokenMetadata",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": []
    }
  ],
  "accounts": [
    {
      "name": "TokenManager",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "version",
            "type": "u8"
          },
          {
            "name": "bump",
            "type": "u8"
          },
          {
            "name": "count",
            "type": "u64"
          },
          {
            "name": "numInvalidators",
            "type": "u8"
          },
          {
            "name": "issuer",
            "type": "publicKey"
          },
          {
            "name": "mint",
            "type": "publicKey"
          },
          {
            "name": "amount",
            "type": "u64"
          },
          {
            "name": "kind",
            "type": "u8"
          },
          {
            "name": "state",
            "type": "u8"
          },
          {
            "name": "stateChangedAt",
            "type": "i64"
          },
          {
            "name": "invalidationType",
            "type": "u8"
          },
          {
            "name": "recipientTokenAccount",
            "type": "publicKey"
          },
          {
            "name": "receiptMint",
            "type": {
              "option": "publicKey"
            }
          },
          {
            "name": "claimApprover",
            "type": {
              "option": "publicKey"
            }
          },
          {
            "name": "transferAuthority",
            "type": {
              "option": "publicKey"
            }
          },
          {
            "name": "invalidators",
            "type": {
              "vec": "publicKey"
            }
          }
        ]
      }
    },
    {
      "name": "MintManager",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "bump",
            "type": "u8"
          },
          {
            "name": "initializer",
            "type": "publicKey"
          },
          {
            "name": "tokenManagers",
            "type": "u64"
          }
        ]
      }
    },
    {
      "name": "MintCounter",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "bump",
            "type": "u8"
          },
          {
            "name": "mint",
            "type": "publicKey"
          },
          {
            "name": "count",
            "type": "u64"
          }
        ]
      }
    },
    {
      "name": "ClaimReceipt",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "mintCount",
            "type": "u64"
          },
          {
            "name": "tokenManager",
            "type": "publicKey"
          },
          {
            "name": "target",
            "type": "publicKey"
          }
        ]
      }
    },
    {
      "name": "TransferReceipt",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "mintCount",
            "type": "u64"
          },
          {
            "name": "tokenManager",
            "type": "publicKey"
          },
          {
            "name": "target",
            "type": "publicKey"
          }
        ]
      }
    },
    {
      "name": "ReceiptMintManager",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "bump",
            "type": "u8"
          }
        ]
      }
    }
  ],
  "types": [
    {
      "name": "InitIx",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "amount",
            "type": "u64"
          },
          {
            "name": "kind",
            "type": "u8"
          },
          {
            "name": "invalidationType",
            "type": "u8"
          },
          {
            "name": "numInvalidators",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "TokenManagerState",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "Initialized"
          },
          {
            "name": "Issued"
          },
          {
            "name": "Claimed"
          },
          {
            "name": "Invalidated"
          }
        ]
      }
    },
    {
      "name": "TokenManagerKind",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "Managed"
          },
          {
            "name": "Unmanaged"
          },
          {
            "name": "Edition"
          },
          {
            "name": "Permissioned"
          },
          {
            "name": "Programmable"
          }
        ]
      }
    },
    {
      "name": "InvalidationType",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "Return"
          },
          {
            "name": "Invalidate"
          },
          {
            "name": "Release"
          },
          {
            "name": "Reissue"
          },
          {
            "name": "Vest"
          }
        ]
      }
    }
  ],
  "errors": [
    {
      "code": 6000,
      "name": "Uninitialized",
      "msg": "Account not initialized"
    },
    {
      "code": 6001,
      "name": "TooManyInvalidators",
      "msg": "Too many invalidators have already been added"
    },
    {
      "code": 6002,
      "name": "InvalidNumInvalidators",
      "msg": "Number of invalidators cannot be overwritten"
    },
    {
      "code": 6003,
      "name": "InvalidTokenManagerTokenAccount",
      "msg": "Token account not owned by token manager"
    },
    {
      "code": 6004,
      "name": "InvalidIssuerTokenAccount",
      "msg": "Token account not owned by issuer"
    },
    {
      "code": 6005,
      "name": "MaximumInvalidatorsReached",
      "msg": "Max invalidators reached"
    },
    {
      "code": 6006,
      "name": "InvalidRecipientTokenAccount",
      "msg": "Token account not owned by recipient"
    },
    {
      "code": 6007,
      "name": "InvalidInvalidatorTokenAccount",
      "msg": "Token account not owned by invalidator"
    },
    {
      "code": 6008,
      "name": "InvalidTokenManagerKind",
      "msg": "Token manager kind is not valid"
    },
    {
      "code": 6009,
      "name": "InvalidInvalidationType",
      "msg": "Invalid invalidation type"
    },
    {
      "code": 6010,
      "name": "InvalidClaimAuthority",
      "msg": "Invalid claim authority"
    },
    {
      "code": 6011,
      "name": "InvalidTransferAuthority",
      "msg": "Invalid transfer authority"
    },
    {
      "code": 6012,
      "name": "InvalidIssuer",
      "msg": "Invalid issuer"
    },
    {
      "code": 6013,
      "name": "InvalidInvalidator",
      "msg": "Invalid invalidator"
    },
    {
      "code": 6014,
      "name": "InvalidMint",
      "msg": "Invalid mint"
    },
    {
      "code": 6015,
      "name": "InvalidTokenManagerState",
      "msg": "Invalid token manager state"
    },
    {
      "code": 6016,
      "name": "OutstandingTokens",
      "msg": "Outstanding tokens exist"
    },
    {
      "code": 6017,
      "name": "InvalidFreezeAuthority",
      "msg": "User must be freeze authority to create mint manager"
    },
    {
      "code": 6018,
      "name": "InvalidInitializer",
      "msg": "User must be initializer to close mint manager"
    },
    {
      "code": 6019,
      "name": "InvalidClaimReceipt",
      "msg": "Invalid claim receipt"
    },
    {
      "code": 6020,
      "name": "InvalidTransferReceipt",
      "msg": "Invalid transfer receipt"
    },
    {
      "code": 6021,
      "name": "PublicKeyMismatch",
      "msg": "Public key mismatch"
    },
    {
      "code": 6022,
      "name": "InvalidMetadataProgramId",
      "msg": "Invalid metadata program id"
    },
    {
      "code": 6023,
      "name": "InvalidReceiptMintAccount",
      "msg": "Invalid receipt mint account"
    },
    {
      "code": 6024,
      "name": "InvalidReceiptMintOwner",
      "msg": "Invalid receipt mint owner"
    },
    {
      "code": 6025,
      "name": "InvalidReceiptMint",
      "msg": "Invalid receipt mint"
    },
    {
      "code": 6026,
      "name": "InvalidCurrentTokenAccount",
      "msg": "Invalid current holder token account"
    },
    {
      "code": 6027,
      "name": "InvalidMintSupply",
      "msg": "Invalid mint supply"
    },
    {
      "code": 6028,
      "name": "AccountDiscriminatorMismatch",
      "msg": "Invalid account discriminator"
    },
    {
      "code": 6029,
      "name": "InvalidationTypeUpdateDisallowed",
      "msg": "Invalidation type update only allowed between return and reissue"
    },
    {
      "code": 6030,
      "name": "ClaimApproverMustBeSet",
      "msg": "Claim approver must be set to use vesting invalidation type"
    },
    {
      "code": 6031,
      "name": "InvalidTargetTokenAccount",
      "msg": "Target token account is incorrect"
    },
    {
      "code": 6032,
      "name": "InstructionsDisallowed",
      "msg": "Transaction included disallowed"
    },
    {
      "code": 6033,
      "name": "InvalidInvalidationTypeKindMatch",
      "msg": "Invalidation type is not allowed with this token manager kind"
    },
    {
      "code": 6034,
      "name": "InvalidMintAuthority",
      "msg": "Invalid Mint Authority"
    },
    {
      "code": 6035,
      "name": "InvalidPermissionedRewardAddress",
      "msg": "Invalid Permissioned Reward Address"
    },
    {
      "code": 6036,
      "name": "NoCPIAllowed",
      "msg": "No CPI allowed for the instruction"
    },
    {
      "code": 6037,
      "name": "InvalidMigrateAuthority",
      "msg": "Invalid migrate authority"
    },
    {
      "code": 6038,
      "name": "CannotMigrateDelegatedToken",
      "msg": "Cannot migrate delegated token"
    },
    {
      "code": 6039,
      "name": "InvalidReturnTarget",
      "msg": "Invalid return target"
    }
  ]
}
