Contract 0x5ede3f4e7203bf1f12d57af1810448e5db20f46c

DEX  
 

Contract Overview

CafeSwap: Factory
Balance:
0 MATIC

MATIC Value:
$0.00

Token:
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xf2202fcef8a5ba3a9b5101a5b11403f733c27df42180a27171fc5b4e32e876a5Set Fee To195621392021-09-27 6:09:56315 days 13 hrs agoCafeSwap: Deployer IN  CafeSwap: Factory0 MATIC0.000919220
0x2c3e67f50828360d95f4ac5f1714dfb21cc5e26df0e4cab8a28810153722f1c80x60806040191993132021-09-17 9:26:31325 days 10 hrs agoCafeSwap: Deployer IN  Create: CafeFactory0 MATIC0.0551089820
[ Download CSV Export 

OVERVIEW

CafeSwap is a Standalone Automated Market Maker (AMM) offering a suite of yield farming, yield optimization, and staking platform on Binance Smart Chain (BSC) and Polygon Network to trade multichain assets with the lowest transaction fees available.

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x51ba4a18e017af97401079516185eae01290c76ebe0f0c4caef7447681f242b8315186012022-08-04 17:39:294 days 1 hr ago CafeSwap: Factory  Contract Creation0 MATIC
0xf11b37033bfcf0b3b06db9baef7ecd119f54f44b5cba3055208a66526f234cd4315184962022-08-04 17:35:314 days 1 hr ago CafeSwap: Factory  Contract Creation0 MATIC
0x0f0318103da7fc90e5890157e5e758ada3d08243fc6993b736d72809711dd98c315184702022-08-04 17:34:394 days 1 hr ago CafeSwap: Factory  Contract Creation0 MATIC
0x3ad1ecb8102d8853c25d3f0fa661454f4398ba799a393129fc78d64135b54812305631522022-07-10 12:31:2129 days 7 hrs ago CafeSwap: Factory  Contract Creation0 MATIC
0xffc31ea37f4dc8a54d8b3111b7ba918b5aef37f86b1feb1bd54441d42296f104305008572022-07-08 22:59:3330 days 20 hrs ago CafeSwap: Factory  Contract Creation0 MATIC
0x78282fc43d0c964be69a10b717778a914ccb5002cfa8e60676ace10fb14cedd9304173162022-07-06 20:48:0032 days 22 hrs ago CafeSwap: Factory  Contract Creation0 MATIC
0x76a2862d586b5b79c62981e2f6897a7bc3efffb4e77c90719eab80d4ab243b29304172442022-07-06 20:43:0432 days 22 hrs ago CafeSwap: Factory  Contract Creation0 MATIC
0xb8f109c6b98c32bd3cce8d9995f2fa5a2b07c18fae0e706638caa9e24d66c4e7300967882022-06-28 12:08:5641 days 7 hrs ago CafeSwap: Factory  Contract Creation0 MATIC
0x97a46a2c4202696d9b51f12fa8a4c361282db9986835bafdecfff47e84ffcc2e299478862022-06-24 14:25:5545 days 5 hrs ago CafeSwap: Factory  Contract Creation0 MATIC
0xb183e52b5ac05461ad6391fbc98c26a8d3a47c7570c6739e0d9051d4cc690d00299477942022-06-24 14:22:3745 days 5 hrs ago CafeSwap: Factory  Contract Creation0 MATIC
0xe7dff009ddd858db72136808c87f236abbd69605d8aa250ad78d8e59fc3989ce299128842022-06-23 16:39:2346 days 2 hrs ago CafeSwap: Factory  Contract Creation0 MATIC
0x88c82d59c08b12ce9d6903287bcf4a82b2bc1a8b7cea3a28832b0b81691d694c298337202022-06-21 15:54:1548 days 3 hrs ago CafeSwap: Factory  Contract Creation0 MATIC
0x3bf77a0a6c39f691e6403dbca7732cf8627ef8404c122d1095ee4195df4539c0298334612022-06-21 15:43:2748 days 3 hrs ago CafeSwap: Factory  Contract Creation0 MATIC
0xe5891c163c4d6c1bb8509c1b0908011bfc1a267b556274b830c7c38e497859d5298332632022-06-21 15:36:3648 days 3 hrs ago CafeSwap: Factory  Contract Creation0 MATIC
0x7500aa84409711ef7febb58fd2eae502ecc7f51654444099bb056e4a25b4f2c2293900412022-06-10 9:33:0559 days 10 hrs ago CafeSwap: Factory  Contract Creation0 MATIC
0x7e8372fab20f705caf86a6de773673b1e0251404f599fc7fd7b4595c47c21c07293651432022-06-09 18:12:4960 days 1 hr ago CafeSwap: Factory  Contract Creation0 MATIC
0xd52a768223ed2a04607ac38c203085a6a3bbecb5ee6e0d08838ae8db4bffa7de292467042022-06-06 19:21:4963 days 12 mins ago CafeSwap: Factory  Contract Creation0 MATIC
0x8253d669a14fe9daafb251a6a417e7c7b41bb4f77dc86b354998df672942e320292462732022-06-06 19:05:2563 days 29 mins ago CafeSwap: Factory  Contract Creation0 MATIC
0x5075e67a05e378d336d75cfd52ad62f2ad0dd40581f54daa0508bb60298e4d1d275953112022-04-26 11:11:29104 days 8 hrs ago CafeSwap: Factory  Contract Creation0 MATIC
0x94b20e782183887454329c86bcd5234ac0f839dd83ce7083128c684ccd19ff50275951342022-04-26 11:05:23104 days 8 hrs ago CafeSwap: Factory  Contract Creation0 MATIC
0x57c39f9d6bfa862e8d1dcc6ca5c0bfcc6a5bb116c2239b6f6b21b22dde6e36b8275950572022-04-26 11:02:45104 days 8 hrs ago CafeSwap: Factory  Contract Creation0 MATIC
0x480f6150a6a822ecaa37dbb0e6e4546199964358367c176bca0d70188bf766a5270649372022-04-12 22:45:53117 days 20 hrs ago CafeSwap: Factory  Contract Creation0 MATIC
0x8b40273ce4a2af5329e3219a799ccb2846a715ab0b75feca8923ab56dd0779ae270648842022-04-12 22:44:03117 days 20 hrs ago CafeSwap: Factory  Contract Creation0 MATIC
0x29f81eb3af233141cf9eafb1197b2559399d3e4759add7525fe3386d8f8af0d6265123542022-03-29 20:17:28131 days 23 hrs ago CafeSwap: Factory  Contract Creation0 MATIC
0xda5e7f4e435d9716c13d7baa55831d4cb6c6f6972d57ed4762c376a94806ce11265123042022-03-29 20:15:30131 days 23 hrs ago CafeSwap: Factory  Contract Creation0 MATIC
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CafeFactory

Compiler Version
v0.5.16+commit.9c3226ce

Optimization Enabled:
Yes with 9999 runs

Other Settings:
istanbul EvmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2021-09-17
*/

// File: contracts/interfaces/ICafeFactory.sol

pragma solidity >=0.5.0;

interface ICafeFactory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

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

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

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

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

// File: contracts/interfaces/ICafePair.sol

pragma solidity >=0.5.0;

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

// File: contracts/interfaces/ICafeERC20.sol

pragma solidity >=0.5.0;

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
}

// File: contracts/libraries/SafeMath.sol

pragma solidity =0.5.16;

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

library SafeMath {
    function add(uint x, uint y) internal pure returns (uint z) {
        require((z = x + y) >= x, 'ds-math-add-overflow');
    }

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

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

// File: contracts/CafeERC20.sol

pragma solidity =0.5.16;



contract CafeERC20 is ICafeERC20 {
    using SafeMath for uint;

    string public constant name = 'CafeSwap LPs';
    string public constant symbol = 'Cafe-LP';
    uint8 public constant decimals = 18;
    uint  public totalSupply;
    mapping(address => uint) public balanceOf;
    mapping(address => mapping(address => uint)) 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 => uint) public nonces;

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

    constructor() public {
        uint 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, uint value) internal {
        totalSupply = totalSupply.add(value);
        balanceOf[to] = balanceOf[to].add(value);
        emit Transfer(address(0), to, value);
    }

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

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

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

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

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

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

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external {
        require(deadline >= block.timestamp, 'Cafe: 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, 'Cafe: INVALID_SIGNATURE');
        _approve(owner, spender, value);
    }
}

// File: contracts/libraries/Math.sol

pragma solidity =0.5.16;

// a library for performing various math operations

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

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

// File: contracts/libraries/UQ112x112.sol

pragma solidity =0.5.16;

// 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/interfaces/IERC20.sol

pragma solidity >=0.5.0;

interface IERC20 {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint 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 (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
}

// File: contracts/interfaces/ICafeCallee.sol

pragma solidity >=0.5.0;

interface ICafeCallee {
    function cafeCall(address sender, uint amount0, uint amount1, bytes calldata data) external;
}

// File: contracts/CafePair.sol

pragma solidity =0.5.16;









contract CafePair is ICafePair, CafeERC20 {
    using SafeMath  for uint;
    using UQ112x112 for uint224;

    uint 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

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

    uint private unlocked = 1;
    modifier lock() {
        require(unlocked == 1, 'Cafe: 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, uint value) private {
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(SELECTOR, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'Cafe: TRANSFER_FAILED');
    }

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint 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, 'Cafe: FORBIDDEN'); // sufficient check
        token0 = _token0;
        token1 = _token1;
    }

    // update reserves and, on the first call per block, price accumulators
    function _update(uint balance0, uint balance1, uint112 _reserve0, uint112 _reserve1) private {
        require(balance0 <= uint112(-1) && balance1 <= uint112(-1), 'Cafe: 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 += uint(UQ112x112.encode(_reserve1).uqdiv(_reserve0)) * timeElapsed;
            price1CumulativeLast += uint(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 = ICafeFactory(factory).feeTo();
        feeOn = feeTo != address(0);
        uint _kLast = kLast; // gas savings
        if (feeOn) {
            if (_kLast != 0) {
                uint rootK = Math.sqrt(uint(_reserve0).mul(_reserve1));
                uint rootKLast = Math.sqrt(_kLast);
                if (rootK > rootKLast) {
                    uint numerator = totalSupply.mul(rootK.sub(rootKLast));
                    uint denominator = rootK.mul(3).add(rootKLast);
                    uint 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 (uint liquidity) {
        (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings
        uint balance0 = IERC20(token0).balanceOf(address(this));
        uint balance1 = IERC20(token1).balanceOf(address(this));
        uint amount0 = balance0.sub(_reserve0);
        uint amount1 = balance1.sub(_reserve1);

        bool feeOn = _mintFee(_reserve0, _reserve1);
        uint _totalSupply = totalSupply; // gas savings, must be defined here since totalSupply can update in _mintFee
        if (_totalSupply == 0) {        
          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, 'Cafe: INSUFFICIENT_LIQUIDITY_MINTED');
        _mint(to, liquidity);

        _update(balance0, balance1, _reserve0, _reserve1);
        if (feeOn) kLast = uint(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 (uint amount0, uint amount1) {
        (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings
        address _token0 = token0;                                // gas savings
        address _token1 = token1;                                // gas savings
        uint balance0 = IERC20(_token0).balanceOf(address(this));
        uint balance1 = IERC20(_token1).balanceOf(address(this));
        uint liquidity = balanceOf[address(this)];

        bool feeOn = _mintFee(_reserve0, _reserve1);
        uint _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, 'Cafe: INSUFFICIENT_LIQUIDITY_BURNED');
        _burn(address(this), liquidity);
        _safeTransfer(_token0, to, amount0);
        _safeTransfer(_token1, to, amount1);
        balance0 = IERC20(_token0).balanceOf(address(this));
        balance1 = IERC20(_token1).balanceOf(address(this));

        _update(balance0, balance1, _reserve0, _reserve1);
        if (feeOn) kLast = uint(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(uint amount0Out, uint amount1Out, address to, bytes calldata data) external lock {
        require(amount0Out > 0 || amount1Out > 0, 'Cafe: INSUFFICIENT_OUTPUT_AMOUNT');
        (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings
        require(amount0Out < _reserve0 && amount1Out < _reserve1, 'Cafe: INSUFFICIENT_LIQUIDITY');

        uint balance0;
        uint balance1;
        { // scope for _token{0,1}, avoids stack too deep errors
        address _token0 = token0;
        address _token1 = token1;
        require(to != _token0 && to != _token1, 'Cafe: 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) ICafeCallee(to).cafeCall(msg.sender, amount0Out, amount1Out, data);
        balance0 = IERC20(_token0).balanceOf(address(this));
        balance1 = IERC20(_token1).balanceOf(address(this));
        }
        uint amount0In = balance0 > _reserve0 - amount0Out ? balance0 - (_reserve0 - amount0Out) : 0;
        uint amount1In = balance1 > _reserve1 - amount1Out ? balance1 - (_reserve1 - amount1Out) : 0;
        require(amount0In > 0 || amount1In > 0, 'Cafe: INSUFFICIENT_INPUT_AMOUNT');
        { // scope for reserve{0,1}Adjusted, avoids stack too deep errors
        uint balance0Adjusted = balance0.mul(1000).sub(amount0In.mul(2));
        uint balance1Adjusted = balance1.mul(1000).sub(amount1In.mul(2));
        require(balance0Adjusted.mul(balance1Adjusted) >= uint(_reserve0).mul(_reserve1).mul(1000**2), 'Cafe: 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, IERC20(_token0).balanceOf(address(this)).sub(reserve0));
        _safeTransfer(_token1, to, IERC20(_token1).balanceOf(address(this)).sub(reserve1));
    }

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

// File: contracts/CafeFactory.sol

pragma solidity =0.5.16;



contract CafeFactory is ICafeFactory {
    bytes32 public constant INIT_CODE_PAIR_HASH = keccak256(abi.encodePacked(type(CafePair).creationCode));

    address public feeTo;
    address public feeToSetter;

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

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

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

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

    function createPair(address tokenA, address tokenB) external returns (address pair) {
        require(tokenA != tokenB, 'Cafe: IDENTICAL_ADDRESSES');
        (address token0, address token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'Cafe: ZERO_ADDRESS');
        require(getPair[token0][token1] == address(0), 'Cafe: PAIR_EXISTS'); // single check is sufficient
        bytes memory bytecode = type(CafePair).creationCode;
        bytes32 salt = keccak256(abi.encodePacked(token0, token1));
        assembly {
            pair := create2(0, add(bytecode, 32), mload(bytecode), salt)
        }
        ICafePair(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 {
        require(msg.sender == feeToSetter, 'Cafe: FORBIDDEN');
        feeTo = _feeTo;
    }

    function setFeeToSetter(address _feeToSetter) external {
        require(msg.sender == feeToSetter, 'Cafe: FORBIDDEN');
        feeToSetter = _feeToSetter;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_feeToSetter","type":"address"}],"payable":false,"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"},{"constant":true,"inputs":[],"name":"INIT_CODE_PAIR_HASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allPairs","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"allPairsLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"}],"name":"createPair","outputs":[{"internalType":"address","name":"pair","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"feeTo","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"feeToSetter","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"getPair","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_feeTo","type":"address"}],"name":"setFeeTo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_feeToSetter","type":"address"}],"name":"setFeeToSetter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b506040516131043803806131048339818101604052602081101561003357600080fd5b5051600180546001600160a01b0319166001600160a01b039092169190911790556130a1806100636000396000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c80635855a25a11610076578063c9c653961161005b578063c9c6539614610155578063e6a4390514610190578063f46901ed146101cb576100a3565b80635855a25a14610118578063a2e74af614610120576100a3565b8063017e7e58146100a8578063094b7415146100d95780631e3dd18b146100e1578063574f2ba3146100fe575b600080fd5b6100b06101fe565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6100b061021a565b6100b0600480360360208110156100f757600080fd5b5035610236565b61010661026a565b60408051918252519081900360200190f35b610106610270565b6101536004803603602081101561013657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610321565b005b6100b06004803603604081101561016b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166103ee565b6100b0600480360360408110156101a657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610841565b610153600480360360208110156101e157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610874565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b6003818154811061024357fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b60035490565b60405161027f60208201610941565b6020820181038252601f19601f820116604052506040516020018082805190602001908083835b602083106102e357805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016102a6565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012081565b60015473ffffffffffffffffffffffffffffffffffffffff1633146103a757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f436166653a20464f5242494444454e0000000000000000000000000000000000604482015290519081900360640190fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561048b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f436166653a204944454e544943414c5f41444452455353455300000000000000604482015290519081900360640190fd5b6000808373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16106104c85783856104cb565b84845b909250905073ffffffffffffffffffffffffffffffffffffffff821661055257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f436166653a205a45524f5f414444524553530000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8281166000908152600260209081526040808320858516845290915290205416156105f357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f436166653a20504149525f455849535453000000000000000000000000000000604482015290519081900360640190fd5b60606040518060200161060590610941565b6020820181038252601f19601f82011660405250905060008383604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140192505050604051602081830303815290604052805190602001209050808251602084016000f5604080517f485cc95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152868116602483015291519297509087169163485cc9559160448082019260009290919082900301818387803b15801561073257600080fd5b505af1158015610746573d6000803e3d6000fd5b5050505073ffffffffffffffffffffffffffffffffffffffff84811660008181526002602081815260408084208987168086529083528185208054978d167fffffffffffffffffffffffff000000000000000000000000000000000000000098891681179091559383528185208686528352818520805488168517905560038054600181018255958190527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90950180549097168417909655925483519283529082015281517f0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9929181900390910190a35050505092915050565b600260209081526000928352604080842090915290825290205473ffffffffffffffffffffffffffffffffffffffff1681565b60015473ffffffffffffffffffffffffffffffffffffffff1633146108fa57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f436166653a20464f5242494444454e0000000000000000000000000000000000604482015290519081900360640190fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b61271e8061094f8339019056fe60806040526001600c5534801561001557600080fd5b5060405146908060526126cc8239604080519182900360520182208282018252600c83526b4361666553776170204c507360a01b6020938401528151808301835260018152603160f81b908401528151808401919091527fad088432db31b304fd1cb1fdd8ad51262720cc3f506bdaeb03b74b41f2cad87b818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550600580546001600160a01b031916331790556125c5806101076000396000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c80636a627842116100f9578063ba9a7a5611610097578063d21220a711610071578063d21220a71461054b578063d505accf14610553578063dd62ed3e146105a4578063fff6cae9146105d2576101b9565b8063ba9a7a5614610515578063bc25cf771461051d578063c45a015514610543576101b9565b80637ecebe00116100d35780637ecebe001461047c57806389afcb44146104a257806395d89b41146104e1578063a9059cbb146104e9576101b9565b80636a6278421461042857806370a082311461044e5780637464fc3d14610474576101b9565b806323b872dd116101665780633644e515116101405780633644e515146103e2578063485cc955146103ea5780635909c0d5146104185780635a3d549314610420576101b9565b806323b872dd1461038657806330adf81f146103bc578063313ce567146103c4576101b9565b8063095ea7b311610197578063095ea7b3146103085780630dfe16811461034857806318160ddd1461036c576101b9565b8063022c0d9f146101be57806306fdde031461024c5780630902f1ac146102c9575b600080fd5b61024a600480360360808110156101d457600080fd5b8135916020810135916001600160a01b03604083013516919081019060808101606082013564010000000081111561020b57600080fd5b82018360208201111561021d57600080fd5b8035906020019184600183028401116401000000008311171561023f57600080fd5b5090925090506105da565b005b610254610bad565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561028e578181015183820152602001610276565b50505050905090810190601f1680156102bb5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102d1610be6565b604080516dffffffffffffffffffffffffffff948516815292909316602083015263ffffffff168183015290519081900360600190f35b6103346004803603604081101561031e57600080fd5b506001600160a01b038135169060200135610c3b565b604080519115158252519081900360200190f35b610350610c52565b604080516001600160a01b039092168252519081900360200190f35b610374610c61565b60408051918252519081900360200190f35b6103346004803603606081101561039c57600080fd5b506001600160a01b03813581169160208101359091169060400135610c67565b610374610d1f565b6103cc610d43565b6040805160ff9092168252519081900360200190f35b610374610d48565b61024a6004803603604081101561040057600080fd5b506001600160a01b0381358116916020013516610d4e565b610374610df3565b610374610df9565b6103746004803603602081101561043e57600080fd5b50356001600160a01b0316610dff565b6103746004803603602081101561046457600080fd5b50356001600160a01b0316611139565b61037461114b565b6103746004803603602081101561049257600080fd5b50356001600160a01b0316611151565b6104c8600480360360208110156104b857600080fd5b50356001600160a01b0316611163565b6040805192835260208301919091528051918290030190f35b610254611527565b610334600480360360408110156104ff57600080fd5b506001600160a01b038135169060200135611560565b61037461156d565b61024a6004803603602081101561053357600080fd5b50356001600160a01b0316611573565b610350611703565b610350611712565b61024a600480360360e081101561056957600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611721565b610374600480360360408110156105ba57600080fd5b506001600160a01b0381358116916020013516611985565b61024a6119a2565b600c54600114610631576040805162461bcd60e51b815260206004820152600c60248201527f436166653a204c4f434b45440000000000000000000000000000000000000000604482015290519081900360640190fd5b6000600c55841515806106445750600084115b610695576040805162461bcd60e51b815260206004820181905260248201527f436166653a20494e53554646494349454e545f4f55545055545f414d4f554e54604482015290519081900360640190fd5b6000806106a0610be6565b5091509150816dffffffffffffffffffffffffffff16871080156106d35750806dffffffffffffffffffffffffffff1686105b610724576040805162461bcd60e51b815260206004820152601c60248201527f436166653a20494e53554646494349454e545f4c495155494449545900000000604482015290519081900360640190fd5b60065460075460009182916001600160a01b039182169190811690891682148015906107625750806001600160a01b0316896001600160a01b031614155b6107b3576040805162461bcd60e51b815260206004820152601060248201527f436166653a20494e56414c49445f544f00000000000000000000000000000000604482015290519081900360640190fd5b8a156107c4576107c4828a8d611b22565b89156107d5576107d5818a8c611b22565b861561089057886001600160a01b031663ec78ce50338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561087757600080fd5b505af115801561088b573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156108d657600080fd5b505afa1580156108ea573d6000803e3d6000fd5b505050506040513d602081101561090057600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b15801561094c57600080fd5b505afa158015610960573d6000803e3d6000fd5b505050506040513d602081101561097657600080fd5b5051925060009150506dffffffffffffffffffffffffffff85168a900383116109a05760006109b6565b89856dffffffffffffffffffffffffffff160383035b9050600089856dffffffffffffffffffffffffffff160383116109da5760006109f0565b89856dffffffffffffffffffffffffffff160383035b90506000821180610a015750600081115b610a52576040805162461bcd60e51b815260206004820152601f60248201527f436166653a20494e53554646494349454e545f494e5055545f414d4f554e5400604482015290519081900360640190fd5b6000610a86610a6884600263ffffffff611d0816565b610a7a876103e863ffffffff611d0816565b9063ffffffff611d7416565b90506000610a9e610a6884600263ffffffff611d0816565b9050610ad6620f4240610aca6dffffffffffffffffffffffffffff8b8116908b1663ffffffff611d0816565b9063ffffffff611d0816565b610ae6838363ffffffff611d0816565b1015610b39576040805162461bcd60e51b815260206004820152600760248201527f436166653a204b00000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b5050610b4784848888611dcc565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600c55505050505050505050565b6040518060400160405280600c81526020017f4361666553776170204c5073000000000000000000000000000000000000000081525081565b6008546dffffffffffffffffffffffffffff808216926e0100000000000000000000000000008304909116917c0100000000000000000000000000000000000000000000000000000000900463ffffffff1690565b6000610c4833848461206e565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b03831660009081526002602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14610d0a576001600160a01b0384166000908152600260209081526040808320338452909152902054610ce5908363ffffffff611d7416565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610d158484846120d0565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610dad576040805162461bcd60e51b815260206004820152600f60248201527f436166653a20464f5242494444454e0000000000000000000000000000000000604482015290519081900360640190fd5b600680546001600160a01b039384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560078054929093169116179055565b60095481565b600a5481565b6000600c54600114610e58576040805162461bcd60e51b815260206004820152600c60248201527f436166653a204c4f434b45440000000000000000000000000000000000000000604482015290519081900360640190fd5b6000600c81905580610e68610be6565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610ebc57600080fd5b505afa158015610ed0573d6000803e3d6000fd5b505050506040513d6020811015610ee657600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610f3957600080fd5b505afa158015610f4d573d6000803e3d6000fd5b505050506040513d6020811015610f6357600080fd5b505190506000610f89836dffffffffffffffffffffffffffff871663ffffffff611d7416565b90506000610fad836dffffffffffffffffffffffffffff871663ffffffff611d7416565b90506000610fbb878761218a565b60005490915080610ff857610fe46103e8610a7a610fdf878763ffffffff611d0816565b6122ef565b9850610ff360006103e8612341565b611055565b6110526dffffffffffffffffffffffffffff891661101c868463ffffffff611d0816565b8161102357fe5b046dffffffffffffffffffffffffffff8916611045868563ffffffff611d0816565b8161104c57fe5b046123d7565b98505b600089116110945760405162461bcd60e51b815260040180806020018281038252602381526020018061254b6023913960400191505060405180910390fd5b61109e8a8a612341565b6110aa86868a8a611dcc565b81156110ec576008546110e8906dffffffffffffffffffffffffffff808216916e01000000000000000000000000000090041663ffffffff611d0816565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600c5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600c546001146111bd576040805162461bcd60e51b815260206004820152600c60248201527f436166653a204c4f434b45440000000000000000000000000000000000000000604482015290519081900360640190fd5b6000600c819055806111cd610be6565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b15801561122957600080fd5b505afa15801561123d573d6000803e3d6000fd5b505050506040513d602081101561125357600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b1580156112a157600080fd5b505afa1580156112b5573d6000803e3d6000fd5b505050506040513d60208110156112cb57600080fd5b5051306000908152600160205260408120549192506112ea888861218a565b60005490915080611301848763ffffffff611d0816565b8161130857fe5b049a508061131c848663ffffffff611d0816565b8161132357fe5b04995060008b118015611336575060008a115b6113715760405162461bcd60e51b815260040180806020018281038252602381526020018061256e6023913960400191505060405180910390fd5b61137b30846123ef565b611386878d8d611b22565b611391868d8c611b22565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b1580156113d757600080fd5b505afa1580156113eb573d6000803e3d6000fd5b505050506040513d602081101561140157600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b15801561144d57600080fd5b505afa158015611461573d6000803e3d6000fd5b505050506040513d602081101561147757600080fd5b5051935061148785858b8b611dcc565b81156114c9576008546114c5906dffffffffffffffffffffffffffff808216916e01000000000000000000000000000090041663ffffffff611d0816565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600c81905550915091565b6040518060400160405280600781526020017f436166652d4c500000000000000000000000000000000000000000000000000081525081565b6000610c483384846120d0565b6103e881565b600c546001146115ca576040805162461bcd60e51b815260206004820152600c60248201527f436166653a204c4f434b45440000000000000000000000000000000000000000604482015290519081900360640190fd5b6000600c55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b039485169490931692611680928592879261167b926dffffffffffffffffffffffffffff169185916370a0823191602480820192602092909190829003018186803b15801561164357600080fd5b505afa158015611657573d6000803e3d6000fd5b505050506040513d602081101561166d57600080fd5b50519063ffffffff611d7416565b611b22565b600854604080516370a0823160e01b815230600482015290516116f9928492879261167b926e01000000000000000000000000000090046dffffffffffffffffffffffffffff16916001600160a01b038616916370a0823191602480820192602092909190829003018186803b15801561164357600080fd5b50506001600c5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b42841015611776576040805162461bcd60e51b815260206004820152600d60248201527f436166653a204558504952454400000000000000000000000000000000000000604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e0850182528051908301207f19010000000000000000000000000000000000000000000000000000000000006101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e2808201937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019281900390910190855afa1580156118ca573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001519150506001600160a01b0381161580159061191e5750886001600160a01b0316816001600160a01b0316145b61196f576040805162461bcd60e51b815260206004820152601760248201527f436166653a20494e56414c49445f5349474e4154555245000000000000000000604482015290519081900360640190fd5b61197a89898961206e565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600c546001146119f9576040805162461bcd60e51b815260206004820152600c60248201527f436166653a204c4f434b45440000000000000000000000000000000000000000604482015290519081900360640190fd5b6000600c55600654604080516370a0823160e01b81523060048201529051611b1b926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015611a4a57600080fd5b505afa158015611a5e573d6000803e3d6000fd5b505050506040513d6020811015611a7457600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015611ac157600080fd5b505afa158015611ad5573d6000803e3d6000fd5b505050506040513d6020811015611aeb57600080fd5b50516008546dffffffffffffffffffffffffffff808216916e010000000000000000000000000000900416611dcc565b6001600c55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251815160009460609489169392918291908083835b60208310611c1b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611bde565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611c7d576040519150601f19603f3d011682016040523d82523d6000602084013e611c82565b606091505b5091509150818015611cb0575080511580611cb05750808060200190516020811015611cad57600080fd5b50515b611d01576040805162461bcd60e51b815260206004820152601560248201527f436166653a205452414e534645525f4641494c45440000000000000000000000604482015290519081900360640190fd5b5050505050565b6000811580611d2357505080820282828281611d2057fe5b04145b610c4c576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b80820382811115610c4c576040805162461bcd60e51b815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6dffffffffffffffffffffffffffff8411801590611df857506dffffffffffffffffffffffffffff8311155b611e49576040805162461bcd60e51b815260206004820152600e60248201527f436166653a204f564552464c4f57000000000000000000000000000000000000604482015290519081900360640190fd5b60085463ffffffff428116917c010000000000000000000000000000000000000000000000000000000090048116820390811615801590611e9957506dffffffffffffffffffffffffffff841615155b8015611eb457506dffffffffffffffffffffffffffff831615155b15611f64578063ffffffff16611ef785611ecd8661248d565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff169063ffffffff6124b116565b600980547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff929092169290920201905563ffffffff8116611f3784611ecd8761248d565b600a80547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff92909216929092020190555b600880547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000166dffffffffffffffffffffffffffff888116919091177fffffffff0000000000000000000000000000ffffffffffffffffffffffffffff166e0100000000000000000000000000008883168102919091177bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000063ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166000908152600160205260409020546120f9908263ffffffff611d7416565b6001600160a01b03808516600090815260016020526040808220939093559084168152205461212e908263ffffffff6124f216565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b1580156121db57600080fd5b505afa1580156121ef573d6000803e3d6000fd5b505050506040513d602081101561220557600080fd5b5051600b546001600160a01b0382161580159450919250906122db5780156122d657600061224f610fdf6dffffffffffffffffffffffffffff88811690881663ffffffff611d0816565b9050600061225c836122ef565b9050808211156122d357600061228a61227b848463ffffffff611d7416565b6000549063ffffffff611d0816565b905060006122af836122a386600363ffffffff611d0816565b9063ffffffff6124f216565b905060008183816122bc57fe5b04905080156122cf576122cf8782612341565b5050505b50505b6122e7565b80156122e7576000600b555b505092915050565b60006003821115612332575080600160028204015b8181101561232c5780915060028182858161231b57fe5b04018161232457fe5b049050612304565b5061233c565b811561233c575060015b919050565b600054612354908263ffffffff6124f216565b60009081556001600160a01b03831681526001602052604090205461237f908263ffffffff6124f216565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008183106123e657816123e8565b825b9392505050565b6001600160a01b038216600090815260016020526040902054612418908263ffffffff611d7416565b6001600160a01b03831660009081526001602052604081209190915554612445908263ffffffff611d7416565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6dffffffffffffffffffffffffffff166e0100000000000000000000000000000290565b60006dffffffffffffffffffffffffffff82167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8416816124ea57fe5b049392505050565b80820182811015610c4c576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fdfe436166653a20494e53554646494349454e545f4c49515549444954595f4d494e544544436166653a20494e53554646494349454e545f4c49515549444954595f4255524e4544a265627a7a723158201888e45b525aa6bbc41842d37f61e4de083940d3dbca62dfb5f5cc112aff917864736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429a265627a7a723158209345b08f405baa58d7bd7d4224df335b0a08ee5677a70dcdfc177aa4c5d662d364736f6c634300051000320000000000000000000000004def43e20e659a06045d812b3f129d6bca65969e

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

0000000000000000000000004def43e20e659a06045d812b3f129d6bca65969e

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

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000004def43e20e659a06045d812b3f129d6bca65969e


Deployed ByteCode Sourcemap

20725:1873:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20725:1873:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20880:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20907:26;;;:::i;21011:25::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21011:25:0;;:::i;21233:96::-;;;:::i;:::-;;;;;;;;;;;;;;;;20769:102;;;:::i;22431:164::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22431:164:0;;;;:::i;:::-;;21337:938;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21337:938:0;;;;;;;;;;;:::i;20942:62::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20942:62:0;;;;;;;;;;;:::i;22283:140::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22283:140:0;;;;:::i;20880:20::-;;;;;;:::o;20907:26::-;;;;;;:::o;21011:25::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21011:25:0;:::o;21233:96::-;21306:8;:15;21233:96;:::o;20769:102::-;20842:27;;;;;;;:::i;:::-;41:4:-1;34:5;30:16;25:3;21:26;14:5;7:41;87:2;83:7;78:2;73:3;69:12;65:26;61:2;54:38;20842:27:0;20825:45;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;20825:45:0;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;20825:45:0;;;20815:56;;;;;;20769:102;:::o;22431:164::-;22519:11;;;;22505:10;:25;22497:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22561:11;:26;;;;;;;;;;;;;;;22431:164::o;21337:938::-;21407:12;21450:6;21440:16;;:6;:16;;;;21432:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21498:14;21514;21541:6;21532:15;;:6;:15;;;:53;;21570:6;21578;21532:53;;;21551:6;21559;21532:53;21497:88;;-1:-1:-1;21497:88:0;-1:-1:-1;21604:20:0;;;21596:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21666:37;:15;;;21701:1;21666:15;;;:7;:15;;;;;;;;:23;;;;;;;;;;;;:37;21658:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21766:21;21790:27;;;;;;;;:::i;:::-;41:4:-1;34:5;30:16;25:3;21:26;14:5;7:41;87:2;83:7;78:2;73:3;69:12;65:26;61:2;54:38;21790:27:0;21766:51;;21828:12;21870:6;21878;21853:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;21853:32:0;;;21843:43;;;;;;21828:58;;21976:4;21965:8;21959:15;21954:2;21944:8;21940:17;21937:1;21929:52;22002:42;;;;;;:26;:42;;;;;;;;;;;;;;;;21921:60;;-1:-1:-1;22002:26:0;;;;;;:42;;;;;-1:-1:-1;;22002:42:0;;;;;;;;-1:-1:-1;22002:26:0;:42;;;5:2:-1;;;;30:1;27;20:12;5:2;22002:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;;;22055:15:0;;;;;;;;:7;:15;;;;;;;;:23;;;;;;;;;;;;:30;;;;;;;;;;;;;;22096:15;;;;;;:23;;;;;;;;:30;;;;;;;;22182:8;27:10:-1;;-1:-1;23:18;;45:23;;22182:19:0;;;;;;;;;;;;;;;;;;22251:15;;22217:50;;;;;;;;;;;;;;;;;;;;;;21337:938;;;;;;;;:::o;20942:62::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22283:140::-;22359:11;;;;22345:10;:25;22337:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22401:5;:14;;;;;;;;;;;;;;;22283:140::o;20725:1873::-;;;;;;;;:::o

Swarm Source

bzzr://9345b08f405baa58d7bd7d4224df335b0a08ee5677a70dcdfc177aa4c5d662d3
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.