Contract 0x320da45A732c0deEeaD3285D7646098c1b8E9a48

Contract Overview

Balance:
0 BNB
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xda780ca2fca8b4bd062c2d4235dcebd53a4e8c1adfeaf61d2898c22b8336d7c7Zap In BNB128388702021-10-01 7:14:1723 days 17 hrs ago0x735520f20ec3faefe91b2a2318b82d6f9e986ea3 IN  0x320da45a732c0deeead3285d7646098c1b8e9a480.01 BNB0.00221727
0x5518e820f5c799f6dcdd9c439eb437643d8202721df4850af2fdbf06ba169222Zap In BNB128372982021-10-01 5:55:4123 days 18 hrs ago0xecf69a95695106ec8ffeb0f904ee8b3f2a914cc6 IN  0x320da45a732c0deeead3285d7646098c1b8e9a480.01 BNB0.00264795
0x6a24469973ce961f4db8abb7fad83b61f6f59be63a42472136f601c11a736fccZap In BNB128347952021-10-01 3:50:2923 days 21 hrs ago0xecf69a95695106ec8ffeb0f904ee8b3f2a914cc6 IN  0x320da45a732c0deeead3285d7646098c1b8e9a480.01 BNB0.00220038
0xd55def3468fd512082234765247cf10e8801cd98fb5caa26807784be38c9e9d3Zap In BNB126737182021-09-25 12:42:1129 days 12 hrs ago0xecf69a95695106ec8ffeb0f904ee8b3f2a914cc6 IN  0x320da45a732c0deeead3285d7646098c1b8e9a480.01 BNB0.00264795
0xb8014d880346a9c32c504d2eab32915f2b243aad4234f0a0ff08a0fdd2e630e1Zap In BNB126736062021-09-25 12:36:3529 days 12 hrs ago0xecf69a95695106ec8ffeb0f904ee8b3f2a914cc6 IN  0x320da45a732c0deeead3285d7646098c1b8e9a480.01 BNB0.00220038
0x837520e9741229d04cc53dd48c45553ef360aef1e25d17ee45e100b3d2064ae2Zap In BNB126735852021-09-25 12:35:3229 days 12 hrs ago0xecf69a95695106ec8ffeb0f904ee8b3f2a914cc6 IN  0x320da45a732c0deeead3285d7646098c1b8e9a480.01 BNB0.00265038
0xec302719430eca0c5dfcf2cd15936e8bc15d5fc35f8663ec8fcdd9137347038bZap In BNB126686682021-09-25 8:29:3429 days 16 hrs ago0xecf69a95695106ec8ffeb0f904ee8b3f2a914cc6 IN  0x320da45a732c0deeead3285d7646098c1b8e9a480.01 BNB0.00265038
0xc04c1279e53f797dfca4e0bebcc14b5f40abfeea847cbafbe06ce5d61673c272Zap In BNB126686422021-09-25 8:28:1629 days 16 hrs ago0xecf69a95695106ec8ffeb0f904ee8b3f2a914cc6 IN  0x320da45a732c0deeead3285d7646098c1b8e9a480.01 BNB0.00220281
0x1ccd9b220539b0c04aa846a9fccb415a1149de3517c4bc892619f932eaf750c4Zap In BNB126686262021-09-25 8:27:2829 days 16 hrs ago0xecf69a95695106ec8ffeb0f904ee8b3f2a914cc6 IN  0x320da45a732c0deeead3285d7646098c1b8e9a480.01 BNB0.00265281
0x479d1c57453080d6258b6e6ac4930c4e4015dc66c6520ecb55e313e3f4e1c483Zap In BNB126685292021-09-25 8:22:3729 days 16 hrs ago0xecf69a95695106ec8ffeb0f904ee8b3f2a914cc6 IN  0x320da45a732c0deeead3285d7646098c1b8e9a480.01 BNB0.00220524
0xcced1e198b15cc22d51788cd706b299f805ccc7f5c917845ef6536898ae7a5c3Zap In BNB126683822021-09-25 8:15:1629 days 16 hrs ago0xecf69a95695106ec8ffeb0f904ee8b3f2a914cc6 IN  0x320da45a732c0deeead3285d7646098c1b8e9a480.01 BNB0.00265524
0xe2c1ff1d17a9e1a270422a99792360086365172d27346307b0dba798607398ffZap In BNB126679762021-09-25 7:54:5829 days 16 hrs ago0xecf69a95695106ec8ffeb0f904ee8b3f2a914cc6 IN  0x320da45a732c0deeead3285d7646098c1b8e9a480.01 BNB0.00325493
0xf3eca2bfdc99c4222367cd435aeeaaa5e240f2142025f739d11be996ec9c42be0x60806040126596092021-09-25 0:56:3229 days 23 hrs ago0x32a935f79ce498aeff77acd2f7f35b3aabc31a2d IN  Contract Creation0 BNB0.01440879
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xda780ca2fca8b4bd062c2d4235dcebd53a4e8c1adfeaf61d2898c22b8336d7c7128388702021-10-01 7:14:1723 days 17 hrs ago 0x320da45a732c0deeead3285d7646098c1b8e9a48 0x0663ce84485b8f1383dfe01b214f31eef76a23ce0 BNB
0xda780ca2fca8b4bd062c2d4235dcebd53a4e8c1adfeaf61d2898c22b8336d7c7128388702021-10-01 7:14:1723 days 17 hrs ago 0x320da45a732c0deeead3285d7646098c1b8e9a48 0x0663ce84485b8f1383dfe01b214f31eef76a23ce0 BNB
0xda780ca2fca8b4bd062c2d4235dcebd53a4e8c1adfeaf61d2898c22b8336d7c7128388702021-10-01 7:14:1723 days 17 hrs ago 0x320da45a732c0deeead3285d7646098c1b8e9a48 0xb9b492b5d470ae0eb2bb07a87062ec97615d8b090 BNB
0xda780ca2fca8b4bd062c2d4235dcebd53a4e8c1adfeaf61d2898c22b8336d7c7128388702021-10-01 7:14:1723 days 17 hrs ago 0x320da45a732c0deeead3285d7646098c1b8e9a48 0xd99d1c33f9fc3444f8101754abc46c52416550d10 BNB
0xda780ca2fca8b4bd062c2d4235dcebd53a4e8c1adfeaf61d2898c22b8336d7c7128388702021-10-01 7:14:1723 days 17 hrs ago 0x320da45a732c0deeead3285d7646098c1b8e9a48 0x6725f303b657a9451d8ba641348b6761a6cc7a170 BNB
0xda780ca2fca8b4bd062c2d4235dcebd53a4e8c1adfeaf61d2898c22b8336d7c7128388702021-10-01 7:14:1723 days 17 hrs ago 0x320da45a732c0deeead3285d7646098c1b8e9a48 0xae13d989dac2f0debff460ac112a837c89baa7cd0 BNB
0xda780ca2fca8b4bd062c2d4235dcebd53a4e8c1adfeaf61d2898c22b8336d7c7128388702021-10-01 7:14:1723 days 17 hrs ago 0x320da45a732c0deeead3285d7646098c1b8e9a48 0xae13d989dac2f0debff460ac112a837c89baa7cd0.01 BNB
0x5518e820f5c799f6dcdd9c439eb437643d8202721df4850af2fdbf06ba169222128372982021-10-01 5:55:4123 days 18 hrs ago 0x320da45a732c0deeead3285d7646098c1b8e9a48 0x412fa19bbbf1179f854890d42b5fe81f0a6e25880 BNB
0x5518e820f5c799f6dcdd9c439eb437643d8202721df4850af2fdbf06ba169222128372982021-10-01 5:55:4123 days 18 hrs ago 0x320da45a732c0deeead3285d7646098c1b8e9a48 0x412fa19bbbf1179f854890d42b5fe81f0a6e25880 BNB
0x5518e820f5c799f6dcdd9c439eb437643d8202721df4850af2fdbf06ba169222128372982021-10-01 5:55:4123 days 18 hrs ago 0x320da45a732c0deeead3285d7646098c1b8e9a48 0xb9b492b5d470ae0eb2bb07a87062ec97615d8b090 BNB
0x5518e820f5c799f6dcdd9c439eb437643d8202721df4850af2fdbf06ba169222128372982021-10-01 5:55:4123 days 18 hrs ago 0x320da45a732c0deeead3285d7646098c1b8e9a48 0xd99d1c33f9fc3444f8101754abc46c52416550d10 BNB
0x5518e820f5c799f6dcdd9c439eb437643d8202721df4850af2fdbf06ba169222128372982021-10-01 5:55:4123 days 18 hrs ago 0x320da45a732c0deeead3285d7646098c1b8e9a48 0x6725f303b657a9451d8ba641348b6761a6cc7a170 BNB
0x5518e820f5c799f6dcdd9c439eb437643d8202721df4850af2fdbf06ba169222128372982021-10-01 5:55:4123 days 18 hrs ago 0x320da45a732c0deeead3285d7646098c1b8e9a48 0xae13d989dac2f0debff460ac112a837c89baa7cd0 BNB
0x5518e820f5c799f6dcdd9c439eb437643d8202721df4850af2fdbf06ba169222128372982021-10-01 5:55:4123 days 18 hrs ago 0x320da45a732c0deeead3285d7646098c1b8e9a48 0xae13d989dac2f0debff460ac112a837c89baa7cd0.01 BNB
0x6a24469973ce961f4db8abb7fad83b61f6f59be63a42472136f601c11a736fcc128347952021-10-01 3:50:2923 days 21 hrs ago 0x320da45a732c0deeead3285d7646098c1b8e9a48 0x970d4951940e65bea32bd1d7ae10ab976a2f41e20 BNB
0x6a24469973ce961f4db8abb7fad83b61f6f59be63a42472136f601c11a736fcc128347952021-10-01 3:50:2923 days 21 hrs ago 0x320da45a732c0deeead3285d7646098c1b8e9a48 0x970d4951940e65bea32bd1d7ae10ab976a2f41e20 BNB
0x6a24469973ce961f4db8abb7fad83b61f6f59be63a42472136f601c11a736fcc128347952021-10-01 3:50:2923 days 21 hrs ago 0x320da45a732c0deeead3285d7646098c1b8e9a48 0xb9b492b5d470ae0eb2bb07a87062ec97615d8b090 BNB
0x6a24469973ce961f4db8abb7fad83b61f6f59be63a42472136f601c11a736fcc128347952021-10-01 3:50:2923 days 21 hrs ago 0x320da45a732c0deeead3285d7646098c1b8e9a48 0xd99d1c33f9fc3444f8101754abc46c52416550d10 BNB
0x6a24469973ce961f4db8abb7fad83b61f6f59be63a42472136f601c11a736fcc128347952021-10-01 3:50:2923 days 21 hrs ago 0x320da45a732c0deeead3285d7646098c1b8e9a48 0x6725f303b657a9451d8ba641348b6761a6cc7a170 BNB
0x6a24469973ce961f4db8abb7fad83b61f6f59be63a42472136f601c11a736fcc128347952021-10-01 3:50:2923 days 21 hrs ago 0x320da45a732c0deeead3285d7646098c1b8e9a48 0xae13d989dac2f0debff460ac112a837c89baa7cd0 BNB
0x6a24469973ce961f4db8abb7fad83b61f6f59be63a42472136f601c11a736fcc128347952021-10-01 3:50:2923 days 21 hrs ago 0x320da45a732c0deeead3285d7646098c1b8e9a48 0xae13d989dac2f0debff460ac112a837c89baa7cd0.01 BNB
0xd55def3468fd512082234765247cf10e8801cd98fb5caa26807784be38c9e9d3126737182021-09-25 12:42:1129 days 12 hrs ago 0x320da45a732c0deeead3285d7646098c1b8e9a48 0x970d4951940e65bea32bd1d7ae10ab976a2f41e20 BNB
0xd55def3468fd512082234765247cf10e8801cd98fb5caa26807784be38c9e9d3126737182021-09-25 12:42:1129 days 12 hrs ago 0x320da45a732c0deeead3285d7646098c1b8e9a48 0x970d4951940e65bea32bd1d7ae10ab976a2f41e20 BNB
0xd55def3468fd512082234765247cf10e8801cd98fb5caa26807784be38c9e9d3126737182021-09-25 12:42:1129 days 12 hrs ago 0x320da45a732c0deeead3285d7646098c1b8e9a48 0xb9b492b5d470ae0eb2bb07a87062ec97615d8b090 BNB
0xd55def3468fd512082234765247cf10e8801cd98fb5caa26807784be38c9e9d3126737182021-09-25 12:42:1129 days 12 hrs ago 0x320da45a732c0deeead3285d7646098c1b8e9a48 0xd99d1c33f9fc3444f8101754abc46c52416550d10 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MintClubZapV2

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
Yes with 1500 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 9 : MintClubZapV2.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.6;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import "@openzeppelin/contracts/utils/Context.sol";
import "./lib/IUniswapV2Router02.sol";
import "./lib/IUniswapV2Factory.sol";
import "./lib/IMintClubBond.sol";
import "./lib/IWETH.sol";

/**
* @title MintClubZapV2 extension contract (2.1.0)
*/

contract MintClubZapV2 is Context {
    using SafeERC20 for IERC20;

    // Pancakeswap Router
    // IUniswapV2Factory private constant PANCAKE_FACTORY = IUniswapV2Factory(0xcA143Ce32Fe78f1f7019d7d551a6402fC5350c73);
    // IUniswapV2Router02 private constant PANCAKE_ROUTER = IUniswapV2Router02(0x10ED43C718714eb63d5aA57B78B54704E256024E);
    // IMintClubBond private constant BOND = IMintClubBond(0x8BBac0C7583Cc146244a18863E708bFFbbF19975);

    // // Unix timestamp after which the transaction will revert.
    // uint256 private constant DEAD_LINE = 0xf000000000000000000000000000000000000000000000000000000000000000;
    // address private constant MINT_CONTRACT = address(0x1f3Af095CDa17d63cad238358837321e95FC5915);
    // address private constant WBNB_CONTRACT = address(0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c);

    // MARK: - Testnet configs

    IUniswapV2Factory private constant PANCAKE_FACTORY = IUniswapV2Factory(0x6725F303b657a9451d8BA641348b6761A6CC7a17);
    IUniswapV2Router02 private constant PANCAKE_ROUTER = IUniswapV2Router02(0xD99D1c33F9fC3444f8101754aBC46c52416550D1);
    IMintClubBond private constant BOND = IMintClubBond(0xB9B492B5D470ae0eB2BB07a87062EC97615d8b09);

    // Unix timestamp after which the transaction will revert.
    uint256 private constant DEAD_LINE = 0xf000000000000000000000000000000000000000000000000000000000000000;
    address private constant MINT_CONTRACT = address(0x4d24BF63E5d6E03708e2DFd5cc8253B3f22FE913);
    address private constant WBNB_CONTRACT = address(0xae13d989daC2f0dEbFf460aC112a837C89BAa7cd);

    constructor() {
        // Approve infinite MINT tokens spendable by bond contract
        // MINT will be stored temporarily during the swap transaction
        _approveToken(MINT_CONTRACT, address(BOND));
    }

    function getAmountOut(address from, address to, uint256 amount) external view returns (uint256 tokenToReceive, uint256 mintTokenTaxAmount) {
        uint256 mintAmount;

        if (from == MINT_CONTRACT) {
            mintAmount = amount;
        } else {
            address[] memory path = _getPath(from);

            mintAmount = PANCAKE_ROUTER.getAmountsOut(amount, path)[path.length - 1];
        }

        return BOND.getMintReward(to, mintAmount);
    }

    function zapInBNB(address to, uint256 minAmountOut, address beneficiary) public payable {
        // First, wrap BNB to WBNB
        IWETH(WBNB_CONTRACT).deposit{value: msg.value}();

        // Swap WBNB to MINT
        uint256 mintAmount = _swap(WBNB_CONTRACT, MINT_CONTRACT, msg.value);

        // Finally, buy target tokens with swapped MINT
        _buyMintClubTokenAndSend(to, mintAmount, minAmountOut, beneficiary);
    }

    function zapIn(address from, address to, uint256 amount, uint256 minAmountOut, address beneficiary) public {
        // First, pull tokens to this contract
        IERC20 token = IERC20(from);
        require(token.allowance(_msgSender(), address(this)) >= amount, 'NOT_ENOUGH_ALLOWANCE');
        IERC20(from).safeTransferFrom(_msgSender(), address(this), amount);

        // Swap to MINT if necessary
        uint256 mintAmount;
        if (from == MINT_CONTRACT) {
            mintAmount = amount;
        } else {
            mintAmount = _swap(from, MINT_CONTRACT, amount);
        }

        // Finally, buy target tokens with swapped MINT
        _buyMintClubTokenAndSend(to, mintAmount, minAmountOut, beneficiary);
    }

    function createAndZapIn(string memory name, string memory symbol, uint256 maxTokenSupply, address token, uint256 tokenAmount, uint256 minAmountOut, address beneficiary) external {
        address newToken = BOND.createToken(name, symbol, maxTokenSupply);

        // We need `minAmountOut` here token->MINT can be front ran and slippage my happen
        zapIn(token, newToken, tokenAmount, minAmountOut, beneficiary);
    }

    function createAndZapInBNB(string memory name, string memory symbol, uint256 maxTokenSupply, uint256 minAmountOut, address beneficiary) external payable {
        address newToken = BOND.createToken(name, symbol, maxTokenSupply);

        zapInBNB(newToken, minAmountOut, beneficiary);
    }

    function _buyMintClubTokenAndSend(address tokenAddress, uint256 mintAmount, uint256 minAmountOut, address beneficiary) internal {
        // Finally, buy target tokens with swapped MINT
        BOND.buy(tokenAddress, mintAmount, minAmountOut, beneficiary);

        // BOND.buy doesn't return any value, so we need to calculate the purchased amount
        IERC20 token = IERC20(tokenAddress);
        require(token.transfer(_msgSender(), token.balanceOf(address(this))), 'BALANCE_TRANSFER_FAILED');
    }

    function _getPath(address from) internal pure returns (address[] memory path) {
        if (from == WBNB_CONTRACT) {
            path = new address[](2);
            path[0] = WBNB_CONTRACT;
            path[1] = MINT_CONTRACT;
        } else {
            path = new address[](3);
            path[0] = from;
            path[1] = WBNB_CONTRACT;
            path[2] = MINT_CONTRACT;
        }
    }

    function _approveToken(address tokenAddress, address spender) internal {
        IERC20 token = IERC20(tokenAddress);
        if (token.allowance(address(this), spender) > 0) {
            return;
        } else {
            token.safeApprove(spender, type(uint256).max);
        }
    }

    /**
        @notice This function is used to swap ERC20 <> ERC20
        @param from The token address to swap from.
        @param to The token address to swap to.
        @param amount The amount of tokens to swap
        @return boughtAmount The quantity of tokens bought
    */
    function _swap(address from, address to, uint256 amount) internal returns (uint256 boughtAmount) {
        if (from == to) {
            return amount;
        }

        _approveToken(from, address(PANCAKE_ROUTER));

        address[] memory path = _getPath(from);

        // path.length is always 2 or 3
        for (uint8 i = 0; i < path.length - 1; i++) {
            address pair = PANCAKE_FACTORY.getPair(path[i], path[i + 1]);
            require(pair != address(0), 'INVALID_SWAP_PATH');
        }

        boughtAmount = PANCAKE_ROUTER.swapExactTokensForTokens(
            amount,
            1, // amountOutMin
            path,
            address(this), // to: Recipient of the output tokens
            DEAD_LINE
        )[path.length - 1];

        require(boughtAmount > 0, 'SWAP_ERROR');
    }
}

File 2 of 9 : IERC20.sol
// SPDX-License-Identifier: MIT

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 `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 3 of 9 : SafeERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../IERC20.sol";
import "../../../utils/Address.sol";

/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    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));
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        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) + value;
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

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

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

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

File 4 of 9 : Context.sol
// SPDX-License-Identifier: MIT

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 5 of 9 : IUniswapV2Router02.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.6;

interface IUniswapV2Router02 {
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external
        returns (
            uint256[] memory amounts
        );

    function getAmountsOut(
        uint amountIn,
        address[] memory path
    ) external view
        returns (
            uint[] memory amounts
        );
}

File 6 of 9 : IUniswapV2Factory.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.6;

interface IUniswapV2Factory {
    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address);
}

File 7 of 9 : IMintClubBond.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.6;

interface IMintClubBond {
    function getMintReward(
        address tokenAddress,
        uint256 reserveAmount
    ) external view returns (
        uint256 toMint,
        uint256 taxAmount
    );

    function buy(
        address tokenAddress,
        uint256 reserveAmount,
        uint256 minReward,
        address beneficiary
    ) external;

    function createToken(
        string memory name,
        string memory symbol,
        uint256 maxTokenSupply
    ) external returns (
        address tokenAddress
    );
}

File 8 of 9 : IWETH.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.6;

interface IWETH {
    function deposit() external payable;
}

File 9 of 9 : Address.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    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");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // 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

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"maxTokenSupply","type":"uint256"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"address","name":"beneficiary","type":"address"}],"name":"createAndZapIn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"maxTokenSupply","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"address","name":"beneficiary","type":"address"}],"name":"createAndZapInBNB","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"tokenToReceive","type":"uint256"},{"internalType":"uint256","name":"mintTokenTaxAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"address","name":"beneficiary","type":"address"}],"name":"zapIn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"address","name":"beneficiary","type":"address"}],"name":"zapInBNB","outputs":[],"stateMutability":"payable","type":"function"}]

60806040523480156200001157600080fd5b5062000046734d24bf63e5d6e03708e2dfd5cc8253b3f22fe91373b9b492b5d470ae0eb2bb07a87062ec97615d8b096200004c565b62000598565b604051636eb1769f60e11b81523060048201526001600160a01b038281166024830152839160009183169063dd62ed3e9060440160206040518083038186803b1580156200009957600080fd5b505afa158015620000ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d49190620004f8565b1115620000e057505050565b6200010782600019836001600160a01b03166200010c60201b62000638179092919060201c565b505050565b8015806200019a5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e9060440160206040518083038186803b1580156200015d57600080fd5b505afa15801562000172573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001989190620004f8565b155b620002125760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084015b60405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b17909152620001079185916200026a16565b6000620002c6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166200034860201b620007e1179092919060201c565b805190915015620001075780806020019051810190620002e79190620004d4565b620001075760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000209565b606062000359848460008562000363565b90505b9392505050565b606082471015620003c65760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840162000209565b843b620004165760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000209565b600080866001600160a01b0316858760405162000434919062000512565b60006040518083038185875af1925050503d806000811462000473576040519150601f19603f3d011682016040523d82523d6000602084013e62000478565b606091505b5090925090506200048b82828662000496565b979650505050505050565b60608315620004a75750816200035c565b825115620004b85782518084602001fd5b8160405162461bcd60e51b815260040162000209919062000530565b600060208284031215620004e757600080fd5b815180151581146200035c57600080fd5b6000602082840312156200050b57600080fd5b5051919050565b600082516200052681846020870162000565565b9190910192915050565b60208152600082518060208401526200055181604085016020870162000565565b601f01601f19169190910160400192915050565b60005b838110156200058257818101518382015260200162000568565b8381111562000592576000848401525b50505050565b61183b80620005a86000396000f3fe60806040526004361061005a5760003560e01c8063b35d3f4211610043578063b35d3f42146100ad578063b487c54a146100c0578063b490bb6d146100e057600080fd5b80634aa066521461005f5780638bad12f614610098575b600080fd5b34801561006b57600080fd5b5061007f61007a3660046112b4565b610100565b6040805192835260208301919091520160405180910390f35b6100ab6100a636600461150d565b6102c5565b005b6100ab6100bb366004611354565b61036a565b3480156100cc57600080fd5b506100ab6100db3660046112f5565b61041b565b3480156100ec57600080fd5b506100ab6100fb366004611465565b61058f565b600080806001600160a01b038616734d24bf63e5d6e03708e2dfd5cc8253b3f22fe913141561013057508261020e565b600061013b876107fa565b6040517fd06ca61f00000000000000000000000000000000000000000000000000000000815290915073d99d1c33f9fc3444f8101754abc46c52416550d19063d06ca61f90610190908890859060040161169d565b60006040518083038186803b1580156101a857600080fd5b505afa1580156101bc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101e49190810190611396565b600182516101f29190611748565b81518110610202576102026117c1565b60200260200101519150505b6040517feb0cf64d0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810182905273b9b492b5d470ae0eb2bb07a87062ec97615d8b099063eb0cf64d90604401604080518083038186803b15801561028057600080fd5b505afa158015610294573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102b891906115a4565b9250925050935093915050565b6040516305b0605360e41b815260009073b9b492b5d470ae0eb2bb07a87062ec97615d8b0990635b0605309061030390899089908990600401611667565b602060405180830381600087803b15801561031d57600080fd5b505af1158015610331573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103559190611297565b905061036281848461036a565b505050505050565b73ae13d989dac2f0debff460ac112a837c89baa7cd6001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156103b957600080fd5b505af11580156103cd573d6000803e3d6000fd5b5050505050600061040773ae13d989dac2f0debff460ac112a837c89baa7cd734d24bf63e5d6e03708e2dfd5cc8253b3f22fe9133461099b565b905061041584828585610cac565b50505050565b84836001600160a01b03821663dd62ed3e336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b03909116600482015230602482015260440160206040518083038186803b15801561048a57600080fd5b505afa15801561049e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c2919061158b565b10156105155760405162461bcd60e51b815260206004820152601460248201527f4e4f545f454e4f5547485f414c4c4f57414e434500000000000000000000000060448201526064015b60405180910390fd5b61052a6001600160a01b038716333087610ed4565b60006001600160a01b038716734d24bf63e5d6e03708e2dfd5cc8253b3f22fe913141561055857508361057a565b61057787734d24bf63e5d6e03708e2dfd5cc8253b3f22fe9138761099b565b90505b61058686828686610cac565b50505050505050565b6040516305b0605360e41b815260009073b9b492b5d470ae0eb2bb07a87062ec97615d8b0990635b060530906105cd908b908b908b90600401611667565b602060405180830381600087803b1580156105e757600080fd5b505af11580156105fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061061f9190611297565b905061062e858286868661041b565b5050505050505050565b8015806106c15750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e9060440160206040518083038186803b15801561068757600080fd5b505afa15801561069b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106bf919061158b565b155b6107335760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e636500000000000000000000606482015260840161050c565b6040516001600160a01b0383166024820152604481018290526107dc9084907f095ea7b300000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152610f25565b505050565b60606107f0848460008561100a565b90505b9392505050565b60606001600160a01b03821673ae13d989dac2f0debff460ac112a837c89baa7cd14156108d657604080516002808252606082018352909160208301908036833701905050905073ae13d989dac2f0debff460ac112a837c89baa7cd81600081518110610869576108696117c1565b60200260200101906001600160a01b031690816001600160a01b031681525050734d24bf63e5d6e03708e2dfd5cc8253b3f22fe913816001815181106108b1576108b16117c1565b60200260200101906001600160a01b031690816001600160a01b031681525050919050565b604080516003808252608082019092529060208201606080368337019050509050818160008151811061090b5761090b6117c1565b60200260200101906001600160a01b031690816001600160a01b03168152505073ae13d989dac2f0debff460ac112a837c89baa7cd81600181518110610953576109536117c1565b60200260200101906001600160a01b031690816001600160a01b031681525050734d24bf63e5d6e03708e2dfd5cc8253b3f22fe913816002815181106108b1576108b16117c1565b6000826001600160a01b0316846001600160a01b031614156109be5750806107f3565b6109dc8473d99d1c33f9fc3444f8101754abc46c52416550d1611149565b60006109e7856107fa565b905060005b600182516109fa9190611748565b8160ff161015610b5c576000736725f303b657a9451d8ba641348b6761a6cc7a176001600160a01b031663e6a43905848460ff1681518110610a3e57610a3e6117c1565b602002602001015185856001610a549190611723565b60ff1681518110610a6757610a676117c1565b60200260200101516040518363ffffffff1660e01b8152600401610aa19291906001600160a01b0392831681529116602082015260400190565b60206040518083038186803b158015610ab957600080fd5b505afa158015610acd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af19190611297565b90506001600160a01b038116610b495760405162461bcd60e51b815260206004820152601160248201527f494e56414c49445f535741505f50415448000000000000000000000000000000604482015260640161050c565b5080610b548161178b565b9150506109ec565b506040517f38ed173900000000000000000000000000000000000000000000000000000000815273d99d1c33f9fc3444f8101754abc46c52416550d1906338ed173990610bd6908690600190869030907ff000000000000000000000000000000000000000000000000000000000000000906004016116b6565b600060405180830381600087803b158015610bf057600080fd5b505af1158015610c04573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c2c9190810190611396565b60018251610c3a9190611748565b81518110610c4a57610c4a6117c1565b6020026020010151915060008211610ca45760405162461bcd60e51b815260206004820152600a60248201527f535741505f4552524f5200000000000000000000000000000000000000000000604482015260640161050c565b509392505050565b6040517f3f60b6330000000000000000000000000000000000000000000000000000000081526001600160a01b03808616600483015260248201859052604482018490528216606482015273b9b492b5d470ae0eb2bb07a87062ec97615d8b0990633f60b63390608401600060405180830381600087803b158015610d3057600080fd5b505af1158015610d44573d6000803e3d6000fd5b50869250506001600160a01b038216905063a9059cbb336040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038516906370a082319060240160206040518083038186803b158015610db357600080fd5b505afa158015610dc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610deb919061158b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b158015610e4957600080fd5b505af1158015610e5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e819190611443565b610ecd5760405162461bcd60e51b815260206004820152601760248201527f42414c414e43455f5452414e534645525f4641494c4544000000000000000000604482015260640161050c565b5050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526104159085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401610778565b6000610f7a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166107e19092919063ffffffff16565b8051909150156107dc5780806020019051810190610f989190611443565b6107dc5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161050c565b6060824710156110825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161050c565b843b6110d05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161050c565b600080866001600160a01b031685876040516110ec9190611638565b60006040518083038185875af1925050503d8060008114611129576040519150601f19603f3d011682016040523d82523d6000602084013e61112e565b606091505b509150915061113e8282866111ee565b979650505050505050565b604051636eb1769f60e11b81523060048201526001600160a01b038281166024830152839160009183169063dd62ed3e9060440160206040518083038186803b15801561119557600080fd5b505afa1580156111a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cd919061158b565b11156111d857505050565b6107dc6001600160a01b03821683600019610638565b606083156111fd5750816107f3565b82511561120d5782518084602001fd5b8160405162461bcd60e51b815260040161050c9190611654565b600082601f83011261123857600080fd5b813567ffffffffffffffff811115611252576112526117d7565b611265601f8201601f19166020016116f2565b81815284602083860101111561127a57600080fd5b816020850160208301376000918101602001919091529392505050565b6000602082840312156112a957600080fd5b81516107f3816117ed565b6000806000606084860312156112c957600080fd5b83356112d4816117ed565b925060208401356112e4816117ed565b929592945050506040919091013590565b600080600080600060a0868803121561130d57600080fd5b8535611318816117ed565b94506020860135611328816117ed565b935060408601359250606086013591506080860135611346816117ed565b809150509295509295909350565b60008060006060848603121561136957600080fd5b8335611374816117ed565b925060208401359150604084013561138b816117ed565b809150509250925092565b600060208083850312156113a957600080fd5b825167ffffffffffffffff808211156113c157600080fd5b818501915085601f8301126113d557600080fd5b8151818111156113e7576113e76117d7565b8060051b91506113f88483016116f2565b8181528481019084860184860187018a101561141357600080fd5b600095505b83861015611436578051835260019590950194918601918601611418565b5098975050505050505050565b60006020828403121561145557600080fd5b815180151581146107f357600080fd5b600080600080600080600060e0888a03121561148057600080fd5b873567ffffffffffffffff8082111561149857600080fd5b6114a48b838c01611227565b985060208a01359150808211156114ba57600080fd5b506114c78a828b01611227565b9650506040880135945060608801356114df816117ed565b93506080880135925060a0880135915060c08801356114fd816117ed565b8091505092959891949750929550565b600080600080600060a0868803121561152557600080fd5b853567ffffffffffffffff8082111561153d57600080fd5b61154989838a01611227565b9650602088013591508082111561155f57600080fd5b5061156c88828901611227565b94505060408601359250606086013591506080860135611346816117ed565b60006020828403121561159d57600080fd5b5051919050565b600080604083850312156115b757600080fd5b505080516020909101519092909150565b600081518084526020808501945080840160005b838110156116015781516001600160a01b0316875295820195908201906001016115dc565b509495945050505050565b6000815180845261162481602086016020860161175f565b601f01601f19169290920160200192915050565b6000825161164a81846020870161175f565b9190910192915050565b6020815260006107f3602083018461160c565b60608152600061167a606083018661160c565b828103602084015261168c818661160c565b915050826040830152949350505050565b8281526040602082015260006107f060408301846115c8565b85815284602082015260a0604082015260006116d560a08301866115c8565b6001600160a01b0394909416606083015250608001529392505050565b604051601f8201601f1916810167ffffffffffffffff8111828210171561171b5761171b6117d7565b604052919050565b600060ff821660ff84168060ff03821115611740576117406117ab565b019392505050565b60008282101561175a5761175a6117ab565b500390565b60005b8381101561177a578181015183820152602001611762565b838111156104155750506000910152565b600060ff821660ff8114156117a2576117a26117ab565b60010192915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461180257600080fd5b5056fea26469706673582212204c7afde89da24b26d6e4b309de92b9872a92eccd56ca624cb9dc4acead1fd5b064736f6c63430008060033

Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading