Contract 0x9Ad6C38BE94206cA50bb0d90783181662f0Cfa10 8

Contract Overview

Trader Joe: Factory
Balance:
0 AVAX

AVAX Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xa615aa5eb1c7b47b1c33596ea01f35d4e92b725c8abd48dfbe5e6c1297703945Set Fee To Sette...353792602023-09-19 8:42:199 days 16 hrs ago0x66fb02746d72bc640643fdba3aefe9c126f0aa4f IN  Trader Joe: Factory0 AVAX0.0007122405 26.5
0x73b6619cb1e5fb4c1de0b748d0d3c29ae6992ec82bcfda8686f337916304d487Set Fee To353792362023-09-19 8:41:289 days 16 hrs ago0x66fb02746d72bc640643fdba3aefe9c126f0aa4f IN  Trader Joe: Factory0 AVAX0.000789941116 27.2816825
0x850a5949fcc5a022f9b5993ecb6c04f289924e9dec3558ea7db318a03ea3cfa4Create Pair337392512023-08-10 12:49:0749 days 12 hrs ago0xd69a184112113212334736956de8118213b325fc IN  Trader Joe: Factory0 AVAX0.053934602 26.5
0xdb390211146849b301f317b87f11a401de0eba6674c6897b1e8212c35539fb70Create Pair327551162023-07-18 8:46:4772 days 16 hrs ago0x949546250d19a5c93df867a59bc67fa42120c55d IN  Trader Joe: Factory0 AVAX0.052916656 26
0x19df23181df4f2ba7d69a8562afe5317942f552ed0c3a72eb508ee570fe7f1a1Create Pair327544162023-07-18 8:23:1972 days 16 hrs ago0x949546250d19a5c93df867a59bc67fa42120c55d IN  Trader Joe: Factory0 AVAX0.052916656 26
0x23700f2263ed14e626012315f1150e305b4857a6853361a632a7a67176ad8568Create Pair327230532023-07-17 14:37:0673 days 10 hrs ago0x949546250d19a5c93df867a59bc67fa42120c55d IN  Trader Joe: Factory0 AVAX0.052916916 26
0x1057401633dc658e5e6cc0f489d1ab87feb06f25cb6689cf7d353d8b501d3776Create Pair327226502023-07-17 14:23:1973 days 10 hrs ago0x949546250d19a5c93df867a59bc67fa42120c55d IN  Trader Joe: Factory0 AVAX0.052916656 26
0x5d68c2fdc0049ff4eeb0af342656b8e8cb452713bf065c6cfcc6dcc2bfa70915Create Pair327224652023-07-17 14:17:0173 days 11 hrs ago0x949546250d19a5c93df867a59bc67fa42120c55d IN  Trader Joe: Factory0 AVAX0.052938352382 26.010532472
0x81a6d3dbac1b90880e717a52af6f030374715961ad28238748cd0b9b7006a808Create Pair327222152023-07-17 14:08:2773 days 11 hrs ago0x949546250d19a5c93df867a59bc67fa42120c55d IN  Trader Joe: Factory0 AVAX0.052916656 26
0x82a2557df0ca1f87e253fd096a6fb6aa75ba8a329a3d6e0444ae05182c6d70a6Create Pair314105602023-06-16 16:16:52104 days 9 hrs ago0x0a9e7635f94ca3edc6c264956747d1e1dbe8c659 IN  Trader Joe: Factory0 AVAX0.000641212 26
0xcf34313d1911b50731a3812f1667f971fa7af673fb34b7a61e274d7ef1e1c8acCreate Pair314105452023-06-16 16:16:23104 days 9 hrs ago0x0a9e7635f94ca3edc6c264956747d1e1dbe8c659 IN  Trader Joe: Factory0 AVAX0.000641472 26
0x7e3aa2ce78a01a98b2853b148c523975f5c8619d209f25b5a6e69146e0a7fa27Create Pair311493672023-06-10 11:31:09110 days 13 hrs ago0x0a9e7635f94ca3edc6c264956747d1e1dbe8c659 IN  Trader Joe: Factory0 AVAX0.055898193712 27.464809864
0xf90bcc7adece348397ca0599b46686c3d209da5b9708ded56fe7b165fe2a4501Create Pair293384552023-04-28 17:04:31153 days 8 hrs ago0x35049c3fd320206dddc37ea368deaed92c45dc06 IN  Trader Joe: Factory0 AVAX0.0601492078 29.553313012
0x5375ba8e152a3f6f044b8886c9558247718d78b8a4ac6fbe5f5a374c4777c97dCreate Pair266692412023-02-24 9:59:07216 days 15 hrs agoPterosaur Finance: Deployer IN  Trader Joe: Factory0 AVAX0.05088165 25
0x56c8f3910c9d8bacb9ef7a2b370731621826fffb8208b7273ad9b0ae7c6e3c3bCreate Pair266274652023-02-23 10:23:53217 days 14 hrs ago0x8176fafee8e7449f0f8102f6d6cef21e07eeded8 IN  Trader Joe: Factory0 AVAX0.0508814 25
0x55dfd37e67059d328e5e2303bb2bdd2807849b9fee23d233ee141070ebb67682Create Pair232946582022-12-06 17:21:42296 days 7 hrs agoAlpha Nodes: Deployer IN  Trader Joe: Factory0 AVAX0.0508816525
0x1442103b2e3a706d81b50427fca4d2b444822bc2d00466dc37e04765d85cfbf6Create Pair223883542022-11-15 1:04:27318 days 16 mins ago0x6daf92b8a58e50d55a24277e0d0752dde954f3fd IN  Trader Joe: Factory0 AVAX0.050881425
0x385063bd76e88fbdd0e1584812ed11e05488ee4791405e1ecf31ff3e25d11adeCreate Pair223878732022-11-15 0:47:57318 days 33 mins ago0x6daf92b8a58e50d55a24277e0d0752dde954f3fd IN  Trader Joe: Factory0 AVAX0.0508816525
0x5d094a998211d226a7957810c3ff3438cf76501f77ed658595d3f5accfd963ddCreate Pair223877832022-11-15 0:44:54318 days 36 mins ago0x6daf92b8a58e50d55a24277e0d0752dde954f3fd IN  Trader Joe: Factory0 AVAX0.050881425
0xdbd038f38e33aee93230511cc01236e1d01af8509cfd792143e4b6085f3df73aCreate Pair223874522022-11-15 0:33:38318 days 47 mins ago0x6daf92b8a58e50d55a24277e0d0752dde954f3fd IN  Trader Joe: Factory0 AVAX0.050881425
0x3cabf5d3bba892a0c6f1958dc5499424e4ffe13ef499ca22b8e614af9f49f673Create Pair218445342022-11-02 4:35:13330 days 20 hrs agoAlpha Nodes: Deployer IN  Trader Joe: Factory0 AVAX0.0508816525
0x7fb85c82299bb99d0e2d4b095150c78bae3d809125129db117d10bf47ebe95edCreate Pair207966752022-10-08 9:26:31355 days 15 hrs ago0x35049c3fd320206dddc37ea368deaed92c45dc06 IN  Trader Joe: Factory0 AVAX0.052916344 26
0x34135287b19c48f1a3ba4774daf8f8ff06ac45742c3eaf477f1b5bb8e8043df9Create Pair199297892022-09-16 10:24:36377 days 14 hrs ago0x82cc7cee5e8d03ef97830874222fe2dfba3b600b IN  Trader Joe: Factory0 AVAX0.052917228 26
0xcedb24c8af38beeb600d8a2416ded45c17bf10456eee504ceab3f36b92025b70Create Pair194857122022-09-03 12:13:13390 days 13 hrs agoTrader Joe: Deployer IN  Trader Joe: Factory0 AVAX0.052917228 26
0x8a62a125107fe7620885769a29a6fd09e4dffc906412bb9709fee62e29b00aedCreate Pair189625322022-08-22 6:34:16402 days 18 hrs ago0x0d8e060ca2d847553ec14394ee6b304623e0d1d6 IN  Trader Joe: Factory0 AVAX0.052916916 26
[ Download CSV Export 

OVERVIEW

One-stop-shop decentralized trading on Avalanche.

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x83baf27b45b21f9dbce1678a82121fc8530dd960d709bd727754876f08d2b25d355607682023-09-23 15:36:485 days 9 hrs ago Trader Joe: Factory  Contract Creation0 AVAX
0x1629f2ab6c6cfd2553f14740bc682af281bcb048259358e646530fb2c78ef3fc355411802023-09-23 4:32:425 days 20 hrs ago Trader Joe: Factory  Contract Creation0 AVAX
0xae64c47a8925af8e90996cbf01c09598ad28ed88ff16d17d3a570e5108dd32fe354248092023-09-20 10:31:418 days 14 hrs ago Trader Joe: Factory  Contract Creation0 AVAX
0x8ac52c499480c1bee3efb145fdfb2e3144af5931862ca78c0dd6e35b4f28e878353451122023-09-18 13:20:4610 days 12 hrs ago Trader Joe: Factory  Contract Creation0 AVAX
0xe28c0e4b0cd923b93ac510be913771c46091b30c5f79701a1e08fb52413b7969351657982023-09-14 7:16:0514 days 18 hrs ago Trader Joe: Factory  Contract Creation0 AVAX
0xab53f2de0d566d97da1d9f0b064d8b6bf5c75ea50c9c3bd74be2923bf75912ee351618332023-09-14 5:01:5614 days 20 hrs ago Trader Joe: Factory  Contract Creation0 AVAX
0x4f268aadc5aec9236c2e08cb636726982df671f011b3e76bc397bd9ac510f4c4350911072023-09-12 12:58:2816 days 12 hrs ago Trader Joe: Factory  Contract Creation0 AVAX
0x768d6212159f40914d998a97c99778d3629de4df6241db7e048e187d55f93873350909892023-09-12 12:54:3116 days 12 hrs ago Trader Joe: Factory  Contract Creation0 AVAX
0x404db077fef76c47d727bc97b04f2cef9bcd8424731f73f9ba4ca5b606756066350908622023-09-12 12:50:1716 days 12 hrs ago Trader Joe: Factory  Contract Creation0 AVAX
0x849242a9e77a93337f3a26a8d66f304974a0d5f7b2a695882a8e066fe5952322350904942023-09-12 12:37:5616 days 12 hrs ago Trader Joe: Factory  Contract Creation0 AVAX
0x4c91a68112084d7d4c2488d1e77881d7edb3d9d5f1a2a22b1a4b98ff1bcda65d349811952023-09-09 22:54:1019 days 2 hrs ago Trader Joe: Factory  Contract Creation0 AVAX
0x22256b2b881542dca5ab438db60824428fd60389212f9dcb36cea8f1688b00e2349810352023-09-09 22:48:4219 days 2 hrs ago Trader Joe: Factory  Contract Creation0 AVAX
0x0292334b1271767edfe77a7776e0d86d61d29f76910b693b0440fd04f9a93425349321882023-09-08 18:55:4920 days 6 hrs ago Trader Joe: Factory  Contract Creation0 AVAX
0x7e5e874b6511a1421657cc8063928352241af0ec38260f2deea1bed7168f5554348997322023-09-08 0:03:1121 days 1 hr ago Trader Joe: Factory  Contract Creation0 AVAX
0x67c972ecdbe79ab7f2533f05d9e8f3f1281a6c44372afa2e60f8d21329e5461f348332412023-09-06 8:28:1022 days 16 hrs ago Trader Joe: Factory  Contract Creation0 AVAX
0x7ea0a3d0418509ec692537b8efc3c110f0d5e9750360cf623efac9fbacbd1bd3348165612023-09-05 22:24:5123 days 2 hrs ago Trader Joe: Factory  Contract Creation0 AVAX
0x70b927bda2b835434c46d602e9df87edcc063c3c0d8e5544aa60ce29b195244c347243302023-09-03 15:00:0225 days 10 hrs ago Trader Joe: Factory  Contract Creation0 AVAX
0x991b84651c60b4e7f20eb448f88123dce10d208c591d1c5a8ece5adc6bab3ec4347242052023-09-03 14:55:3425 days 10 hrs ago Trader Joe: Factory  Contract Creation0 AVAX
0x40fa293d8b283e2b1bc0d18101065cc6581d034cd23442cb3bfccd913509fb8f347240482023-09-03 14:49:5925 days 10 hrs ago Trader Joe: Factory  Contract Creation0 AVAX
0x37c09c55c2e31be2892c97b4614cf264ac25f48db7d61295c48c94921b363b1d346505922023-09-01 18:40:5427 days 6 hrs ago Trader Joe: Factory  Contract Creation0 AVAX
0xedcff5c33a36d737e5205d262702e3191b8ed165f7340686b07a14a794208024346498302023-09-01 18:14:0827 days 7 hrs ago Trader Joe: Factory  Contract Creation0 AVAX
0x8f36d89026fff71b25fc9419d8d472474217e02a868c15a700fa90255f3449b1346341442023-09-01 8:56:0227 days 16 hrs ago Trader Joe: Factory  Contract Creation0 AVAX
0x8518ec01173215b2daa6458d68b7ca208e70805e3dca2b622dca2c549a67da3e346171262023-08-31 22:42:1628 days 2 hrs ago Trader Joe: Factory  Contract Creation0 AVAX
0x0d9f883046f08fb451685287eb9a8b296250996a064910db2e05f8c57d465cfd345869002023-08-31 5:01:4028 days 20 hrs ago Trader Joe: Factory  Contract Creation0 AVAX
0x27c92c09bdb7f92091cc53181f0cd6ae110925e9d35668a889357bff7107567b345654492023-08-30 15:54:2829 days 9 hrs ago Trader Joe: Factory  Contract Creation0 AVAX
[ Download CSV Export 
Index Block
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
JoeFactory

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at snowtrace.io on 2021-11-05
*/

// File: contracts/traderjoe/interfaces/IJoeFactory.sol

// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.5.0;

interface IJoeFactory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function migrator() external view returns (address);

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

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;

    function setMigrator(address) external;
}

// File: contracts/traderjoe/libraries/SafeMath.sol


pragma solidity =0.6.12;

// a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math)

library SafeMathJoe {
    function add(uint256 x, uint256 y) internal pure returns (uint256 z) {
        require((z = x + y) >= x, "ds-math-add-overflow");
    }

    function sub(uint256 x, uint256 y) internal pure returns (uint256 z) {
        require((z = x - y) <= x, "ds-math-sub-underflow");
    }

    function mul(uint256 x, uint256 y) internal pure returns (uint256 z) {
        require(y == 0 || (z = x * y) / y == x, "ds-math-mul-overflow");
    }
}

// File: contracts/traderjoe/JoeERC20.sol


pragma solidity =0.6.12;


contract JoeERC20 {
    using SafeMathJoe for uint256;

    string public constant name = "Joe LP Token";
    string public constant symbol = "JLP";
    uint8 public constant decimals = 18;
    uint256 public totalSupply;
    mapping(address => uint256) public balanceOf;
    mapping(address => mapping(address => uint256)) public allowance;

    bytes32 public DOMAIN_SEPARATOR;
    // keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
    bytes32 public constant PERMIT_TYPEHASH =
        0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9;
    mapping(address => uint256) public nonces;

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    constructor() public {
        uint256 chainId;
        assembly {
            chainId := chainid()
        }
        DOMAIN_SEPARATOR = keccak256(
            abi.encode(
                keccak256(
                    "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"
                ),
                keccak256(bytes(name)),
                keccak256(bytes("1")),
                chainId,
                address(this)
            )
        );
    }

    function _mint(address to, uint256 value) internal {
        totalSupply = totalSupply.add(value);
        balanceOf[to] = balanceOf[to].add(value);
        emit Transfer(address(0), to, value);
    }

    function _burn(address from, uint256 value) internal {
        balanceOf[from] = balanceOf[from].sub(value);
        totalSupply = totalSupply.sub(value);
        emit Transfer(from, address(0), value);
    }

    function _approve(
        address owner,
        address spender,
        uint256 value
    ) private {
        allowance[owner][spender] = value;
        emit Approval(owner, spender, value);
    }

    function _transfer(
        address from,
        address to,
        uint256 value
    ) private {
        balanceOf[from] = balanceOf[from].sub(value);
        balanceOf[to] = balanceOf[to].add(value);
        emit Transfer(from, to, value);
    }

    function approve(address spender, uint256 value) external returns (bool) {
        _approve(msg.sender, spender, value);
        return true;
    }

    function transfer(address to, uint256 value) external returns (bool) {
        _transfer(msg.sender, to, value);
        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool) {
        if (allowance[from][msg.sender] != uint256(-1)) {
            allowance[from][msg.sender] = allowance[from][msg.sender].sub(
                value
            );
        }
        _transfer(from, to, value);
        return true;
    }

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external {
        require(deadline >= block.timestamp, "Joe: EXPIRED");
        bytes32 digest = keccak256(
            abi.encodePacked(
                "\x19\x01",
                DOMAIN_SEPARATOR,
                keccak256(
                    abi.encode(
                        PERMIT_TYPEHASH,
                        owner,
                        spender,
                        value,
                        nonces[owner]++,
                        deadline
                    )
                )
            )
        );
        address recoveredAddress = ecrecover(digest, v, r, s);
        require(
            recoveredAddress != address(0) && recoveredAddress == owner,
            "Joe: INVALID_SIGNATURE"
        );
        _approve(owner, spender, value);
    }
}

// File: contracts/traderjoe/libraries/Math.sol


pragma solidity =0.6.12;

// a library for performing various math operations

library Math {
    function min(uint256 x, uint256 y) internal pure returns (uint256 z) {
        z = x < y ? x : y;
    }

    // babylonian method (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method)
    function sqrt(uint256 y) internal pure returns (uint256 z) {
        if (y > 3) {
            z = y;
            uint256 x = y / 2 + 1;
            while (x < z) {
                z = x;
                x = (y / x + x) / 2;
            }
        } else if (y != 0) {
            z = 1;
        }
    }
}

// File: contracts/traderjoe/libraries/UQ112x112.sol


pragma solidity =0.6.12;

// a library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format))

// range: [0, 2**112 - 1]
// resolution: 1 / 2**112

library UQ112x112 {
    uint224 constant Q112 = 2**112;

    // encode a uint112 as a UQ112x112
    function encode(uint112 y) internal pure returns (uint224 z) {
        z = uint224(y) * Q112; // never overflows
    }

    // divide a UQ112x112 by a uint112, returning a UQ112x112
    function uqdiv(uint224 x, uint112 y) internal pure returns (uint224 z) {
        z = x / uint224(y);
    }
}

// File: contracts/traderjoe/interfaces/IERC20.sol


pragma solidity >=0.5.0;

interface IERC20Joe {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);

    function totalSupply() external view returns (uint256);

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

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);
}

// File: contracts/traderjoe/interfaces/IJoeCallee.sol


pragma solidity >=0.5.0;

interface IJoeCallee {
    function joeCall(
        address sender,
        uint256 amount0,
        uint256 amount1,
        bytes calldata data
    ) external;
}

// File: contracts/traderjoe/JoePair.sol


pragma solidity =0.6.12;







interface IMigrator {
    // Return the desired amount of liquidity token that the migrator wants.
    function desiredLiquidity() external view returns (uint256);
}

contract JoePair is JoeERC20 {
    using SafeMathJoe for uint256;
    using UQ112x112 for uint224;

    uint256 public constant MINIMUM_LIQUIDITY = 10**3;
    bytes4 private constant SELECTOR =
        bytes4(keccak256(bytes("transfer(address,uint256)")));

    address public factory;
    address public token0;
    address public token1;

    uint112 private reserve0; // uses single storage slot, accessible via getReserves
    uint112 private reserve1; // uses single storage slot, accessible via getReserves
    uint32 private blockTimestampLast; // uses single storage slot, accessible via getReserves

    uint256 public price0CumulativeLast;
    uint256 public price1CumulativeLast;
    uint256 public kLast; // reserve0 * reserve1, as of immediately after the most recent liquidity event

    uint256 private unlocked = 1;
    modifier lock() {
        require(unlocked == 1, "Joe: LOCKED");
        unlocked = 0;
        _;
        unlocked = 1;
    }

    function getReserves()
        public
        view
        returns (
            uint112 _reserve0,
            uint112 _reserve1,
            uint32 _blockTimestampLast
        )
    {
        _reserve0 = reserve0;
        _reserve1 = reserve1;
        _blockTimestampLast = blockTimestampLast;
    }

    function _safeTransfer(
        address token,
        address to,
        uint256 value
    ) private {
        (bool success, bytes memory data) = token.call(
            abi.encodeWithSelector(SELECTOR, to, value)
        );
        require(
            success && (data.length == 0 || abi.decode(data, (bool))),
            "Joe: TRANSFER_FAILED"
        );
    }

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    constructor() public {
        factory = msg.sender;
    }

    // called once by the factory at time of deployment
    function initialize(address _token0, address _token1) external {
        require(msg.sender == factory, "Joe: FORBIDDEN"); // sufficient check
        token0 = _token0;
        token1 = _token1;
    }

    // update reserves and, on the first call per block, price accumulators
    function _update(
        uint256 balance0,
        uint256 balance1,
        uint112 _reserve0,
        uint112 _reserve1
    ) private {
        require(
            balance0 <= uint112(-1) && balance1 <= uint112(-1),
            "Joe: OVERFLOW"
        );
        uint32 blockTimestamp = uint32(block.timestamp % 2**32);
        uint32 timeElapsed = blockTimestamp - blockTimestampLast; // overflow is desired
        if (timeElapsed > 0 && _reserve0 != 0 && _reserve1 != 0) {
            // * never overflows, and + overflow is desired
            price0CumulativeLast +=
                uint256(UQ112x112.encode(_reserve1).uqdiv(_reserve0)) *
                timeElapsed;
            price1CumulativeLast +=
                uint256(UQ112x112.encode(_reserve0).uqdiv(_reserve1)) *
                timeElapsed;
        }
        reserve0 = uint112(balance0);
        reserve1 = uint112(balance1);
        blockTimestampLast = blockTimestamp;
        emit Sync(reserve0, reserve1);
    }

    // if fee is on, mint liquidity equivalent to 1/6th of the growth in sqrt(k)
    function _mintFee(uint112 _reserve0, uint112 _reserve1)
        private
        returns (bool feeOn)
    {
        address feeTo = IJoeFactory(factory).feeTo();
        feeOn = feeTo != address(0);
        uint256 _kLast = kLast; // gas savings
        if (feeOn) {
            if (_kLast != 0) {
                uint256 rootK = Math.sqrt(uint256(_reserve0).mul(_reserve1));
                uint256 rootKLast = Math.sqrt(_kLast);
                if (rootK > rootKLast) {
                    uint256 numerator = totalSupply.mul(rootK.sub(rootKLast));
                    uint256 denominator = rootK.mul(5).add(rootKLast);
                    uint256 liquidity = numerator / denominator;
                    if (liquidity > 0) _mint(feeTo, liquidity);
                }
            }
        } else if (_kLast != 0) {
            kLast = 0;
        }
    }

    // this low-level function should be called from a contract which performs important safety checks
    function mint(address to) external lock returns (uint256 liquidity) {
        (uint112 _reserve0, uint112 _reserve1, ) = getReserves(); // gas savings
        uint256 balance0 = IERC20Joe(token0).balanceOf(address(this));
        uint256 balance1 = IERC20Joe(token1).balanceOf(address(this));
        uint256 amount0 = balance0.sub(_reserve0);
        uint256 amount1 = balance1.sub(_reserve1);

        bool feeOn = _mintFee(_reserve0, _reserve1);
        uint256 _totalSupply = totalSupply; // gas savings, must be defined here since totalSupply can update in _mintFee
        if (_totalSupply == 0) {
            address migrator = IJoeFactory(factory).migrator();
            if (msg.sender == migrator) {
                liquidity = IMigrator(migrator).desiredLiquidity();
                require(
                    liquidity > 0 && liquidity != uint256(-1),
                    "Bad desired liquidity"
                );
            } else {
                require(migrator == address(0), "Must not have migrator");
                liquidity = Math.sqrt(amount0.mul(amount1)).sub(
                    MINIMUM_LIQUIDITY
                );
                _mint(address(0), MINIMUM_LIQUIDITY); // permanently lock the first MINIMUM_LIQUIDITY tokens
            }
        } else {
            liquidity = Math.min(
                amount0.mul(_totalSupply) / _reserve0,
                amount1.mul(_totalSupply) / _reserve1
            );
        }
        require(liquidity > 0, "Joe: INSUFFICIENT_LIQUIDITY_MINTED");
        _mint(to, liquidity);

        _update(balance0, balance1, _reserve0, _reserve1);
        if (feeOn) kLast = uint256(reserve0).mul(reserve1); // reserve0 and reserve1 are up-to-date
        emit Mint(msg.sender, amount0, amount1);
    }

    // this low-level function should be called from a contract which performs important safety checks
    function burn(address to)
        external
        lock
        returns (uint256 amount0, uint256 amount1)
    {
        (uint112 _reserve0, uint112 _reserve1, ) = getReserves(); // gas savings
        address _token0 = token0; // gas savings
        address _token1 = token1; // gas savings
        uint256 balance0 = IERC20Joe(_token0).balanceOf(address(this));
        uint256 balance1 = IERC20Joe(_token1).balanceOf(address(this));
        uint256 liquidity = balanceOf[address(this)];

        bool feeOn = _mintFee(_reserve0, _reserve1);
        uint256 _totalSupply = totalSupply; // gas savings, must be defined here since totalSupply can update in _mintFee
        amount0 = liquidity.mul(balance0) / _totalSupply; // using balances ensures pro-rata distribution
        amount1 = liquidity.mul(balance1) / _totalSupply; // using balances ensures pro-rata distribution
        require(
            amount0 > 0 && amount1 > 0,
            "Joe: INSUFFICIENT_LIQUIDITY_BURNED"
        );
        _burn(address(this), liquidity);
        _safeTransfer(_token0, to, amount0);
        _safeTransfer(_token1, to, amount1);
        balance0 = IERC20Joe(_token0).balanceOf(address(this));
        balance1 = IERC20Joe(_token1).balanceOf(address(this));

        _update(balance0, balance1, _reserve0, _reserve1);
        if (feeOn) kLast = uint256(reserve0).mul(reserve1); // reserve0 and reserve1 are up-to-date
        emit Burn(msg.sender, amount0, amount1, to);
    }

    // this low-level function should be called from a contract which performs important safety checks
    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external lock {
        require(
            amount0Out > 0 || amount1Out > 0,
            "Joe: INSUFFICIENT_OUTPUT_AMOUNT"
        );
        (uint112 _reserve0, uint112 _reserve1, ) = getReserves(); // gas savings
        require(
            amount0Out < _reserve0 && amount1Out < _reserve1,
            "Joe: INSUFFICIENT_LIQUIDITY"
        );

        uint256 balance0;
        uint256 balance1;
        {
            // scope for _token{0,1}, avoids stack too deep errors
            address _token0 = token0;
            address _token1 = token1;
            require(to != _token0 && to != _token1, "Joe: INVALID_TO");
            if (amount0Out > 0) _safeTransfer(_token0, to, amount0Out); // optimistically transfer tokens
            if (amount1Out > 0) _safeTransfer(_token1, to, amount1Out); // optimistically transfer tokens
            if (data.length > 0)
                IJoeCallee(to).joeCall(
                    msg.sender,
                    amount0Out,
                    amount1Out,
                    data
                );
            balance0 = IERC20Joe(_token0).balanceOf(address(this));
            balance1 = IERC20Joe(_token1).balanceOf(address(this));
        }
        uint256 amount0In = balance0 > _reserve0 - amount0Out
            ? balance0 - (_reserve0 - amount0Out)
            : 0;
        uint256 amount1In = balance1 > _reserve1 - amount1Out
            ? balance1 - (_reserve1 - amount1Out)
            : 0;
        require(
            amount0In > 0 || amount1In > 0,
            "Joe: INSUFFICIENT_INPUT_AMOUNT"
        );
        {
            // scope for reserve{0,1}Adjusted, avoids stack too deep errors
            uint256 balance0Adjusted = balance0.mul(1000).sub(amount0In.mul(3));
            uint256 balance1Adjusted = balance1.mul(1000).sub(amount1In.mul(3));
            require(
                balance0Adjusted.mul(balance1Adjusted) >=
                    uint256(_reserve0).mul(_reserve1).mul(1000**2),
                "Joe: K"
            );
        }

        _update(balance0, balance1, _reserve0, _reserve1);
        emit Swap(msg.sender, amount0In, amount1In, amount0Out, amount1Out, to);
    }

    // force balances to match reserves
    function skim(address to) external lock {
        address _token0 = token0; // gas savings
        address _token1 = token1; // gas savings
        _safeTransfer(
            _token0,
            to,
            IERC20Joe(_token0).balanceOf(address(this)).sub(reserve0)
        );
        _safeTransfer(
            _token1,
            to,
            IERC20Joe(_token1).balanceOf(address(this)).sub(reserve1)
        );
    }

    // force reserves to match balances
    function sync() external lock {
        _update(
            IERC20Joe(token0).balanceOf(address(this)),
            IERC20Joe(token1).balanceOf(address(this)),
            reserve0,
            reserve1
        );
    }
}

// File: contracts/traderjoe/JoeFactory.sol


pragma solidity =0.6.12;



contract JoeFactory is IJoeFactory {
    address public override feeTo;
    address public override feeToSetter;
    address public override migrator;

    mapping(address => mapping(address => address)) public override getPair;
    address[] public override allPairs;

    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    constructor(address _feeToSetter) public {
        feeToSetter = _feeToSetter;
    }

    function allPairsLength() external view override returns (uint256) {
        return allPairs.length;
    }

    function pairCodeHash() external pure returns (bytes32) {
        return keccak256(type(JoePair).creationCode);
    }

    function createPair(address tokenA, address tokenB)
        external
        override
        returns (address pair)
    {
        require(tokenA != tokenB, "Joe: IDENTICAL_ADDRESSES");
        (address token0, address token1) = tokenA < tokenB
            ? (tokenA, tokenB)
            : (tokenB, tokenA);
        require(token0 != address(0), "Joe: ZERO_ADDRESS");
        require(getPair[token0][token1] == address(0), "Joe: PAIR_EXISTS"); // single check is sufficient
        bytes memory bytecode = type(JoePair).creationCode;
        bytes32 salt = keccak256(abi.encodePacked(token0, token1));
        assembly {
            pair := create2(0, add(bytecode, 32), mload(bytecode), salt)
        }
        JoePair(pair).initialize(token0, token1);
        getPair[token0][token1] = pair;
        getPair[token1][token0] = pair; // populate mapping in the reverse direction
        allPairs.push(pair);
        emit PairCreated(token0, token1, pair, allPairs.length);
    }

    function setFeeTo(address _feeTo) external override {
        require(msg.sender == feeToSetter, "Joe: FORBIDDEN");
        feeTo = _feeTo;
    }

    function setMigrator(address _migrator) external override {
        require(msg.sender == feeToSetter, "Joe: FORBIDDEN");
        migrator = _migrator;
    }

    function setFeeToSetter(address _feeToSetter) external override {
        require(msg.sender == feeToSetter, "Joe: FORBIDDEN");
        feeToSetter = _feeToSetter;
    }
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_feeToSetter","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token0","type":"address"},{"indexed":true,"internalType":"address","name":"token1","type":"address"},{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"PairCreated","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allPairs","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allPairsLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"}],"name":"createPair","outputs":[{"internalType":"address","name":"pair","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeTo","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeToSetter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"getPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"migrator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pairCodeHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_feeTo","type":"address"}],"name":"setFeeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeToSetter","type":"address"}],"name":"setFeeToSetter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_migrator","type":"address"}],"name":"setMigrator","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b50604051612bb3380380612bb38339818101604052602081101561003357600080fd5b5051600180546001600160a01b0319166001600160a01b03909216919091179055612b50806100636000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80637cd07e47116100715780637cd07e47146101395780639aab924814610141578063a2e74af614610149578063c9c653961461016f578063e6a439051461019d578063f46901ed146101cb576100a9565b8063017e7e58146100ae578063094b7415146100d25780631e3dd18b146100da57806323cf3118146100f7578063574f2ba31461011f575b600080fd5b6100b66101f1565b604080516001600160a01b039092168252519081900360200190f35b6100b6610200565b6100b6600480360360208110156100f057600080fd5b503561020f565b61011d6004803603602081101561010d57600080fd5b50356001600160a01b0316610236565b005b6101276102a8565b60408051918252519081900360200190f35b6100b66102ae565b6101276102bd565b61011d6004803603602081101561015f57600080fd5b50356001600160a01b03166102ef565b6100b66004803603604081101561018557600080fd5b506001600160a01b0381358116916020013516610361565b6100b6600480360360408110156101b357600080fd5b506001600160a01b038135811691602001351661067a565b61011d600480360360208110156101e157600080fd5b50356001600160a01b03166106a0565b6000546001600160a01b031681565b6001546001600160a01b031681565b6004818154811061021c57fe5b6000918252602090912001546001600160a01b0316905081565b6001546001600160a01b03163314610286576040805162461bcd60e51b815260206004820152600e60248201526d2537b29d102327a92124a22222a760911b604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b60045490565b6002546001600160a01b031681565b6000604051806020016102cf90610712565b6020820181038252601f19601f8201166040525080519060200120905090565b6001546001600160a01b0316331461033f576040805162461bcd60e51b815260206004820152600e60248201526d2537b29d102327a92124a22222a760911b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000816001600160a01b0316836001600160a01b031614156103ca576040805162461bcd60e51b815260206004820152601860248201527f4a6f653a204944454e544943414c5f4144445245535345530000000000000000604482015290519081900360640190fd5b600080836001600160a01b0316856001600160a01b0316106103ed5783856103f0565b84845b90925090506001600160a01b038216610444576040805162461bcd60e51b81526020600482015260116024820152704a6f653a205a45524f5f4144445245535360781b604482015290519081900360640190fd5b6001600160a01b038281166000908152600360209081526040808320858516845290915290205416156104b1576040805162461bcd60e51b815260206004820152601060248201526f4a6f653a20504149525f45584953545360801b604482015290519081900360640190fd5b6060604051806020016104c390610712565b6020820181038252601f19601f8201166040525090506000838360405160200180836001600160a01b031660601b8152601401826001600160a01b031660601b815260140192505050604051602081830303815290604052805190602001209050808251602084016000f59450846001600160a01b031663485cc95585856040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b0316815260200192505050600060405180830381600087803b15801561059057600080fd5b505af11580156105a4573d6000803e3d6000fd5b505050506001600160a01b0384811660008181526003602081815260408084208987168086529083528185208054978d166001600160a01b031998891681179091559383528185208686528352818520805488168517905560048054600181018255958190527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90950180549097168417909655925483519283529082015281517f0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9929181900390910190a35050505092915050565b60036020908152600092835260408084209091529082529020546001600160a01b031681565b6001546001600160a01b031633146106f0576040805162461bcd60e51b815260206004820152600e60248201526d2537b29d102327a92124a22222a760911b604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6123fb806107208339019056fe60806040526001600c5534801561001557600080fd5b50604080518082018252600c81526b2537b2902628102a37b5b2b760a11b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527fd4eb8415c62493390808cc42ba6f3ba97fa30eb773771605674d83c7162115e7818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528351808303909101815260c09091019092528151910120600355600580546001600160a01b031916331790556122f18061010a6000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80636a627842116100f9578063ba9a7a5611610097578063d21220a711610071578063d21220a714610534578063d505accf1461053c578063dd62ed3e1461058d578063fff6cae9146105bb576101a9565b8063ba9a7a56146104fe578063bc25cf7714610506578063c45a01551461052c576101a9565b80637ecebe00116100d35780637ecebe001461046557806389afcb441461048b57806395d89b41146104ca578063a9059cbb146104d2576101a9565b80636a6278421461041157806370a08231146104375780637464fc3d1461045d576101a9565b806323b872dd116101665780633644e515116101405780633644e515146103cb578063485cc955146103d35780635909c0d5146104015780635a3d549314610409576101a9565b806323b872dd1461036f57806330adf81f146103a5578063313ce567146103ad576101a9565b8063022c0d9f146101ae57806306fdde031461023c5780630902f1ac146102b9578063095ea7b3146102f15780630dfe16811461033157806318160ddd14610355575b600080fd5b61023a600480360360808110156101c457600080fd5b8135916020810135916001600160a01b0360408301351691908101906080810160608201356401000000008111156101fb57600080fd5b82018360208201111561020d57600080fd5b8035906020019184600183028401116401000000008311171561022f57600080fd5b5090925090506105c3565b005b610244610afb565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561027e578181015183820152602001610266565b50505050905090810190601f1680156102ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c1610b23565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b61031d6004803603604081101561030757600080fd5b506001600160a01b038135169060200135610b4d565b604080519115158252519081900360200190f35b610339610b64565b604080516001600160a01b039092168252519081900360200190f35b61035d610b73565b60408051918252519081900360200190f35b61031d6004803603606081101561038557600080fd5b506001600160a01b03813581169160208101359091169060400135610b79565b61035d610c0d565b6103b5610c31565b6040805160ff9092168252519081900360200190f35b61035d610c36565b61023a600480360360408110156103e957600080fd5b506001600160a01b0381358116916020013516610c3c565b61035d610cba565b61035d610cc0565b61035d6004803603602081101561042757600080fd5b50356001600160a01b0316610cc6565b61035d6004803603602081101561044d57600080fd5b50356001600160a01b031661113c565b61035d61114e565b61035d6004803603602081101561047b57600080fd5b50356001600160a01b0316611154565b6104b1600480360360208110156104a157600080fd5b50356001600160a01b0316611166565b6040805192835260208301919091528051918290030190f35b6102446114f4565b61031d600480360360408110156104e857600080fd5b506001600160a01b038135169060200135611513565b61035d611520565b61023a6004803603602081101561051c57600080fd5b50356001600160a01b0316611526565b610339611692565b6103396116a1565b61023a600480360360e081101561055257600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356116b0565b61035d600480360360408110156105a357600080fd5b506001600160a01b03813581169160200135166118a5565b61023a6118c2565b600c54600114610608576040805162461bcd60e51b815260206004820152600b60248201526a129bd94e881313d0d2d15160aa1b604482015290519081900360640190fd5b6000600c558415158061061b5750600084115b61066c576040805162461bcd60e51b815260206004820152601f60248201527f4a6f653a20494e53554646494349454e545f4f55545055545f414d4f554e5400604482015290519081900360640190fd5b600080610677610b23565b5091509150816001600160701b03168710801561069c5750806001600160701b031686105b6106ed576040805162461bcd60e51b815260206004820152601b60248201527f4a6f653a20494e53554646494349454e545f4c49515549444954590000000000604482015290519081900360640190fd5b60065460075460009182916001600160a01b0391821691908116908916821480159061072b5750806001600160a01b0316896001600160a01b031614155b61076e576040805162461bcd60e51b815260206004820152600f60248201526e4a6f653a20494e56414c49445f544f60881b604482015290519081900360640190fd5b8a1561077f5761077f828a8d611a1e565b891561079057610790818a8c611a1e565b861561084257886001600160a01b031663ee22dd87338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561082957600080fd5b505af115801561083d573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561088857600080fd5b505afa15801561089c573d6000803e3d6000fd5b505050506040513d60208110156108b257600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b1580156108fe57600080fd5b505afa158015610912573d6000803e3d6000fd5b505050506040513d602081101561092857600080fd5b5051925060009150506001600160701b0385168a9003831161094b57600061095a565b89856001600160701b03160383035b9050600089856001600160701b0316038311610977576000610986565b89856001600160701b03160383035b905060008211806109975750600081115b6109e8576040805162461bcd60e51b815260206004820152601e60248201527f4a6f653a20494e53554646494349454e545f494e5055545f414d4f554e540000604482015290519081900360640190fd5b6000610a0a6109f8846003611baf565b610a04876103e8611baf565b90611c12565b90506000610a1c6109f8846003611baf565b9050610a41620f4240610a3b6001600160701b038b8116908b16611baf565b90611baf565b610a4b8383611baf565b1015610a87576040805162461bcd60e51b81526020600482015260066024820152654a6f653a204b60d01b604482015290519081900360640190fd5b5050610a9584848888611c62565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600c55505050505050505050565b6040518060400160405280600c81526020016b2537b2902628102a37b5b2b760a11b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610b5a338484611e1b565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610bf8576001600160a01b0384166000908152600260209081526040808320338452909152902054610bd39083611c12565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610c03848484611e7d565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610c8c576040805162461bcd60e51b815260206004820152600e60248201526d2537b29d102327a92124a22222a760911b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b60095481565b600a5481565b6000600c54600114610d0d576040805162461bcd60e51b815260206004820152600b60248201526a129bd94e881313d0d2d15160aa1b604482015290519081900360640190fd5b6000600c81905580610d1d610b23565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610d7157600080fd5b505afa158015610d85573d6000803e3d6000fd5b505050506040513d6020811015610d9b57600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610dee57600080fd5b505afa158015610e02573d6000803e3d6000fd5b505050506040513d6020811015610e1857600080fd5b505190506000610e31836001600160701b038716611c12565b90506000610e48836001600160701b038716611c12565b90506000610e568787611f2b565b6000549091508061102d5760055460408051637cd07e4760e01b815290516000926001600160a01b031691637cd07e47916004808301926020929190829003018186803b158015610ea657600080fd5b505afa158015610eba573d6000803e3d6000fd5b505050506040513d6020811015610ed057600080fd5b50519050336001600160a01b0382161415610fab57806001600160a01b03166340dc0e376040518163ffffffff1660e01b815260040160206040518083038186803b158015610f1e57600080fd5b505afa158015610f32573d6000803e3d6000fd5b505050506040513d6020811015610f4857600080fd5b505199508915801590610f5d57506000198a14155b610fa6576040805162461bcd60e51b81526020600482015260156024820152744261642064657369726564206c697175696469747960581b604482015290519081900360640190fd5b611027565b6001600160a01b03811615611000576040805162461bcd60e51b815260206004820152601660248201527526bab9ba103737ba103430bb329036b4b3b930ba37b960511b604482015290519081900360640190fd5b6110186103e8610a046110138888611baf565b61206b565b995061102760006103e86120bd565b50611070565b61106d6001600160701b0389166110448684611baf565b8161104b57fe5b046001600160701b0389166110608685611baf565b8161106757fe5b04612147565b98505b600089116110af5760405162461bcd60e51b815260040180806020018281038252602281526020018061229a6022913960400191505060405180910390fd5b6110b98a8a6120bd565b6110c586868a8a611c62565b81156110ef576008546110eb906001600160701b0380821691600160701b900416611baf565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600c5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600c546001146111ae576040805162461bcd60e51b815260206004820152600b60248201526a129bd94e881313d0d2d15160aa1b604482015290519081900360640190fd5b6000600c819055806111be610b23565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b15801561121a57600080fd5b505afa15801561122e573d6000803e3d6000fd5b505050506040513d602081101561124457600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b15801561129257600080fd5b505afa1580156112a6573d6000803e3d6000fd5b505050506040513d60208110156112bc57600080fd5b5051306000908152600160205260408120549192506112db8888611f2b565b600054909150806112ec8487611baf565b816112f357fe5b049a50806113018486611baf565b8161130857fe5b04995060008b11801561131b575060008a115b6113565760405162461bcd60e51b81526004018080602001828103825260228152602001806122786022913960400191505060405180910390fd5b611360308461215f565b61136b878d8d611a1e565b611376868d8c611a1e565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b1580156113bc57600080fd5b505afa1580156113d0573d6000803e3d6000fd5b505050506040513d60208110156113e657600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b15801561143257600080fd5b505afa158015611446573d6000803e3d6000fd5b505050506040513d602081101561145c57600080fd5b5051935061146c85858b8b611c62565b811561149657600854611492906001600160701b0380821691600160701b900416611baf565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600c81905550915091565b6040518060400160405280600381526020016204a4c560ec1b81525081565b6000610b5a338484611e7d565b6103e881565b600c5460011461156b576040805162461bcd60e51b815260206004820152600b60248201526a129bd94e881313d0d2d15160aa1b604482015290519081900360640190fd5b6000600c55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b039485169490931692611614928592879261160f926001600160701b03169185916370a0823191602480820192602092909190829003018186803b1580156115dd57600080fd5b505afa1580156115f1573d6000803e3d6000fd5b505050506040513d602081101561160757600080fd5b505190611c12565b611a1e565b611688818461160f6008600e9054906101000a90046001600160701b03166001600160701b0316856001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156115dd57600080fd5b50506001600c5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b428410156116f4576040805162461bcd60e51b815260206004820152600c60248201526b129bd94e881156141254915160a21b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa15801561180f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906118455750886001600160a01b0316816001600160a01b0316145b61188f576040805162461bcd60e51b81526020600482015260166024820152754a6f653a20494e56414c49445f5349474e415455524560501b604482015290519081900360640190fd5b61189a898989611e1b565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600c54600114611907576040805162461bcd60e51b815260206004820152600b60248201526a129bd94e881313d0d2d15160aa1b604482015290519081900360640190fd5b6000600c55600654604080516370a0823160e01b81523060048201529051611a17926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561195857600080fd5b505afa15801561196c573d6000803e3d6000fd5b505050506040513d602081101561198257600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156119cf57600080fd5b505afa1580156119e3573d6000803e3d6000fd5b505050506040513d60208110156119f957600080fd5b50516008546001600160701b0380821691600160701b900416611c62565b6001600c55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310611acb5780518252601f199092019160209182019101611aac565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611b2d576040519150601f19603f3d011682016040523d82523d6000602084013e611b32565b606091505b5091509150818015611b60575080511580611b605750808060200190516020811015611b5d57600080fd5b50515b611ba8576040805162461bcd60e51b8152602060048201526014602482015273129bd94e881514905394d1915497d1905253115160621b604482015290519081900360640190fd5b5050505050565b6000811580611bca57505080820282828281611bc757fe5b04145b610b5e576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610b5e576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b038411801590611c8057506001600160701b038311155b611cc1576040805162461bcd60e51b815260206004820152600d60248201526c4a6f653a204f564552464c4f5760981b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611cf157506001600160701b03841615155b8015611d0557506001600160701b03831615155b15611d70578063ffffffff16611d2d85611d1e866121f1565b6001600160e01b031690612203565b600980546001600160e01b03929092169290920201905563ffffffff8116611d5884611d1e876121f1565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611ea09082611c12565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611ecf9082612228565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611f7c57600080fd5b505afa158015611f90573d6000803e3d6000fd5b505050506040513d6020811015611fa657600080fd5b5051600b546001600160a01b038216158015945091925090612057578015612052576000611fe36110136001600160701b03888116908816611baf565b90506000611ff08361206b565b90508082111561204f5760006120126120098484611c12565b60005490611baf565b9050600061202b83612025866005611baf565b90612228565b9050600081838161203857fe5b049050801561204b5761204b87826120bd565b5050505b50505b612063565b8015612063576000600b555b505092915050565b600060038211156120ae575080600160028204015b818110156120a85780915060028182858161209757fe5b0401816120a057fe5b049050612080565b506120b8565b81156120b8575060015b919050565b6000546120ca9082612228565b60009081556001600160a01b0383168152600160205260409020546120ef9082612228565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008183106121565781612158565b825b9392505050565b6001600160a01b0382166000908152600160205260409020546121829082611c12565b6001600160a01b038316600090815260016020526040812091909155546121a99082611c12565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161222057fe5b049392505050565b80820182811015610b5e576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe4a6f653a20494e53554646494349454e545f4c49515549444954595f4255524e45444a6f653a20494e53554646494349454e545f4c49515549444954595f4d494e544544a2646970667358221220331c7da4efdadd19669d3d4492f60d8630c0b61e019b3fe2070f1d7d2f93d55164736f6c634300060c0033a264697066735822122072c5f62c72b32dcddc3aab68fae3d47e651ccede1c68c92e010bc03be30fe43264736f6c634300060c00330000000000000000000000005d3e4c0fe11e0ae4c32f0ff74b4544c49538ac61

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

0000000000000000000000005d3e4c0fe11e0ae4c32f0ff74b4544c49538ac61

-----Decoded View---------------
Arg [0] : _feeToSetter (address): 0x5d3e4c0fe11e0ae4c32f0ff74b4544c49538ac61

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000005d3e4c0fe11e0ae4c32f0ff74b4544c49538ac61


Deployed ByteCode Sourcemap

20025:2265:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20067:29;;;:::i;:::-;;;;-1:-1:-1;;;;;20067:29:0;;;;;;;;;;;;;;20103:35;;;:::i;20264:34::-;;;;;;;;;;;;;;;;-1:-1:-1;20264:34:0;;:::i;21947:160::-;;;;;;;;;;;;;;;;-1:-1:-1;21947:160:0;-1:-1:-1;;;;;21947:160:0;;:::i;:::-;;20541:108;;;:::i;:::-;;;;;;;;;;;;;;;;20145:32;;;:::i;20657:119::-;;;:::i;22115:172::-;;;;;;;;;;;;;;;;-1:-1:-1;22115:172:0;-1:-1:-1;;;;;22115:172:0;;:::i;20784:999::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20784:999:0;;;;;;;;;;:::i;20186:71::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20186:71:0;;;;;;;;;;:::i;21791:148::-;;;;;;;;;;;;;;;;-1:-1:-1;21791:148:0;-1:-1:-1;;;;;21791:148:0;;:::i;20067:29::-;;;-1:-1:-1;;;;;20067:29:0;;:::o;20103:35::-;;;-1:-1:-1;;;;;20103:35:0;;:::o;20264:34::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20264:34:0;;-1:-1:-1;20264:34:0;:::o;21947:160::-;22038:11;;-1:-1:-1;;;;;22038:11:0;22024:10;:25;22016:52;;;;;-1:-1:-1;;;22016:52:0;;;;;;;;;;;;-1:-1:-1;;;22016:52:0;;;;;;;;;;;;;;;22079:8;:20;;-1:-1:-1;;;;;;22079:20:0;-1:-1:-1;;;;;22079:20:0;;;;;;;;;;21947:160::o;20541:108::-;20626:8;:15;20541:108;:::o;20145:32::-;;;-1:-1:-1;;;;;20145:32:0;;:::o;20657:119::-;20704:7;20741:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;20731:37;;;;;;20724:44;;20657:119;:::o;22115:172::-;22212:11;;-1:-1:-1;;;;;22212:11:0;22198:10;:25;22190:52;;;;;-1:-1:-1;;;22190:52:0;;;;;;;;;;;;-1:-1:-1;;;22190:52:0;;;;;;;;;;;;;;;22253:11;:26;;-1:-1:-1;;;;;;22253:26:0;-1:-1:-1;;;;;22253:26:0;;;;;;;;;;22115:172::o;20784:999::-;20890:12;20938:6;-1:-1:-1;;;;;20928:16:0;:6;-1:-1:-1;;;;;20928:16:0;;;20920:53;;;;;-1:-1:-1;;;20920:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20985:14;21001;21028:6;-1:-1:-1;;;;;21019:15:0;:6;-1:-1:-1;;;;;21019:15:0;;:79;;21083:6;21091;21019:79;;;21051:6;21059;21019:79;20984:114;;-1:-1:-1;20984:114:0;-1:-1:-1;;;;;;21117:20:0;;21109:50;;;;;-1:-1:-1;;;21109:50:0;;;;;;;;;;;;-1:-1:-1;;;21109:50:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;21178:15:0;;;21213:1;21178:15;;;:7;:15;;;;;;;;:23;;;;;;;;;;;;:37;21170:66;;;;;-1:-1:-1;;;21170:66:0;;;;;;;;;;;;-1:-1:-1;;;21170:66:0;;;;;;;;;;;;;;;21277:21;21301:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;21277:50;;21338:12;21380:6;21388;21363:32;;;;;;-1:-1:-1;;;;;21363:32:0;;;;;;;;-1:-1:-1;;;;;21363:32:0;;;;;;;;;;;;;;;;;;;;;;;21353:43;;;;;;21338:58;;21486:4;21475:8;21469:15;21464:2;21454:8;21450:17;21447:1;21439:52;21431:60;;21520:4;-1:-1:-1;;;;;21512:24:0;;21537:6;21545;21512:40;;;;;;;;;;;;;-1:-1:-1;;;;;21512:40:0;;;;;;-1:-1:-1;;;;;21512:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;21563:15:0;;;;;;;:7;:15;;;;;;;;:23;;;;;;;;;;;;:30;;;;;-1:-1:-1;;;;;;21563:30:0;;;;;;;;21604:15;;;;;;:23;;;;;;;;:30;;;;;;;;21690:8;:19;;-1:-1:-1;21690:19:0;;;;;;;;;;;;;;;;;;;;;;21759:15;;21725:50;;;;;;;;;;;;;;;;;;;;;;20784:999;;;;;;;;:::o;20186:71::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20186:71:0;;:::o;21791:148::-;21876:11;;-1:-1:-1;;;;;21876:11:0;21862:10;:25;21854:52;;;;;-1:-1:-1;;;21854:52:0;;;;;;;;;;;;-1:-1:-1;;;21854:52:0;;;;;;;;;;;;;;;21917:5;:14;;-1:-1:-1;;;;;;21917:14:0;-1:-1:-1;;;;;21917:14:0;;;;;;;;;;21791:148::o;-1:-1:-1:-;;;;;;;;:::o

Swarm Source

ipfs://72c5f62c72b32dcddc3aab68fae3d47e651ccede1c68c92e010bc03be30fe432
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.