Contract 0x1FA2F83BA2DF61c3d370071d61B17Be01e224f3a 6

 

Contract Overview

Balance:
849.684056327071681345 MATIC

MATIC Value:
$642.79 (@ $0.76/MATIC)

Token:
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xd38c51d917bc152503bb1d5772f9cf13e8d29701a1a263b8473aedc5ef124accTransfer336066992022-09-26 22:23:312 hrs 15 mins ago0x1a935ff7180c4e2dd0dbdb90fe66d8604427d5df IN  0x1fa2f83ba2df61c3d370071d61b17be01e224f3a0 MATIC0.001473066518 38.36710211
0x95c8be562f1e8629cfad2ec34078bc3f784a3bd216897148bfdb779ab32fa6c7Transfer336066702022-09-26 22:22:332 hrs 16 mins ago0x78116b61a1dd0ba606f10b19ff7b242439d2424b IN  0x1fa2f83ba2df61c3d370071d61b17be01e224f3a0 MATIC0.001214967858 31.644732476
0xfa5b0a385068ade6620d1bdf9f529ae09d6a1d55849ea4024f2e39ac103c3574Transfer336049732022-09-26 21:24:113 hrs 15 mins ago0xe47398986126b1b692d387a87e771e220c72b936 IN  0x1fa2f83ba2df61c3d370071d61b17be01e224f3a0 MATIC0.001295102744 30.000063578
0xcf56a8a5310a8b545bf4e5562a3c704cb5f2d4a4f27b6041f4d9a12750b3bf40Approve336026662022-09-26 20:00:364 hrs 38 mins ago0x16015cb721fb0f93a63bc78ec53ee7f6ddaf63b7 IN  0x1fa2f83ba2df61c3d370071d61b17be01e224f3a0 MATIC0.001435088684 30.786645311
0xe106c626dbb189c7a59418f346cb15eeb2d4b6017502c9c387d84eee42d765e1Transfer336001452022-09-26 18:33:576 hrs 5 mins ago0x2385233abb910357e2b97a16d40e0443e53d0769 IN  0x1fa2f83ba2df61c3d370071d61b17be01e224f3a0 MATIC0.0012951 30.000000012
0xcf9e9b27924c8791053504149919052f9948f691d8965f883b364ec16ff8cb5dApprove336001172022-09-26 18:32:576 hrs 6 mins ago0x7b6584899690b432836293c2db4eab32feb127b2 IN  0x1fa2f83ba2df61c3d370071d61b17be01e224f3a0 MATIC0.00141585759 30.555000011
0x86991f605e4621bb483d165d8f4f64c3833233fcad7f70d4e47f1dbfb370cbdbApprove335998092022-09-26 18:22:256 hrs 16 mins ago0x7b6584899690b432836293c2db4eab32feb127b2 IN  0x1fa2f83ba2df61c3d370071d61b17be01e224f3a0 MATIC0.00139014 30.000000011
0x725b9da16f30033ddfc097bebc8a00ff7d467aa0aa76f3213888e99f1b03f324Transfer335995492022-09-26 18:11:176 hrs 27 mins ago0x247f4d0b285b6d4ee5217ceec00d968788f9e01a IN  0x1fa2f83ba2df61c3d370071d61b17be01e224f3a0 MATIC0.0012951 30.000000014
0x03bf71b3cc19b2f33771c374ab6e57689a591f1cec87c994f4c7bfd27014c6fdTransfer335981922022-09-26 17:24:387 hrs 14 mins ago0x051420d034c5b5f3871ef75626347721744ada83 IN  0x1fa2f83ba2df61c3d370071d61b17be01e224f3a0 MATIC0.001835303371 30.45135842
0xf3716b8c919b65474f49049aab2bcee708d12688c7b3ca9b061d24e6d1549276Transfer335976572022-09-26 17:06:167 hrs 32 mins ago0x7e3a8290fb7619b02c62baf142abb4bbc38905da IN  0x1fa2f83ba2df61c3d370071d61b17be01e224f3a0 MATIC0.0012951 30.000000018
0x6b266867dda5051f4df008de7e7023d540ed271411a75f286601fb51fa1bd05eTransfer335963332022-09-26 16:18:368 hrs 20 mins ago0xe70563264b7c38ac00d6d803ea131006a0fd2404 IN  0x1fa2f83ba2df61c3d370071d61b17be01e224f3a0 MATIC0.001299796895 30.108799997
0x87e887fc4172991b9f2987297ddff783a21a5cb93a5e5aa8c2378948a0b7b1b9Transfer335953712022-09-26 15:45:308 hrs 53 mins ago0x2e6eeeba853bcb47be93a04f692f7fdc96e38639 IN  0x1fa2f83ba2df61c3d370071d61b17be01e224f3a0 MATIC0.001665355656 30.009652518
0xb1832d8bff5f7ed58d06dd5e9391b7cf115d216ca8c85cc53985de9d2840f7b4Approve335943742022-09-26 15:09:079 hrs 30 mins ago0x051420d034c5b5f3871ef75626347721744ada83 IN  0x1fa2f83ba2df61c3d370071d61b17be01e224f3a0 MATIC0.001445034 31
0xf5c23fa23a57b1f55c66cd1d00fd84a5fb221d8215184a5f78fbf485a4ee4af1Approve335901862022-09-26 12:42:3911 hrs 56 mins ago0x12aaa41b55e0716bc9fa0dcbdb75178151a76de7 IN  0x1fa2f83ba2df61c3d370071d61b17be01e224f3a0 MATIC0.00079314 30.000000021
0xdfe727fb6cc260653dbbcfdc58f5241e8f68fb7dda9808a9abbda3ff1b0e515cApprove335901582022-09-26 12:41:4311 hrs 57 mins ago0x12aaa41b55e0716bc9fa0dcbdb75178151a76de7 IN  0x1fa2f83ba2df61c3d370071d61b17be01e224f3a0 MATIC0.00139014 30.00000002
0x4d98e27a8e3f2da79bee6ee574d9288d833b8ddff6ff467b70489d931b9edf9aApprove335873142022-09-26 11:00:5013 hrs 38 mins ago0x11a3cb0a586c6c723b76c6c33aa0ac06b0aa4521 IN  0x1fa2f83ba2df61c3d370071d61b17be01e224f3a0 MATIC0.001582545299 33.949999996
0x80cbd58fa3995b3c78ed198ac9c431a5f58f53f19a1b9e817f6577508b26f284Approve335855812022-09-26 9:57:0014 hrs 42 mins ago0xc106afb174a140154e328da9e4b50398b88d35fd IN  0x1fa2f83ba2df61c3d370071d61b17be01e224f3a0 MATIC0.001678104 36
0x628c93aeff2f1f6b9ea6feb8a7bb672208376bcb4a993b13a334e6c864ca8700Transfer335830362022-09-26 8:29:2116 hrs 9 mins ago0xa63729cc775007883ce853460b0db54daa1f1ee1 IN  0x1fa2f83ba2df61c3d370071d61b17be01e224f3a0 MATIC0.0012951 30.000000018
0xfb5def34c61f219bb5265d75ef0ea6f34e2a443400c337e1351eb79b219d0268Approve335808942022-09-26 7:15:4417 hrs 23 mins ago0x59392e7b67f019807b48a240149145a668b3a963 IN  0x1fa2f83ba2df61c3d370071d61b17be01e224f3a0 MATIC0.001398420001 30.000000025
0x65dda27b2279400ecc5f0d95ac0454e8cb2ed0d53e5ff4d5464f3fbad4c305e2Approve335749982022-09-26 3:53:0420 hrs 46 mins ago0x83f36dbd11b48264662f8c426d0068ad6075f875 IN  0x1fa2f83ba2df61c3d370071d61b17be01e224f3a0 MATIC0.00139842 30.000000013
0xa8f3dd352fa818fc57a1737bf5ca359bfa6a1ae7354175e10875c3352b8147e5Transfer335664732022-09-25 22:47:091 day 1 hr ago0x1a935ff7180c4e2dd0dbdb90fe66d8604427d5df IN  0x1fa2f83ba2df61c3d370071d61b17be01e224f3a0 MATIC0.001401646686 36.50692
0x7418fd6320cde27c2689539d63732850a8c834bb65e377aa1deac693b6fd402cTransfer335663802022-09-25 22:43:551 day 1 hr ago0x78116b61a1dd0ba606f10b19ff7b242439d2424b IN  0x1fa2f83ba2df61c3d370071d61b17be01e224f3a0 MATIC0.001266234119 32.979999999
0xcf09eacedd038bc4f81ddc64df19ea71c0da85ef86d45988b028040d7acf90adTransfer335651202022-09-25 22:00:391 day 2 hrs ago0x6fc263ff819609e5f4c3d5b8d742fa94b8a3fead IN  0x1fa2f83ba2df61c3d370071d61b17be01e224f3a0 MATIC0.001513854295 35.06727579
0xe53badc795e2047d2b7c5844ec75a8b06257f0cb11314400f03628b17b6ce41bTransfer335568682022-09-25 17:14:451 day 7 hrs ago0x86cfdda00953c1505d9add1d4cbfa289c0e7da4f IN  0x1fa2f83ba2df61c3d370071d61b17be01e224f3a0 MATIC0.0012951 30.000000018
0x8ea49003d8d4b644d34d41abb98c7bf8171fe8757e73c1bc1fa5c954eeb30603Approve335566682022-09-25 17:07:491 day 7 hrs ago0xc5d7a8b1d3c8a2b5656e9f25f2960a7cc6a2dc3e IN  0x1fa2f83ba2df61c3d370071d61b17be01e224f3a0 MATIC0.001398420655 30.000014059
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Honey

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 11 : Honey.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.10;

import "@openzeppelin/contracts/access/Ownable.sol";
import "./interfaces/IUniswapFactory.sol";
import "./interfaces/IUniswapV2Router02.sol";
import "@openzeppelin/contracts/security/Pausable.sol";

///@notice The standard ERC20 contract, with the exception of _balances being internal as opposed to private
import "./ERC20.sol";
import "./interfaces/IHexagonMarketplace.sol";


contract Honey is ERC20, Ownable, Pausable {

    // The constant used to calculate percentages, allows percentages to have 1 decimal place (ie 15.5%)
    uint constant BASIS_POINTS = 1000;

    // Variables related to fees and restrictions
    mapping(address => bool) excludedFromTransferRestrictions;
    mapping(address => bool) excludedFromTax;
    mapping(address => bool) taxableRecipient;

    mapping(address => uint) maxInitialPurchasePerWallet;

    struct collectionOwner {
        address collectionAddress;
        uint tokensSold;
    }
   
    ///@notice mapping that keeps tract of collection owners, offering them less sales tax for selling tokens recieved from royalties
    mapping(address => collectionOwner) collectionOwners;

    //collection owners pay 2.5% sales tax on royalties sold
    uint constant collectionOwnersSalesTax = 25;

    //Addresses that can update the collection owners parameters, so it can be done on request by the owners by a trusted wallet
    mapping(address => bool) verifiedAddresses;

    // Windows of time at the start of launch, during which this token has special trading restrictions
    uint specialTimePeriod;
    uint hourAfterLaunch;

    ///@notice this is the sales tax, initially set to 15% (150 / BASIS_POINTS = 0.15);
    uint public salesTax = 150;
    uint constant maxSalesTax = 150;

    IHexagonMarketplace hexagonMarketplace;

    address public distributionContract;
    
    constructor() ERC20("HONEY", "HNY") {

        _mint(msg.sender, 1000000 ether);
        
        // ///@notice get the sushiswap router on polygon
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506);

        // // Create a uniswap pair for this new token
        address uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        
        // Allow the deployer and liquidity pool to trade tokens freely in the first 6 days
        excludedFromTransferRestrictions[msg.sender] = true;
        excludedFromTransferRestrictions[uniswapV2Pair] = true;
        excludedFromTransferRestrictions[0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506] = true;

        // Set deployer and this address as free from tax as free from tax, other addresses will be added to this exclusion whitelist
        excludedFromTax[msg.sender] = true;
        excludedFromTax[address(this)] = true;

        // Sets the liquidity pairing to be taxable on selling of tokens, more liquidity pools could be added
        taxableRecipient[uniswapV2Pair] = true;
       
    }

    /**
    *@dev Override ERC20 transfer function to prevent trading when paused
    */
    function transfer(address recipient, uint256 amount) public override whenNotPaused returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
     

    /**
    *@dev Override ERC20 transferFrom function to prevent trading when paused
    */
    function transferFrom(address sender, address recipient, uint256 amount) public virtual override whenNotPaused  returns (bool) {
        _spendAllowance(sender, _msgSender(), amount);
        _transfer(sender, recipient, amount);

        return true;
    }

    /**
    * @dev Transfer is adjusted to charge a sales tax when selling to set liquidity pools, this tax is sent to this address, with a portion being sold to the liquidity
    * pool for matic. These funds can be claimed ans set to the set protocal wallets
    *  There is some additonal logic adding limitations to sales, purchases and a different sales tax for the first 6 days this protocol is public, with additional 
    *  restrictions for the first hour. There restrictions aim to help smooth over the initial laucnh and prevent whales and bots from having an advantage 
    */
    function _transfer(address sender, address recipient, uint256 amount) internal override {

        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount should be greater than zero");

        _beforeTokenTransfer(sender, recipient, amount);

        uint feePercent = salesTax;

        // ///@notice check to see there is a sales tax applied by checking if the reciever is a liquidity pool, and if the sender is not excluded from paying taxes 
        bool toTax = (taxableRecipient[recipient] && !excludedFromTax[sender]);
       

        ///@notice check if the current time is within the time period that requires addtional logic
        if(block.timestamp < specialTimePeriod) {

            ///@notice if a liquidity pool in not invloved in any way, and the wallets involved with sending aren't exempt from the transfer restricitons
            ///then this shouldn't be allowed, and honey can be transfered to owher wallets at this time
            bool allowed = (taxableRecipient[recipient] || taxableRecipient[sender] || taxableRecipient[msg.sender] || excludedFromTransferRestrictions[recipient] ||
                excludedFromTransferRestrictions[sender] || excludedFromTransferRestrictions[msg.sender]); 

            ///@notice tokens are being traded to other wallets during the restricted time period
            require(allowed, "Can't trade to other wallets at the moment");
            

            ///@notice check to see if the sender or opperator is a taxable reciepient (liquidity pool), if so then someone is attempting to buy, which has some 
            ///restricitons at this time
            if(taxableRecipient[sender] || taxableRecipient[msg.sender]) {

                ///@notice tokens are being purchased so check if there are purchasing more than they are allowed
                uint maxPurchase = 100 ether;

                ///@notice additonal restrictions are applied for the first hour this protocal is live
                if(block.timestamp < hourAfterLaunch) {
                    maxPurchase = 20 ether;
                }

                //Check if purchased above allowed amount
                require(maxInitialPurchasePerWallet[recipient] + amount <= maxPurchase, "Max purchase Exceeded for this time");

                //Update purchases
                maxInitialPurchasePerWallet[recipient] += amount;


            } else if(toTax) {

                ///@notice this is a taxable sale, and during this tiome period the sales tax starts at 45% and decreases over time at a rate of 5% per day
                /// until it reaches the final sales tax of 15% (numbers are multiplied by 10 to allow an additional decimal point of expression)
                //TODO: double check this math
                feePercent = (((specialTimePeriod - block.timestamp) * 300) / 6 days) + feePercent;


            } 
            
        }
        
        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");

        unchecked {
            _balances[sender] = senderBalance  - (amount);
        }

        if(toTax) {

            uint tax;

            if(collectionOwners[sender].collectionAddress != address(0)) {

                ///@notice this address is tied to a collection on the hexagon marketplace, so they recieve a lower tax on royalties earned
                collectionOwner memory _collectionOwner = collectionOwners[sender];

                uint royaltiesEarned = hexagonMarketplace.getRoyaltiesGenerated(_collectionOwner.collectionAddress, 0);

                if(_collectionOwner.tokensSold + amount <= royaltiesEarned) {

                    // update the number of tokens sold using this tax
                    collectionOwners[sender].tokensSold += amount;

                    tax = (amount * collectionOwnersSalesTax) / BASIS_POINTS;

                } else {

                    ///@notice This address is trying to sell more tokens than earned from royalties on the collection, so give reduced tax on remaining royalties
                    uint amountWithReducedTax = royaltiesEarned - _collectionOwner.tokensSold;

                    uint toBetaxedInFull = amount - amountWithReducedTax;

                    // Tax in full the amount sold over whats earned in royalties
                    tax = (toBetaxedInFull * feePercent) / BASIS_POINTS;

                    // Tax up to the royalties earned with the reduced tax
                    tax += (amountWithReducedTax * collectionOwnersSalesTax) / BASIS_POINTS;

                    // update the number of tokens sold using this tax
                    collectionOwners[sender].tokensSold = royaltiesEarned;

                }


            } else {

                ///@notice this transaction will be taxed, so a potion of the tax will go to this contract, and another portion will be sold to the
                /// liquidity pool for matic 
                tax = ((amount * feePercent) / BASIS_POINTS);


            }

            amount -= tax;

            ///@notice set the total tax to the balance of this contract, some (or all) of the tax will be solid to matic
            _balances[distributionContract] += tax;

            emit Transfer(sender, distributionContract, tax);

            _balances[recipient] += amount;

            emit Transfer(sender, recipient, amount);


        } else {

            ///@notice no sales tax required, add balance normally
            _balances[recipient] = _balances[recipient] + (amount);

            emit Transfer(sender, recipient, amount);

        }

        _afterTokenTransfer(sender, recipient, amount);
            
    }

    /**
    * @dev gets the sales tax of the token when sold to a liquidity pool, returns based on BASIS_POINTS (1000)
    */
    function getSalesTax() external view returns (uint) {

        if(block.timestamp < specialTimePeriod) {
            return  (((specialTimePeriod - block.timestamp) * 300) / 6 days) + salesTax;
        } else {
            return salesTax;
        }

    }

    /**
    * @dev This allows the contract to revieve matic by selling honey to the liquidity pool
    */
    receive() external payable {}

    /**
    * @dev Sets the sales tax
    * Requires the caller to be the owner of the contract
    */
    function SetSalesTax(uint _salesTax) external onlyOwner {

        require(_salesTax <= maxSalesTax, "tax can't be above max tax");

        salesTax = _salesTax;

    }

    /**
    * @dev Sets an address to be able to transfer the token to other wallets
    * Requires the caller to be the owner of the contract
    */
    function ExcludeFromTransferRestrictions(address _address, bool _value) external onlyOwner {

        excludedFromTransferRestrictions[_address] = _value;

    }

    /**
    * @dev Sets an address to excluded from the sales tax
    * Requires the caller to be the owner of the contract
    */
    function ExcludeFromTax(address _address, bool _value) external onlyOwner {

        excludedFromTax[_address] = _value;

    }

    /**
    * @dev Sets an address to be taxable if tokens are sent to it (ie liquidity pools)
    * Requires the caller to be the owner of the contract
    */
    function setTaxableRecipient(address _address, bool _value) external onlyOwner {

        taxableRecipient[_address] = _value;

    }

    /**
    * @dev Sets the hexagon marketplace interface, which is used to check royalties collected on the marketplace
    * Requires the sender to the owner of the collection
    */
    function setHexagonMarketplace(address _hexagonAddress) external onlyOwner {

        require(_hexagonAddress != address(0), "Zero Address");

        hexagonMarketplace = IHexagonMarketplace(_hexagonAddress);

    }

    function setDistributionContract(address _distributioncontract) external onlyOwner {

        require(_distributioncontract != address(0), "Zero Address");

        distributionContract = _distributioncontract;

    }

    /**
    * @dev Adds an address that owns a collection traded on the hexagonMarketplace, so the address is charged a lower tax percent for the royalties earned,
    * or updates the payment address of a collection, removing the data for the pervious owner
    * Requires the sender to be a verified address
    */
    function updateWhitelistedCollection(address _collectionAddress, address _walletAddress, address _previousAddress) external {

        require(verifiedAddresses[msg.sender], "Needs to be called by a verified address");

        if(_previousAddress == address(0)) {

            collectionOwners[_walletAddress] = collectionOwner(_collectionAddress, 0);
            
        } else {

            collectionOwner memory previousCollectionOwner = collectionOwners[_previousAddress];

            require(previousCollectionOwner.collectionAddress != address(0), "Collection does not exist");

            collectionOwners[_walletAddress] = previousCollectionOwner;

            delete collectionOwners[_previousAddress];

        }

    }

    /**
    * @dev updates the addresses that are able to call the updateWhitelistedCollection function
    * Requires the caller to be the owner of the collection
    */
    function updateVerifiedAddresses(address _address, bool _value) external onlyOwner {

        require(_address != address(0), "Zero Address");

        verifiedAddresses[_address] = _value;
    }

    /**
    * @dev sets a time window with special restrictions
    * this can only be set once, and will be done on launch, called by the owners
    */
    function startTimePeriod() external onlyOwner {

        require(specialTimePeriod == 0, "Can only call once");

        // Setting the 6 day time period which has special restrictions to start on deployment
        specialTimePeriod = block.timestamp + (6 days);

        // Setting this to be a day and an hour after deployment, but planning to open things up 24 hours after deployment giving 1 hour of extra restrictions
        // on purchaseshelp things run smoothly
        hourAfterLaunch = block.timestamp + (1 hours);

    }

}

File 2 of 11 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 3 of 11 : IUniswapFactory.sol
//SPDX-License-Identifier: Unlicense
pragma solidity 0.8.10;
interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

File 4 of 11 : IUniswapV2Router02.sol
//SPDX-License-Identifier: Unlicense
pragma solidity 0.8.10;
import "./IUniswapV2Router01.sol";

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

File 5 of 11 : Pausable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (security/Pausable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

File 6 of 11 : ERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/ERC20.sol)

pragma solidity 0.8.10;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
import "@openzeppelin/contracts/utils/Context.sol";

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {

    ///@notice _balances set to internal
    mapping(address => uint256) internal _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, _allowances[owner][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = _allowances[owner][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    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);
    }

    /**
     * @dev Spend `amount` form the allowance of `owner` toward `spender`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

File 7 of 11 : IHexagonMarketplace.sol
//SPDX-License-Identifier: Unlicense
pragma solidity 0.8.10;
interface IHexagonMarketplace {

    function getRoyaltiesGenerated(address _collectionAddress, uint _currencyType) external view returns(uint);

}

File 8 of 11 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

File 9 of 11 : IUniswapV2Router01.sol
//SPDX-License-Identifier: Unlicense
pragma solidity 0.8.10;
interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

File 10 of 11 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from,
        address to,
        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);
}

File 11 of 11 : IERC20Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;

import "../IERC20.sol";

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 1000
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"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":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"ExcludeFromTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"ExcludeFromTransferRestrictions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_salesTax","type":"uint256"}],"name":"SetSalesTax","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":[],"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":[],"name":"distributionContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSalesTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"salesTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_distributioncontract","type":"address"}],"name":"setDistributionContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_hexagonAddress","type":"address"}],"name":"setHexagonMarketplace","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setTaxableRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTimePeriod","outputs":[],"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":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"updateVerifiedAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_collectionAddress","type":"address"},{"internalType":"address","name":"_walletAddress","type":"address"},{"internalType":"address","name":"_previousAddress","type":"address"}],"name":"updateWhitelistedCollection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526096600e553480156200001657600080fd5b5060405180604001604052806005815260200164484f4e455960d81b81525060405180604001604052806003815260200162484e5960e81b81525081600390805190602001906200006992919062000404565b5080516200007f90600490602084019062000404565b5050506200009c62000096620002c660201b60201c565b620002ca565b6005805460ff60a01b19169055620000bf3369d3c21bcecceda10000006200031c565b6000731b02da8cb0d097eb8d57a175b88c7d8b4799750690506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000119573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200013f9190620004aa565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200018d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b39190620004aa565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000201573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002279190620004aa565b336000818152600660209081526040808320805460ff1990811660019081179092556001600160a01b0390961680855282852080548816831790557fbbcbc6333e8968f5bdd4d23c9d401535798304bc40308ca394a8daca4a8e40418054881683179055948452600783528184208054871682179055308452818420805487168217905593835260089091529020805490921617905550620005409050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620003775760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b80600260008282546200038b9190620004dc565b90915550506001600160a01b03821660009081526020819052604081208054839290620003ba908490620004dc565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b828054620004129062000503565b90600052602060002090601f01602090048101928262000436576000855562000481565b82601f106200045157805160ff191683800117855562000481565b8280016001018555821562000481579182015b828111156200048157825182559160200191906001019062000464565b506200048f92915062000493565b5090565b5b808211156200048f576000815560010162000494565b600060208284031215620004bd57600080fd5b81516001600160a01b0381168114620004d557600080fd5b9392505050565b60008219821115620004fe57634e487b7160e01b600052601160045260246000fd5b500190565b600181811c908216806200051857607f821691505b602082108114156200053a57634e487b7160e01b600052602260045260246000fd5b50919050565b611e0b80620005506000396000f3fe6080604052600436106101b05760003560e01c8063715018a6116100ec578063a457c2d71161008a578063dd62ed3e11610064578063dd62ed3e146104a9578063e24d835d146104ef578063e7a764ef1461050f578063f2fde38b1461052f57600080fd5b8063a457c2d714610449578063a9059cbb14610469578063becebc991461048957600080fd5b8063866ba88c116100c6578063866ba88c146103e15780638da5cb5b146103f657806395d89b411461041457806395f1820b1461042957600080fd5b8063715018a61461038c578063785df52b146103a15780637e9c88b8146103c157600080fd5b806339509351116101595780635c4ac548116101335780635c4ac548146103015780635c975abb146103175780635e4eff6e1461033657806370a082311461035657600080fd5b806339509351146102875780633aa2427f146102a75780635a4528c2146102c957600080fd5b806323b872dd1161018a57806323b872dd146102365780633072cb9214610256578063313ce5671461026b57600080fd5b806306fdde03146101bc578063095ea7b3146101e757806318160ddd1461021757600080fd5b366101b757005b600080fd5b3480156101c857600080fd5b506101d161054f565b6040516101de9190611b37565b60405180910390f35b3480156101f357600080fd5b50610207610202366004611ba8565b6105e1565b60405190151581526020016101de565b34801561022357600080fd5b506002545b6040519081526020016101de565b34801561024257600080fd5b50610207610251366004611bd2565b6105f9565b34801561026257600080fd5b50610228610671565b34801561027757600080fd5b50604051601281526020016101de565b34801561029357600080fd5b506102076102a2366004611ba8565b6106be565b3480156102b357600080fd5b506102c76102c2366004611c0e565b6106fd565b005b3480156102d557600080fd5b506010546102e9906001600160a01b031681565b6040516001600160a01b0390911681526020016101de565b34801561030d57600080fd5b50610228600e5481565b34801561032357600080fd5b50600554600160a01b900460ff16610207565b34801561034257600080fd5b506102c7610351366004611c27565b6107ad565b34801561036257600080fd5b50610228610371366004611c63565b6001600160a01b031660009081526020819052604090205490565b34801561039857600080fd5b506102c7610877565b3480156103ad57600080fd5b506102c76103bc366004611c27565b6108dd565b3480156103cd57600080fd5b506102c76103dc366004611c27565b610962565b3480156103ed57600080fd5b506102c76109e7565b34801561040257600080fd5b506005546001600160a01b03166102e9565b34801561042057600080fd5b506101d1610ab2565b34801561043557600080fd5b506102c7610444366004611c63565b610ac1565b34801561045557600080fd5b50610207610464366004611ba8565b610b82565b34801561047557600080fd5b50610207610484366004611ba8565b610c37565b34801561049557600080fd5b506102c76104a4366004611c85565b610ca8565b3480156104b557600080fd5b506102286104c4366004611cc8565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156104fb57600080fd5b506102c761050a366004611c27565b610e60565b34801561051b57600080fd5b506102c761052a366004611c63565b610ee5565b34801561053b57600080fd5b506102c761054a366004611c63565b610fa6565b60606003805461055e90611cfb565b80601f016020809104026020016040519081016040528092919081815260200182805461058a90611cfb565b80156105d75780601f106105ac576101008083540402835291602001916105d7565b820191906000526020600020905b8154815290600101906020018083116105ba57829003601f168201915b5050505050905090565b6000336105ef818585611088565b5060019392505050565b600554600090600160a01b900460ff161561065b5760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064015b60405180910390fd5b6106668433846111e0565b6105ef848484611272565b6000600c544210156106b757600e546207e90042600c546106929190611d4c565b61069e9061012c611d63565b6106a89190611d82565b6106b29190611da4565b905090565b50600e5490565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091906105ef90829086906106f8908790611da4565b611088565b6005546001600160a01b031633146107575760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610652565b60968111156107a85760405162461bcd60e51b815260206004820152601a60248201527f7461782063616e27742062652061626f7665206d6178207461780000000000006044820152606401610652565b600e55565b6005546001600160a01b031633146108075760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610652565b6001600160a01b03821661084c5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b6044820152606401610652565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146108d15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610652565b6108db6000611ae5565b565b6005546001600160a01b031633146109375760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610652565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146109bc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610652565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610a415760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610652565b600c5415610a915760405162461bcd60e51b815260206004820152601260248201527f43616e206f6e6c792063616c6c206f6e636500000000000000000000000000006044820152606401610652565b610a9e426207e900611da4565b600c55610aad42610e10611da4565b600d55565b60606004805461055e90611cfb565b6005546001600160a01b03163314610b1b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610652565b6001600160a01b038116610b605760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b6044820152606401610652565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919083811015610c1f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610652565b610c2c8286868403611088565b506001949350505050565b600554600090600160a01b900460ff1615610c945760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610652565b610c9f338484611272565b50600192915050565b336000908152600b602052604090205460ff16610d2d5760405162461bcd60e51b815260206004820152602860248201527f4e6565647320746f2062652063616c6c6564206279206120766572696669656460448201527f20616464726573730000000000000000000000000000000000000000000000006064820152608401610652565b6001600160a01b038116610d8857506040805180820182526001600160a01b039384168152600060208083018281529486168252600a905291909120905181546001600160a01b031916931692909217825551600190910155565b6001600160a01b038082166000908152600a6020908152604091829020825180840190935280549093168083526001909301549082015290610e0c5760405162461bcd60e51b815260206004820152601960248201527f436f6c6c656374696f6e20646f6573206e6f74206578697374000000000000006044820152606401610652565b6001600160a01b038084166000908152600a60209081526040808320855181549086166001600160a01b03199182161782559290950151600195860155928516825291812080549092168255910155505050565b6005546001600160a01b03163314610eba5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610652565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610f3f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610652565b6001600160a01b038116610f845760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b6044820152606401610652565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146110005760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610652565b6001600160a01b03811661107c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610652565b61108581611ae5565b50565b6001600160a01b0383166111035760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610652565b6001600160a01b03821661117f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610652565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461126c578181101561125f5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610652565b61126c8484848403611088565b50505050565b6001600160a01b0383166112ee5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610652565b6001600160a01b03821661136a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610652565b600081116113e05760405162461bcd60e51b815260206004820152602b60248201527f5472616e7366657220616d6f756e742073686f756c642062652067726561746560448201527f72207468616e207a65726f0000000000000000000000000000000000000000006064820152608401610652565b600e546001600160a01b03831660009081526008602052604081205460ff16801561142457506001600160a01b03851660009081526007602052604090205460ff16155b9050600c544210156116c6576001600160a01b03841660009081526008602052604081205460ff168061146f57506001600160a01b03861660009081526008602052604090205460ff165b8061148957503360009081526008602052604090205460ff165b806114ac57506001600160a01b03851660009081526006602052604090205460ff165b806114cf57506001600160a01b03861660009081526006602052604090205460ff165b806114e957503360009081526006602052604090205460ff165b90508061155e5760405162461bcd60e51b815260206004820152602a60248201527f43616e277420747261646520746f206f746865722077616c6c6574732061742060448201527f746865206d6f6d656e74000000000000000000000000000000000000000000006064820152608401610652565b6001600160a01b03861660009081526008602052604090205460ff168061159457503360009081526008602052604090205460ff165b1561168857600d5468056bc75e2d63100000904210156115ba57506801158e460913d000005b6001600160a01b03861660009081526009602052604090205481906115e0908790611da4565b11156116545760405162461bcd60e51b815260206004820152602360248201527f4d617820707572636861736520457863656564656420666f722074686973207460448201527f696d6500000000000000000000000000000000000000000000000000000000006064820152608401610652565b6001600160a01b0386166000908152600960205260408120805487929061167c908490611da4565b909155506116c4915050565b81156116c457826207e90042600c546116a19190611d4c565b6116ad9061012c611d63565b6116b79190611d82565b6116c19190611da4565b92505b505b6001600160a01b038516600090815260208190526040902054838110156117555760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610652565b6001600160a01b038616600090815260208190526040902084820390558115611a64576001600160a01b038681166000908152600a602052604081205490911615611945576001600160a01b038781166000908152600a60209081526040808320815180830183528154861680825260019092015493810193909352600f5491517fe6d5ab3d0000000000000000000000000000000000000000000000000000000081526004810191909152602481018490529193169063e6d5ab3d90604401602060405180830381865afa158015611832573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118569190611dbc565b9050808783602001516118699190611da4565b116118be576001600160a01b0389166000908152600a602052604081206001018054899290611899908490611da4565b909155506103e890506118ad601989611d63565b6118b79190611d82565b925061193e565b60008260200151826118d09190611d4c565b905060006118de828a611d4c565b90506103e86118ed8983611d63565b6118f79190611d82565b94506103e8611907601984611d63565b6119119190611d82565b61191b9086611da4565b6001600160a01b038c166000908152600a60205260409020600101849055945050505b505061195f565b6103e86119528587611d63565b61195c9190611d82565b90505b6119698186611d4c565b6010546001600160a01b0316600090815260208190526040812080549297508392909190611998908490611da4565b90915550506010546040518281526001600160a01b03918216918916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36001600160a01b03861660009081526020819052604081208054879290611a0a908490611da4565b92505081905550856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051611a5691815260200190565b60405180910390a350611add565b6001600160a01b038516600090815260208190526040902054611a88908590611da4565b6001600160a01b038681166000818152602081815260409182902094909455518781529092918916917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35b505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b81811015611b6457858101830151858201604001528201611b48565b81811115611b76576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114611ba357600080fd5b919050565b60008060408385031215611bbb57600080fd5b611bc483611b8c565b946020939093013593505050565b600080600060608486031215611be757600080fd5b611bf084611b8c565b9250611bfe60208501611b8c565b9150604084013590509250925092565b600060208284031215611c2057600080fd5b5035919050565b60008060408385031215611c3a57600080fd5b611c4383611b8c565b915060208301358015158114611c5857600080fd5b809150509250929050565b600060208284031215611c7557600080fd5b611c7e82611b8c565b9392505050565b600080600060608486031215611c9a57600080fd5b611ca384611b8c565b9250611cb160208501611b8c565b9150611cbf60408501611b8c565b90509250925092565b60008060408385031215611cdb57600080fd5b611ce483611b8c565b9150611cf260208401611b8c565b90509250929050565b600181811c90821680611d0f57607f821691505b60208210811415611d3057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082821015611d5e57611d5e611d36565b500390565b6000816000190483118215151615611d7d57611d7d611d36565b500290565b600082611d9f57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115611db757611db7611d36565b500190565b600060208284031215611dce57600080fd5b505191905056fea26469706673582212208c0494a29be116da8e7386077b277fc47c42ac6d856f828f3d8e4b13cec3954964736f6c634300080a0033

Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.