¡El código fuente de este contrato está verificado! Compilador
0.7.5+commit.eb77ed08
Código Fuente del Contrato
Archivo 1 de 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);
}
}
Código Fuente del Contrato
Archivo 2 de 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 );
}
}
Código Fuente del Contrato
Archivo 3 de 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();
}
}
Código Fuente del Contrato
Archivo 4 de 7: FlyzERC20.sol
pragma solidity 0.7.5;
import './types/Ownable.sol' ;
import './types/ERC20.sol' ;
import './libraries/SafeMath.sol' ;
contract VaultOwned is Ownable {
address internal _vault;
function setVault (address vault_ ) external onlyOwner returns (bool ) {
_vault = vault_;
return true ;
}
function vault ( ) public view returns (address ) {
return _vault;
}
modifier onlyVault ( ) {
require (_vault = = msg .sender , 'VaultOwned: caller is not the Vault' );
_ ;
}
}
contract FlyzERC20 is ERC20Permit , VaultOwned {
using SafeMath for uint256 ;
constructor ( ) ERC20 ('FLYZ' , 'FLZ' , 9 ) {}
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_);
}
}
Código Fuente del Contrato
Archivo 5 de 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 ;
}
Código Fuente del Contrato
Archivo 6 de 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;
}
}
Código Fuente del Contrato
Archivo 7 de 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 ;
}
}
}
{
"compilationTarget" : {
"contracts/FlyzERC20.sol" : "FlyzERC20"
} ,
"evmVersion" : "istanbul" ,
"libraries" : { } ,
"metadata" : {
"bytecodeHash" : "ipfs"
} ,
"optimizer" : {
"enabled" : false ,
"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":"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":"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":[{"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":[{"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":"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":[],"name":"renounceManagement","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":"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":"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":[],"name":"vault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]