{
    "version": "0.1.0",
    "name": "contract",
    "instructions": [
        {
            "name": "createStakingAccount",
            "accounts": [
                {
                    "name": "controller",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "stakingAccount",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "userWallet",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "systemProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "rent",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": []
        },
        {
            "name": "stake",
            "accounts": [
                {
                    "name": "controller",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "stakingAccount",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "vault",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "userAta",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "userWallet",
                    "isMut": false,
                    "isSigner": true
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "amount",
                    "type": "u64"
                }
            ]
        },
        {
            "name": "unstake",
            "accounts": [
                {
                    "name": "controller",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "stakingAccount",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "vault",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "userAta",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "feeCollectorAta",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "userWallet",
                    "isMut": false,
                    "isSigner": true
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "unstakePercent",
                    "type": "u64"
                }
            ]
        }
    ],
    "accounts": [],
    "errors": [
        {
            "code": 6000,
            "name": "Suspended",
            "msg": "[G000] The pool is suspended"
        },
        {
            "code": 6001,
            "name": "NotAdmin",
            "msg": "[G001] Not admin"
        },
        {
            "code": 6002,
            "name": "PercentageOutOfRange",
            "msg": "[G002] Percentage out of range"
        },
        {
            "code": 6003,
            "name": "NotEnoughRewardReserve",
            "msg": "[G003] Not enough reward reserve"
        }
    ]
}
