文件 1 的 10:AdminInterface.sol
pragma solidity ^0.8.4;
import "./libraries/SafeERC20.sol";
import "../utils/Pausable.sol";
import "./libraries/Math.sol";
import "./AlphaToken.sol";
contract AdminInterface is Pausable {
using SafeERC20 for IERC20;
uint256 public COEFF_SCALE_DECIMALS_F = 1e4;
uint256 public COEFF_SCALE_DECIMALS_P = 1e6;
uint256 public AMOUNT_SCALE_DECIMALS = 1;
uint256 public DEPOSIT_FEE_RATE = 50;
uint256 public MANAGEMENT_FEE_RATE = 200;
uint256 public PERFORMANCE_FEE_RATE = 2000;
uint256 public SECONDES_PER_YEAR = 86400 * 365;
uint256 public PERFORMANCE_FEES = 0;
uint256 public MANAGEMENT_FEES = 0;
uint256 public MANAGEMENT_FEE_TIME = 0;
uint256 public ALPHA_PRICE = 1000000;
uint256 public ALPHA_PRICE_WAVG = 1000000;
uint256 public MIN_AMOUNT = 1000 * 1e18;
bool public CAN_CANCEL = true;
uint256 public LOCKUP_PERIOD_MANAGER = 2 hours;
uint256 public LOCKUP_PERIOD_USER = 0 days;
uint256 public TIME_WITHDRAW_MANAGER = 0;
uint public netDepositInd= 0;
uint256 public netAmountEvent =0;
uint256 public SLIPPAGE_TOLERANCE = 200;
address public manager;
address public treasury;
address public alphaStrategy;
AlphaToken public alphaToken;
IERC20 public stableToken;
constructor( address _manager, address _treasury, address _stableTokenAddress,
address _alphaToken) {
require(
_manager != address(0),
"Formation.Fi: manager address is the zero address"
);
require(
_treasury != address(0),
"Formation.Fi: treasury address is the zero address"
);
require(
_stableTokenAddress != address(0),
"Formation.Fi: Stable token address is the zero address"
);
require(
_alphaToken != address(0),
"Formation.Fi: ALPHA token address is the zero address"
);
manager = _manager;
treasury = _treasury;
stableToken = IERC20(_stableTokenAddress);
alphaToken = AlphaToken(_alphaToken);
uint8 _stableTokenDecimals = ERC20( _stableTokenAddress).decimals();
if ( _stableTokenDecimals == 6) {
AMOUNT_SCALE_DECIMALS= 1e12;
}
}
modifier onlyAlphaStrategy() {
require(alphaStrategy != address(0),
"Formation.Fi: alphaStrategy is the zero address"
);
require(msg.sender == alphaStrategy,
"Formation.Fi: Caller is not the alphaStrategy"
);
_;
}
modifier onlyManager() {
require(msg.sender == manager,
"Formation.Fi: Caller is not the manager");
_;
}
modifier canCancel() {
require(CAN_CANCEL == true, "Formation Fi: Cancel feature is not available");
_;
}
function setTreasury(address _treasury) external onlyOwner {
require(
_treasury != address(0),
"Formation.Fi: manager address is the zero address"
);
treasury = _treasury;
}
function setManager(address _manager) external onlyOwner {
require(
_manager != address(0),
"Formation.Fi: manager address is the zero address"
);
manager = _manager;
}
function setAlphaStrategy(address _alphaStrategy) public onlyOwner {
require(
_alphaStrategy!= address(0),
"Formation.Fi: alphaStrategy is the zero address"
);
alphaStrategy = _alphaStrategy;
}
function setCancel(bool _cancel) external onlyManager {
CAN_CANCEL = _cancel;
}
function setLockupPeriodManager(uint256 _lockupPeriodManager) external onlyManager {
LOCKUP_PERIOD_MANAGER = _lockupPeriodManager;
}
function setLockupPeriodUser(uint256 _lockupPeriodUser) external onlyManager {
LOCKUP_PERIOD_USER = _lockupPeriodUser;
}
function setDepositFeeRate(uint256 _rate) external onlyManager {
DEPOSIT_FEE_RATE = _rate;
}
function setManagementFeeRate(uint256 _rate) external onlyManager {
MANAGEMENT_FEE_RATE = _rate;
}
function setPerformanceFeeRate(uint256 _rate) external onlyManager {
PERFORMANCE_FEE_RATE = _rate;
}
function setMinAmount(uint256 _minAmount) external onlyManager {
MIN_AMOUNT = _minAmount;
}
function setCoeffScaleDecimalsFees (uint256 _scale) external onlyManager {
require(
_scale > 0,
"Formation.Fi: decimal fees factor is 0"
);
COEFF_SCALE_DECIMALS_F = _scale;
}
function setCoeffScaleDecimalsPrice (uint256 _scale) external onlyManager {
require(
_scale > 0,
"Formation.Fi: decimal price factor is 0"
);
COEFF_SCALE_DECIMALS_P = _scale;
}
function updateAlphaPrice(uint256 _price) external onlyManager{
require(
_price > 0,
"Formation.Fi: ALPHA price is 0"
);
ALPHA_PRICE = _price;
}
function updateAlphaPriceWAVG(uint256 _price_WAVG) external onlyAlphaStrategy {
require(
_price_WAVG > 0,
"Formation.Fi: ALPHA price WAVG is 0"
);
ALPHA_PRICE_WAVG = _price_WAVG;
}
function updateManagementFeeTime(uint256 _time) external onlyAlphaStrategy {
MANAGEMENT_FEE_TIME = _time;
}
function calculatePerformanceFees() external onlyManager {
require(PERFORMANCE_FEES == 0, "Formation.Fi: performance fees pending minting");
uint256 _deltaPrice = 0;
if (ALPHA_PRICE > ALPHA_PRICE_WAVG) {
_deltaPrice = ALPHA_PRICE - ALPHA_PRICE_WAVG;
ALPHA_PRICE_WAVG = ALPHA_PRICE;
PERFORMANCE_FEES = (alphaToken.totalSupply() *
_deltaPrice * PERFORMANCE_FEE_RATE) / (ALPHA_PRICE * COEFF_SCALE_DECIMALS_F);
}
}
function calculateManagementFees() external onlyManager {
require(MANAGEMENT_FEES == 0, "Formation.Fi: management fees pending minting");
if (MANAGEMENT_FEE_TIME!= 0){
uint256 _deltaTime;
_deltaTime = block.timestamp - MANAGEMENT_FEE_TIME;
MANAGEMENT_FEES = (alphaToken.totalSupply() * MANAGEMENT_FEE_RATE * _deltaTime )
/(COEFF_SCALE_DECIMALS_F * SECONDES_PER_YEAR);
MANAGEMENT_FEE_TIME = block.timestamp;
}
}
function mintFees() external onlyManager {
if ((PERFORMANCE_FEES + MANAGEMENT_FEES) > 0){
alphaToken.mint(treasury, PERFORMANCE_FEES + MANAGEMENT_FEES);
PERFORMANCE_FEES = 0;
MANAGEMENT_FEES = 0;
}
}
function calculateNetDepositInd(uint256 _depositAmountTotal, uint256 _withdrawAmountTotal)
public onlyAlphaStrategy returns( uint) {
if ( _depositAmountTotal >=
((_withdrawAmountTotal * ALPHA_PRICE) / COEFF_SCALE_DECIMALS_P)){
netDepositInd = 1 ;
}
else {
netDepositInd = 0;
}
return netDepositInd;
}
function calculateNetAmountEvent(uint256 _depositAmountTotal, uint256 _withdrawAmountTotal,
uint256 _MAX_AMOUNT_DEPOSIT, uint256 _MAX_AMOUNT_WITHDRAW)
public onlyAlphaStrategy returns(uint256) {
uint256 _netDeposit;
if (netDepositInd == 1) {
_netDeposit = _depositAmountTotal -
(_withdrawAmountTotal * ALPHA_PRICE) / COEFF_SCALE_DECIMALS_P;
netAmountEvent = Math.min( _netDeposit, _MAX_AMOUNT_DEPOSIT);
}
else {
_netDeposit= ((_withdrawAmountTotal * ALPHA_PRICE) / COEFF_SCALE_DECIMALS_P) -
_depositAmountTotal;
netAmountEvent = Math.min(_netDeposit, _MAX_AMOUNT_WITHDRAW);
}
return netAmountEvent;
}
function protectAgainstSlippage(uint256 _withdrawAmount) public onlyManager
whenNotPaused returns (uint256) {
require(netDepositInd == 0, "Formation.Fi: it is not a slippage case");
require(_withdrawAmount != 0, "Formation.Fi: amount is zero");
uint256 _amount = 0;
uint256 _deltaAmount =0;
uint256 _slippage = 0;
uint256 _alphaAmount = 0;
uint256 _balanceAlphaTreasury = alphaToken.balanceOf(treasury);
uint256 _balanceStableTreasury = stableToken.balanceOf(treasury) * AMOUNT_SCALE_DECIMALS;
if (_withdrawAmount< netAmountEvent){
_amount = netAmountEvent - _withdrawAmount;
_slippage = (_amount * COEFF_SCALE_DECIMALS_F ) / netAmountEvent;
if (_slippage >= SLIPPAGE_TOLERANCE) {
return netAmountEvent;
}
else {
_deltaAmount = Math.min( _amount, _balanceStableTreasury);
if ( _deltaAmount > 0){
stableToken.safeTransferFrom(treasury, alphaStrategy, _deltaAmount/AMOUNT_SCALE_DECIMALS);
_alphaAmount = (_deltaAmount * COEFF_SCALE_DECIMALS_P)/ALPHA_PRICE;
alphaToken.mint(treasury, _alphaAmount);
return _amount - _deltaAmount;
}
else {
return _amount;
}
}
}
else {
_amount = _withdrawAmount - netAmountEvent;
_alphaAmount = (_amount * COEFF_SCALE_DECIMALS_P)/ALPHA_PRICE;
_alphaAmount = Math.min(_alphaAmount, _balanceAlphaTreasury);
if (_alphaAmount >0) {
_deltaAmount = (_alphaAmount * ALPHA_PRICE)/COEFF_SCALE_DECIMALS_P;
stableToken.safeTransfer(treasury, _deltaAmount/AMOUNT_SCALE_DECIMALS);
alphaToken.burn( treasury, _alphaAmount);
}
if ((_amount - _deltaAmount) > 0) {
stableToken.safeTransfer(manager, (_amount - _deltaAmount)/AMOUNT_SCALE_DECIMALS);
}
}
return 0;
}
function sendStableTocontract(uint256 _amount) external
whenNotPaused onlyManager {
require( _amount > 0, "Formation.Fi: amount is zero");
stableToken.safeTransferFrom(msg.sender, address(this), _amount/AMOUNT_SCALE_DECIMALS);
}
function sendStableFromcontract() external
whenNotPaused onlyManager {
require(alphaStrategy != address(0),
"Formation.Fi: alphaStrategy is the zero address"
);
stableToken.safeTransfer(alphaStrategy, stableToken.balanceOf(address(this)));
}
}
文件 2 的 10:AlphaToken.sol
pragma solidity ^0.8.4;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "./libraries/Math.sol";
contract AlphaToken is ERC20, Ownable {
address alphaStrategy;
address admin;
mapping(address => uint256[]) public amountDepositPerAddress;
mapping(address => uint256[]) public timeDepositPerAddress;
constructor() ERC20("Formation Fi: ALPHA TOKEN", "ALPHA") {}
modifier onlyProxy() {
require(
(alphaStrategy != address(0)) && (admin != address(0)),
"Formation.Fi: proxy is the zero address"
);
require(
(msg.sender == alphaStrategy) || (msg.sender == admin),
"Formation.Fi: Caller is not the proxy"
);
_;
}
modifier onlyAlphaStrategy() {
require(alphaStrategy != address(0),
"Formation.Fi: alphaStrategy is the zero address"
);
require(msg.sender == alphaStrategy,
"Formation.Fi: Caller is not the alphaStrategy"
);
_;
}
function setAlphaStrategy(address _alphaStrategy) external onlyOwner {
require(
_alphaStrategy!= address(0),
"Formation.Fi: alphaStrategy is the zero address"
);
alphaStrategy = _alphaStrategy;
}
function setAdmin(address _admin) external onlyOwner {
require(
_admin!= address(0),
"Formation.Fi: admin is the zero address"
);
admin = _admin;
}
function addTimeDeposit(address _account, uint256 _time) external onlyAlphaStrategy {
require(
_account!= address(0),
"Formation.Fi: account is the zero address"
);
require(
_time!= 0,
"Formation.Fi: deposit time is zero"
);
timeDepositPerAddress[_account].push(_time);
}
function addAmountDeposit(address _account, uint256 _amount) external onlyAlphaStrategy {
require(
_account!= address(0),
"Formation.Fi: account is the zero address"
);
require(
_amount!= 0,
"Formation.Fi: deposit amount is zero"
);
amountDepositPerAddress[_account].push(_amount);
}
function mint(address _account, uint256 _amount) external onlyProxy {
require(
_account!= address(0),
"Formation.Fi: account is the zero address"
);
require(
_amount!= 0,
"Formation.Fi: amount is zero"
);
_mint(_account, _amount);
}
function burn(address _account, uint256 _amount) external onlyProxy {
require(
_account!= address(0),
"Formation.Fi: account is the zero address"
);
require(
_amount!= 0,
"Formation.Fi: amount is zero"
);
_burn( _account, _amount);
}
function ChecklWithdrawalRequest(address _account, uint256 _amount, uint256 _period)
external view returns (bool){
require(
_account!= address(0),
"Formation.Fi: account is the zero address"
);
require(
_amount!= 0,
"Formation.Fi: amount is zero"
);
uint256 [] memory _amountDeposit = amountDepositPerAddress[_account];
uint256 [] memory _timeDeposit = timeDepositPerAddress[_account];
uint256 _amountTotal = 0;
for (uint256 i = 0; i < _amountDeposit.length; i++) {
require ((block.timestamp - _timeDeposit[i]) >= _period,
"Formation.Fi: user position locked");
if (_amount<= (_amountTotal + _amountDeposit[i])){
break;
}
_amountTotal = _amountTotal + _amountDeposit[i];
}
return true;
}
function updateDepositDataExternal( address _account, uint256 _amount)
external onlyAlphaStrategy {
updateDepositData(_account, _amount);
}
function updateDepositData( address _account, uint256 _amount) internal {
require(
_account!= address(0),
"Formation.Fi: account is the zero address"
);
require(
_amount!= 0,
"Formation.Fi: amount is zero"
);
uint256 [] memory _amountDeposit = amountDepositPerAddress[ _account];
uint256 _amountlocal = 0;
uint256 _amountTotal = 0;
uint256 _newAmount;
for (uint256 i = 0; i < _amountDeposit.length; i++) {
_amountlocal = Math.min(_amountDeposit[i], _amount- _amountTotal);
_amountTotal = _amountTotal + _amountlocal;
_newAmount = _amountDeposit[i] - _amountlocal;
amountDepositPerAddress[_account][i] = _newAmount;
if (_newAmount==0){
deleteDepositData(_account, i);
}
if (_amountTotal == _amount){
break;
}
}
}
function deleteDepositData(address _account, uint256 _ind) internal {
require(
_account!= address(0),
"Formation.Fi: account is the zero address"
);
uint256 size = amountDepositPerAddress[_account].length-1;
require( _ind <= size,
"Formation.Fi: index is out of the range"
);
for (uint256 i = _ind; i< size; i++){
amountDepositPerAddress[ _account][i] = amountDepositPerAddress[ _account][i+1];
timeDepositPerAddress[ _account][i] = timeDepositPerAddress[ _account][i+1];
}
amountDepositPerAddress[ _account].pop();
timeDepositPerAddress[ _account].pop();
}
function _afterTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual override{
if ((to != address(0)) && (to != alphaStrategy)
&& (to != admin) && (from != address(0)) )
{
updateDepositData(from, amount);
amountDepositPerAddress[to].push(amount);
timeDepositPerAddress[to].push(block.timestamp);
}
}
}
文件 3 的 10: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;
}
}
文件 4 的 10:ERC20.sol
pragma solidity ^0.8.0;
import "./IERC20.sol";
import "./extensions/IERC20Metadata.sol";
import "../../utils/Context.sol";
contract ERC20 is Context, IERC20, IERC20Metadata {
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
function name() public view virtual override returns (string memory) {
return _name;
}
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
function decimals() public view virtual override returns (uint8) {
return 18;
}
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
function balanceOf(address account) public view virtual override returns (uint256) {
return _balances[account];
}
function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
_transfer(_msgSender(), recipient, amount);
return true;
}
function allowance(address owner, address spender) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
function approve(address spender, uint256 amount) public virtual override returns (bool) {
_approve(_msgSender(), spender, amount);
return true;
}
function transferFrom(
address sender,
address recipient,
uint256 amount
) public virtual override returns (bool) {
_transfer(sender, recipient, amount);
uint256 currentAllowance = _allowances[sender][_msgSender()];
require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
unchecked {
_approve(sender, _msgSender(), currentAllowance - amount);
}
return true;
}
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
return true;
}
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
uint256 currentAllowance = _allowances[_msgSender()][spender];
require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
unchecked {
_approve(_msgSender(), spender, currentAllowance - subtractedValue);
}
return true;
}
function _transfer(
address sender,
address recipient,
uint256 amount
) internal virtual {
require(sender != address(0), "ERC20: transfer from the zero address");
require(recipient != address(0), "ERC20: transfer to the zero address");
_beforeTokenTransfer(sender, recipient, amount);
uint256 senderBalance = _balances[sender];
require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
unchecked {
_balances[sender] = senderBalance - amount;
}
_balances[recipient] += amount;
emit Transfer(sender, recipient, amount);
_afterTokenTransfer(sender, recipient, amount);
}
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_beforeTokenTransfer(address(0), account, amount);
_totalSupply += amount;
_balances[account] += amount;
emit Transfer(address(0), account, amount);
_afterTokenTransfer(address(0), account, amount);
}
function _burn(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: burn from the zero address");
_beforeTokenTransfer(account, address(0), amount);
uint256 accountBalance = _balances[account];
require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
unchecked {
_balances[account] = accountBalance - amount;
}
_totalSupply -= amount;
emit Transfer(account, address(0), amount);
_afterTokenTransfer(account, address(0), amount);
}
function _approve(
address owner,
address spender,
uint256 amount
) internal virtual {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
function _beforeTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
function _afterTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
}
文件 5 的 10: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);
}
文件 6 的 10:IERC20Metadata.sol
pragma solidity ^0.8.0;
import "../IERC20.sol";
interface IERC20Metadata is IERC20 {
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view returns (uint8);
}
文件 7 的 10:Math.sol
pragma solidity ^0.8.4;
library Math {
function max(uint256 a, uint256 b) internal pure returns (uint256) {
return a >= b ? a : b;
}
function min(uint256 a, uint256 b) internal pure returns (uint256) {
return a < b ? a : b;
}
function average(uint256 a, uint256 b) internal pure returns (uint256) {
return (a & b) + (a ^ b) / 2;
}
function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {
return a / b + (a % b == 0 ? 0 : 1);
}
function abs(int256 n) internal pure returns (uint256) {
unchecked {
return uint256(n >= 0 ? n : -n);
}
}
}
文件 8 的 10: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);
}
}
文件 9 的 10:Pausable.sol
pragma solidity ^0.8.4;
import "@openzeppelin/contracts/access/Ownable.sol";
contract Pausable is Ownable {
event Pause();
event Unpause();
bool public paused = false;
modifier whenNotPaused() {
require(!paused, "Transaction is not available");
_;
}
modifier whenPaused() {
require(paused, "Transaction is available");
_;
}
function pause() public onlyOwner whenNotPaused {
paused = true;
emit Pause();
}
function unpause() public onlyOwner whenPaused {
paused = false;
emit Unpause();
}
}
文件 10 的 10:SafeERC20.sol
pragma solidity ^0.8.4;
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
library SafeERC20 {
function safeSymbol(IERC20 token) internal view returns (string memory) {
(bool success, bytes memory data) = address(token).staticcall(
abi.encodeWithSelector(0x95d89b41)
);
return success && data.length > 0 ? abi.decode(data, (string)) : "???";
}
function safeName(IERC20 token) internal view returns (string memory) {
(bool success, bytes memory data) = address(token).staticcall(
abi.encodeWithSelector(0x06fdde03)
);
return success && data.length > 0 ? abi.decode(data, (string)) : "???";
}
function safeDecimals(IERC20 token) public view returns (uint8) {
(bool success, bytes memory data) = address(token).staticcall(
abi.encodeWithSelector(0x313ce567)
);
return success && data.length == 32 ? abi.decode(data, (uint8)) : 18;
}
function safeTransfer(
IERC20 token,
address to,
uint256 amount
) internal {
(bool success, bytes memory data) = address(token).call(
abi.encodeWithSelector(0xa9059cbb, to, amount)
);
require(
success && (data.length == 0 || abi.decode(data, (bool))),
"SafeERC20: Transfer failed"
);
}
function safeTransferFrom(
IERC20 token,
address from,
address to,
uint256 amount
) internal {
(bool success, bytes memory data) = address(token).call(
abi.encodeWithSelector(0x23b872dd, from, to, amount)
);
require(
success && (data.length == 0 || abi.decode(data, (bool))),
"SafeERC20: TransferFrom failed"
);
}
}
{
"compilationTarget": {
"contracts/main/AdminInterface.sol": "AdminInterface"
},
"evmVersion": "istanbul",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs",
"useLiteralContent": true
},
"optimizer": {
"enabled": true,
"runs": 200
},
"remappings": []
}
[{"inputs":[{"internalType":"address","name":"_manager","type":"address"},{"internalType":"address","name":"_treasury","type":"address"},{"internalType":"address","name":"_stableTokenAddress","type":"address"},{"internalType":"address","name":"_alphaToken","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"inputs":[],"name":"ALPHA_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ALPHA_PRICE_WAVG","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AMOUNT_SCALE_DECIMALS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CAN_CANCEL","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"COEFF_SCALE_DECIMALS_F","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"COEFF_SCALE_DECIMALS_P","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEPOSIT_FEE_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LOCKUP_PERIOD_MANAGER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LOCKUP_PERIOD_USER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MANAGEMENT_FEES","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MANAGEMENT_FEE_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MANAGEMENT_FEE_TIME","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERFORMANCE_FEES","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERFORMANCE_FEE_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SECONDES_PER_YEAR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SLIPPAGE_TOLERANCE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TIME_WITHDRAW_MANAGER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"alphaStrategy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"alphaToken","outputs":[{"internalType":"contract AlphaToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"calculateManagementFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_depositAmountTotal","type":"uint256"},{"internalType":"uint256","name":"_withdrawAmountTotal","type":"uint256"},{"internalType":"uint256","name":"_MAX_AMOUNT_DEPOSIT","type":"uint256"},{"internalType":"uint256","name":"_MAX_AMOUNT_WITHDRAW","type":"uint256"}],"name":"calculateNetAmountEvent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_depositAmountTotal","type":"uint256"},{"internalType":"uint256","name":"_withdrawAmountTotal","type":"uint256"}],"name":"calculateNetDepositInd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"calculatePerformanceFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"netAmountEvent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"netDepositInd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_withdrawAmount","type":"uint256"}],"name":"protectAgainstSlippage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sendStableFromcontract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"sendStableTocontract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_alphaStrategy","type":"address"}],"name":"setAlphaStrategy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_cancel","type":"bool"}],"name":"setCancel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_scale","type":"uint256"}],"name":"setCoeffScaleDecimalsFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_scale","type":"uint256"}],"name":"setCoeffScaleDecimalsPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rate","type":"uint256"}],"name":"setDepositFeeRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lockupPeriodManager","type":"uint256"}],"name":"setLockupPeriodManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lockupPeriodUser","type":"uint256"}],"name":"setLockupPeriodUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rate","type":"uint256"}],"name":"setManagementFeeRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_manager","type":"address"}],"name":"setManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minAmount","type":"uint256"}],"name":"setMinAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rate","type":"uint256"}],"name":"setPerformanceFeeRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasury","type":"address"}],"name":"setTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stableToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"updateAlphaPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price_WAVG","type":"uint256"}],"name":"updateAlphaPriceWAVG","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_time","type":"uint256"}],"name":"updateManagementFeeTime","outputs":[],"stateMutability":"nonpayable","type":"function"}]