export type Staking = {
    version: "0.1.0";
    name: "staking";
    instructions: [
        {
            name: "initLockup";
            accounts: [
                {
                    name: "creator";
                    isMut: true;
                    isSigner: true;
                },
                {
                    name: "lockup";
                    isMut: true;
                    isSigner: false;
                },
                {
                    name: "stakeVault";
                    isMut: true;
                    isSigner: false;
                },
                {
                    name: "stakeToken";
                    isMut: false;
                    isSigner: false;
                },
                {
                    name: "rewardToken";
                    isMut: false;
                    isSigner: false;
                },
                {
                    name: "stakeVaultTokenAccount";
                    isMut: true;
                    isSigner: false;
                },
                {
                    name: "stakeVaultRewardTokenAccount";
                    isMut: true;
                    isSigner: false;
                },
                {
                    name: "systemProgram";
                    isMut: false;
                    isSigner: false;
                },
                {
                    name: "tokenProgram";
                    isMut: false;
                    isSigner: false;
                },
                {
                    name: "associatedTokenProgram";
                    isMut: false;
                    isSigner: false;
                }
            ];
            args: [
                {
                    name: "params";
                    type: {
                        defined: "InitLockupParams";
                    };
                }
            ];
        },
        {
            name: "stake";
            accounts: [
                {
                    name: "staker";
                    isMut: true;
                    isSigner: true;
                },
                {
                    name: "lockup";
                    isMut: true;
                    isSigner: false;
                },
                {
                    name: "stakePda";
                    isMut: true;
                    isSigner: false;
                },
                {
                    name: "stakeToken";
                    isMut: false;
                    isSigner: false;
                },
                {
                    name: "stakerTokenAccount";
                    isMut: true;
                    isSigner: false;
                },
                {
                    name: "stakeVault";
                    isMut: true;
                    isSigner: false;
                },
                {
                    name: "stakeVaultTokenAccount";
                    isMut: true;
                    isSigner: false;
                },
                {
                    name: "systemProgram";
                    isMut: false;
                    isSigner: false;
                },
                {
                    name: "tokenProgram";
                    isMut: false;
                    isSigner: false;
                },
                {
                    name: "associatedTokenProgram";
                    isMut: false;
                    isSigner: false;
                }
            ];
            args: [
                {
                    name: "params";
                    type: {
                        defined: "StakeParams";
                    };
                }
            ];
        },
        {
            name: "unStake";
            accounts: [
                {
                    name: "staker";
                    isMut: true;
                    isSigner: true;
                },
                {
                    name: "lockup";
                    isMut: true;
                    isSigner: false;
                },
                {
                    name: "stakePda";
                    isMut: true;
                    isSigner: false;
                },
                {
                    name: "stakeToken";
                    isMut: false;
                    isSigner: false;
                },
                {
                    name: "stakerTokenAccount";
                    isMut: true;
                    isSigner: false;
                },
                {
                    name: "stakeVault";
                    isMut: true;
                    isSigner: false;
                },
                {
                    name: "stakeVaultTokenAccount";
                    isMut: true;
                    isSigner: false;
                },
                {
                    name: "tokenProgram";
                    isMut: false;
                    isSigner: false;
                },
                {
                    name: "systemProgram";
                    isMut: false;
                    isSigner: false;
                },
                {
                    name: "associatedTokenProgram";
                    isMut: false;
                    isSigner: false;
                }
            ];
            args: [];
        },
        {
            name: "claimRewardToken";
            accounts: [
                {
                    name: "staker";
                    isMut: true;
                    isSigner: true;
                },
                {
                    name: "lockup";
                    isMut: true;
                    isSigner: false;
                },
                {
                    name: "stakePda";
                    isMut: true;
                    isSigner: false;
                },
                {
                    name: "rewardToken";
                    isMut: false;
                    isSigner: false;
                },
                {
                    name: "stakeToken";
                    isMut: false;
                    isSigner: false;
                },
                {
                    name: "stakerRewardTokenAccount";
                    isMut: true;
                    isSigner: false;
                },
                {
                    name: "stakeVault";
                    isMut: true;
                    isSigner: false;
                },
                {
                    name: "stakeVaultRewardTokenAccount";
                    isMut: true;
                    isSigner: false;
                },
                {
                    name: "tokenProgram";
                    isMut: false;
                    isSigner: false;
                },
                {
                    name: "associatedTokenProgram";
                    isMut: false;
                    isSigner: false;
                },
                {
                    name: "systemProgram";
                    isMut: false;
                    isSigner: false;
                }
            ];
            args: [];
        }
    ];
    accounts: [
        {
            name: "lockupInfo";
            type: {
                kind: "struct";
                fields: [
                    {
                        name: "name";
                        type: "string";
                    },
                    {
                        name: "creator";
                        type: "publicKey";
                    },
                    {
                        name: "lockupCreatedTime";
                        type: "i64";
                    },
                    {
                        name: "stakingStartTime";
                        type: "i64";
                    },
                    {
                        name: "stakingEndTime";
                        type: "i64";
                    },
                    {
                        name: "lockTimespan";
                        type: "i64";
                    },
                    {
                        name: "globalStaked";
                        type: "u64";
                    },
                    {
                        name: "totalAllocationReward";
                        type: "u64";
                    },
                    {
                        name: "stakedToken";
                        type: "publicKey";
                    },
                    {
                        name: "rewardToken";
                        type: "publicKey";
                    }
                ];
            };
        },
        {
            name: "stakeInfo";
            type: {
                kind: "struct";
                fields: [
                    {
                        name: "staker";
                        type: "publicKey";
                    },
                    {
                        name: "createdTime";
                        type: "i64";
                    },
                    {
                        name: "stakedAmount";
                        type: "u64";
                    },
                    {
                        name: "rewardAmount";
                        type: "u64";
                    },
                    {
                        name: "rewardClaimed";
                        type: "bool";
                    },
                    {
                        name: "stakeClaimed";
                        type: "bool";
                    }
                ];
            };
        }
    ];
    types: [
        {
            name: "InitLockupParams";
            type: {
                kind: "struct";
                fields: [
                    {
                        name: "name";
                        type: "string";
                    },
                    {
                        name: "lockTimespan";
                        type: "i64";
                    },
                    {
                        name: "totalAllocationReward";
                        type: "u64";
                    },
                    {
                        name: "stakingEndTime";
                        type: "i64";
                    },
                    {
                        name: "stakingStartTime";
                        type: "i64";
                    }
                ];
            };
        },
        {
            name: "StakeParams";
            type: {
                kind: "struct";
                fields: [
                    {
                        name: "amount";
                        type: "u64";
                    }
                ];
            };
        }
    ];
    errors: [
        {
            code: 6000;
            name: "InvalidStakeToken";
            msg: "The provided token mint is not usable for this operation";
        },
        {
            code: 6001;
            name: "InvalidStakeClaimTime";
            msg: "You cannot claim your stake yet";
        },
        {
            code: 6002;
            name: "InvalidStaker";
            msg: "Invalid Staker";
        },
        {
            code: 6003;
            name: "StakeAlreadyClaimed";
            msg: "Already claimed";
        },
        {
            code: 6004;
            name: "RewardIsZero";
            msg: "Reward is zero";
        },
        {
            code: 6005;
            name: "InvalidStakeAmount";
            msg: "Invalid stake amount";
        },
        {
            code: 6006;
            name: "InvalidRewardToken";
            msg: "Invalid reward token";
        },
        {
            code: 6007;
            name: "InvalidStakePeriod";
            msg: "Invalid stake period";
        },
        {
            code: 6008;
            name: "InvalidUnstakeTime";
            msg: "Invalid unstake time";
        },
        {
            code: 6009;
            name: "StakeRewardNotClaimable";
            msg: "Stake reward not claimable yet";
        },
        {
            code: 6010;
            name: "StakeNotClaimable";
            msg: "Stake not claimable yet";
        },
        {
            code: 6011;
            name: "RewardAlreadyClaimed";
            msg: "Reward already claimed";
        }
    ];
};
export declare const IDL: Staking;
