{
    "abi": [
        { "type": "constructor", "inputs": [], "stateMutability": "nonpayable" },
        {
            "type": "function",
            "name": "DECIMAL_PRECISION",
            "inputs": [],
            "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "FEE_RATIO_BASE",
            "inputs": [],
            "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "FEE_TO_STAKER_RATIO",
            "inputs": [],
            "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "F_COLL",
            "inputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
            "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "F_SAT",
            "inputs": [],
            "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "SATOSHI_CORE",
            "inputs": [],
            "outputs": [
                {
                    "name": "",
                    "type": "address",
                    "internalType": "contract ISatoshiCore"
                }
            ],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "borrowerOperations",
            "inputs": [],
            "outputs": [
                {
                    "name": "",
                    "type": "address",
                    "internalType": "contract IBorrowerOperations"
                }
            ],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "claimFee",
            "inputs": [],
            "outputs": [],
            "stateMutability": "nonpayable"
        },
        {
            "type": "function",
            "name": "claimReward",
            "inputs": [],
            "outputs": [],
            "stateMutability": "nonpayable"
        },
        {
            "type": "function",
            "name": "collForFeeReceiver",
            "inputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
            "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "collToken",
            "inputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
            "outputs": [
                { "name": "", "type": "address", "internalType": "contract IERC20" }
            ],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "collTokenIndex",
            "inputs": [{ "name": "", "type": "address", "internalType": "address" }],
            "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "debtToken",
            "inputs": [],
            "outputs": [
                { "name": "", "type": "address", "internalType": "contract IDebtToken" }
            ],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "getAvailableUnstakeAmount",
            "inputs": [
                { "name": "_user", "type": "address", "internalType": "address" }
            ],
            "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "getPendingCollGain",
            "inputs": [
                { "name": "_user", "type": "address", "internalType": "address" }
            ],
            "outputs": [
                { "name": "", "type": "uint256[]", "internalType": "uint256[]" }
            ],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "getPendingSATGain",
            "inputs": [
                { "name": "_user", "type": "address", "internalType": "address" }
            ],
            "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "getSnapshot",
            "inputs": [
                { "name": "_user", "type": "address", "internalType": "address" }
            ],
            "outputs": [
                {
                    "name": "",
                    "type": "tuple",
                    "internalType": "struct IRewardManager.Snapshot",
                    "components": [
                        {
                            "name": "F_COLL_Snapshot",
                            "type": "uint256[1000]",
                            "internalType": "uint256[1000]"
                        },
                        {
                            "name": "F_SAT_Snapshot",
                            "type": "uint256",
                            "internalType": "uint256"
                        }
                    ]
                }
            ],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "getStakeData",
            "inputs": [
                { "name": "_user", "type": "address", "internalType": "address" }
            ],
            "outputs": [
                {
                    "name": "",
                    "type": "tuple",
                    "internalType": "struct IRewardManager.StakeData",
                    "components": [
                        {
                            "name": "lockWeights",
                            "type": "uint256",
                            "internalType": "uint256"
                        },
                        {
                            "name": "nextUnlockIndex",
                            "type": "uint32[4]",
                            "internalType": "uint32[4]"
                        }
                    ]
                }
            ],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "getUserStakes",
            "inputs": [
                { "name": "_user", "type": "address", "internalType": "address" },
                { "name": "_index", "type": "uint256", "internalType": "uint256" }
            ],
            "outputs": [
                {
                    "name": "",
                    "type": "tuple[]",
                    "internalType": "struct IRewardManager.Stake[]",
                    "components": [
                        { "name": "staker", "type": "address", "internalType": "address" },
                        { "name": "amount", "type": "uint256", "internalType": "uint256" },
                        {
                            "name": "lockDuration",
                            "type": "uint8",
                            "internalType": "enum LockDuration"
                        },
                        { "name": "endTime", "type": "uint32", "internalType": "uint32" }
                    ]
                }
            ],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "guardian",
            "inputs": [],
            "outputs": [{ "name": "", "type": "address", "internalType": "address" }],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "increaseCollPerUintStaked",
            "inputs": [
                { "name": "_amount", "type": "uint256", "internalType": "uint256" }
            ],
            "outputs": [],
            "stateMutability": "nonpayable"
        },
        {
            "type": "function",
            "name": "increaseSATPerUintStaked",
            "inputs": [
                { "name": "_amount", "type": "uint256", "internalType": "uint256" }
            ],
            "outputs": [],
            "stateMutability": "nonpayable"
        },
        {
            "type": "function",
            "name": "initialize",
            "inputs": [
                {
                    "name": "_satoshiCore",
                    "type": "address",
                    "internalType": "contract ISatoshiCore"
                }
            ],
            "outputs": [],
            "stateMutability": "nonpayable"
        },
        {
            "type": "function",
            "name": "isTroveManagerRegistered",
            "inputs": [{ "name": "", "type": "address", "internalType": "address" }],
            "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "oshiToken",
            "inputs": [],
            "outputs": [
                { "name": "", "type": "address", "internalType": "contract IOSHIToken" }
            ],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "owner",
            "inputs": [],
            "outputs": [{ "name": "", "type": "address", "internalType": "address" }],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "proxiableUUID",
            "inputs": [],
            "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "registerTroveManager",
            "inputs": [
                {
                    "name": "_troveManager",
                    "type": "address",
                    "internalType": "contract ITroveManager"
                }
            ],
            "outputs": [],
            "stateMutability": "nonpayable"
        },
        {
            "type": "function",
            "name": "removeTroveManager",
            "inputs": [
                {
                    "name": "_troveManager",
                    "type": "address",
                    "internalType": "contract ITroveManager"
                }
            ],
            "outputs": [],
            "stateMutability": "nonpayable"
        },
        {
            "type": "function",
            "name": "satForFeeReceiver",
            "inputs": [],
            "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "setAddresses",
            "inputs": [
                {
                    "name": "_borrowerOperations",
                    "type": "address",
                    "internalType": "contract IBorrowerOperations"
                },
                {
                    "name": "_weth",
                    "type": "address",
                    "internalType": "contract IWETH"
                },
                {
                    "name": "_debtToken",
                    "type": "address",
                    "internalType": "contract IDebtToken"
                },
                {
                    "name": "_oshiToken",
                    "type": "address",
                    "internalType": "contract IOSHIToken"
                }
            ],
            "outputs": [],
            "stateMutability": "nonpayable"
        },
        {
            "type": "function",
            "name": "stake",
            "inputs": [
                { "name": "_amount", "type": "uint256", "internalType": "uint256" },
                {
                    "name": "_duration",
                    "type": "uint8",
                    "internalType": "enum LockDuration"
                }
            ],
            "outputs": [],
            "stateMutability": "nonpayable"
        },
        {
            "type": "function",
            "name": "totalOSHIWeightedStaked",
            "inputs": [],
            "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "unstake",
            "inputs": [
                { "name": "_amount", "type": "uint256", "internalType": "uint256" }
            ],
            "outputs": [],
            "stateMutability": "nonpayable"
        },
        {
            "type": "function",
            "name": "upgradeTo",
            "inputs": [
                {
                    "name": "newImplementation",
                    "type": "address",
                    "internalType": "address"
                }
            ],
            "outputs": [],
            "stateMutability": "nonpayable"
        },
        {
            "type": "function",
            "name": "upgradeToAndCall",
            "inputs": [
                {
                    "name": "newImplementation",
                    "type": "address",
                    "internalType": "address"
                },
                { "name": "data", "type": "bytes", "internalType": "bytes" }
            ],
            "outputs": [],
            "stateMutability": "payable"
        },
        {
            "type": "function",
            "name": "weth",
            "inputs": [],
            "outputs": [
                { "name": "", "type": "address", "internalType": "contract IWETH" }
            ],
            "stateMutability": "view"
        },
        {
            "type": "event",
            "name": "AdminChanged",
            "inputs": [
                {
                    "name": "previousAdmin",
                    "type": "address",
                    "indexed": false,
                    "internalType": "address"
                },
                {
                    "name": "newAdmin",
                    "type": "address",
                    "indexed": false,
                    "internalType": "address"
                }
            ],
            "anonymous": false
        },
        {
            "type": "event",
            "name": "BeaconUpgraded",
            "inputs": [
                {
                    "name": "beacon",
                    "type": "address",
                    "indexed": true,
                    "internalType": "address"
                }
            ],
            "anonymous": false
        },
        {
            "type": "event",
            "name": "BorrowerOperationsSet",
            "inputs": [
                {
                    "name": "",
                    "type": "address",
                    "indexed": false,
                    "internalType": "contract IBorrowerOperations"
                }
            ],
            "anonymous": false
        },
        {
            "type": "event",
            "name": "DebtTokenSet",
            "inputs": [
                {
                    "name": "",
                    "type": "address",
                    "indexed": false,
                    "internalType": "contract IDebtToken"
                }
            ],
            "anonymous": false
        },
        {
            "type": "event",
            "name": "F_COLLUpdated",
            "inputs": [
                {
                    "name": "",
                    "type": "address",
                    "indexed": false,
                    "internalType": "address"
                },
                {
                    "name": "",
                    "type": "uint256",
                    "indexed": false,
                    "internalType": "uint256"
                }
            ],
            "anonymous": false
        },
        {
            "type": "event",
            "name": "F_SATUpdated",
            "inputs": [
                {
                    "name": "",
                    "type": "uint256",
                    "indexed": false,
                    "internalType": "uint256"
                }
            ],
            "anonymous": false
        },
        {
            "type": "event",
            "name": "Initialized",
            "inputs": [
                {
                    "name": "version",
                    "type": "uint8",
                    "indexed": false,
                    "internalType": "uint8"
                }
            ],
            "anonymous": false
        },
        {
            "type": "event",
            "name": "StakeChanged",
            "inputs": [
                {
                    "name": "",
                    "type": "address",
                    "indexed": false,
                    "internalType": "address"
                },
                {
                    "name": "",
                    "type": "uint256",
                    "indexed": false,
                    "internalType": "uint256"
                }
            ],
            "anonymous": false
        },
        {
            "type": "event",
            "name": "StakerSnapshotsUpdated",
            "inputs": [
                {
                    "name": "",
                    "type": "address",
                    "indexed": false,
                    "internalType": "address"
                },
                {
                    "name": "",
                    "type": "uint256[]",
                    "indexed": false,
                    "internalType": "uint256[]"
                },
                {
                    "name": "",
                    "type": "uint256",
                    "indexed": false,
                    "internalType": "uint256"
                }
            ],
            "anonymous": false
        },
        {
            "type": "event",
            "name": "StakingGainsWithdrawn",
            "inputs": [
                {
                    "name": "",
                    "type": "address",
                    "indexed": false,
                    "internalType": "address"
                },
                {
                    "name": "",
                    "type": "uint256[]",
                    "indexed": false,
                    "internalType": "uint256[]"
                },
                {
                    "name": "",
                    "type": "uint256",
                    "indexed": false,
                    "internalType": "uint256"
                }
            ],
            "anonymous": false
        },
        {
            "type": "event",
            "name": "TotalOSHIStakedUpdated",
            "inputs": [
                {
                    "name": "",
                    "type": "uint256",
                    "indexed": false,
                    "internalType": "uint256"
                }
            ],
            "anonymous": false
        },
        {
            "type": "event",
            "name": "TroveManagerRegistered",
            "inputs": [
                {
                    "name": "",
                    "type": "address",
                    "indexed": false,
                    "internalType": "contract ITroveManager"
                }
            ],
            "anonymous": false
        },
        {
            "type": "event",
            "name": "TroveManagerRemoved",
            "inputs": [
                {
                    "name": "",
                    "type": "address",
                    "indexed": false,
                    "internalType": "contract ITroveManager"
                }
            ],
            "anonymous": false
        },
        {
            "type": "event",
            "name": "Upgraded",
            "inputs": [
                {
                    "name": "implementation",
                    "type": "address",
                    "indexed": true,
                    "internalType": "address"
                }
            ],
            "anonymous": false
        },
        {
            "type": "event",
            "name": "WETHSet",
            "inputs": [
                {
                    "name": "",
                    "type": "address",
                    "indexed": false,
                    "internalType": "contract IWETH"
                }
            ],
            "anonymous": false
        },
        { "type": "error", "name": "InvalidSatoshiCore", "inputs": [] },
        { "type": "error", "name": "NativeTokenTransferFailed", "inputs": [] }
    ]
}
