This contract's source code is verified! Compiler
0.7.5+commit.eb77ed08
File 1 of 7: Address.sol
pragma solidity 0.7.5;
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 _functionCallWithValue (
address target,
bytes memory data,
uint256 weiValue,
string memory errorMessage
) private returns (bytes memory ) {
require (isContract(target), 'Address: call to non-contract' );
(bool success, bytes memory returndata) = target.call {value : weiValue}(
data
);
if (success) {
return returndata;
} else {
if (returndata.length > 0 ) {
assembly {
let returndata_size := mload (returndata)
revert (add (32 , returndata), returndata_size)
}
} else {
revert (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
) private 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);
}
}
}
function addressToString (address _address )
internal
pure
returns (string memory )
{
bytes32 _bytes = bytes32 (uint256 (_address));
bytes memory HEX = '0123456789abcdef' ;
bytes memory _addr = new bytes (42 );
_addr[0 ] = '0' ;
_addr[1 ] = 'x' ;
for (uint256 i = 0 ; i < 20 ; i+ + ) {
_addr[2 + i * 2 ] = HEX[uint8 (_bytes[i + 12 ] > > 4 )];
_addr[3 + i * 2 ] = HEX[uint8 (_bytes[i + 12 ] & 0x0f )];
}
return string (_addr);
}
}
File 2 of 7: 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 3 of 7: ERC20.sol
pragma solidity 0.7.5;
import '../interfaces/IERC20.sol' ;
import '../libraries/SafeMath.sol' ;
import '../libraries/Counters.sol' ;
import '../libraries/Address.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 override returns (string memory ) {
return _name;
}
function symbol ( ) public view override 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 ammount_ ) internal virtual {
require (account_ ! = address (0 ), 'ERC20: mint to the zero address' );
_beforeTokenTransfer(address (this ), account_, ammount_);
_totalSupply = _totalSupply.add(ammount_);
_balances[account_] = _balances[account_].add(ammount_);
emit Transfer(address (this ), account_, ammount_);
}
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 {}
}
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 ) ;
}
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 7: IERC20.sol
pragma solidity >=0.5.0;
interface IERC20 {
event Approval (
address indexed owner,
address indexed spender,
uint256 value
) ;
event Transfer (address indexed from , address indexed to, uint256 value ) ;
function name ( ) external view returns (string memory ) ;
function symbol ( ) external view returns (string memory ) ;
function decimals ( ) external view returns (uint8 ) ;
function totalSupply ( ) external view returns (uint256 ) ;
function balanceOf (address owner ) external view returns (uint256 ) ;
function allowance (address owner, address spender )
external
view
returns (uint256 ) ;
function approve (address spender, uint256 value ) external returns (bool ) ;
function transfer (address to, uint256 value ) external returns (bool ) ;
function transferFrom (
address from ,
address to,
uint256 value
) external returns (bool ) ;
}
interface IERC20Mintable {
function mint (uint256 amount_ ) external ;
function mint (address account_, uint256 ammount_ ) external ;
}
File 5 of 7: Ownable.sol
pragma solidity 0.7.5;
interface IOwnable {
function owner ( ) external view returns (address ) ;
function renounceManagement ( ) external ;
function pushManagement (address newOwner_ ) external ;
function pullManagement ( ) external ;
}
contract Ownable is IOwnable {
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 owner ( ) public view override returns (address ) {
return _owner;
}
modifier onlyOwner ( ) {
require (_owner = = msg .sender , 'Ownable: caller is not the owner' );
_ ;
}
function renounceManagement ( ) public virtual override onlyOwner {
emit OwnershipPushed(_owner, address (0 ));
_owner = address (0 );
}
function pushManagement (address newOwner_ )
public
virtual
override
onlyOwner
{
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 6 of 7: 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 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 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 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 sqrrt (uint256 a ) internal pure returns (uint256 c ) {
if (a > 3 ) {
c = a;
uint256 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 ;
}
}
}
File 7 of 7: sFlyzERC20.sol
pragma solidity 0.7.5;
import './types/ERC20.sol' ;
import './types/Ownable.sol' ;
contract sFlyzERC20 is ERC20Permit , Ownable {
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 {
uint256 epoch;
uint256 rebase;
uint256 totalStakedBefore;
uint256 totalStakedAfter;
uint256 amountRebased;
uint256 index;
uint256 blockNumberOccured;
}
Rebase[] public rebases;
uint256 public INDEX;
uint256 private constant MAX_UINT256 = ~ uint256 (0 );
uint256 private constant INITIAL_FRAGMENTS_SUPPLY = 5000000 * 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 ('sFlyzERC20' , 'sFLZ' , 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 (uint256 _INDEX ) external onlyOwner returns (bool ) {
require (INDEX = = 0 );
INDEX = gonsForBalance(_INDEX);
return true ;
}
function rebase (uint256 profit_, uint256 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 (
uint256 previousCirculating_,
uint256 profit_,
uint256 epoch_
) internal returns (bool ) {
uint256 rebasePercent = profit_.mul(1e18 ).div(previousCirculating_);
rebases.push (
Rebase({
epoch: epoch_,
rebase: rebasePercent,
totalStakedBefore: previousCirculating_,
totalStakedAfter: circulatingSupply(),
amountRebased: profit_,
index: index(),
blockNumberOccured: block .number
})
);
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 (uint256 amount ) public view returns (uint256 ) {
return amount.mul(_gonsPerFragment);
}
function balanceForGons (uint256 gons ) public view returns (uint256 ) {
return gons.div(_gonsPerFragment);
}
function circulatingSupply ( ) public view returns (uint256 ) {
return _totalSupply.sub(balanceOf(stakingContract));
}
function index ( ) public view returns (uint256 ) {
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" : {
"contracts/sFlyzERC20.sol" : "sFlyzERC20"
} ,
"evmVersion" : "istanbul" ,
"libraries" : { } ,
"metadata" : {
"bytecodeHash" : "ipfs"
} ,
"optimizer" : {
"enabled" : true ,
"runs" : 200
} ,
"remappings" : [ ]
} [{"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":"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":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"uint256","name":"blockNumberOccured","type":"uint256"}],"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"}]