{
    "version": "0.0.84-beta.13",
    "name": "hpl_currency_manager",
    "docs": [
        "The entry point for the HPL currency manager program."
    ],
    "instructions": [
        {
            "name": "createCurrency",
            "docs": [
                "Create a new currency in the HPL Hive Control program.",
                "",
                "This function serves as a platform gate to manage assets for a project. It calls the",
                "`platform_gate_fn` from the `hpl_hive_control` instructions module to check permissions",
                "and then calls `create_currency` from the `hpl_hive_control::instructions` module to",
                "perform the actual currency creation.",
                "",
                "# Parameters",
                "",
                "- `ctx`: The program context with accounts and instructions provided by the runtime.",
                "- `args`: The arguments required to create a new currency.",
                "",
                "# Errors",
                "",
                "This function can return an error if the platform gate fails or if the currency creation",
                "encounters any issues."
            ],
            "accounts": [
                {
                    "name": "project",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "currency",
                    "isMut": true,
                    "isSigner": false,
                    "docs": [
                        "Currency account"
                    ]
                },
                {
                    "name": "mint",
                    "isMut": true,
                    "isSigner": true,
                    "docs": [
                        "Currency mint"
                    ]
                },
                {
                    "name": "metadata",
                    "isMut": true,
                    "isSigner": false,
                    "docs": [
                        "Currency metadata"
                    ]
                },
                {
                    "name": "delegateAuthority",
                    "isMut": false,
                    "isSigner": false,
                    "isOptional": true,
                    "docs": [
                        "[Option] Delegate authority account containing permissions of the wallet for the project"
                    ]
                },
                {
                    "name": "authority",
                    "isMut": false,
                    "isSigner": true,
                    "docs": [
                        "The wallet that holds the authority over the project"
                    ]
                },
                {
                    "name": "payer",
                    "isMut": true,
                    "isSigner": true,
                    "docs": [
                        "The wallet that pays for the rent and fees"
                    ]
                },
                {
                    "name": "vault",
                    "isMut": true,
                    "isSigner": false,
                    "docs": [
                        "this account collects the protocol fee"
                    ]
                },
                {
                    "name": "systemProgram",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "The Solana System Program."
                    ]
                },
                {
                    "name": "hiveControl",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "HIVE CONTROL PROGRAM"
                    ]
                },
                {
                    "name": "tokenMetadataProgram",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "The Token Metadata Program ID."
                    ]
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "The Token Program ID."
                    ]
                },
                {
                    "name": "instructionsSysvar",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "The Instructions System Variable Account."
                    ]
                },
                {
                    "name": "clockSysvar",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "The Clock System Variable Account."
                    ]
                }
            ],
            "args": [
                {
                    "name": "args",
                    "type": {
                        "defined": "CreateCurrencyArgs"
                    }
                }
            ]
        },
        {
            "name": "updateCurrency",
            "docs": [
                "Update an existing currency in the HPL Hive Control program.",
                "",
                "This function serves as a platform gate to manage assets for a project. It calls the",
                "`platform_gate_fn` from the `hpl_hive_control` instructions module to check permissions",
                "and then calls `update_currency` from the `hpl_hive_control::instructions` module to",
                "perform the actual currency update.",
                "",
                "# Parameters",
                "",
                "- `ctx`: The program context with accounts and instructions provided by the runtime.",
                "- `args`: The arguments required to update an existing currency.",
                "",
                "# Errors",
                "",
                "This function can return an error if the platform gate fails or if the currency update",
                "encounters any issues."
            ],
            "accounts": [
                {
                    "name": "project",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "currency",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "Currency account"
                    ]
                },
                {
                    "name": "mint",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "Currency mint"
                    ]
                },
                {
                    "name": "metadata",
                    "isMut": true,
                    "isSigner": false,
                    "docs": [
                        "Currency metadata"
                    ]
                },
                {
                    "name": "delegateAuthority",
                    "isMut": false,
                    "isSigner": false,
                    "isOptional": true,
                    "docs": [
                        "[Option] Delegate authority account containing permissions of the wallet for the project"
                    ]
                },
                {
                    "name": "authority",
                    "isMut": false,
                    "isSigner": true,
                    "docs": [
                        "The wallet that holds the authority over the project"
                    ]
                },
                {
                    "name": "payer",
                    "isMut": true,
                    "isSigner": true,
                    "docs": [
                        "The wallet that pays for the rent and fees"
                    ]
                },
                {
                    "name": "vault",
                    "isMut": true,
                    "isSigner": false,
                    "docs": [
                        "this account collects the protocol fee"
                    ]
                },
                {
                    "name": "systemProgram",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "System Program"
                    ]
                },
                {
                    "name": "hiveControl",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "HIVE CONTROL PROGRAM"
                    ]
                },
                {
                    "name": "tokenMetadataProgram",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "The token metadata program account."
                    ]
                },
                {
                    "name": "instructionsSysvar",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "The Instructions System Variable Account."
                    ]
                },
                {
                    "name": "clockSysvar",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "The Clock System Variable Account."
                    ]
                }
            ],
            "args": [
                {
                    "name": "args",
                    "type": {
                        "defined": "UpdateCurrencyArgs"
                    }
                }
            ]
        },
        {
            "name": "wrapCurrency",
            "docs": [
                "Wrap a currency in the HPL Hive Control program.",
                "",
                "This function serves as a platform gate to manage assets for a project. It checks",
                "permissions using the `platform_gate_fn` from the `hpl_hive_control` instructions",
                "module. If the platform gate is successful, it proceeds to wrap the currency.",
                "",
                "# Parameters",
                "",
                "- `ctx`: The program context containing accounts and instructions provided by the runtime.",
                "",
                "# Errors",
                "",
                "This function returns an error if the platform gate fails or if the currency wrapping",
                "encounters any issues."
            ],
            "accounts": [
                {
                    "name": "project",
                    "isMut": true,
                    "isSigner": false,
                    "docs": [
                        "The account representing the project to which the currency is associated."
                    ]
                },
                {
                    "name": "currency",
                    "isMut": true,
                    "isSigner": false,
                    "docs": [
                        "The account representing the currency to be wrapped into an NFT."
                    ]
                },
                {
                    "name": "mint",
                    "isMut": true,
                    "isSigner": false,
                    "docs": [
                        "The account representing the project to which the currency is associated."
                    ]
                },
                {
                    "name": "delegateAuthority",
                    "isMut": false,
                    "isSigner": false,
                    "isOptional": true,
                    "docs": [
                        "[Option] The account representing the delegate authority containing permissions of the wallet for the project."
                    ]
                },
                {
                    "name": "authority",
                    "isMut": false,
                    "isSigner": true,
                    "docs": [
                        "The wallet that holds the authority over the project."
                    ]
                },
                {
                    "name": "mintAuthority",
                    "isMut": false,
                    "isSigner": true,
                    "docs": [
                        "The wallet that has the authority to mint tokens."
                    ]
                },
                {
                    "name": "freezeAuthority",
                    "isMut": false,
                    "isSigner": true,
                    "docs": [
                        "The wallet that has the authority to freeze token accounts."
                    ]
                },
                {
                    "name": "payer",
                    "isMut": true,
                    "isSigner": true,
                    "docs": [
                        "The wallet that pays for the rent."
                    ]
                },
                {
                    "name": "vault",
                    "isMut": true,
                    "isSigner": false,
                    "docs": [
                        "this account collects the protocol fee"
                    ]
                },
                {
                    "name": "systemProgram",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "System Program"
                    ]
                },
                {
                    "name": "hiveControl",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "HIVE CONTROL PROGRAM"
                    ]
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "Token Program"
                    ]
                },
                {
                    "name": "instructionsSysvar",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "The Instructions System Variable Account."
                    ]
                },
                {
                    "name": "clockSysvar",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "The Clock System Variable Account."
                    ]
                }
            ],
            "args": []
        },
        {
            "name": "createHolderAccount",
            "docs": [
                "Create a holder account in the HPL Hive Control program.",
                "",
                "This function serves as a platform gate to manage public low-level actions for a project.",
                "It checks permissions using the `platform_gate_fn` from the `hpl_hive_control` instructions",
                "module. If the platform gate is successful, it proceeds to create the holder account.",
                "",
                "# Parameters",
                "",
                "- `ctx`: The program context containing accounts and instructions provided by the runtime.",
                "",
                "# Errors",
                "",
                "This function returns an error if the platform gate fails or if any issues occur during the",
                "holder account creation process."
            ],
            "accounts": [
                {
                    "name": "project",
                    "isMut": true,
                    "isSigner": false,
                    "docs": [
                        "The project this currency is associated with."
                    ]
                },
                {
                    "name": "currency",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "Currency account"
                    ]
                },
                {
                    "name": "mint",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "Currency mint"
                    ]
                },
                {
                    "name": "holderAccount",
                    "isMut": true,
                    "isSigner": false,
                    "docs": [
                        "Holder account"
                    ]
                },
                {
                    "name": "tokenAccount",
                    "isMut": true,
                    "isSigner": false,
                    "docs": [
                        "Token account holding the token"
                    ]
                },
                {
                    "name": "owner",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "The wallet that will own the token_account"
                    ]
                },
                {
                    "name": "payer",
                    "isMut": true,
                    "isSigner": true,
                    "docs": [
                        "The wallet that pays for the rent and fees"
                    ]
                },
                {
                    "name": "vault",
                    "isMut": true,
                    "isSigner": false,
                    "docs": [
                        "this account collects the protocol fee"
                    ]
                },
                {
                    "name": "systemProgram",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "System Program"
                    ]
                },
                {
                    "name": "hiveControl",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "HIVE CONTROL PROGRAM"
                    ]
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "SPL Token program"
                    ]
                },
                {
                    "name": "associatedTokenProgram",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "SPL Associated Token program"
                    ]
                },
                {
                    "name": "instructionsSysvar",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "The Instructions System Variable Account."
                    ]
                },
                {
                    "name": "clockSysvar",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "The Clock System Variable Account."
                    ]
                }
            ],
            "args": []
        },
        {
            "name": "wrapHolderAccount",
            "docs": [
                "Wrap a holder account in the HPL Hive Control program.",
                "",
                "This function serves as a platform gate to manage public low-level actions for a project.",
                "It checks permissions using the `platform_gate_fn` from the `hpl_hive_control` instructions",
                "module. If the platform gate is successful, it proceeds to wrap the holder account.",
                "",
                "# Parameters",
                "",
                "- `ctx`: The program context containing accounts and instructions provided by the runtime.",
                "",
                "# Errors",
                "",
                "This function returns an error if the platform gate fails or if any issues occur during the",
                "holder account creation process."
            ],
            "accounts": [
                {
                    "name": "project",
                    "isMut": true,
                    "isSigner": false,
                    "docs": [
                        "The project this currency is associated with."
                    ]
                },
                {
                    "name": "currency",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "Currency account"
                    ]
                },
                {
                    "name": "mint",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "Currency mint"
                    ]
                },
                {
                    "name": "holderAccount",
                    "isMut": true,
                    "isSigner": false,
                    "docs": [
                        "Holder account"
                    ]
                },
                {
                    "name": "tokenAccount",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "Token account holding the token"
                    ]
                },
                {
                    "name": "owner",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "The wallet that will own the token_account"
                    ]
                },
                {
                    "name": "payer",
                    "isMut": true,
                    "isSigner": true,
                    "docs": [
                        "The wallet that pays for the rent and fees"
                    ]
                },
                {
                    "name": "vault",
                    "isMut": true,
                    "isSigner": false,
                    "docs": [
                        "this account collects the protocol fee"
                    ]
                },
                {
                    "name": "systemProgram",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "System Program"
                    ]
                },
                {
                    "name": "hiveControl",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "HIVE CONTROL PROGRAM"
                    ]
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "SPL Token program"
                    ]
                },
                {
                    "name": "associatedTokenProgram",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "SPL Associated Token program"
                    ]
                },
                {
                    "name": "instructionsSysvar",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "The Instructions System Variable Account."
                    ]
                },
                {
                    "name": "clockSysvar",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "The Clock System Variable Account."
                    ]
                }
            ],
            "args": []
        },
        {
            "name": "fixHolderAccount",
            "docs": [
                "Fix a holder account in the HPL Hive Control program.",
                "",
                "This function serves as a platform gate to manage public low-level actions for a project.",
                "It checks permissions using the `platform_gate_fn` from the `hpl_hive_control` instructions",
                "module. If the platform gate is successful, it proceeds to fix the holder account.",
                "",
                "# Parameters",
                "",
                "- `ctx`: The program context containing accounts and instructions provided by the runtime.",
                "",
                "# Errors",
                "",
                "This function returns an error if the platform gate fails or if any issues occur during the",
                "holder account creation process."
            ],
            "accounts": [
                {
                    "name": "currency",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "The currency account to be burned."
                    ]
                },
                {
                    "name": "holderAccount",
                    "isMut": true,
                    "isSigner": false,
                    "docs": [
                        "The holder account associated with the currency, which holds the token."
                    ]
                },
                {
                    "name": "mint",
                    "isMut": true,
                    "isSigner": false,
                    "docs": [
                        "The mint account of the currency."
                    ]
                },
                {
                    "name": "tokenAccount",
                    "isMut": true,
                    "isSigner": false,
                    "docs": [
                        "The token account that will be burned."
                    ]
                },
                {
                    "name": "authority",
                    "isMut": false,
                    "isSigner": true,
                    "docs": [
                        "The owner of the token account."
                    ]
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": []
        },
        {
            "name": "mintCurrency",
            "docs": [
                "Mint new currency in the HPL Hive Control program.",
                "",
                "This function serves as a platform gate to manage assets for a project. It checks",
                "permissions using the `platform_gate_fn` from the `hpl_hive_control` instructions",
                "module. If the platform gate is successful and the holder account status is active,",
                "it proceeds to mint the new currency. Otherwise, it returns an error.",
                "",
                "# Parameters",
                "",
                "- `ctx`: The program context containing accounts and instructions provided by the runtime.",
                "- `amount`: The amount of currency to be minted.",
                "",
                "# Errors",
                "",
                "This function returns an error if the platform gate fails, the holder account is inactive,",
                "or if any issues occur during the currency minting process."
            ],
            "accounts": [
                {
                    "name": "currency",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "The currency account representing the specific currency being minted."
                    ]
                },
                {
                    "name": "holderAccount",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "The holder account that will receive the newly minted tokens."
                    ]
                },
                {
                    "name": "mint",
                    "isMut": true,
                    "isSigner": false,
                    "docs": [
                        "The mint account associated with the currency's token mint."
                    ]
                },
                {
                    "name": "tokenAccount",
                    "isMut": true,
                    "isSigner": false,
                    "docs": [
                        "The token account where the newly minted tokens will be added."
                    ]
                },
                {
                    "name": "project",
                    "isMut": true,
                    "isSigner": false,
                    "docs": [
                        "The project this currency is associated with."
                    ]
                },
                {
                    "name": "delegateAuthority",
                    "isMut": false,
                    "isSigner": false,
                    "isOptional": true,
                    "docs": [
                        "[Option] Delegate authority account containing permissions of the wallet for the project."
                    ]
                },
                {
                    "name": "authority",
                    "isMut": false,
                    "isSigner": true,
                    "docs": [
                        "The wallet that holds the authority over the project."
                    ]
                },
                {
                    "name": "payer",
                    "isMut": true,
                    "isSigner": true,
                    "docs": [
                        "The wallet that pays for the rent."
                    ]
                },
                {
                    "name": "vault",
                    "isMut": true,
                    "isSigner": false,
                    "docs": [
                        "this account collects the protocol fee"
                    ]
                },
                {
                    "name": "systemProgram",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "System Program."
                    ]
                },
                {
                    "name": "hiveControl",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "HIVE CONTROL PROGRAM"
                    ]
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "SPL Token Program."
                    ]
                },
                {
                    "name": "instructionsSysvar",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "NATIVE INSTRUCTIONS SYSVAR."
                    ]
                }
            ],
            "args": [
                {
                    "name": "amount",
                    "type": "u64"
                }
            ]
        },
        {
            "name": "fundAccount",
            "docs": [
                "Fund an account in the HPL Hive Control program.",
                "",
                "This function performs a platform gate to determine the action based on the caller's",
                "program ID. If the caller's program ID matches the HPL Hive Control program ID, it",
                "checks permissions using the `platform_gate_fn` for driver actions. Otherwise, it",
                "checks if the caller's program ID is allowed based on the list of allowed programs.",
                "If the caller's program ID is neither the HPL Hive Control program ID nor in the list",
                "of allowed programs, it returns an unauthorized error.",
                "",
                "If the holder account status is inactive, it returns an error. Otherwise, it performs",
                "pre-actions before funding the account, calls the `fund_account` instruction to perform",
                "the funding, and then performs post-actions.",
                "",
                "# Parameters",
                "",
                "- `ctx`: The program context containing accounts and instructions provided by the runtime.",
                "- `amount`: The amount to fund the account with.",
                "",
                "# Errors",
                "",
                "This function returns an error if the platform gate fails, the holder account is inactive,",
                "the caller's program ID is not authorized, or if any issues occur during the funding process."
            ],
            "accounts": [
                {
                    "name": "project",
                    "isMut": true,
                    "isSigner": false,
                    "docs": [
                        "The project account to which the currency is associated with."
                    ]
                },
                {
                    "name": "currency",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "The currency account representing the specific currency being funded."
                    ]
                },
                {
                    "name": "mint",
                    "isMut": true,
                    "isSigner": false,
                    "docs": [
                        "The mint account associated with the currency's token mint."
                    ]
                },
                {
                    "name": "holderAccount",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "The holder account that will receive the newly funded tokens."
                    ]
                },
                {
                    "name": "tokenAccount",
                    "isMut": true,
                    "isSigner": false,
                    "docs": [
                        "The token account where the newly funded tokens will be added."
                    ]
                },
                {
                    "name": "sourceTokenAccount",
                    "isMut": true,
                    "isSigner": false,
                    "docs": [
                        "The source token account from which funds will be transferred."
                    ]
                },
                {
                    "name": "owner",
                    "isMut": true,
                    "isSigner": true,
                    "docs": [
                        "The owner of the source token account."
                    ]
                },
                {
                    "name": "payer",
                    "isMut": true,
                    "isSigner": true,
                    "docs": [
                        "The wallet that pays for the rent and fees"
                    ]
                },
                {
                    "name": "vault",
                    "isMut": true,
                    "isSigner": false,
                    "docs": [
                        "this account collects the protocol fee"
                    ]
                },
                {
                    "name": "systemProgram",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "System Program"
                    ]
                },
                {
                    "name": "hiveControl",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "HIVE CONTROL PROGRAM"
                    ]
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "SPL Token Program"
                    ]
                },
                {
                    "name": "instructionsSysvar",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "NATIVE INSTRUCTIONS SYSVAR."
                    ]
                }
            ],
            "args": [
                {
                    "name": "amount",
                    "type": "u64"
                }
            ]
        },
        {
            "name": "burnCurrency",
            "docs": [
                "Burn currency in the HPL Hive Control program.",
                "",
                "This function performs a platform gate to determine the action based on the caller's",
                "program ID. If the caller's program ID matches the HPL Hive Control program ID, it",
                "checks permissions using the `platform_gate_fn` for driver actions. Otherwise, it",
                "checks if the caller's program ID is allowed based on the list of allowed programs.",
                "If the caller's program ID is neither the HPL Hive Control program ID nor in the list",
                "of allowed programs, it returns an unauthorized error.",
                "",
                "If the holder account status is inactive, it returns an error. Otherwise, it performs",
                "pre-actions before burning the currency, calls the `burn_currency` instruction to perform",
                "the burning, and then performs post-actions.",
                "",
                "# Parameters",
                "",
                "- `ctx`: The program context containing accounts and instructions provided by the runtime.",
                "- `amount`: The amount of currency to be burned.",
                "",
                "# Errors",
                "",
                "This function returns an error if the platform gate fails, the holder account is inactive,",
                "the caller's program ID is not authorized, or if any issues occur during the burning process."
            ],
            "accounts": [
                {
                    "name": "project",
                    "isMut": true,
                    "isSigner": false,
                    "docs": [
                        "The project account associated with the currency."
                    ]
                },
                {
                    "name": "currency",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "The currency account to be burned."
                    ]
                },
                {
                    "name": "holderAccount",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "The holder account associated with the currency, which holds the token."
                    ]
                },
                {
                    "name": "mint",
                    "isMut": true,
                    "isSigner": false,
                    "docs": [
                        "The mint account of the currency."
                    ]
                },
                {
                    "name": "tokenAccount",
                    "isMut": true,
                    "isSigner": false,
                    "docs": [
                        "The token account that will be burned."
                    ]
                },
                {
                    "name": "authority",
                    "isMut": false,
                    "isSigner": true,
                    "docs": [
                        "The owner of the token account."
                    ]
                },
                {
                    "name": "payer",
                    "isMut": true,
                    "isSigner": true,
                    "docs": [
                        "The wallet that pays for the rent and fees"
                    ]
                },
                {
                    "name": "vault",
                    "isMut": true,
                    "isSigner": false,
                    "docs": [
                        "The account used to collect platform fees for the burning process."
                    ]
                },
                {
                    "name": "systemProgram",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "System Program"
                    ]
                },
                {
                    "name": "hiveControl",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "HIVE CONTROL PROGRAM"
                    ]
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "SPL Token program"
                    ]
                },
                {
                    "name": "instructionsSysvar",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "NATIVE INSTRUCTIONS SYSVAR"
                    ]
                }
            ],
            "args": [
                {
                    "name": "amount",
                    "type": "u64"
                }
            ]
        },
        {
            "name": "transferCurrency",
            "docs": [
                "Transfer currency in the HPL Hive Control program from one holder account to another.",
                "",
                "This function performs a platform gate to determine the action based on the caller's",
                "program ID. If the caller's program ID matches the HPL Hive Control program ID, it",
                "checks permissions using the `platform_gate_fn` for driver actions. Otherwise, it",
                "checks if the caller's program ID is allowed based on the list of allowed programs.",
                "If the caller's program ID is neither the HPL Hive Control program ID nor in the list",
                "of allowed programs, it returns an unauthorized error.",
                "",
                "If either the sender's or receiver's holder account status is inactive, it returns an error.",
                "Otherwise, it performs pre-actions before transferring the currency, calls the `transfer_currency`",
                "instruction to perform the transfer, and then performs post-actions for both the sender's and",
                "receiver's token accounts.",
                "",
                "# Parameters",
                "",
                "- `ctx`: The program context containing accounts and instructions provided by the runtime.",
                "- `amount`: The amount of currency to be transferred.",
                "",
                "# Errors",
                "",
                "This function returns an error if the platform gate fails, either the sender's or receiver's",
                "holder account is inactive, the caller's program ID is not authorized, or if any issues occur",
                "during the transfer process."
            ],
            "accounts": [
                {
                    "name": "project",
                    "isMut": true,
                    "isSigner": false,
                    "docs": [
                        "The project this currency is associated with."
                    ]
                },
                {
                    "name": "currency",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "Currency account"
                    ]
                },
                {
                    "name": "mint",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "Currency mint"
                    ]
                },
                {
                    "name": "senderHolderAccount",
                    "isMut": true,
                    "isSigner": false,
                    "docs": [
                        "Sender holder account",
                        "Must have one currency and one owner.",
                        "The sender's token account must match the sender token account in the constraint."
                    ]
                },
                {
                    "name": "senderTokenAccount",
                    "isMut": true,
                    "isSigner": false,
                    "docs": [
                        "Sender token account"
                    ]
                },
                {
                    "name": "receiverHolderAccount",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "Receiver holder account.",
                        "Must have one currency.",
                        "The receiver's token account must match the receiver token account in the constraint."
                    ]
                },
                {
                    "name": "receiverTokenAccount",
                    "isMut": true,
                    "isSigner": false,
                    "docs": [
                        "Receiver token account"
                    ]
                },
                {
                    "name": "owner",
                    "isMut": true,
                    "isSigner": true,
                    "docs": [
                        "The owner of the source holder account"
                    ]
                },
                {
                    "name": "payer",
                    "isMut": true,
                    "isSigner": true,
                    "docs": [
                        "The wallet that pays for the rent and fees"
                    ]
                },
                {
                    "name": "vault",
                    "isMut": true,
                    "isSigner": false,
                    "docs": [
                        "This account is used to collect the platform fee"
                    ]
                },
                {
                    "name": "systemProgram",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "System Program"
                    ]
                },
                {
                    "name": "hiveControl",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "HIVE CONTROL PROGRAM"
                    ]
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "SPL Token program"
                    ]
                },
                {
                    "name": "instructionsSysvar",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "NATIVE INSTRUCTIONS SYSVAR"
                    ]
                }
            ],
            "args": [
                {
                    "name": "amount",
                    "type": "u64"
                }
            ]
        },
        {
            "name": "approveDelegate",
            "docs": [
                "",
                "This function performs a platform gate to determine the action based on the caller's",
                "program ID. If the caller's program ID matches the HPL Hive Control program ID, it",
                "checks permissions using the `platform_gate_fn` for driver actions. Otherwise, it",
                "checks if the caller's program ID is allowed based on the list of allowed programs.",
                "If the caller's program ID is neither the HPL Hive Control program ID nor in the list",
                "of allowed programs, it returns an unauthorized error.",
                "",
                "If the holder account status is inactive, it returns an error. Otherwise, it performs",
                "pre-actions before approving the delegate, calls the `approve_delegate` instruction to",
                "approve the delegate, and then performs post-actions.",
                "",
                "# Parameters",
                "",
                "- `ctx`: The program context containing accounts and instructions provided by the runtime.",
                "- `amount`: The amount of currency to be approved for delegation.",
                "",
                "# Errors",
                "",
                "This function returns an error if the platform gate fails, the holder account is inactive,",
                "the caller's program ID is not authorized, or if any issues occur during the approval process."
            ],
            "accounts": [
                {
                    "name": "project",
                    "isMut": true,
                    "isSigner": false,
                    "docs": [
                        "The project this currency is associated with."
                    ]
                },
                {
                    "name": "currency",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "Currency account"
                    ]
                },
                {
                    "name": "mint",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "Currency mint"
                    ]
                },
                {
                    "name": "holderAccount",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "Holder account"
                    ]
                },
                {
                    "name": "tokenAccount",
                    "isMut": true,
                    "isSigner": false,
                    "docs": [
                        "Token account holding the currency"
                    ]
                },
                {
                    "name": "delegate",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "The delegate authority account"
                    ]
                },
                {
                    "name": "owner",
                    "isMut": false,
                    "isSigner": true,
                    "docs": [
                        "The wallet that holds the authority over the project"
                    ]
                },
                {
                    "name": "payer",
                    "isMut": true,
                    "isSigner": true,
                    "docs": [
                        "The wallet that pays for the rent and fees"
                    ]
                },
                {
                    "name": "vault",
                    "isMut": true,
                    "isSigner": false,
                    "docs": [
                        "This account is used to collect the platform fee."
                    ]
                },
                {
                    "name": "systemProgram",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "System Program"
                    ]
                },
                {
                    "name": "hiveControl",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "HIVE CONTROL PROGRAM"
                    ]
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "SPL Token program"
                    ]
                },
                {
                    "name": "instructionsSysvar",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "NATIVE INSTRUCTIONS SYSVAR"
                    ]
                }
            ],
            "args": [
                {
                    "name": "amount",
                    "type": "u64"
                }
            ]
        },
        {
            "name": "revokeDelegate",
            "docs": [
                "Revoke a delegate's permission to manage currency in the HPL Hive Control program.",
                "",
                "This function performs a platform gate to determine the action based on the caller's",
                "program ID. If the caller's program ID matches the HPL Hive Control program ID, it",
                "checks permissions using the `platform_gate_fn` for driver actions. Otherwise, it",
                "checks if the caller's program ID is allowed based on the list of allowed programs.",
                "If the caller's program ID is neither the HPL Hive Control program ID nor in the list",
                "of allowed programs, it returns an unauthorized error.",
                "",
                "If the holder account status is inactive, it returns an error. Otherwise, it performs",
                "pre-actions before revoking the delegate, calls the `revoke_delegate` instruction to",
                "revoke the delegate, and then performs post-actions.",
                "",
                "# Parameters",
                "",
                "- `ctx`: The program context containing accounts and instructions provided by the runtime.",
                "",
                "# Errors",
                "",
                "This function returns an error if the platform gate fails, the holder account is inactive,",
                "the caller's program ID is not authorized, or if any issues occur during the revoking process."
            ],
            "accounts": [
                {
                    "name": "project",
                    "isMut": true,
                    "isSigner": false,
                    "docs": [
                        "The project this currency is associated with."
                    ]
                },
                {
                    "name": "currency",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "Currency account"
                    ]
                },
                {
                    "name": "mint",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "Currency mint"
                    ]
                },
                {
                    "name": "holderAccount",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "Holder account"
                    ]
                },
                {
                    "name": "tokenAccount",
                    "isMut": true,
                    "isSigner": false,
                    "docs": [
                        "Token account holding the currency"
                    ]
                },
                {
                    "name": "authority",
                    "isMut": false,
                    "isSigner": true,
                    "docs": [
                        "The wallet that holds the authority over the project"
                    ]
                },
                {
                    "name": "payer",
                    "isMut": true,
                    "isSigner": true,
                    "docs": [
                        "The wallet that pays for the rent and fees"
                    ]
                },
                {
                    "name": "vault",
                    "isMut": true,
                    "isSigner": false,
                    "docs": [
                        "This account is used to collect the platform fee."
                    ]
                },
                {
                    "name": "systemProgram",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "System Program"
                    ]
                },
                {
                    "name": "hiveControl",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "HIVE CONTROL PROGRAM"
                    ]
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "SPL Token program"
                    ]
                },
                {
                    "name": "instructionsSysvar",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "NATIVE INSTRUCTIONS SYSVAR"
                    ]
                }
            ],
            "args": []
        },
        {
            "name": "setHolderStatus",
            "docs": [
                "Set the status of a holder account in the HPL Hive Control program.",
                "",
                "This function performs a platform gate to determine the action based on the caller's",
                "program ID. If the caller's program ID matches the HPL Hive Control program ID, it",
                "checks permissions using the `platform_gate_fn` for driver actions. Otherwise, it",
                "checks if the caller's program ID is allowed based on the list of allowed programs.",
                "If the caller's program ID is neither the HPL Hive Control program ID nor in the list",
                "of allowed programs, it returns an unauthorized error.",
                "",
                "The function then calls the `set_holder_status` instruction to set the holder account's status.",
                "",
                "# Parameters",
                "",
                "- `ctx`: The program context containing accounts and instructions provided by the runtime.",
                "- `status`: The status to be set for the holder account.",
                "",
                "# Errors",
                "",
                "This function returns an error if the platform gate fails, the caller's program ID is not authorized,",
                "or if any issues occur during the process of setting the holder account's status."
            ],
            "accounts": [
                {
                    "name": "project",
                    "isMut": true,
                    "isSigner": false,
                    "docs": [
                        "The project this currency is associated with."
                    ]
                },
                {
                    "name": "currency",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "Currency account"
                    ]
                },
                {
                    "name": "holderAccount",
                    "isMut": true,
                    "isSigner": false,
                    "docs": [
                        "Holder account"
                    ]
                },
                {
                    "name": "tokenAccount",
                    "isMut": true,
                    "isSigner": false,
                    "docs": [
                        "Holder account"
                    ]
                },
                {
                    "name": "authority",
                    "isMut": false,
                    "isSigner": true,
                    "docs": [
                        "The authority of the project"
                    ]
                },
                {
                    "name": "payer",
                    "isMut": true,
                    "isSigner": true,
                    "docs": [
                        "The wallet that pays for the rent and fees"
                    ]
                },
                {
                    "name": "vault",
                    "isMut": true,
                    "isSigner": false,
                    "docs": [
                        "This account is used to collect the platform fee."
                    ]
                },
                {
                    "name": "systemProgram",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "SPL Token program"
                    ]
                },
                {
                    "name": "hiveControl",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "HIVE CONTROL PROGRAM"
                    ]
                },
                {
                    "name": "instructionsSysvar",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "The Instructions System Variable Account."
                    ]
                },
                {
                    "name": "clockSysvar",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "The Clock System Variable Account."
                    ]
                }
            ],
            "args": [
                {
                    "name": "status",
                    "type": {
                        "defined": "HolderStatus"
                    }
                }
            ]
        }
    ],
    "accounts": [
        {
            "name": "Currency",
            "docs": [
                "A currency is a project associated spl token.",
                "It is used as in-game utility currency.",
                "PDA: ['currency', mint]",
                "Category: currency_state"
            ],
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "bump",
                        "type": "u8"
                    },
                    {
                        "name": "project",
                        "docs": [
                            "The project this currency is associated with."
                        ],
                        "type": "publicKey"
                    },
                    {
                        "name": "mint",
                        "docs": [
                            "The spl mint of the currency."
                        ],
                        "type": "publicKey"
                    },
                    {
                        "name": "kind",
                        "docs": [
                            "The type of currency."
                        ],
                        "type": {
                            "defined": "CurrencyKind"
                        }
                    },
                    {
                        "name": "txHook",
                        "docs": [
                            "Transaction Hook"
                        ],
                        "type": {
                            "defined": "TxHook"
                        }
                    }
                ]
            }
        },
        {
            "name": "HolderAccount",
            "docs": [
                "A holder is a middle man account between wallet and currency.",
                "It contains detail about the token account that holds the currency",
                "PDA: ['holder', owner, mint]",
                "Category: holder_state"
            ],
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "bump",
                        "type": "u8"
                    },
                    {
                        "name": "currency",
                        "docs": [
                            "The currency associated with this account"
                        ],
                        "type": "publicKey"
                    },
                    {
                        "name": "owner",
                        "docs": [
                            "The owner of this account."
                        ],
                        "type": "publicKey"
                    },
                    {
                        "name": "tokenAccount",
                        "docs": [
                            "The token account that holds the currency."
                        ],
                        "type": "publicKey"
                    },
                    {
                        "name": "status",
                        "docs": [
                            "Holder status"
                        ],
                        "type": {
                            "defined": "HolderStatus"
                        }
                    },
                    {
                        "name": "createdAt",
                        "docs": [
                            "When this holder account was created"
                        ],
                        "type": "i64"
                    }
                ]
            }
        }
    ],
    "types": [
        {
            "name": "CreateCurrencyArgs",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "name",
                        "docs": [
                            "The name of the currency."
                        ],
                        "type": "string"
                    },
                    {
                        "name": "symbol",
                        "docs": [
                            "The symbol of the currency."
                        ],
                        "type": "string"
                    },
                    {
                        "name": "uri",
                        "docs": [
                            "The URI (Uniform Resource Identifier) associated with the currency."
                        ],
                        "type": "string"
                    },
                    {
                        "name": "decimals",
                        "docs": [
                            "The number of decimal places for the currency. Used to represent fractional values."
                        ],
                        "type": "u8"
                    },
                    {
                        "name": "kind",
                        "docs": [
                            "[Optional] The kind of permissioned currency. It is an enumeration of different permissioned currency kinds."
                        ],
                        "type": {
                            "option": {
                                "defined": "PermissionedCurrencyKind"
                            }
                        }
                    }
                ]
            }
        },
        {
            "name": "UpdateCurrencyArgs",
            "docs": [
                "Arguments for updating a currency."
            ],
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "name",
                        "docs": [
                            "[Option] The updated name of the currency. If `Some`, the name will be updated."
                        ],
                        "type": {
                            "option": "string"
                        }
                    },
                    {
                        "name": "symbol",
                        "docs": [
                            "[Option] The updated symbol of the currency. If `Some`, the symbol will be updated."
                        ],
                        "type": {
                            "option": "string"
                        }
                    },
                    {
                        "name": "uri",
                        "docs": [
                            "[Option] The updated URI of the currency. If `Some`, the URI will be updated."
                        ],
                        "type": {
                            "option": "string"
                        }
                    }
                ]
            }
        },
        {
            "name": "TxHook",
            "type": {
                "kind": "enum",
                "variants": [
                    {
                        "name": "User"
                    },
                    {
                        "name": "Authority"
                    },
                    {
                        "name": "CPIProgram",
                        "fields": [
                            {
                                "name": "programId",
                                "docs": [
                                    "The program id"
                                ],
                                "type": "publicKey"
                            },
                            {
                                "name": "data",
                                "docs": [
                                    "The data to be passed to the program"
                                ],
                                "type": "bytes"
                            }
                        ]
                    }
                ]
            }
        },
        {
            "name": "CurrencyKind",
            "docs": [
                "The type of currency.",
                "Custodial currencies are held by the program for the user.",
                "NonCustodial currencies are transfered to holders wallet."
            ],
            "type": {
                "kind": "enum",
                "variants": [
                    {
                        "name": "Permissioned",
                        "fields": [
                            {
                                "name": "kind",
                                "type": {
                                    "defined": "PermissionedCurrencyKind"
                                }
                            }
                        ]
                    },
                    {
                        "name": "Wrapped"
                    }
                ]
            }
        },
        {
            "name": "PermissionedCurrencyKind",
            "docs": [
                "The sub-type of permissioned currency."
            ],
            "type": {
                "kind": "enum",
                "variants": [
                    {
                        "name": "NonCustodial"
                    },
                    {
                        "name": "Custodial"
                    }
                ]
            }
        },
        {
            "name": "HolderStatus",
            "docs": [
                "The status of a holder account."
            ],
            "type": {
                "kind": "enum",
                "variants": [
                    {
                        "name": "Active"
                    },
                    {
                        "name": "Inactive"
                    }
                ]
            }
        }
    ],
    "errors": [
        {
            "code": 6000,
            "name": "Overflow",
            "msg": "Opertaion overflowed"
        },
        {
            "code": 6001,
            "name": "Unauthorized",
            "msg": "You are not authorized to perform this action"
        },
        {
            "code": 6002,
            "name": "InvalidMetadata",
            "msg": "Metadata is invalid for the nft"
        },
        {
            "code": 6003,
            "name": "InactiveHolder",
            "msg": "The holder account is currrently Inactive"
        }
    ],
    "metadata": {
        "address": "CrncyaGmZfWvpxRcpHEkSrqeeyQsdn4MAedo9KuARAc4",
        "origin": "anchor",
        "binaryVersion": "0.29.0",
        "libVersion": "0.29.0"
    }
}
