This contract's source code is verified! Compiler
0.7.5+commit.eb77ed08
File 1 of 10: Counters.sol
pragma solidity 0.7.5;
import "./SafeMath.sol" ;
library Counters {
using SafeMath for uint256 ;
struct Counter {
uint256 _value;
}
function current (Counter storage counter ) internal view returns (uint256 ) {
return counter._value;
}
function increment (Counter storage counter ) internal {
counter._value + = 1 ;
}
function decrement (Counter storage counter ) internal {
counter._value = counter._value.sub(1 );
}
}
File 2 of 10: ERC20.sol
pragma solidity 0.7.5;
import "./lib/IERC20.sol" ;
import "./lib/SafeMath.sol" ;
abstract contract ERC20 is IERC20 {
using SafeMath for uint256 ;
bytes32 private constant ERC20TOKEN_ERC1820_INTERFACE_ID =
keccak256 ("ERC20Token" );
mapping (address = > uint256 ) internal _balances;
mapping (address = > mapping (address = > uint256 )) internal _allowances;
uint256 internal _totalSupply;
string internal _name;
string internal _symbol;
uint8 internal _decimals;
constructor (string memory name_, string memory symbol_, uint8 decimals_ ) {
_name = name_;
_symbol = symbol_;
_decimals = decimals_;
}
function name ( ) public view returns (string memory ) {
return _name;
}
function symbol ( ) public view returns (string memory ) {
return _symbol;
}
function decimals ( ) public view override returns (uint8 ) {
return _decimals;
}
function totalSupply ( ) public view 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(msg .sender , 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(msg .sender , spender, amount);
return true ;
}
function transferFrom (
address sender,
address recipient,
uint256 amount
) public virtual override returns (bool ) {
_transfer(sender, recipient, amount);
_approve(
sender,
msg .sender ,
_allowances[sender][msg .sender ].sub(
amount,
"ERC20: transfer amount exceeds allowance"
)
);
return true ;
}
function increaseAllowance (
address spender,
uint256 addedValue
) public virtual returns (bool ) {
_approve(
msg .sender ,
spender,
_allowances[msg .sender ][spender].add(addedValue)
);
return true ;
}
function decreaseAllowance (
address spender,
uint256 subtractedValue
) public virtual returns (bool ) {
_approve(
msg .sender ,
spender,
_allowances[msg .sender ][spender].sub(
subtractedValue,
"ERC20: decreased allowance below zero"
)
);
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);
_balances[sender] = _balances[sender].sub(
amount,
"ERC20: transfer amount exceeds balance"
);
_balances[recipient] = _balances[recipient].add(amount);
emit Transfer(sender, recipient, amount);
}
function _mint (address account_, uint256 amount_ ) internal virtual {
require (account_ ! = address (0 ), "ERC20: mint to the zero address" );
_beforeTokenTransfer(address (this ), account_, amount_);
_totalSupply = _totalSupply.add(amount_);
_balances[account_] = _balances[account_].add(amount_);
emit Transfer(address (this ), 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);
_balances[account] = _balances[account].sub(
amount,
"ERC20: burn amount exceeds balance"
);
_totalSupply = _totalSupply.sub(amount);
emit Transfer(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 {}
}
File 3 of 10: ERC20Permit.sol
pragma solidity 0.7.5;
import "./lib/IERC20.sol" ;
import "./lib/IERC2612Permit.sol" ;
import "./lib/Counters.sol" ;
import "./ERC20.sol" ;
abstract contract ERC20Permit is ERC20 , IERC2612Permit {
using Counters for Counters .Counter ;
mapping (address = > Counters.Counter) private _nonces;
bytes32 public constant PERMIT_TYPEHASH =
0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9 ;
bytes32 public DOMAIN_SEPARATOR;
constructor ( ) {
uint256 chainID;
assembly {
chainID := chainid ()
}
DOMAIN_SEPARATOR = keccak256 (
abi .encode (
keccak256 (
"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"
),
keccak256 (bytes (name())),
keccak256 (bytes ("1" )),
chainID,
address (this )
)
);
}
function permit (
address owner,
address spender,
uint256 amount,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) public virtual override {
require (block .timestamp < = deadline, "Permit: expired deadline" );
bytes32 hashStruct = keccak256 (
abi .encode (
PERMIT_TYPEHASH,
owner,
spender,
amount,
_nonces[owner].current(),
deadline
)
);
bytes32 _hash = keccak256 (
abi .encodePacked (uint16 (0x1901 ), DOMAIN_SEPARATOR, hashStruct)
);
address signer = ecrecover (_hash, v, r, s);
require (
signer ! = address (0 ) & & signer = = owner,
"ZeroSwapPermit: Invalid signature"
);
_nonces[owner].increment();
_approve(owner, spender, amount);
}
function nonces (address owner ) public view override returns (uint256 ) {
return _nonces[owner].current();
}
}
File 4 of 10: IERC20.sol
pragma solidity 0.7.5;
interface IERC20 {
function decimals ( ) external view returns (uint8 ) ;
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
) ;
}
File 5 of 10: IERC2612Permit.sol
pragma solidity 0.7.5;
interface IERC2612Permit {
function permit (
address owner,
address spender,
uint256 amount,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external ;
function nonces (address owner ) external view returns (uint256 ) ;
} File 6 of 10: IOwnable.sol
pragma solidity 0.7.5;
interface IOwnable {
function owner ( ) external view returns (address ) ;
function renounceOwnership ( ) external ;
function transferOwnership (address newOwner_ ) external ;
}
File 7 of 10: IOwnableManagement.sol
pragma solidity 0.7.5;
interface IOwnableManagement {
function manager ( ) external view returns (address ) ;
function renounceManagement ( ) external ;
function pushManagement (address newOwner_ ) external ;
function pullManagement ( ) external ;
}
File 8 of 10: OwnableManagement.sol
pragma solidity 0.7.5;
import "./lib/IOwnableManagement.sol" ;
contract OwnableManagement is IOwnableManagement {
address internal _owner;
address internal _newOwner;
event OwnershipPushed (address indexed previousOwner, address indexed newOwner ) ;
event OwnershipPulled (address indexed previousOwner, address indexed newOwner ) ;
constructor ( ) {
_owner = msg .sender ;
emit OwnershipPushed( address (0 ), _owner );
}
function manager ( ) public view override returns (address ) {
return _owner;
}
modifier onlyManager ( ) {
require ( _owner = = msg .sender , "Ownable: caller is not the owner" );
_ ;
}
function renounceManagement ( ) public virtual override onlyManager ( ) {
emit OwnershipPushed( _owner, address (0 ) );
_owner = address (0 );
}
function pushManagement ( address newOwner_ ) public virtual override onlyManager ( ) {
require ( newOwner_ ! = address (0 ), "Ownable: new owner is the zero address" );
emit OwnershipPushed( _owner, newOwner_ );
_newOwner = newOwner_;
}
function pullManagement ( ) public virtual override {
require ( msg .sender = = _newOwner, "Ownable: must be new owner to pull" );
emit OwnershipPulled( _owner, _newOwner );
_owner = _newOwner;
}
} File 9 of 10: SafeMath.sol
pragma solidity 0.7.5;
library SafeMath {
function add (uint256 a, uint256 b ) internal pure returns (uint256 ) {
uint256 c = a + b;
require (c > = a, "SafeMath: addition overflow" );
return c;
}
function add32 (uint32 a, uint32 b ) internal pure returns (uint32 ) {
uint32 c = a + b;
require (c > = a, "SafeMath: addition overflow" );
return c;
}
function sub (uint256 a, uint256 b ) internal pure returns (uint256 ) {
return sub(a, b, "SafeMath: subtraction overflow" );
}
function sub (
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256 ) {
require (b < = a, errorMessage);
uint256 c = a - b;
return c;
}
function sub32 (uint32 a, uint32 b ) internal pure returns (uint32 ) {
return sub32(a, b, "SafeMath: subtraction overflow" );
}
function sub32 (
uint32 a,
uint32 b,
string memory errorMessage
) internal pure returns (uint32 ) {
require (b < = a, errorMessage);
uint32 c = a - b;
return c;
}
function mul (uint256 a, uint256 b ) internal pure returns (uint256 ) {
if (a = = 0 ) {
return 0 ;
}
uint256 c = a * b;
require (c / a = = b, "SafeMath: multiplication overflow" );
return c;
}
function mul32 (uint32 a, uint32 b ) internal pure returns (uint32 ) {
if (a = = 0 ) {
return 0 ;
}
uint32 c = a * b;
require (c / a = = b, "SafeMath: multiplication overflow" );
return c;
}
function div (uint256 a, uint256 b ) internal pure returns (uint256 ) {
return div(a, b, "SafeMath: division by zero" );
}
function div (
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256 ) {
require (b > 0 , errorMessage);
uint256 c = a / b;
return c;
}
function mod (uint256 a, uint256 b ) internal pure returns (uint256 ) {
return mod(a, b, "SafeMath: modulo by zero" );
}
function mod (
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256 ) {
require (b ! = 0 , errorMessage);
return a % b;
}
function sqrrt (uint256 a ) internal pure returns (uint c ) {
if (a > 3 ) {
c = a;
uint b = add(div(a, 2 ), 1 );
while (b < c) {
c = b;
b = div(add(div(a, b), b), 2 );
}
} else if (a ! = 0 ) {
c = 1 ;
}
}
function percentageAmount (
uint256 total_,
uint8 percentage_
) internal pure returns (uint256 percentAmount_ ) {
return div(mul(total_, percentage_), 1000 );
}
function substractPercentage (
uint256 total_,
uint8 percentageToSub_
) internal pure returns (uint256 result_ ) {
return sub(total_, div(mul(total_, percentageToSub_), 1000 ));
}
function percentageOfTotal (
uint256 part_,
uint256 total_
) internal pure returns (uint256 percent_ ) {
return div(mul(part_, 100 ), total_);
}
function average (uint256 a, uint256 b ) internal pure returns (uint256 ) {
return (a / 2 ) + (b / 2 ) + (((a % 2 ) + (b % 2 )) / 2 );
}
function quadraticPricing (
uint256 payment_,
uint256 multiplier_
) internal pure returns (uint256 ) {
return sqrrt(mul(multiplier_, payment_));
}
function bondingCurve (
uint256 supply_,
uint256 multiplier_
) internal pure returns (uint256 ) {
return mul(multiplier_, supply_);
}
}
File 10 of 10: veSYNC.sol
pragma solidity 0.7.5;
import "./ERC20Permit.sol" ;
import "./lib/IOwnable.sol" ;
import "./OwnableManagement.sol" ;
contract veSYNC is ERC20Permit , OwnableManagement {
using SafeMath for uint256 ;
modifier onlyStakingContract ( ) {
require (msg .sender = = stakingContract);
_ ;
}
address public stakingContract;
address public initializer;
event LogSupply (
uint256 indexed epoch,
uint256 timestamp,
uint256 totalSupply
) ;
event LogRebase (uint256 indexed epoch, uint256 rebase, uint256 index ) ;
event LogStakingContractUpdated (address stakingContract ) ;
struct Rebase {
uint epoch;
uint rebase;
uint totalStakedBefore;
uint totalStakedAfter;
uint amountRebased;
uint index;
uint32 timeOccured;
}
Rebase[] public rebases;
uint public INDEX;
uint256 private constant MAX_UINT256 = ~ uint256 (0 );
uint256 private constant INITIAL_FRAGMENTS_SUPPLY =
5_000_000_000_000 * 10 * * 9 ;
uint256 private constant TOTAL_GONS =
MAX_UINT256 - (MAX_UINT256 % INITIAL_FRAGMENTS_SUPPLY);
uint256 private constant MAX_SUPPLY = ~ uint128 (0 );
uint256 private _gonsPerFragment;
mapping (address = > uint256 ) private _gonBalances;
mapping (address = > mapping (address = > uint256 )) private _allowedValue;
constructor ( ) ERC20 ("Vote-escrowed SYNC" , "veSYNC" , 9 ) ERC20Permit ( ) {
initializer = msg .sender ;
_totalSupply = INITIAL_FRAGMENTS_SUPPLY;
_gonsPerFragment = TOTAL_GONS.div(_totalSupply);
}
function initialize (address stakingContract_ ) external returns (bool ) {
require (msg .sender = = initializer);
require (stakingContract_ ! = address (0 ));
stakingContract = stakingContract_;
_gonBalances[stakingContract] = TOTAL_GONS;
emit Transfer(address (0x0 ), stakingContract, _totalSupply);
emit LogStakingContractUpdated(stakingContract_);
initializer = address (0 );
return true ;
}
function setIndex (uint _INDEX ) external onlyManager returns (bool ) {
require (INDEX = = 0 );
INDEX = gonsForBalance(_INDEX);
return true ;
}
function rebase (
uint256 profit_,
uint epoch_
) public onlyStakingContract returns (uint256 ) {
uint256 rebaseAmount;
uint256 circulatingSupply_ = circulatingSupply();
if (profit_ = = 0 ) {
emit LogSupply(epoch_, block .timestamp , _totalSupply);
emit LogRebase(epoch_, 0 , index());
return _totalSupply;
} else if (circulatingSupply_ > 0 ) {
rebaseAmount = profit_.mul(_totalSupply).div(circulatingSupply_);
} else {
rebaseAmount = profit_;
}
_totalSupply = _totalSupply.add(rebaseAmount);
if (_totalSupply > MAX_SUPPLY) {
_totalSupply = MAX_SUPPLY;
}
_gonsPerFragment = TOTAL_GONS.div(_totalSupply);
_storeRebase(circulatingSupply_, profit_, epoch_);
return _totalSupply;
}
function _storeRebase (
uint previousCirculating_,
uint profit_,
uint epoch_
) internal returns (bool ) {
uint rebasePercent = profit_.mul(1e18 ).div(previousCirculating_);
rebases.push (
Rebase({
epoch: epoch_,
rebase: rebasePercent,
totalStakedBefore: previousCirculating_,
totalStakedAfter: circulatingSupply(),
amountRebased: profit_,
index: index(),
timeOccured: uint32 (block .timestamp )
})
);
emit LogSupply(epoch_, block .timestamp , _totalSupply);
emit LogRebase(epoch_, rebasePercent, index());
return true ;
}
function balanceOf (address who ) public view override returns (uint256 ) {
return _gonBalances[who].div(_gonsPerFragment);
}
function gonsForBalance (uint amount ) public view returns (uint ) {
return amount.mul(_gonsPerFragment);
}
function balanceForGons (uint gons ) public view returns (uint ) {
return gons.div(_gonsPerFragment);
}
function circulatingSupply ( ) public view returns (uint ) {
return _totalSupply.sub(balanceOf(stakingContract));
}
function index ( ) public view returns (uint ) {
return balanceForGons(INDEX);
}
function transfer (
address to,
uint256 value
) public override returns (bool ) {
uint256 gonValue = value.mul(_gonsPerFragment);
_gonBalances[msg .sender ] = _gonBalances[msg .sender ].sub(gonValue);
_gonBalances[to] = _gonBalances[to].add(gonValue);
emit Transfer(msg .sender , to, value);
return true ;
}
function allowance (
address owner_,
address spender
) public view override returns (uint256 ) {
return _allowedValue[owner_][spender];
}
function transferFrom (
address from ,
address to,
uint256 value
) public override returns (bool ) {
_allowedValue[from ][msg .sender ] = _allowedValue[from ][msg .sender ].sub(
value
);
emit Approval(from , msg .sender , _allowedValue[from ][msg .sender ]);
uint256 gonValue = gonsForBalance(value);
_gonBalances[from ] = _gonBalances[from ].sub(gonValue);
_gonBalances[to] = _gonBalances[to].add(gonValue);
emit Transfer(from , to, value);
return true ;
}
function approve (
address spender,
uint256 value
) public override returns (bool ) {
_allowedValue[msg .sender ][spender] = value;
emit Approval(msg .sender , spender, value);
return true ;
}
function _approve (
address owner,
address spender,
uint256 value
) internal virtual override {
_allowedValue[owner][spender] = value;
emit Approval(owner, spender, value);
}
function increaseAllowance (
address spender,
uint256 addedValue
) public override returns (bool ) {
_allowedValue[msg .sender ][spender] = _allowedValue[msg .sender ][spender]
.add(addedValue);
emit Approval(msg .sender , spender, _allowedValue[msg .sender ][spender]);
return true ;
}
function decreaseAllowance (
address spender,
uint256 subtractedValue
) public override returns (bool ) {
uint256 oldValue = _allowedValue[msg .sender ][spender];
if (subtractedValue > = oldValue) {
_allowedValue[msg .sender ][spender] = 0 ;
} else {
_allowedValue[msg .sender ][spender] = oldValue.sub(subtractedValue);
}
emit Approval(msg .sender , spender, _allowedValue[msg .sender ][spender]);
return true ;
}
}
{
"compilationTarget" : {
"src/veSYNC.sol" : "veSYNC"
} ,
"evmVersion" : "istanbul" ,
"libraries" : { } ,
"metadata" : {
"bytecodeHash" : "ipfs"
} ,
"optimizer" : {
"enabled" : true ,
"runs" : 200
} ,
"remappings" : [
":ds-test/=lib/forge-std/lib/ds-test/src/" ,
":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/" ,
":forge-std/=lib/forge-std/src/" ,
":openzeppelin-contracts/=lib/openzeppelin-contracts/" ,
":openzeppelin/=lib/openzeppelin-contracts/contracts/"
]
} [{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rebase","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"LogRebase","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"stakingContract","type":"address"}],"name":"LogStakingContractUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"LogSupply","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipPulled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipPushed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INDEX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gons","type":"uint256"}],"name":"balanceForGons","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"gonsForBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"index","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"stakingContract_","type":"address"}],"name":"initialize","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initializer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pullManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner_","type":"address"}],"name":"pushManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"profit_","type":"uint256"},{"internalType":"uint256","name":"epoch_","type":"uint256"}],"name":"rebase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rebases","outputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"uint256","name":"rebase","type":"uint256"},{"internalType":"uint256","name":"totalStakedBefore","type":"uint256"},{"internalType":"uint256","name":"totalStakedAfter","type":"uint256"},{"internalType":"uint256","name":"amountRebased","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint32","name":"timeOccured","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_INDEX","type":"uint256"}],"name":"setIndex","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]