Sponsored
Latest 25 from a total of 5,001 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Approve | 78147883 | 2 days ago | IN | 0 FTM | 0.00132254 | ||||
Approve | 78147850 | 2 days ago | IN | 0 FTM | 0.00123326 | ||||
Approve | 78147730 | 2 days ago | IN | 0 FTM | 0.00131034 | ||||
Approve | 75533135 | 44 days ago | IN | 0 FTM | 0.00059925 | ||||
Approve | 75532765 | 44 days ago | IN | 0 FTM | 0.00057468 | ||||
Approve | 75532407 | 44 days ago | IN | 0 FTM | 0.00030396 | ||||
Approve | 74700771 | 64 days ago | IN | 0 FTM | 0.0025693 | ||||
Approve | 74700707 | 64 days ago | IN | 0 FTM | 0.0025693 | ||||
Approve | 74347839 | 70 days ago | IN | 0 FTM | 0.00056524 | ||||
Approve | 73415358 | 90 days ago | IN | 0 FTM | 0.00259499 | ||||
Transfer | 72744028 | 100 days ago | IN | 0 FTM | 0.00146668 | ||||
Approve | 72456418 | 106 days ago | IN | 0 FTM | 0.00261353 | ||||
Approve | 72456407 | 106 days ago | IN | 0 FTM | 0.00261353 | ||||
Approve | 72456370 | 106 days ago | IN | 0 FTM | 0.00261353 | ||||
Approve | 71145965 | 125 days ago | IN | 0 FTM | 0.08447858 | ||||
Approve | 70885685 | 129 days ago | IN | 0 FTM | 0.00069371 | ||||
Approve | 70683463 | 133 days ago | IN | 0 FTM | 0.00100202 | ||||
Approve | 70659709 | 133 days ago | IN | 0 FTM | 0.00074509 | ||||
Approve | 70509194 | 137 days ago | IN | 0 FTM | 0.01020012 | ||||
Approve | 70452946 | 138 days ago | IN | 0 FTM | 0.00097633 | ||||
Approve | 69518965 | 160 days ago | IN | 0 FTM | 0.00151807 | ||||
Approve | 68736452 | 181 days ago | IN | 0 FTM | 0.01428808 | ||||
Approve | 67585159 | 211 days ago | IN | 0 FTM | 0.00102772 | ||||
Approve | 67584968 | 211 days ago | IN | 0 FTM | 0.00105341 | ||||
Approve | 67584963 | 211 days ago | IN | 0 FTM | 0.00105341 |
Latest 1 internal transaction
Parent Txn Hash | Block | From | To | Value | ||
---|---|---|---|---|---|---|
30204843 | 780 days ago | Contract Creation | 0 FTM |
Loading...
Loading
Contract Name:
MPERC20Token
Compiler Version
v0.7.5+commit.eb77ed08
Contract Source Code (Solidity)
/** *Submitted for verification at ftmscan.com on 2022-02-06 */ // SPDX-License-Identifier: AGPL-3.0-or-later pragma solidity 0.7.5; library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping (bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement. bytes32 lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { require(set._values.length > index, "EnumerableSet: index out of bounds"); return set._values[index]; } function _getValues( Set storage set_ ) private view returns ( bytes32[] storage ) { return set_._values; } // TODO needs insert function that maintains order. // TODO needs NatSpec documentation comment. /** * Inserts new value by moving existing value at provided index to end * of array and setting provided value at provided index */ function _insert(Set storage set_, uint256 index_, bytes32 valueToInsert_ ) private returns ( bool ) { require( set_._values.length > index_ ); require( !_contains( set_, valueToInsert_ ), "Remove value you wish to insert if you wish to reorder array." ); bytes32 existingValue_ = _at( set_, index_ ); set_._values[index_] = valueToInsert_; return _add( set_, existingValue_); } struct Bytes4Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Bytes4Set storage set, bytes4 value) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Bytes4Set storage set, bytes4 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes4Set storage set, bytes4 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values on the set. O(1). */ function length(Bytes4Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Bytes4Set storage set, uint256 index) internal view returns ( bytes4 ) { return bytes4( _at( set._inner, index ) ); } function getValues( Bytes4Set storage set_ ) internal view returns ( bytes4[] memory ) { bytes4[] memory bytes4Array_; for( uint256 iteration_ = 0; _length( set_._inner ) > iteration_; iteration_++ ) { bytes4Array_[iteration_] = bytes4( _at( set_._inner, iteration_ ) ); } return bytes4Array_; } function insert( Bytes4Set storage set_, uint256 index_, bytes4 valueToInsert_ ) internal returns ( bool ) { return _insert( set_._inner, index_, valueToInsert_ ); } struct Bytes32Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values on the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Bytes32Set storage set, uint256 index) internal view returns ( bytes32 ) { return _at(set._inner, index); } function getValues( Bytes32Set storage set_ ) internal view returns ( bytes4[] memory ) { bytes4[] memory bytes4Array_; for( uint256 iteration_ = 0; _length( set_._inner ) >= iteration_; iteration_++ ){ bytes4Array_[iteration_] = bytes4( at( set_, iteration_ ) ); } return bytes4Array_; } function insert( Bytes32Set storage set_, uint256 index_, bytes32 valueToInsert_ ) internal returns ( bool ) { return _insert( set_._inner, index_, valueToInsert_ ); } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(value))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(value))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(value))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint256(_at(set._inner, index))); } /** * TODO Might require explicit conversion of bytes32[] to address[]. * Might require iteration. */ function getValues( AddressSet storage set_ ) internal view returns ( address[] memory ) { address[] memory addressArray; for( uint256 iteration_ = 0; _length(set_._inner) >= iteration_; iteration_++ ){ addressArray[iteration_] = at( set_, iteration_ ); } return addressArray; } function insert(AddressSet storage set_, uint256 index_, address valueToInsert_ ) internal returns ( bool ) { return _insert( set_._inner, index_, bytes32(uint256(valueToInsert_)) ); } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } struct UInt256Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UInt256Set storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UInt256Set storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UInt256Set storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UInt256Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UInt256Set storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } 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; // assert(a == b * c + a % b); // There is no case in which this doesn't hold 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) { // (a + b) / 2 can overflow, so we distribute 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_ ); } } abstract contract ERC20 is IERC20 { using SafeMath for uint256; // TODO comment actual hash value. bytes32 constant private ERC20TOKEN_ERC1820_INTERFACE_ID = keccak256( "ERC20Token" ); // Present in ERC777 mapping (address => uint256) internal _balances; // Present in ERC777 mapping (address => mapping (address => uint256)) internal _allowances; // Present in ERC777 uint256 internal _totalSupply; // Present in ERC777 string internal _name; // Present in ERC777 string internal _symbol; // Present in ERC777 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 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 { } } library Counters { using SafeMath for uint256; struct Counter { uint256 _value; // default: 0 } 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); } } 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; // keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"); 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")), // Version 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(); } } interface IOwnable { function owner() external view returns (address); function renounceOwnership() external; function transferOwnership( address newOwner_ ) external; } contract Ownable is IOwnable { address internal _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { _owner = msg.sender; emit OwnershipTransferred( 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 renounceOwnership() public virtual override onlyOwner() { emit OwnershipTransferred( _owner, address(0) ); _owner = address(0); } function transferOwnership( address newOwner_ ) public virtual override onlyOwner() { require( newOwner_ != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred( _owner, newOwner_ ); _owner = newOwner_; } } contract VaultOwned is Ownable { address public _vault; bool public vaultIsLocked = false; function setVault( address vault_ ) external onlyOwner() returns ( bool ) { require( !vaultIsLocked, "The Vault cannot be changed!" ); _vault = vault_; return true; } function lockVault() external onlyOwner() { require( !vaultIsLocked, "The Vault cannot be changed!" ); vaultIsLocked = true; } function vault() public view returns (address) { return _vault; } modifier onlyVault() { require( _vault == msg.sender, "VaultOwned: caller is not the Vault" ); _; } } contract MPERC20Token is ERC20Permit, VaultOwned { using SafeMath for uint256; mapping(address => bool) public taxFromMap; mapping(address => bool) public taxToMap; // Max transfer tax rate: 25.00%. uint256 public constant MAXIMUM_TRANSFER_TAX_RATE = 2500; // Transfer tax rate in basis points. (default 8.00%) uint256 public transferTaxRate = 800; // Staking address for rewards, defaults to burning tokens, but will be set to // the real staking address momentarily after this contracts deploy step. address public stakingAddress = 0x000000000000000000000000000000000000dEaD; address public immutable addLiquidityHelper; event TransferFeeChanged( uint256 txnFee ); event UpdateFeeMaps( address indexed _contract, bool fromTaxed, bool toTaxed ); event SetStakingAddress( address stakingAddress ); event OperatorTransferred( address indexed previousOperator, address indexed newOperator ); // The operator can only update the transfer tax rate address public operator; modifier onlyOperator() { require(operator == msg.sender, "!operator"); _; } constructor( address _addLiquidityHelper ) ERC20("MiniPanther", "MP", 9) { require( _addLiquidityHelper != address(0), "addLiquidityHelper address can't be address(0)" ); addLiquidityHelper = _addLiquidityHelper; operator = msg.sender; } function mint(address account_, uint256 amount_) external onlyVault() { _mint(account_, amount_); } function burn(uint256 amount) public virtual { _burn(msg.sender, amount); } function burnFrom(address account_, uint256 amount_) public virtual { _burnFrom(account_, amount_); } function _burnFrom(address account_, uint256 amount_) public virtual { uint256 decreasedAllowance_ = allowance(account_, msg.sender).sub( amount_, "ERC20: burn amount exceeds allowance" ); _approve(account_, msg.sender, decreasedAllowance_); _burn(account_, amount_); } /// @dev overrides transfer function to meet tokenomics of DARKSIDE function _transfer( address sender, address recipient, uint256 amount ) internal virtual override { bool toFromAddLiquidityHelper = (sender == addLiquidityHelper || recipient == addLiquidityHelper); if ( !( taxFromMap[ sender ] || taxToMap[ recipient ] ) || recipient == stakingAddress || toFromAddLiquidityHelper || transferTaxRate == 0 ) { super._transfer( sender, recipient, amount ); } else { // default tax is 6.66% of every taxed transfer uint256 taxAmount = ( amount.mul( transferTaxRate ) ).div( 10000 ); // default 93.34% of transfer sent to recipient uint256 sendAmount = amount.sub( taxAmount ); assert( amount == sendAmount.add( taxAmount ) ); super._transfer( sender, stakingAddress, taxAmount ); super._transfer( sender, recipient, sendAmount ); amount = sendAmount; } } /** * @dev Update the transfer tax rate. * Can only be called by the current operator. */ function updateTransferTaxRate( uint256 _transferTaxRate ) external onlyOperator { require( _transferTaxRate <= MAXIMUM_TRANSFER_TAX_RATE, "!valid" ); transferTaxRate = _transferTaxRate; emit TransferFeeChanged( transferTaxRate ); } /** * @dev Update the excludeFromMap * Can only be called by the current operator. */ function updateFeeMaps( address _contract, bool fromTaxed, bool toTaxed ) external onlyOperator { taxFromMap[_contract] = fromTaxed; taxToMap[_contract] = toTaxed; emit UpdateFeeMaps( _contract, fromTaxed, toTaxed ); } /** * @dev Update the MP staking address. * Can only be called by the current operator. */ function updateMPStakingAddress( address _stakingAddress ) external onlyOperator { require( _stakingAddress != address(0) && _stakingAddress != 0x000000000000000000000000000000000000dEaD, "!!0"); require( stakingAddress == 0x000000000000000000000000000000000000dEaD, "!unset"); stakingAddress = _stakingAddress; emit SetStakingAddress( stakingAddress ); } /** * @dev Transfers operator of the contract to a new account (`newOperator`). * Can only be called by the current operator. */ function transferOperator( address newOperator ) external onlyOperator { require( newOperator != address(0), "!!0" ); emit OperatorTransferred( operator, newOperator ); operator = newOperator; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_addLiquidityHelper","type":"address"}],"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":"address","name":"previousOperator","type":"address"},{"indexed":true,"internalType":"address","name":"newOperator","type":"address"}],"name":"OperatorTransferred","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":"stakingAddress","type":"address"}],"name":"SetStakingAddress","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"txnFee","type":"uint256"}],"name":"TransferFeeChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_contract","type":"address"},{"indexed":false,"internalType":"bool","name":"fromTaxed","type":"bool"},{"indexed":false,"internalType":"bool","name":"toTaxed","type":"bool"}],"name":"UpdateFeeMaps","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAXIMUM_TRANSFER_TAX_RATE","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":"account_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"_burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_vault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addLiquidityHelper","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","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":"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":"lockVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","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":"operator","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vault_","type":"address"}],"name":"setVault","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"taxFromMap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"taxToMap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOperator","type":"address"}],"name":"transferOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner_","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferTaxRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"},{"internalType":"bool","name":"fromTaxed","type":"bool"},{"internalType":"bool","name":"toTaxed","type":"bool"}],"name":"updateFeeMaps","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_stakingAddress","type":"address"}],"name":"updateMPStakingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_transferTaxRate","type":"uint256"}],"name":"updateTransferTaxRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vaultIsLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60a06040526009805460ff60a01b19169055610320600c55600d80546001600160a01b03191661dead1790553480156200003857600080fd5b506040516200223e3803806200223e833981810160405260208110156200005e57600080fd5b5051604080518082018252600b81526a26b4b734a830b73a3432b960a91b60208281019182528351808501909452600284526104d560f41b908401528151919291600991620000b19160039190620002dd565b508151620000c7906004906020850190620002dd565b506005805460ff191660ff92909216919091179055504690507f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6200010b62000243565b805160209182012060408051808201825260018152603160f81b90840152805180840194909452838101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606084015260808301939093523060a0808401919091528351808403909101815260c0909201928390528151910120600755600880546001600160a01b0319163317908190556001600160a01b0316906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36001600160a01b038116620002195760405162461bcd60e51b815260040180806020018281038252602e81526020018062002210602e913960400191505060405180910390fd5b60601b6001600160601b031916608052600e8054336001600160a01b031990911617905562000389565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015620002d35780601f10620002a757610100808354040283529160200191620002d3565b820191906000526020600020905b815481529060010190602001808311620002b557829003601f168201915b5050505050905090565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928262000315576000855562000360565b82601f106200033057805160ff191683800117855562000360565b8280016001018555821562000360579182015b828111156200036057825182559160200191906001019062000343565b506200036e92915062000372565b5090565b5b808211156200036e576000815560010162000373565b60805160601c611e5f620003b160003980610c775280611524528061155f5250611e5f6000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c80636817031b11610130578063a9059cbb116100b8578063d7b4be241161007c578063d7b4be24146106ab578063dd62ed3e146106b3578063f2fde38b146106e1578063fbfa77cf14610707578063fd243da31461070f57610232565b8063a9059cbb146105f8578063b65d08b014610624578063bdc27cc11461062c578063c22cc11614610652578063d505accf1461065a57610232565b80637ecebe00116100ff5780637ecebe001461056a5780638da5cb5b1461059057806395d89b4114610598578063a22b35ce146105a0578063a457c2d7146105cc57610232565b80636817031b146104ea57806370a0823114610510578063715018a61461053657806379cc67901461053e57610232565b806330adf81f116101be57806342966c681161018257806342966c681461047c57806348bdd19814610499578063570ca735146104a157806358615c1b146104c55780635bf43a97146104e257610232565b806330adf81f146103f6578063313ce567146103fe5780633644e5151461041c578063395093511461042457806340c10f191461045057610232565b8063177611ec11610205578063177611ec1461035257806318160ddd146103785780631ad9339a1461039257806323b872dd1461039a57806329605e77146103d057610232565b806306a95a801461023757806306fdde0314610271578063095ea7b3146102ee5780630c86911d1461031a575b600080fd5b61025d6004803603602081101561024d57600080fd5b50356001600160a01b0316610717565b604080519115158252519081900360200190f35b61027961072c565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102b357818101518382015260200161029b565b50505050905090810190601f1680156102e05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61025d6004803603604081101561030457600080fd5b506001600160a01b0381351690602001356107c2565b6103506004803603606081101561033057600080fd5b506001600160a01b038135169060208101351515906040013515156107d9565b005b61025d6004803603602081101561036857600080fd5b50356001600160a01b03166108a0565b6103806108b5565b60408051918252519081900360200190f35b6103806108bb565b61025d600480360360608110156103b057600080fd5b506001600160a01b038135811691602081013590911690604001356108c1565b610350600480360360208110156103e657600080fd5b50356001600160a01b031661092a565b610380610a12565b610406610a36565b6040805160ff9092168252519081900360200190f35b610380610a3f565b61025d6004803603604081101561043a57600080fd5b506001600160a01b038135169060200135610a45565b6103506004803603604081101561046657600080fd5b506001600160a01b038135169060200135610a7b565b6103506004803603602081101561049257600080fd5b5035610ad2565b610350610adf565b6104a9610ba0565b604080516001600160a01b039092168252519081900360200190f35b610350600480360360208110156104db57600080fd5b5035610baf565b6104a9610c75565b61025d6004803603602081101561050057600080fd5b50356001600160a01b0316610c99565b6103806004803603602081101561052657600080fd5b50356001600160a01b0316610d6d565b610350610d88565b6103506004803603604081101561055457600080fd5b506001600160a01b038135169060200135610e1f565b6103806004803603602081101561058057600080fd5b50356001600160a01b0316610e29565b6104a9610e4a565b610279610e59565b610350600480360360408110156105b657600080fd5b506001600160a01b038135169060200135610eba565b61025d600480360360408110156105e257600080fd5b506001600160a01b038135169060200135610f06565b61025d6004803603604081101561060e57600080fd5b506001600160a01b038135169060200135610f55565b610380610f62565b6103506004803603602081101561064257600080fd5b50356001600160a01b0316610f68565b61025d6110b1565b610350600480360360e081101561067057600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356110c1565b6104a96112ee565b610380600480360360408110156106c957600080fd5b506001600160a01b03813581169160200135166112fd565b610350600480360360208110156106f757600080fd5b50356001600160a01b0316611328565b6104a9611416565b6104a9611425565b600b6020526000908152604090205460ff1681565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107b85780601f1061078d576101008083540402835291602001916107b8565b820191906000526020600020905b81548152906001019060200180831161079b57829003601f168201915b5050505050905090565b60006107cf338484611434565b5060015b92915050565b600e546001600160a01b03163314610824576040805162461bcd60e51b815260206004820152600960248201526810b7b832b930ba37b960b91b604482015290519081900360640190fd5b6001600160a01b0383166000818152600a60209081526040808320805487151560ff199182168117909255600b845293829020805487151595168517905581519081529182019290925281517faa0229b7a89a7cbbb65fa3bb420871ace27f9b9cdb4847f6f8a14c54f1a6d7e7929181900390910190a2505050565b600a6020526000908152604090205460ff1681565b60025490565b6109c481565b60006108ce848484611520565b610920843361091b85604051806060016040528060288152602001611d0c602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611688565b611434565b5060019392505050565b600e546001600160a01b03163314610975576040805162461bcd60e51b815260206004820152600960248201526810b7b832b930ba37b960b91b604482015290519081900360640190fd5b6001600160a01b0381166109b6576040805162461bcd60e51b815260206004820152600360248201526202121360ec1b604482015290519081900360640190fd5b600e546040516001600160a01b038084169216907f74da04524d50c64947f5dd5381ef1a4dca5cba8ed1d816243f9e48aa0b5617ed90600090a3600e80546001600160a01b0319166001600160a01b0392909216919091179055565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055460ff1690565b60075481565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916107cf91859061091b908661171f565b6009546001600160a01b03163314610ac45760405162461bcd60e51b8152600401808060200182810382526023815260200180611d346023913960400191505060405180910390fd5b610ace8282611780565b5050565b610adc3382611870565b50565b6008546001600160a01b03163314610b2c576040805162461bcd60e51b81526020600482018190526024820152600080516020611d57833981519152604482015290519081900360640190fd5b600954600160a01b900460ff1615610b8b576040805162461bcd60e51b815260206004820152601c60248201527f546865205661756c742063616e6e6f74206265206368616e6765642100000000604482015290519081900360640190fd5b6009805460ff60a01b1916600160a01b179055565b600e546001600160a01b031681565b600e546001600160a01b03163314610bfa576040805162461bcd60e51b815260206004820152600960248201526810b7b832b930ba37b960b91b604482015290519081900360640190fd5b6109c4811115610c3a576040805162461bcd60e51b8152602060048201526006602482015265085d985b1a5960d21b604482015290519081900360640190fd5b600c8190556040805182815290517f0496ed1e61eb69727f9659a8e859288db4758ffb1f744d1c1424634f90a257f49181900360200190a150565b7f000000000000000000000000000000000000000000000000000000000000000081565b6008546000906001600160a01b03163314610ce9576040805162461bcd60e51b81526020600482018190526024820152600080516020611d57833981519152604482015290519081900360640190fd5b600954600160a01b900460ff1615610d48576040805162461bcd60e51b815260206004820152601c60248201527f546865205661756c742063616e6e6f74206265206368616e6765642100000000604482015290519081900360640190fd5b50600980546001600160a01b0383166001600160a01b03199091161790556001919050565b6001600160a01b031660009081526020819052604090205490565b6008546001600160a01b03163314610dd5576040805162461bcd60e51b81526020600482018190526024820152600080516020611d57833981519152604482015290519081900360640190fd5b6008546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600880546001600160a01b0319169055565b610ace8282610eba565b6001600160a01b03811660009081526006602052604081206107d39061196c565b6008546001600160a01b031690565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107b85780601f1061078d576101008083540402835291602001916107b8565b6000610eea82604051806060016040528060248152602001611d7760249139610ee386336112fd565b9190611688565b9050610ef7833383611434565b610f018383611870565b505050565b60006107cf338461091b85604051806060016040528060258152602001611e05602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611688565b60006107cf338484611520565b600c5481565b600e546001600160a01b03163314610fb3576040805162461bcd60e51b815260206004820152600960248201526810b7b832b930ba37b960b91b604482015290519081900360640190fd5b6001600160a01b03811615801590610fd6575061dead6001600160a01b03821614155b61100d576040805162461bcd60e51b815260206004820152600360248201526202121360ec1b604482015290519081900360640190fd5b600d546001600160a01b031661dead14611057576040805162461bcd60e51b8152602060048201526006602482015265085d5b9cd95d60d21b604482015290519081900360640190fd5b600d80546001600160a01b0319166001600160a01b03838116919091179182905560408051929091168252517fd6912e103d1553f15e77ffc98e99da32c9ce0d21d8be27cbb38437b1afe30928916020908290030190a150565b600954600160a01b900460ff1681565b83421115611116576040805162461bcd60e51b815260206004820152601860248201527f5065726d69743a206578706972656420646561646c696e650000000000000000604482015290519081900360640190fd5b6001600160a01b03871660009081526006602052604081207f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c99089908990899061115f9061196c565b604080516020808201979097526001600160a01b0395861681830152939094166060840152608083019190915260a082015260c08082018990528251808303909101815260e08201835280519084012060075461190160f01b610100840152610102830152610122808301829052835180840390910181526101428301808552815191860191909120600091829052610162840180865281905260ff8a166101828501526101a284018990526101c28401889052935191955092936001926101e280820193601f1981019281900390910190855afa158015611245573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061127b5750896001600160a01b0316816001600160a01b0316145b6112b65760405162461bcd60e51b8152600401808060200182810382526021815260200180611cca6021913960400191505060405180910390fd5b6001600160a01b038a1660009081526006602052604090206112d790611970565b6112e28a8a8a611434565b50505050505050505050565b600d546001600160a01b031681565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6008546001600160a01b03163314611375576040805162461bcd60e51b81526020600482018190526024820152600080516020611d57833981519152604482015290519081900360640190fd5b6001600160a01b0381166113ba5760405162461bcd60e51b8152600401808060200182810382526026815260200180611c5c6026913960400191505060405180910390fd5b6008546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b6009546001600160a01b031690565b6009546001600160a01b031681565b6001600160a01b0383166114795760405162461bcd60e51b8152600401808060200182810382526024815260200180611de16024913960400191505060405180910390fd5b6001600160a01b0382166114be5760405162461bcd60e51b8152600401808060200182810382526022815260200180611c826022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316148061159357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316145b6001600160a01b0385166000908152600a602052604090205490915060ff16806115d557506001600160a01b0383166000908152600b602052604090205460ff165b15806115ee5750600d546001600160a01b038481169116145b806115f65750805b806116015750600c54155b1561161657611611848484611979565b611682565b6000611639612710611633600c5486611ad490919063ffffffff16565b90611b2d565b905060006116478483611b6f565b9050611653818361171f565b841461165b57fe5b600d546116739087906001600160a01b031684611979565b61167e868683611979565b9250505b50505050565b600081848411156117175760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156116dc5781810151838201526020016116c4565b50505050905090810190601f1680156117095780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015611779576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b0382166117db576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6117e6308383610f01565b6002546117f3908261171f565b6002556001600160a01b038216600090815260208190526040902054611819908261171f565b6001600160a01b038316600081815260208181526040918290209390935580518481529051919230927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b0382166118b55760405162461bcd60e51b8152600401808060200182810382526021815260200180611d9b6021913960400191505060405180910390fd5b6118c182600083610f01565b6118fe81604051806060016040528060228152602001611c3a602291396001600160a01b0385166000908152602081905260409020549190611688565b6001600160a01b0383166000908152602081905260409020556002546119249082611b6f565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b5490565b80546001019055565b6001600160a01b0383166119be5760405162461bcd60e51b8152600401808060200182810382526025815260200180611dbc6025913960400191505060405180910390fd5b6001600160a01b038216611a035760405162461bcd60e51b8152600401808060200182810382526023815260200180611c176023913960400191505060405180910390fd5b611a0e838383610f01565b611a4b81604051806060016040528060268152602001611ca4602691396001600160a01b0386166000908152602081905260409020549190611688565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611a7a908261171f565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600082611ae3575060006107d3565b82820282848281611af057fe5b04146117795760405162461bcd60e51b8152600401808060200182810382526021815260200180611ceb6021913960400191505060405180910390fd5b600061177983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611bb1565b600061177983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611688565b60008183611c005760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156116dc5781810151838201526020016116c4565b506000838581611c0c57fe5b049594505050505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63655a65726f537761705065726d69743a20496e76616c6964207369676e6174757265536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655661756c744f776e65643a2063616c6c6572206973206e6f7420746865205661756c744f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657245524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122021a40f71407079a63e0763154d0fe9ae15ab7802821da2304f28a506a7d2f1b864736f6c634300070500336164644c697175696469747948656c70657220616464726573732063616e277420626520616464726573732830290000000000000000000000000460cfc1f045bc88be8c0c1a88d604eecd6c84ed
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102325760003560e01c80636817031b11610130578063a9059cbb116100b8578063d7b4be241161007c578063d7b4be24146106ab578063dd62ed3e146106b3578063f2fde38b146106e1578063fbfa77cf14610707578063fd243da31461070f57610232565b8063a9059cbb146105f8578063b65d08b014610624578063bdc27cc11461062c578063c22cc11614610652578063d505accf1461065a57610232565b80637ecebe00116100ff5780637ecebe001461056a5780638da5cb5b1461059057806395d89b4114610598578063a22b35ce146105a0578063a457c2d7146105cc57610232565b80636817031b146104ea57806370a0823114610510578063715018a61461053657806379cc67901461053e57610232565b806330adf81f116101be57806342966c681161018257806342966c681461047c57806348bdd19814610499578063570ca735146104a157806358615c1b146104c55780635bf43a97146104e257610232565b806330adf81f146103f6578063313ce567146103fe5780633644e5151461041c578063395093511461042457806340c10f191461045057610232565b8063177611ec11610205578063177611ec1461035257806318160ddd146103785780631ad9339a1461039257806323b872dd1461039a57806329605e77146103d057610232565b806306a95a801461023757806306fdde0314610271578063095ea7b3146102ee5780630c86911d1461031a575b600080fd5b61025d6004803603602081101561024d57600080fd5b50356001600160a01b0316610717565b604080519115158252519081900360200190f35b61027961072c565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102b357818101518382015260200161029b565b50505050905090810190601f1680156102e05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61025d6004803603604081101561030457600080fd5b506001600160a01b0381351690602001356107c2565b6103506004803603606081101561033057600080fd5b506001600160a01b038135169060208101351515906040013515156107d9565b005b61025d6004803603602081101561036857600080fd5b50356001600160a01b03166108a0565b6103806108b5565b60408051918252519081900360200190f35b6103806108bb565b61025d600480360360608110156103b057600080fd5b506001600160a01b038135811691602081013590911690604001356108c1565b610350600480360360208110156103e657600080fd5b50356001600160a01b031661092a565b610380610a12565b610406610a36565b6040805160ff9092168252519081900360200190f35b610380610a3f565b61025d6004803603604081101561043a57600080fd5b506001600160a01b038135169060200135610a45565b6103506004803603604081101561046657600080fd5b506001600160a01b038135169060200135610a7b565b6103506004803603602081101561049257600080fd5b5035610ad2565b610350610adf565b6104a9610ba0565b604080516001600160a01b039092168252519081900360200190f35b610350600480360360208110156104db57600080fd5b5035610baf565b6104a9610c75565b61025d6004803603602081101561050057600080fd5b50356001600160a01b0316610c99565b6103806004803603602081101561052657600080fd5b50356001600160a01b0316610d6d565b610350610d88565b6103506004803603604081101561055457600080fd5b506001600160a01b038135169060200135610e1f565b6103806004803603602081101561058057600080fd5b50356001600160a01b0316610e29565b6104a9610e4a565b610279610e59565b610350600480360360408110156105b657600080fd5b506001600160a01b038135169060200135610eba565b61025d600480360360408110156105e257600080fd5b506001600160a01b038135169060200135610f06565b61025d6004803603604081101561060e57600080fd5b506001600160a01b038135169060200135610f55565b610380610f62565b6103506004803603602081101561064257600080fd5b50356001600160a01b0316610f68565b61025d6110b1565b610350600480360360e081101561067057600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356110c1565b6104a96112ee565b610380600480360360408110156106c957600080fd5b506001600160a01b03813581169160200135166112fd565b610350600480360360208110156106f757600080fd5b50356001600160a01b0316611328565b6104a9611416565b6104a9611425565b600b6020526000908152604090205460ff1681565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107b85780601f1061078d576101008083540402835291602001916107b8565b820191906000526020600020905b81548152906001019060200180831161079b57829003601f168201915b5050505050905090565b60006107cf338484611434565b5060015b92915050565b600e546001600160a01b03163314610824576040805162461bcd60e51b815260206004820152600960248201526810b7b832b930ba37b960b91b604482015290519081900360640190fd5b6001600160a01b0383166000818152600a60209081526040808320805487151560ff199182168117909255600b845293829020805487151595168517905581519081529182019290925281517faa0229b7a89a7cbbb65fa3bb420871ace27f9b9cdb4847f6f8a14c54f1a6d7e7929181900390910190a2505050565b600a6020526000908152604090205460ff1681565b60025490565b6109c481565b60006108ce848484611520565b610920843361091b85604051806060016040528060288152602001611d0c602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611688565b611434565b5060019392505050565b600e546001600160a01b03163314610975576040805162461bcd60e51b815260206004820152600960248201526810b7b832b930ba37b960b91b604482015290519081900360640190fd5b6001600160a01b0381166109b6576040805162461bcd60e51b815260206004820152600360248201526202121360ec1b604482015290519081900360640190fd5b600e546040516001600160a01b038084169216907f74da04524d50c64947f5dd5381ef1a4dca5cba8ed1d816243f9e48aa0b5617ed90600090a3600e80546001600160a01b0319166001600160a01b0392909216919091179055565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055460ff1690565b60075481565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916107cf91859061091b908661171f565b6009546001600160a01b03163314610ac45760405162461bcd60e51b8152600401808060200182810382526023815260200180611d346023913960400191505060405180910390fd5b610ace8282611780565b5050565b610adc3382611870565b50565b6008546001600160a01b03163314610b2c576040805162461bcd60e51b81526020600482018190526024820152600080516020611d57833981519152604482015290519081900360640190fd5b600954600160a01b900460ff1615610b8b576040805162461bcd60e51b815260206004820152601c60248201527f546865205661756c742063616e6e6f74206265206368616e6765642100000000604482015290519081900360640190fd5b6009805460ff60a01b1916600160a01b179055565b600e546001600160a01b031681565b600e546001600160a01b03163314610bfa576040805162461bcd60e51b815260206004820152600960248201526810b7b832b930ba37b960b91b604482015290519081900360640190fd5b6109c4811115610c3a576040805162461bcd60e51b8152602060048201526006602482015265085d985b1a5960d21b604482015290519081900360640190fd5b600c8190556040805182815290517f0496ed1e61eb69727f9659a8e859288db4758ffb1f744d1c1424634f90a257f49181900360200190a150565b7f0000000000000000000000000460cfc1f045bc88be8c0c1a88d604eecd6c84ed81565b6008546000906001600160a01b03163314610ce9576040805162461bcd60e51b81526020600482018190526024820152600080516020611d57833981519152604482015290519081900360640190fd5b600954600160a01b900460ff1615610d48576040805162461bcd60e51b815260206004820152601c60248201527f546865205661756c742063616e6e6f74206265206368616e6765642100000000604482015290519081900360640190fd5b50600980546001600160a01b0383166001600160a01b03199091161790556001919050565b6001600160a01b031660009081526020819052604090205490565b6008546001600160a01b03163314610dd5576040805162461bcd60e51b81526020600482018190526024820152600080516020611d57833981519152604482015290519081900360640190fd5b6008546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600880546001600160a01b0319169055565b610ace8282610eba565b6001600160a01b03811660009081526006602052604081206107d39061196c565b6008546001600160a01b031690565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107b85780601f1061078d576101008083540402835291602001916107b8565b6000610eea82604051806060016040528060248152602001611d7760249139610ee386336112fd565b9190611688565b9050610ef7833383611434565b610f018383611870565b505050565b60006107cf338461091b85604051806060016040528060258152602001611e05602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611688565b60006107cf338484611520565b600c5481565b600e546001600160a01b03163314610fb3576040805162461bcd60e51b815260206004820152600960248201526810b7b832b930ba37b960b91b604482015290519081900360640190fd5b6001600160a01b03811615801590610fd6575061dead6001600160a01b03821614155b61100d576040805162461bcd60e51b815260206004820152600360248201526202121360ec1b604482015290519081900360640190fd5b600d546001600160a01b031661dead14611057576040805162461bcd60e51b8152602060048201526006602482015265085d5b9cd95d60d21b604482015290519081900360640190fd5b600d80546001600160a01b0319166001600160a01b03838116919091179182905560408051929091168252517fd6912e103d1553f15e77ffc98e99da32c9ce0d21d8be27cbb38437b1afe30928916020908290030190a150565b600954600160a01b900460ff1681565b83421115611116576040805162461bcd60e51b815260206004820152601860248201527f5065726d69743a206578706972656420646561646c696e650000000000000000604482015290519081900360640190fd5b6001600160a01b03871660009081526006602052604081207f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c99089908990899061115f9061196c565b604080516020808201979097526001600160a01b0395861681830152939094166060840152608083019190915260a082015260c08082018990528251808303909101815260e08201835280519084012060075461190160f01b610100840152610102830152610122808301829052835180840390910181526101428301808552815191860191909120600091829052610162840180865281905260ff8a166101828501526101a284018990526101c28401889052935191955092936001926101e280820193601f1981019281900390910190855afa158015611245573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061127b5750896001600160a01b0316816001600160a01b0316145b6112b65760405162461bcd60e51b8152600401808060200182810382526021815260200180611cca6021913960400191505060405180910390fd5b6001600160a01b038a1660009081526006602052604090206112d790611970565b6112e28a8a8a611434565b50505050505050505050565b600d546001600160a01b031681565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6008546001600160a01b03163314611375576040805162461bcd60e51b81526020600482018190526024820152600080516020611d57833981519152604482015290519081900360640190fd5b6001600160a01b0381166113ba5760405162461bcd60e51b8152600401808060200182810382526026815260200180611c5c6026913960400191505060405180910390fd5b6008546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b6009546001600160a01b031690565b6009546001600160a01b031681565b6001600160a01b0383166114795760405162461bcd60e51b8152600401808060200182810382526024815260200180611de16024913960400191505060405180910390fd5b6001600160a01b0382166114be5760405162461bcd60e51b8152600401808060200182810382526022815260200180611c826022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b60007f0000000000000000000000000460cfc1f045bc88be8c0c1a88d604eecd6c84ed6001600160a01b0316846001600160a01b0316148061159357507f0000000000000000000000000460cfc1f045bc88be8c0c1a88d604eecd6c84ed6001600160a01b0316836001600160a01b0316145b6001600160a01b0385166000908152600a602052604090205490915060ff16806115d557506001600160a01b0383166000908152600b602052604090205460ff165b15806115ee5750600d546001600160a01b038481169116145b806115f65750805b806116015750600c54155b1561161657611611848484611979565b611682565b6000611639612710611633600c5486611ad490919063ffffffff16565b90611b2d565b905060006116478483611b6f565b9050611653818361171f565b841461165b57fe5b600d546116739087906001600160a01b031684611979565b61167e868683611979565b9250505b50505050565b600081848411156117175760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156116dc5781810151838201526020016116c4565b50505050905090810190601f1680156117095780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015611779576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b0382166117db576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6117e6308383610f01565b6002546117f3908261171f565b6002556001600160a01b038216600090815260208190526040902054611819908261171f565b6001600160a01b038316600081815260208181526040918290209390935580518481529051919230927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b0382166118b55760405162461bcd60e51b8152600401808060200182810382526021815260200180611d9b6021913960400191505060405180910390fd5b6118c182600083610f01565b6118fe81604051806060016040528060228152602001611c3a602291396001600160a01b0385166000908152602081905260409020549190611688565b6001600160a01b0383166000908152602081905260409020556002546119249082611b6f565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b5490565b80546001019055565b6001600160a01b0383166119be5760405162461bcd60e51b8152600401808060200182810382526025815260200180611dbc6025913960400191505060405180910390fd5b6001600160a01b038216611a035760405162461bcd60e51b8152600401808060200182810382526023815260200180611c176023913960400191505060405180910390fd5b611a0e838383610f01565b611a4b81604051806060016040528060268152602001611ca4602691396001600160a01b0386166000908152602081905260409020549190611688565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611a7a908261171f565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600082611ae3575060006107d3565b82820282848281611af057fe5b04146117795760405162461bcd60e51b8152600401808060200182810382526021815260200180611ceb6021913960400191505060405180910390fd5b600061177983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611bb1565b600061177983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611688565b60008183611c005760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156116dc5781810151838201526020016116c4565b506000838581611c0c57fe5b049594505050505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63655a65726f537761705065726d69743a20496e76616c6964207369676e6174757265536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655661756c744f776e65643a2063616c6c6572206973206e6f7420746865205661756c744f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657245524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122021a40f71407079a63e0763154d0fe9ae15ab7802821da2304f28a506a7d2f1b864736f6c63430007050033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000460cfc1f045bc88be8c0c1a88d604eecd6c84ed
-----Decoded View---------------
Arg [0] : _addLiquidityHelper (address): 0x0460cFc1F045BC88BE8C0c1A88D604EecD6C84ed
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000460cfc1f045bc88be8c0c1a88d604eecd6c84ed
Deployed Bytecode Sourcemap
28309:4938:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28451:40;;;;;;;;;;;;;;;;-1:-1:-1;28451:40:0;-1:-1:-1;;;;;28451:40:0;;:::i;:::-;;;;;;;;;;;;;;;;;;20358:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21168:167;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21168:167:0;;;;;;;;:::i;32080:252::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32080:252:0;;;;;;;;;;;;;;;;;:::i;:::-;;28402:42;;;;;;;;;;;;;;;;-1:-1:-1;28402:42:0;-1:-1:-1;;;;;28402:42:0;;:::i;20611:94::-;;;:::i;:::-;;;;;;;;;;;;;;;;28539:56;;;:::i;21343:329::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21343:329:0;;;;;;;;;;;;;;;;;:::i;33014:230::-;;;;;;;;;;;;;;;;-1:-1:-1;33014:230:0;-1:-1:-1;;;;;33014:230:0;;:::i;25050:108::-;;;:::i;20528:77::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25167:31;;;:::i;21680:214::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21680:214:0;;;;;;;;:::i;29770:113::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29770:113:0;;;;;;;;:::i;29891:89::-;;;;;;;;;;;;;;;;-1:-1:-1;29891:89:0;;:::i;27964:139::-;;;:::i;29358:23::-;;;:::i;:::-;;;;-1:-1:-1;;;;;29358:23:0;;;;;;;;;;;;;;31683:280;;;;;;;;;;;;;;;;-1:-1:-1;31683:280:0;;:::i;28956:43::-;;;:::i;27772:186::-;;;;;;;;;;;;;;;;-1:-1:-1;27772:186:0;-1:-1:-1;;;;;27772:186:0;;:::i;20711:121::-;;;;;;;;;;;;;;;;-1:-1:-1;20711:121:0;-1:-1:-1;;;;;20711:121:0;;:::i;27250:151::-;;;:::i;29993:115::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29993:115:0;;;;;;;;:::i;26464:120::-;;;;;;;;;;;;;;;;-1:-1:-1;26464:120:0;-1:-1:-1;;;;;26464:120:0;;:::i;27047:82::-;;;:::i;20441:81::-;;;:::i;30116:363::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;30116:363:0;;;;;;;;:::i;21902:277::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21902:277:0;;;;;;;;:::i;20838:163::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20838:163:0;;;;;;;;:::i;28663:36::-;;;:::i;32454:400::-;;;;;;;;;;;;;;;;-1:-1:-1;32454:400:0;-1:-1:-1;;;;;32454:400:0;;:::i;27732:33::-;;;:::i;25686:770::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25686:770:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28871:74::-;;;:::i;21009:151::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21009:151:0;;;;;;;;;;:::i;27407:250::-;;;;;;;;;;;;;;;;-1:-1:-1;27407:250:0;-1:-1:-1;;;;;27407:250:0;;:::i;28109:73::-;;;:::i;27706:21::-;;;:::i;28451:40::-;;;;;;;;;;;;;;;:::o;20358:77::-;20424:5;20417:12;;;;;;;;-1:-1:-1;;20417:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20395:13;;20417:12;;20424:5;;20417:12;;20424:5;20417:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20358:77;:::o;21168:167::-;21251:4;21268:37;21277:10;21289:7;21298:6;21268:8;:37::i;:::-;-1:-1:-1;21323:4:0;21168:167;;;;;:::o;32080:252::-;29433:8;;-1:-1:-1;;;;;29433:8:0;29445:10;29433:22;29425:44;;;;;-1:-1:-1;;;29425:44:0;;;;;;;;;;;;-1:-1:-1;;;29425:44:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32187:21:0;::::1;;::::0;;;:10:::1;:21;::::0;;;;;;;:33;;;::::1;;-1:-1:-1::0;;32187:33:0;;::::1;::::0;::::1;::::0;;;32231:8:::1;:19:::0;;;;;;:29;;;::::1;;::::0;::::1;::::0;::::1;::::0;;32278:46;;;;;;;::::1;::::0;;;;;;::::1;::::0;;;;;;;;;::::1;32080:252:::0;;;:::o;28402:42::-;;;;;;;;;;;;;;;:::o;20611:94::-;20687:12;;20611:94;:::o;28539:56::-;28591:4;28539:56;:::o;21343:329::-;21449:4;21466:36;21476:6;21484:9;21495:6;21466:9;:36::i;:::-;21513:129;21522:6;21530:10;21542:99;21590:6;21542:99;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21542:19:0;;;;;;:11;:19;;;;;;;;21562:10;21542:31;;;;;;;;;:99;:47;:99::i;:::-;21513:8;:129::i;:::-;-1:-1:-1;21660:4:0;21343:329;;;;;:::o;33014:230::-;29433:8;;-1:-1:-1;;;;;29433:8:0;29445:10;29433:22;29425:44;;;;;-1:-1:-1;;;29425:44:0;;;;;;;;;;;;-1:-1:-1;;;29425:44:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33105:25:0;::::1;33096:43;;;::::0;;-1:-1:-1;;;33096:43:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;33096:43:0;;;;;;;;;;;;;::::1;;33178:8;::::0;33157:44:::1;::::0;-1:-1:-1;;;;;33157:44:0;;::::1;::::0;33178:8:::1;::::0;33157:44:::1;::::0;33178:8:::1;::::0;33157:44:::1;33214:8;:22:::0;;-1:-1:-1;;;;;;33214:22:0::1;-1:-1:-1::0;;;;;33214:22:0;;;::::1;::::0;;;::::1;::::0;;33014:230::o;25050:108::-;25092:66;25050:108;:::o;20528:77::-;20590:9;;;;20528:77;:::o;25167:31::-;;;;:::o;21680:214::-;21794:10;21768:4;21815:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;21815:32:0;;;;;;;;;;21768:4;;21785:79;;21806:7;;21815:48;;21852:10;21815:36;:48::i;29770:113::-;28225:6;;-1:-1:-1;;;;;28225:6:0;28235:10;28225:20;28216:70;;;;-1:-1:-1;;;28216:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29851:24:::1;29857:8;29867:7;29851:5;:24::i;:::-;29770:113:::0;;:::o;29891:89::-;29947:25;29953:10;29965:6;29947:5;:25::i;:::-;29891:89;:::o;27964:139::-;27172:6;;-1:-1:-1;;;;;27172:6:0;27182:10;27172:20;27163:67;;;;;-1:-1:-1;;;27163:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;27163:67:0;;;;;;;;;;;;;;;28023:13:::1;::::0;-1:-1:-1;;;28023:13:0;::::1;;;28022:14;28013:57;;;::::0;;-1:-1:-1;;;28013:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;28077:13;:20:::0;;-1:-1:-1;;;;28077:20:0::1;-1:-1:-1::0;;;28077:20:0::1;::::0;;27964:139::o;29358:23::-;;;-1:-1:-1;;;;;29358:23:0;;:::o;31683:280::-;29433:8;;-1:-1:-1;;;;;29433:8:0;29445:10;29433:22;29425:44;;;;;-1:-1:-1;;;29425:44:0;;;;;;;;;;;;-1:-1:-1;;;29425:44:0;;;;;;;;;;;;;;;28591:4:::1;31784:16;:46;;31775:80;;;::::0;;-1:-1:-1;;;31775:80:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;31775:80:0;;;;;;;;;;;;;::::1;;31866:15;:34:::0;;;31918:37:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;31683:280:::0;:::o;28956:43::-;;;:::o;27772:186::-;27172:6;;27839:4;;-1:-1:-1;;;;;27172:6:0;27182:10;27172:20;27163:67;;;;;-1:-1:-1;;;27163:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;27163:67:0;;;;;;;;;;;;;;;27863:13:::1;::::0;-1:-1:-1;;;27863:13:0;::::1;;;27862:14;27853:57;;;::::0;;-1:-1:-1;;;27853:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;27917:6:0::1;:15:::0;;-1:-1:-1;;;;;27917:15:0;::::1;-1:-1:-1::0;;;;;;27917:15:0;;::::1;;::::0;;;27772:186;;;:::o;20711:121::-;-1:-1:-1;;;;;20808:18:0;20785:7;20808:18;;;;;;;;;;;;20711:121::o;27250:151::-;27172:6;;-1:-1:-1;;;;;27172:6:0;27182:10;27172:20;27163:67;;;;;-1:-1:-1;;;27163:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;27163:67:0;;;;;;;;;;;;;;;27349:6:::1;::::0;27327:42:::1;::::0;27365:1:::1;::::0;-1:-1:-1;;;;;27349:6:0::1;::::0;27327:42:::1;::::0;27365:1;;27327:42:::1;27376:6;:19:::0;;-1:-1:-1;;;;;;27376:19:0::1;::::0;;27250:151::o;29993:115::-;30072:28;30082:8;30092:7;30072:9;:28::i;26464:120::-;-1:-1:-1;;;;;26552:14:0;;26525:7;26552:14;;;:7;:14;;;;;:24;;:22;:24::i;27047:82::-;27117:6;;-1:-1:-1;;;;;27117:6:0;27047:82;:::o;20441:81::-;20509:7;20502:14;;;;;;;;-1:-1:-1;;20502:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20480:13;;20502:14;;20509:7;;20502:14;;20509:7;20502:14;;;;;;;;;;;;;;;;;;;;;;;;30116:363;30196:27;30239:133;30293:7;30239:133;;;;;;;;;;;;;;;;;:31;30249:8;30259:10;30239:9;:31::i;:::-;:35;:133;:35;:133::i;:::-;30196:176;;30385:51;30394:8;30404:10;30416:19;30385:8;:51::i;:::-;30447:24;30453:8;30463:7;30447:5;:24::i;:::-;30116:363;;;:::o;21902:277::-;21995:4;22012:137;22021:10;22033:7;22042:106;22091:15;22042:106;;;;;;;;;;;;;;;;;22054:10;22042:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;22042:32:0;;;;;;;;;;;:106;:48;:106::i;20838:163::-;20924:4;20937:40;20947:10;20959:9;20970:6;20937:9;:40::i;28663:36::-;;;;:::o;32454:400::-;29433:8;;-1:-1:-1;;;;;29433:8:0;29445:10;29433:22;29425:44;;;;;-1:-1:-1;;;29425:44:0;;;;;;;;;;;;-1:-1:-1;;;29425:44:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32555:29:0;::::1;::::0;;::::1;::::0;:94:::1;;-1:-1:-1::0;32607:42:0::1;-1:-1:-1::0;;;;;32588:61:0;::::1;;;32555:94;32546:111;;;::::0;;-1:-1:-1;;;32546:111:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;32546:111:0;;;;;;;;;;;;;::::1;;32677:14;::::0;-1:-1:-1;;;;;32677:14:0::1;32695:42;32677:60;32668:80;;;::::0;;-1:-1:-1;;;32668:80:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;32668:80:0;;;;;;;;;;;;;::::1;;32761:14;:32:::0;;-1:-1:-1;;;;;;32761:32:0::1;-1:-1:-1::0;;;;;32761:32:0;;::::1;::::0;;;::::1;::::0;;;;32811:35:::1;::::0;;32830:14;;;::::1;32811:35:::0;;;::::1;::::0;::::1;::::0;;;;;;::::1;32454:400:::0;:::o;27732:33::-;;;-1:-1:-1;;;27732:33:0;;;;;:::o;25686:770::-;25931:8;25912:15;:27;;25904:64;;;;;-1:-1:-1;;;25904:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26077:14:0;;25981:18;26077:14;;;:7;:14;;;;;25092:66;;26053:5;;26060:7;;26069:6;;26077:24;;:22;:24::i;:::-;26025:87;;;;;;;;;;;-1:-1:-1;;;;;26025:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26015:98;;;;;;26185:16;;-1:-1:-1;;;26152:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26142:73;;;;;;;;;-1:-1:-1;26245:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26015:98;;-1:-1:-1;26142:73:0;;26245:25;;;;;;;-1:-1:-1;;26245:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26245:25:0;;-1:-1:-1;;26245:25:0;;;-1:-1:-1;;;;;;;26289:20:0;;;;;;:39;;;26323:5;-1:-1:-1;;;;;26313:15:0;:6;-1:-1:-1;;;;;26313:15:0;;26289:39;26281:85;;;;-1:-1:-1;;;26281:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26379:14:0;;;;;;:7;:14;;;;;:26;;:24;:26::i;:::-;26416:32;26425:5;26432:7;26441:6;26416:8;:32::i;:::-;25686:770;;;;;;;;;;:::o;28871:74::-;;;-1:-1:-1;;;;;28871:74:0;;:::o;21009:151::-;-1:-1:-1;;;;;21125:18:0;;;21098:7;21125:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;21009:151::o;27407:250::-;27172:6;;-1:-1:-1;;;;;27172:6:0;27182:10;27172:20;27163:67;;;;;-1:-1:-1;;;27163:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;27163:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27507:23:0;::::1;27498:75;;;;-1:-1:-1::0;;;27498:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27607:6;::::0;27585:41:::1;::::0;-1:-1:-1;;;;;27585:41:0;;::::1;::::0;27607:6:::1;::::0;27585:41:::1;::::0;27607:6:::1;::::0;27585:41:::1;27633:6;:18:::0;;-1:-1:-1;;;;;;27633:18:0::1;-1:-1:-1::0;;;;;27633:18:0;;;::::1;::::0;;;::::1;::::0;;27407:250::o;28109:73::-;28170:6;;-1:-1:-1;;;;;28170:6:0;28109:73;:::o;27706:21::-;;;-1:-1:-1;;;;;27706:21:0;;:::o;23551:346::-;-1:-1:-1;;;;;23653:19:0;;23645:68;;;;-1:-1:-1;;;23645:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23732:21:0;;23724:68;;;;-1:-1:-1;;;23724:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23805:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;23857:32;;;;;;;;;;;;;;;;;23551:346;;;:::o;30560:1002::-;30669:29;30712:18;-1:-1:-1;;;;;30702:28:0;:6;-1:-1:-1;;;;;30702:28:0;;:63;;;;30747:18;-1:-1:-1;;;;;30734:31:0;:9;-1:-1:-1;;;;;30734:31:0;;30702:63;-1:-1:-1;;;;;30787:20:0;;;;;;:10;:20;;;;;;30669:97;;-1:-1:-1;30787:20:0;;;:45;;-1:-1:-1;;;;;;30811:21:0;;;;;;:8;:21;;;;;;;;30787:45;30784:50;:94;;;-1:-1:-1;30864:14:0;;-1:-1:-1;;;;;30851:27:0;;;30864:14;;30851:27;30784:94;:135;;;;30895:24;30784:135;:172;;;-1:-1:-1;30936:15:0;;:20;30784:172;30779:776;;;30987:44;31004:6;31012:9;31023:6;30987:15;:44::i;:::-;30779:776;;;31125:17;31145:46;31184:5;31147:29;31159:15;;31147:6;:10;;:29;;;;:::i;:::-;31145:37;;:46::i;:::-;31125:66;-1:-1:-1;31269:18:0;31290:23;:6;31125:66;31290:10;:23::i;:::-;31269:44;-1:-1:-1;31348:27:0;31269:44;31364:9;31348:14;:27::i;:::-;31338:6;:37;31330:47;;;;31419:14;;31394:52;;31411:6;;-1:-1:-1;;;;;31419:14:0;31435:9;31394:15;:52::i;:::-;31461:48;31478:6;31486:9;31497:10;31461:15;:48::i;:::-;31533:10;-1:-1:-1;;30779:776:0;30560:1002;;;;:::o;16968:192::-;17054:7;17090:12;17082:6;;;;17074:29;;;;-1:-1:-1;;;17074:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;17126:5:0;;;16968:192::o;16635:181::-;16693:7;16725:5;;;16749:6;;;;16741:46;;;;;-1:-1:-1;;;16741:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16807:1;16635:181;-1:-1:-1;;;16635:181:0:o;22722:395::-;-1:-1:-1;;;;;22808:22:0;;22800:66;;;;;-1:-1:-1;;;22800:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;22877:56;22907:4;22915:8;22925:7;22877:20;:56::i;:::-;22959:12;;:25;;22976:7;22959:16;:25::i;:::-;22944:12;:40;-1:-1:-1;;;;;23017:19:0;;:9;:19;;;;;;;;;;;:32;;23041:7;23017:23;:32::i;:::-;-1:-1:-1;;;;;22995:19:0;;:9;:19;;;;;;;;;;;;:54;;;;23065:44;;;;;;;22995:19;;23083:4;;23065:44;;;;;;;;;;22722:395;;:::o;23125:418::-;-1:-1:-1;;;;;23209:21:0;;23201:67;;;;-1:-1:-1;;;23201:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23281:49;23302:7;23319:1;23323:6;23281:20;:49::i;:::-;23364:68;23387:6;23364:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23364:18:0;;:9;:18;;;;;;;;;;;;:68;:22;:68::i;:::-;-1:-1:-1;;;;;23343:18:0;;:9;:18;;;;;;;;;;:89;23458:12;;:24;;23475:6;23458:16;:24::i;:::-;23443:12;:39;23498:37;;;;;;;;23524:1;;-1:-1:-1;;;;;23498:37:0;;;;;;;;;;;;23125:418;;:::o;24136:114::-;24228:14;;24136:114::o;24258:91::-;24322:19;;24340:1;24322:19;;;24258:91::o;22187:527::-;-1:-1:-1;;;;;22291:20:0;;22283:70;;;;-1:-1:-1;;;22283:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22370:23:0;;22362:71;;;;-1:-1:-1;;;22362:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22444:47;22465:6;22473:9;22484:6;22444:20;:47::i;:::-;22522:71;22544:6;22522:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22522:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;22502:17:0;;;:9;:17;;;;;;;;;;;:91;;;;22625:20;;;;;;;:32;;22650:6;22625:24;:32::i;:::-;-1:-1:-1;;;;;22602:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;22671:35;;;;;;;22602:20;;22671:35;;;;;;;;;;;;;22187:527;;;:::o;17168:252::-;17226:7;17252:6;17248:47;;-1:-1:-1;17282:1:0;17275:8;;17248:47;17319:5;;;17323:1;17319;:5;:1;17343:5;;;;;:10;17335:56;;;;-1:-1:-1;;;17335:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17428:132;17486:7;17513:39;17517:1;17520;17513:39;;;;;;;;;;;;;;;;;:3;:39::i;16824:136::-;16882:7;16909:43;16913:1;16916;16909:43;;;;;;;;;;;;;;;;;:3;:43::i;17568:278::-;17654:7;17689:12;17682:5;17674:28;;;;-1:-1:-1;;;17674:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17713:9;17729:1;17725;:5;;;;;;;17568:278;-1:-1:-1;;;;;17568:278:0:o
Swarm Source
ipfs://21a40f71407079a63e0763154d0fe9ae15ab7802821da2304f28a506a7d2f1b8
Loading...
Loading
Loading...
Loading
OVERVIEW
MiniPanther brings the concept of fast-and-furious 14-day "layers" to the DAO world. After operating under the standard DAO mechanics of staking and bonding for 14 days, 80% of all non-LP treasury funds will be used for buybacks on day 15.
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.