编译器
0.8.14+commit.80d49f37
文件 1 的 15:Address.sol
pragma solidity ^0.8.0;
library Address {
function isContract(address account) internal view returns (bool) {
uint256 size;
assembly {
size := extcodesize(account)
}
return size > 0;
}
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
if (returndata.length > 0) {
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
文件 2 的 15:BaseMath.sol
pragma solidity ^0.8.14;
abstract contract BaseMath {
uint256 public constant DECIMAL_PRECISION = 1 ether;
}
文件 3 的 15:CheckContract.sol
pragma solidity ^0.8.14;
contract CheckContract {
function checkContract(address _account) internal view {
require(_account != address(0), "Account cannot be zero address");
uint256 size;
assembly {
size := extcodesize(_account)
}
require(size > 0, "Account code size cannot be zero");
}
}
文件 4 的 15:CommunityIssuance.sol
pragma solidity ^0.8.14;
import "@openzeppelin/contracts/utils/math/SafeMath.sol";
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "../Interfaces/IStabilityPoolManager.sol";
import "../Interfaces/ICommunityIssuance.sol";
import "../Dependencies/BaseMath.sol";
import "../Dependencies/DfrancMath.sol";
import "../Dependencies/CheckContract.sol";
import "../Dependencies/Initializable.sol";
contract CommunityIssuance is
ICommunityIssuance,
Ownable,
CheckContract,
BaseMath,
Initializable
{
using SafeMath for uint256;
using SafeERC20 for IERC20;
string public constant NAME = "CommunityIssuance";
uint256 public constant DISTRIBUTION_DURATION = 7 days / 60;
uint256 public constant SECONDS_IN_ONE_MINUTE = 60;
IERC20 public monToken;
IStabilityPoolManager public stabilityPoolManager;
mapping(address => uint256) public totalMONIssued;
mapping(address => uint256) public lastUpdateTime;
mapping(address => uint256) public MONSupplyCaps;
mapping(address => uint256) public monDistributionsByPool;
address public adminContract;
bool public isInitialized;
modifier activeStabilityPoolOnly(address _pool) {
require(lastUpdateTime[_pool] != 0, "CommunityIssuance: Pool needs to be added first.");
_;
}
modifier isController() {
require(msg.sender == owner() || msg.sender == adminContract, "Invalid Permission");
_;
}
modifier isStabilityPool(address _pool) {
require(
stabilityPoolManager.isStabilityPool(_pool),
"CommunityIssuance: caller is not SP"
);
_;
}
modifier onlyStabilityPool() {
require(
stabilityPoolManager.isStabilityPool(msg.sender),
"CommunityIssuance: caller is not SP"
);
_;
}
function setAddresses(
address _monTokenAddress,
address _stabilityPoolManagerAddress,
address _adminContract
) external override initializer {
require(!isInitialized, "Already initialized");
checkContract(_monTokenAddress);
checkContract(_stabilityPoolManagerAddress);
checkContract(_adminContract);
isInitialized = true;
adminContract = _adminContract;
monToken = IERC20(_monTokenAddress);
stabilityPoolManager = IStabilityPoolManager(_stabilityPoolManagerAddress);
emit MONTokenAddressSet(_monTokenAddress);
emit StabilityPoolAddressSet(_stabilityPoolManagerAddress);
}
function setAdminContract(address _admin) external onlyOwner {
require(_admin != address(0), "Admin address is zero");
checkContract(_admin);
adminContract = _admin;
}
function addFundToStabilityPool(address _pool, uint256 _assignedSupply)
external
override
isController
{
_addFundToStabilityPoolFrom(_pool, _assignedSupply, msg.sender);
}
function removeFundFromStabilityPool(address _pool, uint256 _fundToRemove)
external
onlyOwner
activeStabilityPoolOnly(_pool)
{
uint256 newCap = MONSupplyCaps[_pool].sub(_fundToRemove);
require(
totalMONIssued[_pool] <= newCap,
"CommunityIssuance: Stability Pool doesn't have enough supply."
);
MONSupplyCaps[_pool] -= _fundToRemove;
if (totalMONIssued[_pool] == MONSupplyCaps[_pool]) {
disableStabilityPool(_pool);
}
monToken.safeTransfer(msg.sender, _fundToRemove);
}
function addFundToStabilityPoolFrom(
address _pool,
uint256 _assignedSupply,
address _spender
) external override isController {
_addFundToStabilityPoolFrom(_pool, _assignedSupply, _spender);
}
function _addFundToStabilityPoolFrom(
address _pool,
uint256 _assignedSupply,
address _spender
) internal {
require(
stabilityPoolManager.isStabilityPool(_pool),
"CommunityIssuance: Invalid Stability Pool"
);
if (lastUpdateTime[_pool] == 0) {
lastUpdateTime[_pool] = (block.timestamp / SECONDS_IN_ONE_MINUTE);
}
MONSupplyCaps[_pool] += _assignedSupply;
monToken.safeTransferFrom(_spender, address(this), _assignedSupply);
}
function transferFundToAnotherStabilityPool(
address _target,
address _receiver,
uint256 _quantity
)
external
override
onlyOwner
activeStabilityPoolOnly(_target)
activeStabilityPoolOnly(_receiver)
{
uint256 newCap = MONSupplyCaps[_target].sub(_quantity);
require(
totalMONIssued[_target] <= newCap,
"CommunityIssuance: Stability Pool doesn't have enough supply."
);
MONSupplyCaps[_target] -= _quantity;
MONSupplyCaps[_receiver] += _quantity;
if (totalMONIssued[_target] == MONSupplyCaps[_target]) {
disableStabilityPool(_target);
}
}
function disableStabilityPool(address _pool) internal {
lastUpdateTime[_pool] = 0;
MONSupplyCaps[_pool] = 0;
totalMONIssued[_pool] = 0;
}
function issueMON() external override onlyStabilityPool returns (uint256) {
return _issueMON(msg.sender);
}
function _issueMON(address _pool) internal isStabilityPool(_pool) returns (uint256) {
uint256 maxPoolSupply = MONSupplyCaps[_pool];
if (totalMONIssued[_pool] >= maxPoolSupply) return 0;
uint256 issuance = _getLastUpdateTokenDistribution(_pool);
uint256 totalIssuance = issuance.add(totalMONIssued[_pool]);
if (totalIssuance > maxPoolSupply) {
issuance = maxPoolSupply.sub(totalMONIssued[_pool]);
totalIssuance = maxPoolSupply;
}
lastUpdateTime[_pool] = (block.timestamp / SECONDS_IN_ONE_MINUTE);
totalMONIssued[_pool] = totalIssuance;
emit TotalMONIssuedUpdated(_pool, totalIssuance);
return issuance;
}
function _getLastUpdateTokenDistribution(address stabilityPool)
internal
view
returns (uint256)
{
require(lastUpdateTime[stabilityPool] != 0, "Stability pool hasn't been assigned");
uint256 timePassed = block.timestamp.div(SECONDS_IN_ONE_MINUTE).sub(
lastUpdateTime[stabilityPool]
);
uint256 totalDistributedSinceBeginning = monDistributionsByPool[stabilityPool].mul(
timePassed
);
return totalDistributedSinceBeginning;
}
function sendMON(address _account, uint256 _MONamount) external override onlyStabilityPool {
uint256 balanceMON = monToken.balanceOf(address(this));
uint256 safeAmount = balanceMON >= _MONamount ? _MONamount : balanceMON;
if (safeAmount == 0) {
return;
}
monToken.safeTransfer(_account, safeAmount);
}
function setWeeklyDfrancDistribution(address _stabilityPool, uint256 _weeklyReward)
external
isController
isStabilityPool(_stabilityPool)
{
monDistributionsByPool[_stabilityPool] = _weeklyReward.div(DISTRIBUTION_DURATION);
}
}
文件 5 的 15:Context.sol
pragma solidity ^0.8.0;
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
文件 6 的 15:DfrancMath.sol
pragma solidity ^0.8.14;
import "@openzeppelin/contracts/utils/math/SafeMath.sol";
library DfrancMath {
using SafeMath for uint256;
uint256 internal constant DECIMAL_PRECISION = 1 ether;
uint256 internal constant NICR_PRECISION = 1e20;
function _min(uint256 _a, uint256 _b) internal pure returns (uint256) {
return (_a < _b) ? _a : _b;
}
function _max(uint256 _a, uint256 _b) internal pure returns (uint256) {
return (_a >= _b) ? _a : _b;
}
function decMul(uint256 x, uint256 y) internal pure returns (uint256 decProd) {
uint256 prod_xy = x.mul(y);
decProd = prod_xy.add(DECIMAL_PRECISION / 2).div(DECIMAL_PRECISION);
}
function _decPow(uint256 _base, uint256 _minutes) internal pure returns (uint256) {
if (_minutes > 525600000) {
_minutes = 525600000;
}
if (_minutes == 0) {
return DECIMAL_PRECISION;
}
uint256 y = DECIMAL_PRECISION;
uint256 x = _base;
uint256 n = _minutes;
while (n > 1) {
if (n % 2 == 0) {
x = decMul(x, x);
n = n.div(2);
} else {
y = decMul(x, y);
x = decMul(x, x);
n = (n.sub(1)).div(2);
}
}
return decMul(x, y);
}
function _getAbsoluteDifference(uint256 _a, uint256 _b) internal pure returns (uint256) {
return (_a >= _b) ? _a.sub(_b) : _b.sub(_a);
}
function _computeNominalCR(uint256 _coll, uint256 _debt) internal pure returns (uint256) {
if (_debt > 0) {
return _coll.mul(NICR_PRECISION).div(_debt);
}
else {
return 2**256 - 1;
}
}
function _computeCR(
uint256 _coll,
uint256 _debt,
uint256 _price
) internal pure returns (uint256) {
if (_debt > 0) {
return _coll.mul(_price).div(_debt);
}
else {
return type(uint256).max;
}
}
}
文件 7 的 15:ICommunityIssuance.sol
pragma solidity ^0.8.14;
interface ICommunityIssuance {
event MONTokenAddressSet(address _MONTokenAddress);
event StabilityPoolAddressSet(address _stabilityPoolAddress);
event TotalMONIssuedUpdated(address indexed stabilityPool, uint256 _totalMONIssued);
function setAddresses(
address _MONTokenAddress,
address _stabilityPoolAddress,
address _adminContract
) external;
function issueMON() external returns (uint256);
function sendMON(address _account, uint256 _MONamount) external;
function addFundToStabilityPool(address _pool, uint256 _assignedSupply) external;
function addFundToStabilityPoolFrom(
address _pool,
uint256 _assignedSupply,
address _spender
) external;
function transferFundToAnotherStabilityPool(
address _target,
address _receiver,
uint256 _quantity
) external;
function setWeeklyDfrancDistribution(address _stabilityPool, uint256 _weeklyReward) external;
}
文件 8 的 15:IDeposit.sol
pragma solidity ^0.8.14;
interface IDeposit {
function receivedERC20(address _asset, uint256 _amount) external;
}
文件 9 的 15:IERC20.sol
pragma solidity ^0.8.0;
interface IERC20 {
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, uint256 amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
文件 10 的 15:IStabilityPool.sol
pragma solidity ^0.8.14;
import "./IDeposit.sol";
interface IStabilityPool is IDeposit {
event StabilityPoolAssetBalanceUpdated(uint256 _newBalance);
event StabilityPoolDCHFBalanceUpdated(uint256 _newBalance);
event BorrowerOperationsAddressChanged(address _newBorrowerOperationsAddress);
event TroveManagerAddressChanged(address _newTroveManagerAddress);
event DefaultPoolAddressChanged(address _newDefaultPoolAddress);
event DCHFTokenAddressChanged(address _newDCHFTokenAddress);
event SortedTrovesAddressChanged(address _newSortedTrovesAddress);
event CommunityIssuanceAddressChanged(address _newCommunityIssuanceAddress);
event P_Updated(uint256 _P);
event S_Updated(uint256 _S, uint128 _epoch, uint128 _scale);
event G_Updated(uint256 _G, uint128 _epoch, uint128 _scale);
event EpochUpdated(uint128 _currentEpoch);
event ScaleUpdated(uint128 _currentScale);
event DepositSnapshotUpdated(address indexed _depositor, uint256 _P, uint256 _S, uint256 _G);
event SystemSnapshotUpdated(uint256 _P, uint256 _G);
event UserDepositChanged(address indexed _depositor, uint256 _newDeposit);
event StakeChanged(uint256 _newSystemStake, address _depositor);
event AssetGainWithdrawn(address indexed _depositor, uint256 _Asset, uint256 _DCHFLoss);
event MONPaidToDepositor(address indexed _depositor, uint256 _MON);
event AssetSent(address _to, uint256 _amount);
function NAME() external view returns (string memory name);
function setAddresses(
address _assetAddress,
address _borrowerOperationsAddress,
address _troveManagerAddress,
address _troveManagerHelperAddress,
address _dchfTokenAddress,
address _sortedTrovesAddress,
address _communityIssuanceAddress,
address _dfrancParamsAddress
) external;
function provideToSP(uint256 _amount) external;
function withdrawFromSP(uint256 _amount) external;
function withdrawAssetGainToTrove(address _upperHint, address _lowerHint) external;
function offset(uint256 _debt, uint256 _coll) external;
function getAssetBalance() external view returns (uint256);
function getTotalDCHFDeposits() external view returns (uint256);
function getDepositorAssetGain(address _depositor) external view returns (uint256);
function getDepositorMONGain(address _depositor) external view returns (uint256);
function getCompoundedDCHFDeposit(address _depositor) external view returns (uint256);
function getCompoundedTotalStake() external view returns (uint256);
function getNameBytes() external view returns (bytes32);
function getAssetType() external view returns (address);
}
文件 11 的 15:IStabilityPoolManager.sol
pragma solidity ^0.8.14;
import "./IStabilityPool.sol";
interface IStabilityPoolManager {
event StabilityPoolAdded(address asset, address stabilityPool);
event StabilityPoolRemoved(address asset, address stabilityPool);
function isStabilityPool(address stabilityPool) external view returns (bool);
function addStabilityPool(address asset, address stabilityPool) external;
function getAssetStabilityPool(address asset) external view returns (IStabilityPool);
function unsafeGetAssetStabilityPool(address asset) external view returns (address);
}
文件 12 的 15:Initializable.sol
pragma solidity ^0.8.2;
import "@openzeppelin/contracts/utils/Address.sol";
abstract contract Initializable {
uint8 private _initialized;
bool private _initializing;
event Initialized(uint8 version);
modifier initializer() {
bool isTopLevelCall = !_initializing;
require(
(isTopLevelCall && _initialized < 1) || (!Address.isContract(address(this)) && _initialized == 1),
"Initializable: contract is already initialized"
);
_initialized = 1;
if (isTopLevelCall) {
_initializing = true;
}
_;
if (isTopLevelCall) {
_initializing = false;
emit Initialized(1);
}
}
modifier reinitializer(uint8 version) {
require(!_initializing && _initialized < version, "Initializable: contract is already initialized");
_initialized = version;
_initializing = true;
_;
_initializing = false;
emit Initialized(version);
}
modifier onlyInitializing() {
require(_initializing, "Initializable: contract is not initializing");
_;
}
function _disableInitializers() internal virtual {
require(!_initializing, "Initializable: contract is initializing");
if (_initialized < type(uint8).max) {
_initialized = type(uint8).max;
emit Initialized(type(uint8).max);
}
}
function _getInitializedVersion() internal view returns (uint8) {
return _initialized;
}
function _isInitializing() internal view returns (bool) {
return _initializing;
}
}
文件 13 的 15:Ownable.sol
pragma solidity ^0.8.0;
import "../utils/Context.sol";
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
constructor() {
_setOwner(_msgSender());
}
function owner() public view virtual returns (address) {
return _owner;
}
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
function renounceOwnership() public virtual onlyOwner {
_setOwner(address(0));
}
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_setOwner(newOwner);
}
function _setOwner(address newOwner) private {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
文件 14 的 15:SafeERC20.sol
pragma solidity ^0.8.0;
import "../IERC20.sol";
import "../../../utils/Address.sol";
library SafeERC20 {
using Address for address;
function safeTransfer(
IERC20 token,
address to,
uint256 value
) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(
IERC20 token,
address from,
address to,
uint256 value
) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
function safeApprove(
IERC20 token,
address spender,
uint256 value
) internal {
require(
(value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}
function safeIncreaseAllowance(
IERC20 token,
address spender,
uint256 value
) internal {
uint256 newAllowance = token.allowance(address(this), spender) + value;
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
function safeDecreaseAllowance(
IERC20 token,
address spender,
uint256 value
) internal {
unchecked {
uint256 oldAllowance = token.allowance(address(this), spender);
require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
uint256 newAllowance = oldAllowance - value;
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
}
function _callOptionalReturn(IERC20 token, bytes memory data) private {
bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
if (returndata.length > 0) {
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}
文件 15 的 15:SafeMath.sol
pragma solidity ^0.8.0;
library SafeMath {
function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
}
function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b > a) return (false, 0);
return (true, a - b);
}
}
function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (a == 0) return (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
}
function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a / b);
}
}
function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a % b);
}
}
function add(uint256 a, uint256 b) internal pure returns (uint256) {
return a + b;
}
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return a - b;
}
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
return a * b;
}
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return a / b;
}
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return a % b;
}
function sub(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b <= a, errorMessage);
return a - b;
}
}
function div(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a / b;
}
}
function mod(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a % b;
}
}
}
{
"compilationTarget": {
"contracts/MON/CommunityIssuance.sol": "CommunityIssuance"
},
"evmVersion": "london",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": true,
"runs": 200
},
"remappings": []
}
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_MONTokenAddress","type":"address"}],"name":"MONTokenAddressSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_stabilityPoolAddress","type":"address"}],"name":"StabilityPoolAddressSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"stabilityPool","type":"address"},{"indexed":false,"internalType":"uint256","name":"_totalMONIssued","type":"uint256"}],"name":"TotalMONIssuedUpdated","type":"event"},{"inputs":[],"name":"DECIMAL_PRECISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DISTRIBUTION_DURATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"MONSupplyCaps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NAME","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SECONDS_IN_ONE_MINUTE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pool","type":"address"},{"internalType":"uint256","name":"_assignedSupply","type":"uint256"}],"name":"addFundToStabilityPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pool","type":"address"},{"internalType":"uint256","name":"_assignedSupply","type":"uint256"},{"internalType":"address","name":"_spender","type":"address"}],"name":"addFundToStabilityPoolFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"adminContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isInitialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"issueMON","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastUpdateTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"monDistributionsByPool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"monToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pool","type":"address"},{"internalType":"uint256","name":"_fundToRemove","type":"uint256"}],"name":"removeFundFromStabilityPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_MONamount","type":"uint256"}],"name":"sendMON","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_monTokenAddress","type":"address"},{"internalType":"address","name":"_stabilityPoolManagerAddress","type":"address"},{"internalType":"address","name":"_adminContract","type":"address"}],"name":"setAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_admin","type":"address"}],"name":"setAdminContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_stabilityPool","type":"address"},{"internalType":"uint256","name":"_weeklyReward","type":"uint256"}],"name":"setWeeklyDfrancDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stabilityPoolManager","outputs":[{"internalType":"contract IStabilityPoolManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalMONIssued","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"transferFundToAnotherStabilityPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]