{
    "abi": [
        { "type": "constructor", "inputs": [], "stateMutability": "nonpayable" },
        {
            "type": "function",
            "name": "DECIMAL_PRECISION",
            "inputs": [],
            "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "MAX_REWARD_RATE",
            "inputs": [],
            "outputs": [{ "name": "", "type": "uint128", "internalType": "uint128" }],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "OSHI_EMISSION_DURATION",
            "inputs": [],
            "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "P",
            "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": "SCALE_FACTOR",
            "inputs": [],
            "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "SUNSET_DURATION",
            "inputs": [],
            "outputs": [{ "name": "", "type": "uint128", "internalType": "uint128" }],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "accountDeposits",
            "inputs": [{ "name": "", "type": "address", "internalType": "address" }],
            "outputs": [
                { "name": "amount", "type": "uint128", "internalType": "uint128" },
                { "name": "timestamp", "type": "uint128", "internalType": "uint128" }
            ],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "claimCollateralGains",
            "inputs": [
                { "name": "recipient", "type": "address", "internalType": "address" },
                {
                    "name": "collateralIndexes",
                    "type": "uint256[]",
                    "internalType": "uint256[]"
                }
            ],
            "outputs": [],
            "stateMutability": "nonpayable"
        },
        {
            "type": "function",
            "name": "claimReward",
            "inputs": [
                { "name": "recipient", "type": "address", "internalType": "address" }
            ],
            "outputs": [
                { "name": "amount", "type": "uint256", "internalType": "uint256" }
            ],
            "stateMutability": "nonpayable"
        },
        {
            "type": "function",
            "name": "claimStartTime",
            "inputs": [],
            "outputs": [{ "name": "", "type": "uint32", "internalType": "uint32" }],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "claimableReward",
            "inputs": [
                { "name": "_depositor", "type": "address", "internalType": "address" }
            ],
            "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "collateralGainsByDepositor",
            "inputs": [
                { "name": "", "type": "address", "internalType": "address" },
                { "name": "", "type": "uint256", "internalType": "uint256" }
            ],
            "outputs": [{ "name": "", "type": "uint80", "internalType": "uint80" }],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "collateralTokens",
            "inputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
            "outputs": [
                { "name": "", "type": "address", "internalType": "contract IERC20" }
            ],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "communityIssuance",
            "inputs": [],
            "outputs": [
                {
                    "name": "",
                    "type": "address",
                    "internalType": "contract ICommunityIssuance"
                }
            ],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "currentEpoch",
            "inputs": [],
            "outputs": [{ "name": "", "type": "uint128", "internalType": "uint128" }],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "currentScale",
            "inputs": [],
            "outputs": [{ "name": "", "type": "uint128", "internalType": "uint128" }],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "debtToken",
            "inputs": [],
            "outputs": [
                { "name": "", "type": "address", "internalType": "contract IDebtToken" }
            ],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "depositSnapshots",
            "inputs": [{ "name": "", "type": "address", "internalType": "address" }],
            "outputs": [
                { "name": "P", "type": "uint256", "internalType": "uint256" },
                { "name": "G", "type": "uint256", "internalType": "uint256" },
                { "name": "scale", "type": "uint128", "internalType": "uint128" },
                { "name": "epoch", "type": "uint128", "internalType": "uint128" }
            ],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "depositSums",
            "inputs": [
                { "name": "", "type": "address", "internalType": "address" },
                { "name": "", "type": "uint256", "internalType": "uint256" }
            ],
            "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "enableCollateral",
            "inputs": [
                {
                    "name": "_collateral",
                    "type": "address",
                    "internalType": "contract IERC20"
                }
            ],
            "outputs": [],
            "stateMutability": "nonpayable"
        },
        {
            "type": "function",
            "name": "epochToScaleToG",
            "inputs": [
                { "name": "", "type": "uint128", "internalType": "uint128" },
                { "name": "", "type": "uint128", "internalType": "uint128" }
            ],
            "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "epochToScaleToSums",
            "inputs": [
                { "name": "", "type": "uint128", "internalType": "uint128" },
                { "name": "", "type": "uint128", "internalType": "uint128" },
                { "name": "", "type": "uint256", "internalType": "uint256" }
            ],
            "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "factory",
            "inputs": [],
            "outputs": [
                { "name": "", "type": "address", "internalType": "contract IFactory" }
            ],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "getCompoundedDebtDeposit",
            "inputs": [
                { "name": "_depositor", "type": "address", "internalType": "address" }
            ],
            "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "getDepositorCollateralGain",
            "inputs": [
                { "name": "_depositor", "type": "address", "internalType": "address" }
            ],
            "outputs": [
                {
                    "name": "collateralGains",
                    "type": "uint256[]",
                    "internalType": "uint256[]"
                }
            ],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "getTotalDebtTokenDeposits",
            "inputs": [],
            "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "guardian",
            "inputs": [],
            "outputs": [{ "name": "", "type": "address", "internalType": "address" }],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "indexByCollateral",
            "inputs": [
                { "name": "", "type": "address", "internalType": "contract IERC20" }
            ],
            "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "initialize",
            "inputs": [
                {
                    "name": "_satoshiCore",
                    "type": "address",
                    "internalType": "contract ISatoshiCore"
                },
                {
                    "name": "_debtToken",
                    "type": "address",
                    "internalType": "contract IDebtToken"
                },
                {
                    "name": "_factory",
                    "type": "address",
                    "internalType": "contract IFactory"
                },
                {
                    "name": "_liquidationManager",
                    "type": "address",
                    "internalType": "contract ILiquidationManager"
                },
                {
                    "name": "_communityIssuance",
                    "type": "address",
                    "internalType": "contract ICommunityIssuance"
                }
            ],
            "outputs": [],
            "stateMutability": "nonpayable"
        },
        {
            "type": "function",
            "name": "isClaimStart",
            "inputs": [],
            "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "lastCollateralError_Offset",
            "inputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
            "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "lastDebtLossError_Offset",
            "inputs": [],
            "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "lastOSHIError",
            "inputs": [],
            "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "lastUpdate",
            "inputs": [],
            "outputs": [{ "name": "", "type": "uint32", "internalType": "uint32" }],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "liquidationManager",
            "inputs": [],
            "outputs": [
                {
                    "name": "",
                    "type": "address",
                    "internalType": "contract ILiquidationManager"
                }
            ],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "offset",
            "inputs": [
                {
                    "name": "collateral",
                    "type": "address",
                    "internalType": "contract IERC20"
                },
                {
                    "name": "_debtToOffset",
                    "type": "uint256",
                    "internalType": "uint256"
                },
                { "name": "_collToAdd", "type": "uint256", "internalType": "uint256" }
            ],
            "outputs": [],
            "stateMutability": "nonpayable"
        },
        {
            "type": "function",
            "name": "owner",
            "inputs": [],
            "outputs": [{ "name": "", "type": "address", "internalType": "address" }],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "provideToSP",
            "inputs": [
                { "name": "_amount", "type": "uint256", "internalType": "uint256" }
            ],
            "outputs": [],
            "stateMutability": "nonpayable"
        },
        {
            "type": "function",
            "name": "proxiableUUID",
            "inputs": [],
            "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "rewardRate",
            "inputs": [],
            "outputs": [{ "name": "", "type": "uint128", "internalType": "uint128" }],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "setClaimStartTime",
            "inputs": [
                {
                    "name": "_claimStartTime",
                    "type": "uint32",
                    "internalType": "uint32"
                }
            ],
            "outputs": [],
            "stateMutability": "nonpayable"
        },
        {
            "type": "function",
            "name": "setRewardRate",
            "inputs": [
                {
                    "name": "_newRewardRate",
                    "type": "uint128",
                    "internalType": "uint128"
                }
            ],
            "outputs": [],
            "stateMutability": "nonpayable"
        },
        {
            "type": "function",
            "name": "startCollateralSunset",
            "inputs": [
                {
                    "name": "collateral",
                    "type": "address",
                    "internalType": "contract IERC20"
                }
            ],
            "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": "withdrawFromSP",
            "inputs": [
                { "name": "_amount", "type": "uint256", "internalType": "uint256" }
            ],
            "outputs": [],
            "stateMutability": "nonpayable"
        },
        {
            "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": "ClaimStartTimeSet",
            "inputs": [
                {
                    "name": "_startTime",
                    "type": "uint256",
                    "indexed": false,
                    "internalType": "uint256"
                }
            ],
            "anonymous": false
        },
        {
            "type": "event",
            "name": "CollateralGainWithdrawn",
            "inputs": [
                {
                    "name": "_depositor",
                    "type": "address",
                    "indexed": true,
                    "internalType": "address"
                },
                {
                    "name": "_collateralAmounts",
                    "type": "uint256[]",
                    "indexed": false,
                    "internalType": "uint256[]"
                }
            ],
            "anonymous": false
        },
        {
            "type": "event",
            "name": "CollateralOverwritten",
            "inputs": [
                {
                    "name": "oldCollateralToken",
                    "type": "address",
                    "indexed": false,
                    "internalType": "contract IERC20"
                },
                {
                    "name": "newCollateralToken",
                    "type": "address",
                    "indexed": false,
                    "internalType": "contract IERC20"
                }
            ],
            "anonymous": false
        },
        {
            "type": "event",
            "name": "CollateralSunset",
            "inputs": [
                {
                    "name": "_collateralToken",
                    "type": "address",
                    "indexed": true,
                    "internalType": "address"
                }
            ],
            "anonymous": false
        },
        {
            "type": "event",
            "name": "DepositSnapshotUpdated",
            "inputs": [
                {
                    "name": "_depositor",
                    "type": "address",
                    "indexed": true,
                    "internalType": "address"
                },
                {
                    "name": "_P",
                    "type": "uint256",
                    "indexed": false,
                    "internalType": "uint256"
                },
                {
                    "name": "_G",
                    "type": "uint256",
                    "indexed": false,
                    "internalType": "uint256"
                }
            ],
            "anonymous": false
        },
        {
            "type": "event",
            "name": "EpochUpdated",
            "inputs": [
                {
                    "name": "_currentEpoch",
                    "type": "uint128",
                    "indexed": false,
                    "internalType": "uint128"
                }
            ],
            "anonymous": false
        },
        {
            "type": "event",
            "name": "G_Updated",
            "inputs": [
                {
                    "name": "_G",
                    "type": "uint256",
                    "indexed": false,
                    "internalType": "uint256"
                },
                {
                    "name": "_epoch",
                    "type": "uint128",
                    "indexed": false,
                    "internalType": "uint128"
                },
                {
                    "name": "_scale",
                    "type": "uint128",
                    "indexed": false,
                    "internalType": "uint128"
                }
            ],
            "anonymous": false
        },
        {
            "type": "event",
            "name": "Initialized",
            "inputs": [
                {
                    "name": "version",
                    "type": "uint8",
                    "indexed": false,
                    "internalType": "uint8"
                }
            ],
            "anonymous": false
        },
        {
            "type": "event",
            "name": "P_Updated",
            "inputs": [
                {
                    "name": "_P",
                    "type": "uint256",
                    "indexed": false,
                    "internalType": "uint256"
                }
            ],
            "anonymous": false
        },
        {
            "type": "event",
            "name": "RewardClaimed",
            "inputs": [
                {
                    "name": "account",
                    "type": "address",
                    "indexed": true,
                    "internalType": "address"
                },
                {
                    "name": "recipient",
                    "type": "address",
                    "indexed": true,
                    "internalType": "address"
                },
                {
                    "name": "claimed",
                    "type": "uint256",
                    "indexed": false,
                    "internalType": "uint256"
                }
            ],
            "anonymous": false
        },
        {
            "type": "event",
            "name": "RewardRateUpdated",
            "inputs": [
                {
                    "name": "_newRate",
                    "type": "uint128",
                    "indexed": false,
                    "internalType": "uint128"
                }
            ],
            "anonymous": false
        },
        {
            "type": "event",
            "name": "S_Updated",
            "inputs": [
                {
                    "name": "idx",
                    "type": "uint256",
                    "indexed": false,
                    "internalType": "uint256"
                },
                {
                    "name": "_S",
                    "type": "uint256",
                    "indexed": false,
                    "internalType": "uint256"
                },
                {
                    "name": "_epoch",
                    "type": "uint128",
                    "indexed": false,
                    "internalType": "uint128"
                },
                {
                    "name": "_scale",
                    "type": "uint128",
                    "indexed": false,
                    "internalType": "uint128"
                }
            ],
            "anonymous": false
        },
        {
            "type": "event",
            "name": "ScaleUpdated",
            "inputs": [
                {
                    "name": "_currentScale",
                    "type": "uint128",
                    "indexed": false,
                    "internalType": "uint128"
                }
            ],
            "anonymous": false
        },
        {
            "type": "event",
            "name": "StabilityPoolDebtBalanceUpdated",
            "inputs": [
                {
                    "name": "_newBalance",
                    "type": "uint256",
                    "indexed": false,
                    "internalType": "uint256"
                }
            ],
            "anonymous": false
        },
        {
            "type": "event",
            "name": "Upgraded",
            "inputs": [
                {
                    "name": "implementation",
                    "type": "address",
                    "indexed": true,
                    "internalType": "address"
                }
            ],
            "anonymous": false
        },
        {
            "type": "event",
            "name": "UserDepositChanged",
            "inputs": [
                {
                    "name": "_depositor",
                    "type": "address",
                    "indexed": true,
                    "internalType": "address"
                },
                {
                    "name": "_newDeposit",
                    "type": "uint256",
                    "indexed": false,
                    "internalType": "uint256"
                }
            ],
            "anonymous": false
        },
        { "type": "error", "name": "InvalidSatoshiCore", "inputs": [] }
    ]
}
